微信V3接口,图片上传签名错误

以下文档能够给与排查错误的方式

错误相关文档:https://wechatpay-api.gitbook.io/wechatpay-api-v3/chang-jian-wen-ti/qian-ming-xiang-guan

发现错误: 接口一直返回签名错误. 百度,社区查看很多
大概 有以下几点的问题
注意几点:

1、签名计算为meta的json串:{ “filename”: “111.jpg”, “sha256”: “5vn8zf4WVaXblpnoeovp62sIg1c” }

2、签名的是下载证书中的apiclient_key.pem, 并且不包括-----BEGIN PRIVATE KEY----- 与-----END PRIVATE KEY-----
PHP 推荐使用 openssl_get_privatekey(file_get_contents($cert_path));

3、上传参数meta、file、文件名、换行符号必须新增双引号

4、必须添加头文件
User-Agent:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.108 Safari/537.36’
Accept:application/json
Content-Type :multipart/form-data。

按照以上的问题修改完成 依然失败…

最后仔细阅读文档 在错误文档处发现
请求错误的提示
微信验证的字符长度 : “sign_message_length”: 72,
与 当前本地验证的长度不一致. 打印本地签名字符串 message的长度为204
而后排查后发现 不是签名的错误 而是body体的发送错误

微信方未收到当前的body请求,重新按照官方的排列 仔细重新写了restTemplate请求的body体.
最终接口对接完成.

PHP body体的写法

        $params = "--boundary\r\n";
        $params .= 'Content-Disposition: form-data; name="meta";'."\r\n";
        $params .= 'Content-Type: application/json'."\r\n";
        $params .= "\r\n";
        $params .= $meta."\r\n"; //meta的json字符串
        $params .=  "--boundary\r\n";
        $params .= 'Content-Disposition: form-data; name="file"; filename="'.$data['meta']['filename'].'";'."\r\n"; //文件名
        $params .= 'Content-Type: */*'."\r\n";
        $params .= "\r\n";
        $params .= $data['file']."\r\n"; //File的二进制
        $params .= "--boundary--\r\n";
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章