微信小程序接入微信支付流程

news/2024/7/20 0:54:10 标签: 微信, 微信小程序, 小程序

一、基本介绍

1、支付场景:点击支付按钮唤起微信支付弹窗,输入正确密码后完成支付。
2、基本流程:点击支付按钮首先生成一个订单,然后在后端调用微信api接口进行统一下单,将接口返回的数据回传到前端拉起支付操作,然后异步通知支付结果。

二、配置信息

1、微信公众平台配置

点击功能 – 微信支付,关联一下注册好的微信商户平台
在这里插入图片描述

1、微信商户平台配置

(1)设置证书和密钥
登录微信商户平台,点击账户中心 – API安全,设置证书和两个密钥(此处两个密钥设置为相同的。
在这里插入图片描述(2)申请JSAPI支付
①点击产品中心 – 我的产品 ,点击申请JSAPI支付。
在这里插入图片描述②填写支付授权目录
开发配置中需要填写支付授权目录(后端服务器域名)
在这里插入图片描述

三、编码实现

1、获取用户的openId

必须要有微信用户的openid才可以唤醒支付功能。openid由微信公众号提供,是对于消费者微信产生的唯一用户身份标识。
获取方法:https://blog.csdn.net/m0_46613429/article/details/125868514

2、获取prepay_id和支付签名验证paySign

商户在小程序中先调用接口在微信支付服务后台生成预支付交易单,返回正确的预支付交易后调起支付。
(1)调用接口生成预支付订单拿到订单id

orderInsert(data).then(res => {
  if (res.data.code === 1) {
     this.getPayInfo(res.data.data.id)
   } else {
     wx.showToast({
       title: res.data.msg,
       icon: 'none'
     })
   }
})

(2)通过订单id调用接口获取用户支付所需参数

getPayInfo(id) {
  unifiedOrder({id}).then(res => {
		if(res.data.code === 1) {
			this.payMoney(res.data.data)
		} else {
      wx.showToast({
         title: res.data.msg,
         icon: "error"
       })
     }
  }
}

(3)通过wx.requestPayment方法调用起支付功能
在这里插入图片描述

payMoney(moneyData) {
	wx.requestPayment({
      timeStamp: moneyData.timeStamp,
      nonceStr: moneyData.nonceStr,
      package: moneyData.packageValue,
      signType: moneyData.signType,
      paySign: moneyData.paySign,
      success(res) {
        
      },
      fail(res) {
        wx.showToast({
          title: "支付失败!",
          icon: "error"
        })
      }
   })
}

四、流程总结

(1)小程序获取微信openId以及订单号传给后台
(2)后台根据openId和订单号进行签名post微信统一下单接口
(3)后台获取微信返回的xml字符串解析二次签名后返回给前端
(4)前端调起微信支付API


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

相关文章

组合数学(练习)

1. 某公司一共有30个人,其中16个为男性;公司里单身的一共有10个,其中有5个是男性,则非单身的女性有()。 解答: 非单身女生人数 女生人数 - 单身女生人数 ( 总人数 - 男生人数) -…

微信小程序中顶部导航栏全局切换

一、场景 微信小程序和企业微信小程序共用一个,从不同入口进入小程序显示不同的顶部导航栏 二、思路 1、app.json中全局设置只能写死一个,无法实现 2、app.js中直接使用wx.setNavigationBarColor不能全局生效,只能更改当前页面 3、每个页面…

面试:你可以实现一下vue的v-model吗?

面试问:v-model在不同的情境下,实现方式是不同的,你可以实现所有表单输入时双向绑定的功能吗 1、在input框中typetext 和 textarea 中的实现 // v-model借助元素的 value 属性和 input 事件实现双向绑定 // 模拟v-model,具体实现如…

微信小程序判断是否有新版本并且自动更新

在app.js中的onLaunch中调用如下方法即可 checkUpdateVersion() {//判断微信版本是否 兼容小程序更新机制API的使用if (wx.canIUse(getUpdateManager)) {//创建 UpdateManager 实例const updateManager wx.getUpdateManager();console.log(是否进入模拟更新);//检测版本更新up…

js实现base64的加密解密

一、base.js文件 const Base64 function() {var _keyStr "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789/";this.encode function(input) {var output "";var chr1, chr2, chr3, enc1, enc2, enc3, enc4;var i 0;input _utf8_en…

SpringCloud之初识Feign ----- 分布式负载自动拼接请求的URL

在前面的学习中,我们使用了Ribbon的负载均衡功能,大大简化了远程调用时的代码: String baseUrl "http://user-service/user/"; User user this.restTemplate.getForObject(baseUrl id, User.class) 如果就学到这里,你…

微信小程序中使用vant组件

1.初始化包管理文件 在项目根文件夹中打开终端,输入:npm init -y 2.安装指定版本vant npm i vant/weapp1.3.3 -S --production3.构建npm包 1、点击工具>>构建npm,构建完成后,即可引入组件 2、确定详情的本地设置中勾选了…

.NET高级代码审计(第一课)XmlSerializer反序列化漏洞

0X00 前言 在.NET 框架中的 XmlSerializer 类是一种很棒的工具,它是将高度结构化的 XML 数据映射为 .NET 对象。XmlSerializer类在程序中通过单个 API 调用来执行 XML 文档和对象之间的转换。转换的映射规则在 .NET 类中通过元数据属性来表示,如果程序开…