微信小程序为电商类小程序,提供了很是完善、优秀、安全的支付功能。在小程序内可调用微信的API完成支付功能,方便、快捷。小程序开发者在开发小程序时,支付流程是必然要接触到,今天胡哥就小程序支付的全流程为你们一一细说,让小伙伴能快速得掌握小程序支付能力,避免踩坑!javascript
某用户小明在某电商小程序上购买一块肥皂,从浏览、下单到支付经历了什么样的过程呢?css
进行微信支付,在小程序端咱们主要作三件事:前端
注:服务端调用统一下单API、签名算法再也不本次分享讨论范围内,请期待胡哥的另一次分享。java
使用**wx.login
**获取临时登陆凭证code,发送到后端获取openId算法
wx.login({
success (res) {
if (res.code) {
// 发起请求,换取openId
wx.request({
url: '',
data: {
code: res.code
}
})
}
}
})
复制代码
将**openId
**以及相应须要的商品信息发送到后端,换取服务端进行的签名等信息小程序
wx.request({
url: '',
data: {
openId: '',
num: 1,
id: '111'
}
})
复制代码
接收返回的信息(必需要包含发起微信支付**wx.requestPayment的参数
**),发起微信支付后端
wx.requestPayment({
// 时间戳
timeStamp: '',
// 随机字符串
nonceStr: '',
// 统一下单接口返回的 prepay_id 参数值
package: '',
// 签名类型
signType: '',
// 签名
paySign: '',
// 调用成功回调
success () {},
// 失败回调
fail () {},
// 接口调用结束回调
complete () {}
})
复制代码
注意:以上信息中
timeStamp
、nonceStr
、prepay_id
、signType
、paySign
各参数均建议必须都由服务端返回(这样会尽最大可能性保证签名数据一致性),小程序端不作任何处理微信小程序
import Taro, { Component } from '@tarojs/taro'
import { View, Text, Button } from '@tarojs/components'
import './index.scss'
export default class Index extends Component {
config = {
navigationBarTitleText: '首页'
}
componentWillMount () { }
async componentDidMount () {
}
componentWillUnmount () { }
componentDidShow () { }
componentDidHide () { }
/** * sendOrderInfo() * @description 提交订单信息,获取支付凭证,唤起支付 */
async sendOrderInfo () {
// 获取临时登陆凭证code
let codeData = await Taro.login()
// 换取openId
let openId = ''
if (codeData.code) {
let res = await Taro.request({
// 定义的后端换取openId的接口
url: 'https://www.justbecoder.com/getLogin',
data: {
code: codeData.code
}
})
if (res && res.code === 0) {
openId = res.openId
}
}
// 发送openId以及对应的商品信息
let data = await Taro.request({
url: 'https://www.justbecoder.com/createdOrder',
data: {
openId,
// 实际状况的商品数量
num: 1,
// 实际状况的商品Id
id: 111,
}
})
// code === 0 表示提交订单成功,返回须要的签名信息等
if (data && data.code === 0) {
let {
timeStamp,
nonceStr,
prepay_id,
signType,
paySign
} = data.payInfo
// 唤起支付,按小程序要求格式发送参数
let payData = await Taro.requestPayment({
timeStamp,
nonceStr,
package: 'prepay_id=' + prepay_id,
signType,
paySign
})
if (payData && payData.errMsg === 'requestPayment:ok') {
Taro.showModal({
title: '操做提示',
content: '支付成功',
showCancel: false,
confirmText: '肯定'
})
} else {
Taro.showModal({
title: '操做提示',
content: '支付失败,请从新尝试',
showCancel: false,
confirmText: '肯定'
})
}
}
}
render () {
return (
<View className='index'> <Button onClick={this.sendOrderInfo}>当即下单</Button> </View>
)
}
}
复制代码
在实际项目操做中,你们把接口换成本身的可用接口便可。安全
以上就是胡哥今天给你们分享的内容,喜欢的小伙伴记得**收藏
、转发
、点击右下角按钮在看
**,推荐给更多小伙伴呦,欢迎多多留言交流...服务器
胡哥有话说,一个有技术,有情怀的胡哥!京东开放平台首席前端攻城狮。与你一块儿聊聊大前端,分享前端系统架构,框架实现原理,最新最高效的技术实践!
长按扫码关注,更帅更漂亮呦!关注胡哥有话说公众号,可与胡哥继续深刻交流呦!