小程序支付流程

275 阅读2分钟

1. 注册微信支付商户号(由上级或法人注册)

2. 注册小程序账号(由上级或者领导注册)

3. 登录商户号绑定小程序

4. 后端工程师书写接口

  • 后端书写接口,根据前端传入数据,返回微信支付核心数据,后端需要什么数据,前端调用此接口时,传给后端即可

image.png

  • 返回核心数据如下
"appId""xxxx",

"nonceStr""xxxx",

"packageValue""prepay_id=xxxxx",

"paySign""xxxxxx",

"signType""MD5",

"timeStamp""xxxxxx"

5. 前端工程师调用接口

5.1. 获取openid(当前用户真实id)

  • 最重要的参数就是用户的openId,此id无法直接获取.需要先调用login()拿到code,再用code去微信服务器换openid

5.2 调用公司后端接口,获取支付核心数据

  • 此接口必须返回以下6个核心数据,都是由后台计算生成

5.3 调用微信官方支付接口,弹出支付界面

uni.login({
    success(res) {
    //res.code是一个有效期为5分钟的key  可以用此code去换取openid等核心用户隐私信息
    console.log(res.code)
						
    //调用官方接口,使用code换取openid
    uni.request({
	url: 'https://api.weixin.qq.com/sns/jscode2session',
	data: {
            appid: 'wx4f27fd51b9a7bfda', // 小程序appid
            secret: '1a9bfee5a8155f0020c5857cd9038674', // 密钥
            js_code: res.code, // 刚刚获取的code
            grant_type: 'authorization_code' //固定值
         },
        success(obj) {
            console.log(obj.data.openid, '获取到用户的真实id')

            //调用公司后端自己提供的接口
            uni.request({
		url: 'http://api.100qhl.com:5024/v1/order/createOrder',
		method: 'POST',
		data:{
                    openId: obj.data.openid, //用户真实id
                    name: '电饭煲', //商品名称
                    money: _this.money, //扣多少钱
                    code: _this.id++, //订单编号
                    payType: 1, 	//小程序支付1
                    clientIp: '127.0.0.2' //随便填一个ip
		},
		success(res) {
                // 此接口必须返回以下6个核心数据,都是由后台计算生成。
                    console.log(res, '服务器返回的数据')
                    // appId: "wx4f27fd51b9a7bfda"
                    // nonceStr: "VmTJMObhbihujKoW"
                    // packageValue: "prepay_id=wx11161138405677ddd5099b941e9ed00000"
                    // paySign: "3298C274FE73C27F17EBFD4C2320564B"
                    // signType: "MD5"
                    // timeStamp: "1665475333"
										
                    // 2. 调用官方微信支付接口,传递给官方接口
                    uni.requestPayment({
			timeStamp: res.data.data.timeStamp,
			paySign:res.data.data.paySign,
                        package: res.data.data.packageValue,
			signType: res.data.data.signType,
			nonceStr: res.data.data.nonceStr,
			success() {
                            console.log('支付成功')
			}
                     })
										
                 }
            })
								
           }
        })
    }
})