微信小程序demo 调用支付jsapi缺少参数 total_fee,支付签名验证失败 究极解决方案

news/2024/7/7 20:03:37 标签: 微信小程序, 小程序, uniapp支付, 微信支付

坑一:调用支付jsapi缺少参数 total_fee

修正后的uniapp代码如下:

uni.requestPayment({
					provider: 'wxpay',
					timeStamp: String(data.timestamp),
					nonceStr: data.nonceStr,
					package: 'prepay_id=' + data.prepayId,
					signType: 'HMAC-SHA256',
					paySign: data.sign,
					success: (res) => {
						console.log('success:' + JSON.stringify(res));
						uni.showToast({
							title: '支付成功!',
							duration: 2000
						});
						uni.reLaunch({
							url: '/pages/order/list'
						})
					},
					fail: (err) => {
						console.log('fail:' + JSON.stringify(err));
						uni.showToast({
							title: '已取消支付!',
							icon: 'none',
							duration: 2000
						});
					}
				});

解决方案:

其中package: ‘prepay_id=’ + data.prepayId,这一行代码,必须拼接‘prepay_id=’

坑二:小程序支付报错:支付签名验证失败

修正后的后台代码:

    /**
     * 按照前端签名文档规范进行排序,\n是换行
     *
     * @param appid
     * @param timestamp
     * @param nonceStr
     * @param prepay_id
     * @return
     */
    public static String buildMessage(String appid, long timestamp, String nonceStr, String prepay_id) {
        
        return appid + "\n"
                + timestamp + "\n"
                + nonceStr + "\n"
                + "prepay_id=" + prepay_id + "\n";
    }

文档官方文档:
https://pay.weixin.qq.com/docs/merchant/apis/jsapi-payment/jsapi-transfer-payment.html

$ echo -n -e \
"wx8888888888888888\n1414561699\n5K8264ILTKCH16CQ2502SI8ZNMTM67VS\nprepay_id=wx201410272009395522657a690389285100\n" \
  | openssl dgst -sha256 -sign apiclient_key.pem \
  | openssl base64 -A
  uOVRnA4qG/MNnYzdQxJanN+zU+lTgIcnU9BxGw5dKjK+VdEUz2FeIoC+D5sB/LN+nGzX3hfZg6r5wT1pl2ZobmIc6p0ldN7J6yDgUzbX8Uk3sD4a4eZVPTBvqNDoUqcYMlZ9uuDdCvNv4TM3c1WzsXUrExwVkI1XO5jCNbgDJ25nkT/c1gIFvqoogl7MdSFGc4W4xZsqCItnqbypR3RuGIlR9h9vlRsy7zJR9PBI83X8alLDIfR1ukt1P7tMnmogZ0cuDY8cZsd8ZlCgLadmvej58SLsIkVxFJ8XyUgx9FmutKSYTmYtWBZ0+tNvfGmbXU7cob8H/4nLBiCwIUFluw==

解决方案:

注意看,后台生成sign时候,拼接的字符串中,也需要加上"prepay_id="

tips:

app支付和小程序支付的代码之前还有这种差别和坑…腾讯的开发文档真是抵不上阿里文档的一个脚趾头…


http://www.niftyadmin.cn/n/5047833.html

相关文章

【量化小技巧】Python通过统计数据来进行过滤tushare涨停Dataframe,df.loc,或许有些启示与帮助

Python通过统计数据来进行过滤tushare涨停Dataframe 库的引入前导发生了什么事儿?上代码将日期设定好将列值提前设置好我们现在来调取tushare的涨停板信息接下来我们稍微进行一个过滤筛选 即将发生的事儿我的考虑错误的方法 总结 库的引入 from datetime import da…

变量、因子、缺失值、类型转换、剔除多余变量、随机抽样、用R使用SQL、trim、na.rm=TRUE、数据标准化应用

变量:名义型、有序型、连续型变量 名义型:普通事件类型,如糖尿病I型和糖尿病II型。 有序型:有顺序的事件类型,如一年级、二年级和三年级。 连续型:表示有顺序的数量,如年龄。 因子:…

OCR -- 文本检测

目标检测: 不仅要解决定位问题,还要解决目标分类问题,给定图像或者视频,找出目标的位置(box),并给出目标的类别; 文本检测: 给定输入图像或者视频,找出文本的…

【操作系统笔记九】并发安全问题

用户态抢占和内核态抢占 内核中可以执行以下几种程序: ① 当前运行的进程:陷阱程序(系统调用) 和 故障程序(page fault) ,进程运行在内核态的时候,其实就是在执行进程在用户态触发的…

《计算机视觉中的多视图几何》笔记(7)

7 Computation of the Camera Matrix P P P 这章讲的是摄像机参数估计。摄像机标定,本质上就是求摄像机矩阵 P P P,当我们知道足够多的 X ↔ x X \leftrightarrow x X↔x,我们该如何计算 P P P?如果知道3D和2D点的对应&#xff…

vue3-ts-vite:Google 多语言调试 / 翻译

一、实现目标 二、代码实现 2.1、项目vue3 - ts - vite 2.2、index.html 引入文件 <script>window.onload function () {const script document.createElement(SCRIPT)script.src https://translate.google.com/translate_a/element.js?cbgoogleTranslateElementI…

什么是堆栈和队列?如何实现它们?

堆栈&#xff08;Stack&#xff09;和队列&#xff08;Queue&#xff09;是两种常见的线性数据结构&#xff0c;用于组织和管理数据。它们分别具有不同的特点和用途。本文将详细解释堆栈和队列的概念、特点以及如何实现它们。 堆栈&#xff08;Stack&#xff09; 什么是堆栈&…

基于springboot+vue的大学生创新创业系统(前后端分离)

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战 主要内容&#xff1a;毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询 文末联系获取 项目介绍…