當(dāng)前位置:首頁 > IT技術(shù) > 微信平臺 > 正文

10行代碼實(shí)現(xiàn)微信小程序支付功能,使用小程序云開發(fā)實(shí)現(xiàn)小程序支付功能(含源碼)
2021-08-08 14:04:21

前面給大家講過一個(gè)借助小程序云開發(fā)實(shí)現(xiàn)微信支付的,但是那個(gè)操作稍微有點(diǎn)繁瑣,并且還會經(jīng)常出現(xiàn)問題,今天就給大家講一個(gè)簡單的,并且借助官方支付api實(shí)現(xiàn)小程序支付功能。

老規(guī)矩,先看本節(jié)效果圖
10行代碼實(shí)現(xiàn)微信小程序支付功能,使用小程序云開發(fā)實(shí)現(xiàn)小程序支付功能(含源碼)_云開發(fā)
我們實(shí)現(xiàn)這個(gè)支付功能完全是借助小程序云開發(fā)實(shí)現(xiàn)的,不用搭建自己的服務(wù)器,不用買域名,不用備案域名,不用支持https。只需要一個(gè)簡單的云函數(shù),就可以輕松的實(shí)現(xiàn)微信小程序支付功能。
核心代碼就下面這些
10行代碼實(shí)現(xiàn)微信小程序支付功能,使用小程序云開發(fā)實(shí)現(xiàn)小程序支付功能(含源碼)_云開發(fā)_02

一,創(chuàng)建一個(gè)云開發(fā)小程序

關(guān)于如何創(chuàng)建云開發(fā)小程序,這里我就不再做具體講解。不知道怎么創(chuàng)建云開發(fā)小程序的同學(xué),可以去翻看我之前的文章

創(chuàng)建云開發(fā)小程序有幾點(diǎn)注意的

1,一定不要忘記在app.js里初始化云開發(fā)環(huán)境。
10行代碼實(shí)現(xiàn)微信小程序支付功能,使用小程序云開發(fā)實(shí)現(xiàn)小程序支付功能(含源碼)_云開發(fā)_03
2,創(chuàng)建完云函數(shù)后,一定要記得上傳

二, 創(chuàng)建支付的云函數(shù)

1,創(chuàng)建云函數(shù)pay
10行代碼實(shí)現(xiàn)微信小程序支付功能,使用小程序云開發(fā)實(shí)現(xiàn)小程序支付功能(含源碼)_微信支付_04

10行代碼實(shí)現(xiàn)微信小程序支付功能,使用小程序云開發(fā)實(shí)現(xiàn)小程序支付功能(含源碼)_微信支付_05

三,引入三方依賴tenpay

我們這里引入三方依賴的目的,是創(chuàng)建我們支付時(shí)需要的一些參數(shù)。我們安裝依賴是使用里npm 而npm必須安裝node,關(guān)于如何安裝node,我這里不做講解,百度一下,網(wǎng)上一大堆。

1,首先右鍵pay,然后選擇在終端中打開

10行代碼實(shí)現(xiàn)微信小程序支付功能,使用小程序云開發(fā)實(shí)現(xiàn)小程序支付功能(含源碼)_微信小程序支付_06

2,我們使用npm來安裝這個(gè)依賴。

在命令行里執(zhí)行 npm i tenpay
10行代碼實(shí)現(xiàn)微信小程序支付功能,使用小程序云開發(fā)實(shí)現(xiàn)小程序支付功能(含源碼)_云開發(fā)_07
10行代碼實(shí)現(xiàn)微信小程序支付功能,使用小程序云開發(fā)實(shí)現(xiàn)小程序支付功能(含源碼)_云開發(fā)支付_08
10行代碼實(shí)現(xiàn)微信小程序支付功能,使用小程序云開發(fā)實(shí)現(xiàn)小程序支付功能(含源碼)_微信小程序支付_09
安裝完成后,我們的pay云函數(shù)會多出一個(gè)package.json 文件
10行代碼實(shí)現(xiàn)微信小程序支付功能,使用小程序云開發(fā)實(shí)現(xiàn)小程序支付功能(含源碼)_小程序支付_10
到這里我們的tenpay依賴就安裝好了。

四,編寫云函數(shù)pay

10行代碼實(shí)現(xiàn)微信小程序支付功能,使用小程序云開發(fā)實(shí)現(xiàn)小程序支付功能(含源碼)_云開發(fā)支付_11
完整代碼如下

//云開發(fā)實(shí)現(xiàn)支付
const cloud = require('wx-server-sdk')
cloud.init()

//1,引入支付的三方依賴
const tenpay = require('tenpay');
//2,配置支付信息
const config = {
  appid: '你的小程序appid', 
  mchid: '你的微信商戶號',
  partnerKey: '微信支付安全密鑰', 
  notify_url: '支付回調(diào)網(wǎng)址,這里可以先隨意填一個(gè)網(wǎng)址', 
  spbill_create_ip: '127.0.0.1' //這里填這個(gè)就可以
};

exports.main = async(event, context) => {
  const wxContext = cloud.getWXContext()
  let {
    orderid,
    money
  } = event;
  //3,初始化支付
  const api = tenpay.init(config);

  let result = await api.getPayParams({
    out_trade_no: orderid,
    body: '商品簡單描述',
    total_fee: money, //訂單金額(分),
    openid: wxContext.OPENID //付款用戶的openid
  });
  return result;
}

一定要注意把a(bǔ)ppid,mchid,partnerKey換成你自己的。

到這里我們獲取小程序支付所需參數(shù)的云函數(shù)代碼就編寫完成了。
不要忘記上傳這個(gè)云函數(shù)。
10行代碼實(shí)現(xiàn)微信小程序支付功能,使用小程序云開發(fā)實(shí)現(xiàn)小程序支付功能(含源碼)_微信支付_12
出現(xiàn)下圖就代表上傳成功
10行代碼實(shí)現(xiàn)微信小程序支付功能,使用小程序云開發(fā)實(shí)現(xiàn)小程序支付功能(含源碼)_微信支付_13

五,寫一個(gè)簡單的頁面,用來提交訂單,調(diào)用pay云函數(shù)。

10行代碼實(shí)現(xiàn)微信小程序支付功能,使用小程序云開發(fā)實(shí)現(xiàn)小程序支付功能(含源碼)_云開發(fā)支付_14
這個(gè)頁面很簡單,
1,自己隨便編寫一個(gè)訂單號(這個(gè)訂單號要大于6位)
2,自己隨便填寫一個(gè)訂單價(jià)(單位是分)
3,點(diǎn)擊按鈕,調(diào)用pay云函數(shù)。獲取支付所需參數(shù)。

下圖是官方支付api所需要的一些必須參數(shù)。
10行代碼實(shí)現(xiàn)微信小程序支付功能,使用小程序云開發(fā)實(shí)現(xiàn)小程序支付功能(含源碼)_小程序支付_15
下圖是我們調(diào)用pay云函數(shù)獲取的參數(shù),和上圖所需要的是不是一樣。
10行代碼實(shí)現(xiàn)微信小程序支付功能,使用小程序云開發(fā)實(shí)現(xiàn)小程序支付功能(含源碼)_微信支付_16

六,調(diào)用wx.requestPayment實(shí)現(xiàn)支付

下圖是官方的示例代碼
10行代碼實(shí)現(xiàn)微信小程序支付功能,使用小程序云開發(fā)實(shí)現(xiàn)小程序支付功能(含源碼)_微信小程序支付_17
這里不在做具體講解了,把完整代碼給大家貼出來

// pages/pay/pay.js
Page({
  //提交訂單
  formSubmit: function(e) {
    let that = this;
    let formData = e.detail.value
    console.log('form發(fā)生了submit事件,攜帶數(shù)據(jù)為:', formData)
    wx.cloud.callFunction({
      name: "pay",
      data: {
        orderid: "" + formData.orderid,
        money: formData.money
      },
      success(res) {
        console.log("提交成功", res.result)
        that.pay(res.result)
      },
      fail(res) {
        console.log("提交失敗", res)
      }
    })
  },

  //實(shí)現(xiàn)小程序支付
  pay(payData) {
    //官方標(biāo)準(zhǔn)的支付方法
    wx.requestPayment({
      timeStamp: payData.timeStamp,
      nonceStr: payData.nonceStr,
      package: payData.package, //統(tǒng)一下單接口返回的 prepay_id 格式如:prepay_id=***
      signType: 'MD5',
      paySign: payData.paySign, //簽名
      success(res) {
        console.log("支付成功", res)
      },
      fail(res) {
        console.log("支付失敗", res)
      },
      complete(res) {
        console.log("支付完成", res)
      }
    })
  }
})

到這里,云開發(fā)實(shí)現(xiàn)小程序支付的功能就完整實(shí)現(xiàn)了。

實(shí)現(xiàn)效果

1,調(diào)起支付鍵盤

10行代碼實(shí)現(xiàn)微信小程序支付功能,使用小程序云開發(fā)實(shí)現(xiàn)小程序支付功能(含源碼)_微信支付_18

2,支付完成

10行代碼實(shí)現(xiàn)微信小程序支付功能,使用小程序云開發(fā)實(shí)現(xiàn)小程序支付功能(含源碼)_微信支付_19

3,log日志,可以看出不同支付狀態(tài)的回調(diào)

10行代碼實(shí)現(xiàn)微信小程序支付功能,使用小程序云開發(fā)實(shí)現(xiàn)小程序支付功能(含源碼)_云開發(fā)_20
上圖是支付成功的回調(diào),我們可以在支付成功回調(diào)時(shí),改變訂單支付狀態(tài)。

下圖是支付失敗的回調(diào),
10行代碼實(shí)現(xiàn)微信小程序支付功能,使用小程序云開發(fā)實(shí)現(xiàn)小程序支付功能(含源碼)_微信支付_21

下圖是支付完成的狀態(tài)。
10行代碼實(shí)現(xiàn)微信小程序支付功能,使用小程序云開發(fā)實(shí)現(xiàn)小程序支付功能(含源碼)_云開發(fā)_22

到這里我們就輕松的實(shí)現(xiàn)了微信小程序的支付功能了。是不是很簡單啊。
如果感覺圖文不是很好理解,我后面會錄制視頻講解。

?

?

本文摘自 :https://blog.51cto.com/u

開通會員,享受整站包年服務(wù)立即開通 >