支付大致流程
- 通过小程序的 wx.login 获取临时登陆凭证
code - 通过临时凭证
code依据 auth.code2Session 接口完成登录流程获取openid - 调用商户后台「预支付接口」,上传需要的参数(
openid,商品描述,价格等) - 商户后台通过微信的 统一下单 ,获取
prepay_id(预支付交易标识) - 对微信统一下单接口返回的参数进行二次签名后,将微信支付
API所需要用到的参数返回给小程序端 - 小程序获取到参数,通过 wx.requestPayment 方法调起微信支付
- 用户操作支付后,微信后台返回给前端支付的结果,同时也会向后台返回支付结果,后台通过这个支付结果来更新订单的状态
流程描述
准备工作
- 小程序
AppId - 小程序密钥
AppSecret - 与小程序一对一绑定的商户号
MchId - 商户号密钥
key
小程序 AppId 和 AppSecret
小程序 AppId 与密钥 AppSecret 在小程序管理后台的「设置」>「开发设置」>「开发者ID」中获取
商户号 MchId 和密钥 key
- 商户号
MchId可以在微信商户平台的「账户中心」>「账户设置」>「商户信息」>「账户信息」中获取 - 商户号密钥需要在「API安全」>「API密钥中」进行设置,设置
API密钥需要由商户平台账户的超级管理员来操作,密钥要求为长度为 32 位的字符串(值允许包含数字,大小写字母),设置前一定要保存好自己设置的API密钥。设置成功之后,商户平台不提供密钥查询,只能够修改密钥。
获取 openId
- 通过小程序的 wx.login 获取临时登陆凭证
code - 通过临时凭证
code依据 auth.code2Session 接口完成登录流程获取openid
示例代码:
//使用 login 接口获取临时登陆凭证 code
wx.login({
success: function(res) {
console.log(res.code);
// 通过 jscode 获取 openid
wx.request({
url: 'https://api.weixin.qq.com/sns/jscode2session?' +
'appid=「小程序 AppId」'+
'&secret=「小程序密钥 AppSecret」'+
'&js_code=' + res.code +
'&grant_type=authorization_code',
success: function(res){
console.log(res.data.openid);
}
})
}
})
预支付下单、微信支付
商户:微信商户/银联商户 或者其他商户
商户所需如下等参数信息:
- 小程序
openid - 交易描述
body - 交易支付的金额
total_fee(无符号整型,单位「分」)
以微信商户为例:
- 后端通过对微信 统一下单 封装预下单接口,获取小程序 支付下单 接口参数等信息
- 前端调用 预下单接口 获取信息【订单号、微信支付参数等】,再调用微信支付
APIwx.requestPayment 唤起微信支付 - 微信支付回调函数内跳转至支付结果页面【携带订单单号:
trandNo】 - 结果页面通过订单单号调用接口获取订单支付状态等信息
PS:
- 微信支付操作后,会执行
wx.requestPayment对应的回调函数;同时也会向后台返回支付结果用于更新订单的状态 - 出于 安全性 问题,微信支付
API所需要的参数等属于私密信息,显然放于后端服务器是更加安全的