uniapp微信小程序实现微信支付的功能

news2024/10/24 23:28:19

uniapp微信小程序实现微信支付的功能

微信小程序需要开通微信支付的功能,需要公司在微信开发平台上面申请开通微信支付的功能(管理员才拥有权限),只有在微信开发平台上申请通过了,才可以前后端结合实现微信支付的需求

1. 获取code

// 根据uniapp提供的api获取code
// this关键字代理
const _this = this
uni.login({
	provider: 'weixin', // 使用微信登录
	success: (res) => {
	const {code} = res;
	// code => 0e1MTrFa1eDx9I0bRpJa1Mqfwf4MTrFJ
	// 获取code成功后,获取openId
	_this.getOpenId(code)
	}
});

2. 获取openId

根据code,请求后端接口获取openId(此步需要后端配合提供接口)
// 后端提供接口,调用接口根据code获取到openId(可能还需要提供其他参数,根据后端需求来定)
getOpenId(code) {
	getMiniOpenid({code: code}).then(res => {
		if (res.data && res.data !== 'null') {
			// 可以将获取到的openId保存到缓存中
			uni.setStorageSync('openid', res.data)			
		}
	}).catch(err => {
		uni.showToast({
		title: err.toString(),
		duration: 2000,
		icon: 'none'
		})
	})
}

3. 根据获取到的openId,以及订单相关数据,生成prepayId (预支付交易会话ID),调用uniapp提供的支付API:uni.requestPayment()

<1>. 调用生成订单接口,获取到订单id等信息(如果已经有订单id等信息,则不需要调用生成订单接口),(后端提供)
<2>. 根据订单id和openid,调用后端提供接口,获取prepayId 、timeStamp、paySign、signType、nonceStr等信息(后端提供)

这一步对于后端来说,只是单纯的通过openid,以及订单相关参数,向微信要了一个prepayId,然后创建了一个订单,并且给前端返回prepayId

// 根据订单id和openId调用后端接口,获取到prepayId、timeStamp、paySign、signType、nonceStr等信息
getPrepayId(){
	wxMiniPay({openid: uni.getStorageSync('openid'),ordersid: this.orderid,rpid: this.rpid,}).then(res => {
		//此时后端可能只返回prepayId,需要再调一个接口根据prepayId获取timeStamp、paySign、signType、nonceStr等信息
		//也可能此次后端就将prepayId、timeStamp、paySign、signType、nonceStr等信息全部返回
		// 根据后端提供的接口而定,我这举例将prepayId、timeStamp、paySign、signType、nonceStr等信息全部返回
		const wxInfo = res.data
		// 调用uniapp提供的支付API:uni.requestPayment()
		uni.requestPayment({
			provider: 'wxpay', // 固定传wxpay
			appid: wxInfo.appId, // 微信开放平台-应用-AppId,后端返回,或者是前端自己填写
			timeStamp: wxInfo.timeStamp, // 时间戳(单位:秒)
			package: wxInfo.package, // 'prepay_id='+prepayId,前端拼接,或者后端直接返回拼接好的
			paySign: wxInfo.paySign, // 签名
			signType: wxInfo.signType, // 签名算法,这里用的 MD5/RSA 签名
			nonceStr: wxInfo.nonceStr, // 随机字符串
			partnerid: wxInfo.partnerid, // 微信支付商户号,后端返回或者是前端在微信公众平台里找到商户号
			success(res) {	
				// 支付成功,可以跳转到支付结果页面等操作
			},
			fail(err) {
				// 取消支付的操作
				if (err.errMsg === 'requestPayment:fail cancel') {
				uni.showToast({
					title: '用户取消支付',
					duration: 2000,
					icon: 'none'
					})
				} else {
					// 支付失败
					uni.showToast({
					title: '支付失败',
					duration: 2000,
					icon: 'none'
					})
				}
			}
		})
	})
}

对于前端来说,微信支付就是根据uni.login()获取到code,根据code调用接口获取到openid,根据openid和订单信息调用接口获取到prepayid,根据prepayid调用接口获取到timeStamp、paySign、signType、nonceStr等信息,再调用uniapp提供的支付API:uni.requestPayment()

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

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

相关文章

python装饰器的另类用法

在对pyverilog源码进行单步调试时&#xff0c;遇到一个很奇怪的现象&#xff0c;被装饰器装饰的方法t_LINECOMMENT没有主动调用&#xff0c;但装饰器TOKEN中的内嵌函数set_regex却被调用了。 ## lexer.pyfrom ply.lex import *class VerilogLexer(object):linecomment r"…

C++【string类的使用】(上)

文章目录 1. 为什么要学习string类2. 标准库的string类2.1 string的构造函数&#xff08;1&#xff09;无参构造&#xff08;重点&#xff09;&#xff08;2&#xff09;用字符串初始化&#xff08;重点&#xff09;&#xff08;3&#xff09;用字符串的前n个字符初始化(4)拷贝…

常见ElasticSearch 面试题解析(上)

前言 ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎&#xff0c;基于RESTful web接口。Elasticsearch是用Java语言开发的&#xff0c;并作为Apache许可条款下的开放源码发布&#xff0c;是一种流行的企业级搜索引擎。ElasticSearch…

直播间“饕餮盛宴”的背后,是“他经济”正在冒头

最近&#xff0c;一个有意思的现象逐渐露出了苗头。 今年“双11”第一轮尾款开启支付的当晚&#xff0c;罗永浩的直播间上演了一出别样的“饕餮盛宴”。直播开场后&#xff0c;iphone16系列、可口可乐&#xff08;含糖、无糖300ml&#xff09;10秒售罄&#xff0c;索尼PS5、沃…

hive on tez 指定队列后任务一直处于running状态

如上图所示一直处于running状态&#xff0c;查看日志发现一直重复弹出同一个info&#xff1a; 2024-10-18 16:57:32,739 [INFO] [AMRM Callback Handler Thread] |rm.YarnTaskSchedulerService|: Allocated: <memory:0, vCores:0> 释义: 当前应用程序没有分配到任何内存…

wordcloud 字体报错

wordcloud 字体报错 词云库报错&#xff1a;Only supported for TrueType fonts字体文件问题pillow版本的问题wordcloud版本问题&#xff08;我的最终解决方案&#xff09; 词云库报错&#xff1a;Only supported for TrueType fonts 字体文件问题 解决方法 写绝对路径 &…

教程分享!超简单的低功耗4G模组LCD应用示例!看过来~

低功耗4G模组LCD应用是物联网技术中的一部分知识&#xff0c;在未来的学习和实践中&#xff0c;我们还将接触到更多前沿的技术和理念。让我们一起努力&#xff0c;探索科技的无限可能&#xff0c;为我们的生活带来更多便利与惊喜&#xff01;希望本文能为您提供一些帮助&#x…

Cisco WLC 9800 - HA SSO with Ether-channel

本文将记录如何配置HA SSO以及Ethernet Channel。 1.拓扑情况 本文的内容基于如下的Topo进行。 2.准备工作 两台WLC的型号必须一样&#xff1b;两台WLC必须使用一样的软件版本&#xff1b;需要准备好使用的IP地址&#xff1a;两个用于WLC的管理地址&#xff08;WMI&#xff…

串口通讯编程示例之串口编写程序

使用open()函数打开串口设备 首先使用open()函数打开串口设备/dev/ttymxc6&#xff0c;设备使用了O_RDWR | O_NOCTTY | O_NDELAY标志&#xff0c;分别代表以读写方式打开、不让设备成为控制终端且设置非阻塞模式&#xff0c;也就是当无法打开设备时&#xff0c;不会在原地等待&…

【博客节选】Unity角色异常抖动问题排查

本文截取自本人文章 &#xff1a;【Unity实战笔记】第二一 基于状态模式的角色控制——以UnityChan为例 发现出现角色抖动问题 尝试解决方法&#xff1a; 跳跃的loop time不要勾选&#xff1b; 相机aim添加垂直阻尼 还是不行&#xff0c;仔细查看是位移时震颤。 UnityCha…

HCIP-HarmonyOS Application Developer 习题(十三)

&#xff08;多选&#xff09;1、在设计应用框架的过程中&#xff0c;我们常用的界面应用框架有哪些? A、启动页 B、详情页 C、列表视图 D、网格视图 答案&#xff1a;ABCD 分析&#xff1a; &#xff08;多选&#xff09;2、触摸屏以触控的方式进行输入。它可以支持以下哪些…

OpenIPC开源FPV之Ardupilot配置

OpenIPC开源FPV之Ardupilot配置 1. 源由2. 问题3. 分析3.1 MAVLINK_MSG_ID_RAW_IMU3.2 MAVLINK_MSG_ID_SYS_STATUS3.3 MAVLINK_MSG_ID_BATTERY_STATUS3.4 MAVLINK_MSG_ID_RC_CHANNELS_RAW3.5 MAVLINK_MSG_ID_GPS_RAW_INT3.6 MAVLINK_MSG_ID_VFR_HUD3.7 MAVLINK_MSG_ID_GLOBAL_P…

千万不要小看SD3.5!最强模型全家桶来了!

一、SD3.5 的登场 Stability AI 推出的 SD3.5 引起了广泛关注。它直接开源了三个模型&#xff0c;包括 Large 和 Large Turbo&#xff0c;Medium 将于 29 号发布&#xff0c;并且这三个型号都可以商用。 &#xff08;一&#xff09;模型版本介绍 模型版本参数量特点分辨率范围S…

《A complete telomere-to-telomere assembly of the maize genome》方法总结

研究背景 完整的T2T基因组组装一直是基因组研究的长期追求。 研究方法 通过生成高深度覆盖的超长 Oxford Nanopore Technology (ONT) 和 PacBio HiFi 测序数据&#xff0c;报道了玉米的完整基因组组装。 每条染色体均以单一contig的形式完整覆盖。 结果概述 基因组特征&am…

vue3中mitt和pinia的区别和主要用途,是否有可重合的部分?

在 Vue 中&#xff0c;Mitt 和 Pinia 是两个不同的工具&#xff0c;它们的主要用途和功能有所不同&#xff0c;但在某些方面也存在重合的部分。 区别 Mitt&#xff1a; Mitt 是一个简单而强大的事件总线库&#xff0c;用于在组件之间进行事件的发布和订阅。 它提供了一种简洁…

【Linux】实现一个简易的shell命令行

&#x1f984;个人主页:修修修也 &#x1f38f;所属专栏:Linux ⚙️操作环境:Xshell (操作系统:Ubuntu 22.04 server 64bit) 目录 一.项目简介 二.分析项目实现 三.逐步实现项目功能 1.获取命令行 2.解析命令行 3.指令的判断 4.普通命令的执行 四.完整项目代码 结语 一.项目简介…

计算生物学与生物信息学漫谈-1-测序一路走来

最近工作中&#xff0c;反思自己计算生物学基础非常薄弱&#xff0c;然而作为一门非常新兴的交叉学科&#xff0c;涉及计算机、物理、生物、数学等多多学科&#xff0c;国内并没有这样完善的教程&#xff0c;因此想要自己做一个教程&#xff0c;使用费曼学习法学习&#xff0c;…

【亚马逊云】基于 Amazon EKS 搭建开源向量数据库 Milvus

文章目录 一、先决条件1.1 安装AWS CLI ✅1.2 安装 EKS 相关工具✅1.3 创建 Amazon S3 存储桶✅1.4 创建 Amazon MSK 实例✅ 二、创建EKS集群三、创建 ebs-sc StorageClass四、安装 AWS Load Balancer Controller五、部署 Milvus 数据库5.1 添加 Milvus Helm 仓库5.2 配置 S3 作…

Vue2、Element中实现Enter模拟Tab,实现切换下一个框的效果

目录 &#x1f4c3;前序 &#x1f449;开发历程 &#x1f4bb;实际代码 &#x1f4fd;实现效果图 前序 在几乎所有的浏览器中&#xff0c;都具备通过 Tab 键来切换焦点的功能。然而&#xff0c;有些用户提出了强烈要求&#xff0c;希望能够增加通过 Enter 键…

进程间通信(二)消息队列、共享内存、信号量

文章目录 进程间通信System V IPC概述System V IPC 对象的访问消息队列示例--使用消息队列实现进程间的通信 共享内存示例--使用共享内存实现父子进程间的通信&#xff08;进程同步&#xff09;示例--使用进程实现之前的ATM案例&#xff08;进程互斥&#xff09; 信号量示例--利…