微信小程序下订单支付代码实现

微信小程序下订单支付代码实现目录支付流程具体实现一、前端调用登录获取code二、服务端接收code,服务端调用微信api获取openId三、前端点击去支付时四、服务端请求微信统一下单接口五、前端获取到prePay_id调起支付六、注意支付流程点击去结算时,,前端判断是否登录【未登录跳转到登录页】,登录发送code到服务端,服务端使用code发送请求去获取openId;并返回userId/openId存储在storage;点击去支付时,前端发送请求【订单详细,openId】,服务器用openId去统一下单,下单成功后,获

大家好,又见面了,我是你们的朋友全栈君。

支付流程

  • 点击去结算时,,前端判断是否登录【未登录跳转到登录页】,登录发送code到服务端,服务端使用code发送请求去获取openId;并返回userId/openId存储在storage;

  • 点击去支付时,前端发送请求【订单详细,openId】,服务器用openId去统一下单,下单成功后,获取prePay_id,返回前端

  • 前端拿到 prePay_id 调起支付

在这里插入图片描述

具体实现

一、前端调用登录获取code

wx.login({ 
   
    success: function(res){ 
   
        if(res.code){ 
   
            // 发起请求
            wx.request({ 
   
                url: 'http://test.com/login',
                data: { 
   
                    code: res.code
                },
                success(result) { 
   
                    console.log(result.openId)
                    wx.setStorage('openId', result.openId)
                }
            })
        } else { 
   
            // 登录失败
        }
    }
})

二、服务端接收code,服务端调用微信api获取openId

文档 – auth.code2Session

GET https://api.weixin.qq.com/sns/jscode2session?appid=APPID&secret=SECRET&js_code=JSCODE&grant_type=authorization_code

三、前端点击去支付时

前端点击去支付时,提交【openId,订单明细】到服务端进行下单

// 提交订单
commitOrder() { 

let that = this
if (!this.isLogin) { 

this.toLogin()
} else if (!this.currentAddress.addressId) { 

wx.showToast({ 

title: '请先选择地址',
icon: 'none',
duration: 1500,
success() { 

// 选择地址
}
})
} else if(this.isLogin && this.currentAddress.addressId) 
let details = [];
(this.shopCartList).map(g => { 

details.push({ 

goodsId: g.goodsId,
goodsNum: g.cartGoodNum,
goodsPrice: g.goodsPrice
})
})
let openId = wx.getStorageSync('openId')
Api.creatOrder({ 

query: { 

addressId: this.currentAddress.addressId,
openId: openId,
appId: '',
details: details,
goodsMoney: this.totalMoney,
orderNote: this.orderNote
}
}).then(res => { 

if (res.data.code == '0') { 

this.toPay({ 

timeStamp: res.data.data.timeStamp.toString(),
nonceStr: res.data.data.nonceStr,
package: res.data.data.package,
signType: res.data.data.signType,
paySign: res.data.data.sign,
orderId: res.data.data.orderId,
})
}
})
} else { 
}
},

四、服务端请求微信统一下单接口

服务端请求微信统一下单接口,下单成功获取到prePay_id值,返回前端

文档-https://pay.weixin.qq.com/wiki/doc/api/wxa/wxa_api.php?chapter=9_1

商户在小程序中先调用该接口(https://api.mch.weixin.qq.com/pay/unifiedorder)在微信支付服务后台生成预支付交易单,返回正确的预支付交易后,前端调起支付。

五、前端获取到prePay_id 调起支付

pay: function (param) { 

wx.requestPayment({ 

timeStamp: param.timeStamp,
nonceStr: param.nonceStr,
package: param.package,
signType: param.signType,
paySign: param.paySign,
success: function (res) { 

// success
console.log(res)
wx.navigateBack({ 

delta: 1, // 回退前 delta(默认为1) 页面
success: function (res) { 

console.log(res)
},
fail: function () { 

// fail
},
complete: function () { 

// complete
// 不论成功失败都跳转到订单页面,后台去查询支付结果
wx.switchTab({ 

url: 'order',
success: function (res) { 

}
})
}
})
}
})
}

六、注意

不能通过 wx.requestPayment 的success回调判断支付成功
支付完不点完成不操作不进成功

文档 – 查询订单

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/135073.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • java中的Cipher类

    java中的Cipher类随时随地阅读更多技术实战干货,获取项目源码、学习资料,请关注源代码社区公众号(ydmsq666)该类位于javax.crypto包下,声明为publicclassCipherextendsObject此类为加密和解密提供密码功能。它构成了JavaCryptographicExtension…

  • 游戏引擎架构,3d游戏引擎设计、Unreal引擎技术等五本PDF推荐

    游戏引擎架构,3d游戏引擎设计、Unreal引擎技术等五本PDF推荐

  • 电阻参数_关于电阻的相关参数

    实际应用时,通常采用平均电阻温度系数,定义式:TCR(平均)=(R2-R1)/R1(T2-T1)有负温度系数、正温度系数及在某一特定温度下电阻只会发生突变的临界温度系数。紫铜的电阻温度系数为1/234.5℃。不同类型电阻温度稳定性从优到次,依次为:金属箔、线绕、金属膜、金属氧化膜、碳膜、有机实芯。1。镀金并不是为了减小电阻,而是因为金的化学性质非常稳定,不容易氧化,接头上镀金是为了防止接触不良(不…

  • PHP filemtime() 函数

    PHP filemtime() 函数

  • 密码学:RSA加密算法详解

    密码学:RSA加密算法详解RSA算法一直是最广为使用的”非对称加密算法”。本文旨在说明RSA加密算法的原理及实现,而其相关的数学部分的证明则不是本文内容。

  • Spring Cloud核心组件详解

    Spring Cloud核心组件详解一、SpringCloud核心组件:Eureka(1)NetflixEureka1)、Eureka服务端:也称服务注册中心,同其他服务注册中心一样,支持高可用配置。如果Eureka以集群模式部署,当集群中有分片出现故障时,那么Eureka就转入自我保护模式。它允许在分片故障期间继续提供服务的发现和注册,当故障分片恢复运行时,集群中其他分片会把它们的状态再次同步回来2)、Eureka客户端…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号