前期在对接v2版本的时候遇到不少坑,接口规则,协议什么的都没有阅读就开始对着接口写程序,过程中遇到了不少坑才返回来通读,
建议开发者不管是对接哪个版本都要熟读文档要求与介绍,下面是我对v3版本的总结:
接口方法就不用说了,重要提示:文档字段一定要复制。
v3版本与v2不同的地方是需要验签,
私钥用于解密与签名,公钥用于加密和验签(复习下知识点)
v3私钥和商户证书号在商户平台设置与查看并记住,最好存在数据库中,方便以后在前端更改,以后私钥忘记、证书重新申请修改程序。
验签这一步必须的,将要求的数据放在header中传给接口,请求后避免数据被劫持篡改,对微信应答的数据进行验签。
主要的坑在验签过程中,在已经有微信平台证书的情况下,出现验签失败,要么解密方法错误,要么验签字符串错误。
我是能调起支付界面,就是应答验签怎么也不通过,原因就是验签字符串出错,获取response body的方法出错,导致里面有空格,搞了我一天,最后取出空字符串后验证成功。
如果出现支付验证失败,那就是前端的signTye肯定不是RSA,v2版本的时候前端将这个参数写死成‘MD5’了
微信建议商户对微信应答进行验签,但是有一个地方不用,那就是申请退款接口,即便是错误导致验签未成功,钱已经退了,没有必要对应答再验签,但是回调里面是必须进行验签的。
应答验签过程中建议加入证书号比较,一旦平台证书过期,在此处调用证书获取接口重新获取再对比应答中的证书号。
ps:待验签字符串中的报文放在外面json序列化后再传入,避免重复序列化,随机字符串和时间戳,待签和加签一定要统一。
完毕!
如有疑问,可以留言
这种总结性文章,建议楼主整理一下格式,参加:有奖征文 | 从产品设计、开发到运营维护,说说你与微信支付的那些事儿? - 微信开放社区 https://developers.weixin.qq.com/community/pay/doc/000ece3b0ec440d0d7eb7371e51c01
python开发者可以使用已经封装好的“微信支付 V3 API Python SDK”
https://github.com/minibear2021/wechatpayv3
如果可以的话,建议楼主可以把项目开源,省去广大程序员重复做轮子之苦。