收藏
回答

关于图片上传API的问题?

参考的文档地址: https://pay.weixin.qq.com/wiki/doc/apiv3_partner/apis/chapter2_1_1.shtml

按照文档要求

请求主体类型:multipart/form-data

请求方式:POST

看了api文档后我的第一版本代码是这样的:

$instance = $function->getInstance();
$rs = $instance->chain('v3/merchant/media/upload')
    ->post([
       'debug' => true,
       'headers' => [
          'Content-Type' => 'multipart/form-data',
       ],
       'multipart' => [
          [
             'name' => 'file',
             'contents' => fopen($uploadedFile, 'r'),
          ],
          [
             'name' => 'meta',
             'contents' => json_encode([
                'filename' => $this->time . '.jpeg',
                'sha256' => hash_file('sha256', $uploadedFile),
             ], JSON_THROW_ON_ERROR),
          ]
       ],
       'expect' => 2*1024*1024+1
    ]); // dd($rs) 各种 sign 出错~

然后我换成了第二种:

// 实例化一个媒体文件流,注意文件后缀名需符合接口要求
// !!!??? 有个问题,这种写法就可以忽略掉文档提出的 meta 和 file 等参数了嘛?
$media = new MediaUtil($uploadedFile);
$instance = $function->getInstance();
$rs = $instance->chain('v3/merchant/media/upload')
    ->post([
       'debug' => true,
       'body'    => $media->getStream(),
       'headers' => [
          'Accept'       => 'application/json',
          'content-type' => $media->getContentType(),
       ]
    ]);
// "code": "PARAM_ERROR", "message": "图片文件名称不正确,请检查后重新提交 我上传的文件是 demo.png 不清楚哪里出现了问题?
我的 instance 是来自 参考地址: https://github.com/wechatpay-apiv3/wechatpay-php#%E7%A4%BA%E4%BE%8B%E7%A8%8B%E5%BA%8F%E5%BE%AE%E4%BF%A1%E6%94%AF%E4%BB%98%E5%B9%B3%E5%8F%B0%E8%AF%81%E4%B9%A6%E4%B8%8B%E8%BD%BD
// 构造一个 APIv3 客户端实例
$instance = Builder::factory([
    'mchid'      => $merchantId,
    'serial'     => $merchantCertificateSerial,
    'privateKey' => $merchantPrivateKeyInstance,
    'certs'      => [
        $platformCertificateSerial => $platformPublicKeyInstance,
    ],
]);

问题一: 两种写法都是对的吗?以哪个为准?

问题二:问什么我上传的图片要求符合“商户上传的媒体图片的名称,商户自定义,必须以JPG、BMP、PNG为后缀。示例值:filea.jpg”,但是仍然不对?

回答关注问题邀请回答
收藏

1 个回答

  • answer6
    answer6
    2023-10-18
    $rs = $instance->chain('v3/merchant/media/upload')
        ->post([
           'debug' => true,
           'body'    => $media->getStream(),
           'headers' => [
              'Accept'       => 'application/json',
              'content-type' => $media->getContentType(),
           ]
        ]);
    
    

    这种方法我调试通了,但是还是不明白第一种写法,难道不是按照文档的要求来写的吗? 为什么会有问题

    2023-10-18
    有用
    回复
登录 后发表内容