微信小程序支付问题解决

您所在的位置:网站首页 小程序appid格式 微信小程序支付问题解决

微信小程序支付问题解决

2023-03-13 01:30| 来源: 网络整理| 查看: 265

一、背景

有个微信小程序,新申请的商户号,新接入微信支付。自行处理小程序端和服务端(php)代码。 三年前有个小项目做过,当时也是踩了一遍这个坑,间隔久了这次又忘了,因为这个不太规律,遂记录一下。

二、问题描述

总共遇到两个问题: 1、小程序端调起微信支付后提示调用支付JSAPI缺少参数:total_fee" 2、小程序端调起微信支付后提示签名验证失败

先说明一下,这里用的是微信支付的v2接口,v3版本接口可能并不遇到。 (因为用的easywechat扩展包,5.x仅支持v2接口,而6.x需要php8,线上环境版本不够,所以只能踩v2的坑了)

2.1 问题1

问题1,一般是少参数或某个参数要求的值的格式/类型不对。而错误提示并不对应,所以需要按照文档逐一检查即可。

不过类型不对的话,一般fail方法里能看到对应的错误提示,比如timestamp应该是字符型,如果用的是int,会提示类型不对。

我这边是因为package参数的值格式应该是prepay_id=xxxx,我只设置了xxxx,漏掉了前边的prepay_id=。

比如服务端请求预支付接口后,拿到了prepay_id=wx123456,返回给小程序后,package参数应该是package=preay_id=wx123456

2.2 问题2

问题2,实际就是签名计算的不对,不过这里主要是文档有点不太友好。先说两点提醒: 1、服务端请求预支付接口返回的sign值,不能直接返回给小程序端来用,因为参与签名的内容不一致。 2、小程序调起支付API的开发指引里,写的appId是大写Id。 在这里插入图片描述

但如果你是进入到签名算法文档里看,是小写的appid。很容易按小写id处理(服务端预支付接口返回的也是appid),但又忽略了这个问题(我就栽了两次,确实顺序看下来,很容易在详细流程的阅读这里翻车)。 在这里插入图片描述

这里其实签名算法是以预支付接口为例的,所以流程一致,但参数内容不一致 ps:paySign建议在服务端生成,前端不存储支付key

而这里用签名校验工具是不好找到的,因为自己本身没有意识到参数名不一致

三、总结

2019年第一次踩完这两个坑的时候,只是认为自己不熟悉微信支付,然后也有点马虎,连文档里写了的值格式和参数名都认不出,只觉得是自己的大意。 但时隔多年2023年又踩了一遍,感觉从正常阅读流程里很容易陷入到这个问题里来,所以感觉还是有必要记录下的。毕竟又白白花了我三四个小时排查这看似简单的失误… 同时我也注意到微信开发者社区有很多类似的问题,但都没有下文了,估计也都是解决完感觉自身原因占比较大,就没有同步结论。这里记录下,希望能够帮助到其他人~



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3