如何使用PHP cURL上传文件到Pinata IPFS并解决KEYS_MUST_BE_STRINGS报错
问题原因
你遇到的KEYS_MUST_BE_STRINGS报错,是因为将API密钥放在请求Body中提交时,Pinata接口解析出现了类型识别错误,同时你的代码没有正确封装待上传的文件,导致上传请求不符合接口要求。
修复后完整代码
<?php $url = "https://api.pinata.cloud/pinning/pinFileToIPFS"; // 替换为你自己的Pinata密钥 $apiKey = '00xxxxxx'; $apiSecret = 'e1xxxxxxxxxxxxxxxxxxcccccccc'; $filePath = 'logo.png'; // 构造上传数据,用CURLFile封装文件 $postData = [ 'file' => new CURLFile($filePath, mime_content_type($filePath), basename($filePath)) ]; $ch = curl_init($url); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, $postData); // 密钥放请求头,避免Body解析类型错误,符合官方调用规范 curl_setopt($ch, CURLOPT_HTTPHEADER, [ "pinata_api_key: {$apiKey}", "pinata_secret_api_key: {$apiSecret}" ]); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $response = curl_exec($ch); if (curl_errno($ch)) { echo "CURL错误:" . curl_error($ch); } else { echo $response; } curl_close($ch); ?>
关键修改说明
- 用
CURLFile对象封装待上传文件,指定文件MIME类型和文件名,让cURL正确识别为文件上传请求 - 将API密钥从请求Body移到请求头中,彻底解决密钥类型识别的报错,同时符合Pinata的官方调用规范
- 新增
CURLOPT_RETURNTRANSFER配置,将接口返回结果赋值给变量,方便后续逻辑处理
内容的提问来源于stack exchange,提问作者Nancy Moore
相关产品推荐
相关产品推荐

