一、背景

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

微信小程序支付问题解决相关推荐

  1. 【问题排查与解决】ios调起微信小程序支付失败

    ios调起微信小程序支付SDK失败 场景 排查方向(1. 支付规范导致2. 参数缺少导致3. sdk版本问题) 微信小程序支付规范 解决方式 调起微信小程序参数问题(需要传入当前小程序的appId) ...

  2. 微信小程序asp服务器架设,asp写的微信小程序支付demo-服务器端是asp+mdb的

    这个微信小程序支付demo代码是我用asp写的,微信小程序端加上服务器端用的asp和mdb数据库,下面是代码分享: 订单说明:{{paydata.title}} 支付金额:分 支付 --------- ...

  3. 微信小程序支付最容易犯的坑notify_url(支付回调)

    最近做了微信小程序支付,支付成功之后发现notify_url回调地址竟然没有访问. 检查了无数次代码,下单结果里面的回调地址看了又看,都没有错啊. 把回调地址复制出来到浏览器上面,外网也是可以访问的啊 ...

  4. 微信小程序php后台支付,微信小程序 支付功能实现PHP实例详解

    微信小程序 支付功能实现PHP实例详解 前端代码: wx.request({ url: 'https://www.yourhost.com/weixin/WeiActivity/payJoinfee' ...

  5. .NET Core 微信小程序支付——(统一下单)

    最近公司研发了几个电商小程序,还有一个核心的电商直播,只要是电商一般都会涉及到交易信息,离不开支付系统,这里我们统一实现小程序的支付流程(与服务号实现步骤一样). 目录 1.开通小程序的支付能力 2. ...

  6. python个人微信支付接口_Python实现微信小程序支付功能

    正文 由于最近自己在做小程序的支付,就在这里简单介绍一下讲一下用python做小程序支付这个流程.当然在进行开发之前还是建议读一下具体的流程,清楚支付的过程. 1.支付交互流程 2.获取openid( ...

  7. 加入域时出现以下错误 登陆失败 该目标账户名称不正确_微信支付踩坑合集:微信小程序支付失败是什么原因?持续更新...

    微信小程序开发的过程一定会遇到各种问题,最让人棘手的就是支付问题,因为没有支付做商城类似的小程序就没有办法完成最关键的一步.那么支付失败到底什么原因呢?一下子收集了几个错误类似,希望对你有帮助: No ...

  8. 微信小程序支付异常:requestPayment:fail no permission

    微信小程序支付异常:requestPayment:fail no permission 参考文章: (1)微信小程序支付异常:requestPayment:fail no permission (2) ...

  9. 微信小程序支付-付款(Java后台)

    微信小程序支付-付款(Java后台) 一.概述 接触微信小程序支付有一段时间,趁着项目上线空闲期,来总结一下付款.退款.提现到银行卡.查询流水等步骤过程,涉及到的知识,以及编程过程中需要注意的问题. ...

最新文章

  1. 为了解决伴随RIP协议的路由环路问题,可以采用水平分割法,这种方法的核心是(22),而反向毒化方法则是(23)。
  2. python drop函数_用python帮财务小姐姐自动生成财务报表
  3. fscanf简单使用
  4. 上海纳税百强2016,邢台2017纳税百强,深圳百强企业
  5. java.util.UnknownFormatConversionException: Conversion = ‘j‘ || Conversion = ‘D‘ || Conversion = ‘Y‘
  6. 最新阿里内推高级Java面试题
  7. centos 删除crontab_Centos 7 安装crontab及cron常用命令
  8. centos6.8 安装php7
  9. java调用javafx_Java代码调用JavaFX的例子(大力推荐)
  10. JavaScript 之 截取字符串函数
  11. ubuntu为python处理图片安装图片数据增强库imgaug
  12. Java 添加、验证PDF 数字签名
  13. android init重启service(进程)
  14. 让AngularJS兼容IE8及其以下浏览器版本的方法
  15. Subclipse安装
  16. 小楼一夜听春雨···
  17. Reflection conclusion
  18. 计算机课英语怎么读音标,英语的48个音标有哪些?英语的48个音标怎么读?
  19. 经典的测试开发面试题
  20. adjacent_difference 的使用

热门文章

  1. JDBC连接微软SQLSERVER2000数据库
  2. 算法之路之征服上海交大的oj-西西弗斯式的命运
  3. 从零开始手搓一个STM32与机智云的小项目——硬件介绍
  4. 【踩坑】深度学习 Torch 爆显存的原因(显存不够用等问题)
  5. 将vim打造成代码阅读利器(for mac and ubuntu)
  6. 用Python函数的默认参数计算借呗借款利息
  7. win7怎样关闭开机自检扫描硬盘
  8. 智能设备强势来袭,让我们的生活更加自动化
  9. 论语音识别三大关键技术
  10. 总结软连接和硬连接区别