微信小程序爲電商類小程序,提供了很是完善、優秀、安全的支付功能。在小程序內可調用微信的API完成支付功能,方便、快捷。小程序開發者在開發小程序時,支付流程是必然要接觸到,今天胡哥就小程序支付的全流程爲你們一一細說,讓小夥伴能快速得掌握小程序支付能力,避免踩坑!javascript
某用戶小明在某電商小程序上購買一塊肥皂,從瀏覽、下單到支付經歷了什麼樣的過程呢?css
進行微信支付,在小程序端咱們主要作三件事:前端
注:服務端調用統一下單API、簽名算法再也不本次分享討論範圍內,請期待胡哥的另一次分享。
使用wx.login
獲取臨時登陸憑證code,發送到後端獲取openIdjava
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.requrest({ 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> ) } }
在實際項目操做中,你們把接口換成本身的可用接口便可。後端
以上就是胡哥今天給你們分享的內容,喜歡的小夥伴記得收藏
、轉發
、點擊右下角按鈕在看
,推薦給更多小夥伴呦,歡迎多多留言交流...微信小程序
胡哥有話說,一個有技術,有情懷的胡哥!京東開放平臺首席前端攻城獅。與你一塊兒聊聊大前端,分享前端系統架構,框架實現原理,最新最高效的技術實踐!
長按掃碼關注,更帥更漂亮呦!關注胡哥有話說公衆號,可與胡哥繼續深刻交流呦!安全