当前位置:   article > 正文

微信小程序支付问题解决_easywechat 小程序支付

easywechat 小程序支付

一、背景

有个微信小程序,新申请的商户号,新接入微信支付。自行处理小程序端和服务端(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年又踩了一遍,感觉从正常阅读流程里很容易陷入到这个问题里来,所以感觉还是有必要记录下的。毕竟又白白花了我三四个小时排查这看似简单的失误…
同时我也注意到微信开发者社区有很多类似的问题,但都没有下文了,估计也都是解决完感觉自身原因占比较大,就没有同步结论。这里记录下,希望能够帮助到其他人~

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/羊村懒王/article/detail/266864?site
推荐阅读
相关标签
  

闽ICP备14008679号