微信小程序 实现支付流程

一、背景

开发微信小程序时,涉及到微信支付的开发环节,特此记录一下

二、前提

2.1、注册微信支付商户号

官方注册地址👉👉:接入微信支付 - 微信商户平台

备注:此商户号为超级管理员,一般由更上级领导进行注册(   非前端人员注册  ),会成为公司收款账户,主要填写超管信息并上传企业资料(如:营业执照,对公银行账户信息,法人身份证)

2.2、小程序关联商户号

微信公众平台地址👉👉:微信公众平台

已注册的小程序,登录微信公众平台,在左侧功能项找到微信支付,选择商户号管理,将小程序与商户号关联

如果已经关联了,就会显示已关联的商户号信息👇

三、微信支付流程

3.1、微信官方支付流程图

官网地址👉👉:pay.weixin.qq.com/wiki/doc/api/wxa/wxa_api.php?chapter=7_4&index=3

说明:

1、小程序内调用登录接口,获取到用户的openid,api参见公共api【小程序登录API

2、商户server调用支付统一下单,api参见公共api【统一下单API

3、商户server调用再次签名,api参见公共api【再次签名

4、商户server接收支付通知,api参见公共api【支付结果通知API

5、商户server查询支付结果,如未收到支付通知的情况,商户后台系统可调用【查询订单API】 (查单实现可参考:支付回调和查单实现指引

6、商户小程序内使用小程序调起支付API(wx.requestPayment)发起微信支付,详见小程序API文档

四、具体实现

4.1、获取OpenID

OpenID是用户唯一标识,通过临时登录凭证 code 换取的(登录凭证code,5分钟有效期),通过code向后端接口获取OpenID

<script>
  import {
  	getBindSocial,wxLogin_api
  } from "@/action/action";
  import {
    MINITYPE
	} from '@/constants/hostConfig';
export default{
	data() {
		return {
			phone: '', 
		}
	},
	methods: {
		wexin_login(){
			wx.login({
				success: (res) =>{
					console.log(res.code,'code')
					let userCode = res.code
					//将code传递给服务器
					getBindSocial({
						jscode: userCode,
          				type: MINITYPE,
					}).then(res =>{
						console.log('res',res);
                        //将code传递给接口会返回openid,unionid,phone
					})
				}
			})
		}
	},
}
</script>

备注:

getBindSocial()是封装的api接口,将code传递给接口之后,会得到openid,unionid,phone等。如下图👇

4.2、调用预支付接口获取支付核心数据

将获取的openid与接口需要携带的参数,调用接口,获取支付核心数据

备注:

wx_advance_pay()是封装的api接口, openid在登录的时候直接本地存储在loginInfo对象中,参数wxOpenId是从本地存储的loginInfo对象中获取的openid,同时也包含接口需要携带的其他参数;以下为接口返回的支付核心数据,如下图👇

4.3、调用微信官方支付接口 wx.requestPayment(),弹出支付界面

微信支付接口地址👉👉:wx.requestPayment(Object object) | 微信开放文档

将 wx_advance_pay()接口返回的数据对象,作为wx.requestPayment()参数值,得到支付结果👇

调用后,会弹出付款界面,微信开发者工具需要扫码支付

如果是手机支付会弹出微信付款界面,支付完成后会收到账单信息

4.4、微信支付流程总结

1、获取OpenID:通过wx.login()获得code,将code传给接口获得OpenID

2、获取预支付核心数据:调用预支付接口,将OpenID与接口需要携带的其他参数,得到预支付核心数据;

数据包含:【时间戳--timeStamp,随机字符串--nonceStr,预支付id--package,签名算法--signType,签名--paySign】

3、发起微信支付:调用wx.requestPayment(),传递上一步获取的5个预支付核心数据,得到支付结果

最后,👏👏 😀😀😀 👍👍     

  • 36
    点赞
  • 105
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值