uni.requestPayment使用

news2025/1/23 11:52:44

前言:由于uni.requestPayment没有封装H5支付方法,我自己封装了统一方法可以多端适用。

代码如下:

有两种方法:
方法1:安装 jweixin-module 包,我的是1.6.0版本->引入->使用
方法2:使用微信浏览器自带的方法WeixinJSBridge.invoke,前提是必须是微信浏览器才可以,但是不用安装包。官方文档

detail.js中

import { request } from '@/utils/request.js';
// #ifdef H5
const jweixin = require("jweixin-module");
// #endif
// 微信支付
export const wxPayment = (data) => {
	return new Promise((resolve, reject) => {
		let orderInfo = {
			"appid": data.appId,
			"timestamp": data.timeStamp, // 支付签名时间戳
			"noncestr": data.nonceStr, // 支付签名随机串,不长于 32
			"package": "Sign=WXPay",        // 固定值
			"partnerid": data.partnerid,      // 微信支付商户号
			"prepayid": data.prepay_id, // 统一下单订单号 
			"sign": data.paySign, // 支付签名
		}
		// #ifdef H5
		jweixin.config({
			debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
			appId: data.appId, // 必填,公众号的唯一标识
			timestamp: data.timeStamp, // 必填,生成签名的时间戳
			nonceStr: data.nonceStr, // 必填,生成签名的随机串
			signature: data.paySign, // 必填,签名,见附录1
			jsApiList: ['chooseWXPay'] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2
		});
		jweixin.ready(function() {
			jweixin.checkJsApi({
				jsApiList: ['chooseWXPay'], // 需要检测的JS接口列表,所有JS接口列表见附录2,
				success: function(res) {
					console.log('checkjsapi Success', res);
				},
				fail: function(res) {
					console.log('checkjsapi fail', res);
				}
			});
			jweixin.chooseWXPay({
				timestamp: data.timeStamp, // 支付签名时间戳,注意微信jssdk中的所有使用timestamp字段均为小写。但最新版的支付后台生成签名使用的timeStamp字段名需大写其中的S字符
				nonceStr: data.nonceStr, // 支付签名随机串,不长于 32 位
				package: `prepay_id=${data.prepay_id}`, // 统一支付接口返回的prepay_id参数值,提交格式如:prepay_id=***)
				signType: data.signType, // 签名方式,默认为'SHA1',使用新版支付需传入'MD5'
				paySign: data.paySign, // 支付签名
				success: function(res) {
					console.log('success',res);
					resolve(res)
				},
				cancel: function(res) {
		            console.log('cancel', res)
				},
				fail: function(res) {
					console.log('fail',res);
					reject(res)
				}
			});
		});
		
		jweixin.error(function(res) {
			console.log('err', res);
			reject(res)
		});
		// WeixinJSBridge.invoke(
		// 	'getBrandWCPayRequest', {
		// 		"appId": data.appId,
		// 		"timeStamp": data.timeStamp, // 支付签名时间戳
		// 		"nonceStr": data.nonceStr, // 支付签名随机串,不长于 32
		// 		"package": `prepay_id=${data.prepay_id}`,
		// 		"signType": data.signType, //微信签名方式:     
		// 		"paySign": data.paySign, //微信签名
		// 	},
		// 	function(res) {
		// 		// 支付成功
		// 		if (res.err_msg == "get_brand_wcpay_request:ok") {
		// 			// 使用以上方式判断前端返回,微信团队郑重提示:
		// 			//res.err_msg将在用户支付成功后返回ok,但并不保证它绝对可靠。
		// 			resolve(res)
		// 		}
		// 		// 支付过程中用户取消
		// 		if (res.err_msg == "get_brand_wcpay_request:cancel") {
		// 		}
		// 		// 支付失败
		// 		if (res.err_msg == "get_brand_wcpay_request:fail") {
		// 			reject(res)
		// 		}
		// 		/**
		// 		 * 其它
		// 		 * 1、请检查预支付会话标识prepay_id是否已失效
		// 		 * 2、请求的appid与下单接口的appid是否一致
		// 		 * */
		// 		if (res.err_msg == "调用支付JSAPI缺少参数:total_fee") {
		// 			alert('调用支付JSAPI缺少参数:total_fee')
		// 		}
			// });
		// #endif
		// #ifndef H5
		uni.requestPayment({
			provider: 'wxpay',
			orderInfo,
			success: res => resolve(res),
			fail: res => reject(res)
		})
		// #endif
	})
}

detail.vue使用

import { wxPayment, wechatPay, } from "@/api/detail.js"
...
methods: {
	// 立即购买
	handelPay() {
		// 扫码-1 公众号-2 小程序-3 app-4
		let payType = 2
		// #ifdef MP-WEIXIN
		payType = 3
		// #endif
		// #ifdef APP-PLUS
		payType = 4
		// #endif
		// 生成订单
		wechatPay({
			payType: payType,
			goodsName: this.resource.resourceTitle,
			price: this.resource.price,
			resourceId: this.resourceId,
			userId: this.userId,
			openId: this.userOpenId,
		}).then(res => {
			console.log('res', res);
			// 订单号
			let orderNo = res.orderNo
			wxPayment(res.result).then(res => {
				console.log('微信支付res', res);
				// 跳转至成功页面
				this.$common._jumpToUrl('/pages/components/paySuccess', 1, { curOrderId: res.orderNo })
			}).catch(err => {
				console.log('微信支付err', err);
				this.$common._showToast('支付失败')
			})
		}).catch(err => {
			console.log('err', err);
			this.$common._showToast('支付失败')
		})
	},
}
...

注意点:

  • 支付时成功获取订单号,但是调微信提示支付验证签名失败
    在这里插入图片描述
    这种情况主要从以下分析:
  • 公众号是否具有支付权限。
  • 看一下参数是否都传对,大小写需要注意。
  • appId是否是后台传过来的,不要写死。
  • 微信支付接口签名校验工具是否校验通过,有的时候虽然微信支付接口签名校验工具显示校验通过,但是仍然会提示,他只能校验不能保证参数的正确性。
  • 秘钥key是否正确
  • 如果以上都没问题,还要确认生成的签名是否缺少参数(我就是这种情况一天都在排除问题)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/105346.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

51单片机实训day2——创建Keil工程(一)

以管理员身份打开软件!!!以管理员身份打开软件!!!以管理员身份打开软件!!! 内 容:Keil工程创建 学 时:2学时 知识点:开发固件库介绍…

【Linux】进程替换与shell的模拟实现

目录 一、进程替换 1.1 进程替换的概念 1.2 替换函数 二、命令行解释器-Shell 2.1 shell的实现与运行 2.2 步骤讲解 一、进程替换 1.1 进程替换的概念 当我们使用 fork 函数创建子进程后,父子进程各自执行父进程代码的一部分。那如果创建的子进程想要执行一…

UG/NX二次开发Siemens官方NXOPEN实例解析—2.4 File2Points

列文章目录 UG/NX二次开发Siemens官方NXOPEN实例解析—2.1 AssemblyViewer UG/NX二次开发Siemens官方NXOPEN实例解析—2.2 Selection UG/NX二次开发Siemens官方NXOPEN实例解析—2.3 Selection_UIStyler UG/NX二次开发Siemens官方NXOPEN实例解析—2.4 File2Points 前言 随着…

Python开发的编译神器PyCharm----测试从业来编写Python脚本最钟意的工具

目录 前言: 一、PyCharm简介 二、PyCharm下载与安装 1、下载 2、安装 三、PyCharm新增Python项目 步骤1、新增 步骤2、路径配置 步骤3、环境选择 步骤4、 项目运行 四、画圣诞树 前言: 本文将为大家介绍PyCharm下载安装与初步的使用,初…

外汇天眼:美国11月独栋房屋建设跌至两年半低点!

美国商务部周二公布了这份令人沮丧的报告,此前周一有消息称,12月份房屋建筑商信心连续第12个月出现创纪录的下滑。美国11月独栋房屋建设跌至两年半低点,未来建筑许可大幅下滑,因抵押贷款利率上升继续打压楼市活动。 具体数据显示&…

(十九)Vue之组件和模块概念

文章目录传统编程组件化编程模块模块化组件化Vue学习目录 上一篇:(十八)Vue之生命周期 传统编程 一个html引入大量的CSS、JS文件,使得结构混乱、代码复用率低 传统方式编写应用存在的问题: 1.依赖关系混乱、不好维护…

某讯滑块验证码反汇编分析-第三章

某讯滑块验证码反汇编分析-第三章collect明文处理vData明文处理collect明文处理 上一篇已经跟到明文的拼接函数,接下来看看get函数的返回值,对什么进行拼接。 在这一次运行中,第一次get返回的是一个10,是怎么计算出来的呢&#x…

[XCTF]red_green(难度2)

得到一个乱码的图片,查看信息,联系“red_green” 目录 前言 一、题目重述 二、解题思路 1.套路来一遍 2.过程中注意到以下两点: (1)stegsolve图层中只有red/green,与题目暗合 (2)zsteg查看隐写信息发…

springboot+jsp实验室管理系统fu1ju-

目录 第一章 绪论 5 1.1 研究背景 5 1.2系统研究现状 5 1.3 系统实现的功能 6 1.4系统实现的特点 6 1.5 本文的组织结构 6 第二章开发技术与环境配置 7 2.1 Java语言简介 7 2.2JSP技术 8 2.3 MySQL环境配置 8 2.4 MyEclipse环境配置 9 2.5 mysql数据库介绍 9 2.6 B/S架构 9 第三…

2022年度安徽省职业院校技能大赛中职组“网络搭建与应用”赛项竞赛试题

2022年度安徽省职业院校技能大赛 中职组“网络搭建与应用” 赛项竞赛 (总分1000分) 竞赛说明 一、竞赛内容分布 “网络搭建与应用”竞赛共分三个部分,其中: 第一部分:网络搭建及安全部署项目(500分&…

SpringCloud-Feign远程调用

🍁Feign的介绍 Feign是一个声明式的http客户端,官方地址: https://github.com/0penFeign/feign作用就是帮助我们优雅的实现http请求的发送,解决上面提到的问题。 🍁定义和使用Feign客户端 1.引入依赖 在order-service服务的po…

【PyTorch Geometric】工具包安装部署 过程记录(图模型学习 需要安装的工具包);图神经网络 工具包安装过程记录

目录 部署过程下载别的版本试试部署过程 在常规的安装过程中,若直接通过pip,老师讲 大概率无法成功安装。比较正规的安装方法是,下载好工具包,手动安装。 首先通过 Jupyter Notebook打开配置文档: 有些步骤在该文档中。 点击上图中的超链接,进入对应的 GitHub。 进去…

Linux进程间通信(一):匿名管道的原理和使用

文章目录一、前言二、什么是匿名管道?三、匿名管道的原理三、匿名管道的创建四、匿名管道实现数据传输五、匿名管道实现进程控制六、匿名管道特点总结一、前言 (在阅读本文前,需要具备Linux基础IO的基本知识)  在某些特定情况下…

【Linux】Linux下基本指令(二)

作者:一个喜欢猫咪的的程序员 专栏:《Linux》 喜欢的话:世间因为少年的挺身而出,而更加瑰丽。 ——《人民日报》 目录 1. Linux基本指令:(续) 1.1man指令&am…

英国访问学者AV签证超期怎么办?

英国AV签证只给12个月整,关于 AV签证超期怎么办?知识人网访问学者老师和大家聊一聊: 一、呆不满一年(360天)会遇到的问题主要有: 1、无法申请留学回国科研启动基金。 2、需要向CSC返还一定的资助费用。 3、国内一些地方判断一个…

数字化转型如何认清本质少被忽悠:小步快跑看到项目效果再推下一步

这些年,我们见识了太多新概念:数据智能、Data Fabric、数据虚拟化还有最著名的“数据中台”。 然而,跟几年前疯狂追逐这些热词不同,或者说因为已经踩坑踩到晕厥。动辄一个千万的中台项目投入进去,上线后高层看数还是要…

【网络安全】Redis未授权访问查看敏感文件

前言 什么是未授权访问漏洞呢?也就是没有权限,但是可以访问站点或者服务器的漏洞,称之为未授权访问漏洞,这个属于高危漏洞。比如我们常见的路由器未授权访问等等。 一、准备阶段 service httpd.service start 开启apache服务se…

【文档编辑】积累

文章目录WordExcel填充表格样式函数Markdownsublime搜索jsonhexWord Word 2016 撰写论文(1): 公式居中、编号右对齐 Excel 填充 EXCEL excel中运用ctrlD、ctrlenter、ctrlE批量填充数据 表格样式 Excel技法:三招实行Excel隔行填色 函数 COUNTA 函数 step1&…

最小生成树算法:Kruskal 与 Prim算法

Ⅰ. 最小生成树 连通图中的每一棵生成树,都是原图的一个极大无环子图,即:从其中删去任何一条边,生成树就不再连通;反之,在其中引入任何一条新边,都会形成一条回路。 若连通图由 n 个顶点组成&…

向前主动防御 | 云蜜罐年底感恩回馈活动

安全事件频发,防御能力备受考验2022年接近尾声,回顾全年,数据泄露、网络攻击、漏洞发现等各个层面呈爆发态势,无论在数量还是影响面上,均超过以往任何年度。信息泄露创历史新高,2022年仅上半年泄露或被盗的…