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

||–查看的码友,在不麻烦的情况,如果文章有用,烦请点个赞.如果没用可以留言讨论哦–||

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、 换行符需要包含在 双引号 内
5、必须添加头文件
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";
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值