日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【微信小程序】微信支付

發布時間:2023/12/20 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【微信小程序】微信支付 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

簡介

微信的支付方式有以下幾種,不同的支付方式適用于不同的支付場景,而本文講的就是 小程序支付 方式:

說到支付功能就要涉及到金錢交易,必定是有比較嚴格的規范及流程,如要求小程序必須具備企業性質,必須擁有微信支付商戶平臺的賬號;

PS:申請微信支付商戶平臺需要一個微信小程序或公眾號等,建議按照以下流程進行操作

準備工作

  • 申請微信小程序賬號
    · 申請成功可拿到 AppID(小程序 id)和 AppSecret(小程序密鑰);
    · 申請類型為企業性質,否則無法接入微信支付;
  • 微信小程序認證
    通過認證的小程序才能接入微信支付和綁定商戶平臺;
  • 申請商戶平臺賬號
    · 需要第一步申請的 AppID;
    · 申請成功可拿到 MchID(商戶 id)和 MchKey(商戶密鑰);
  • 微信小程序關聯商戶號
    微信和商戶都認證成功后,在微信后臺微信支付菜單中進行關聯;
  • 接入微信支付
    在微信后臺微信支付菜單中進行接入;
  • 小程序支付流程

    簡要支付流程如下:

  • 用戶發起支付請求;
  • 后端調用統一下單接口得到 prepay_id;
  • 把支付所需參數返回前端;
  • 前端調用支付接口進行支付操作;
  • 支付結果通知;
  • 前端根據不同的支付結果給用戶不同的提示;
  • PS:難點在第 2、3、5 步,一定要仔細查看相關接口文檔,否則容易出錯,接下來我們按照以上 6 個步驟詳細講解在微信小程序中的支付流程

    支付前的操作

    因為嚴格意義上來說這不屬于支付流程中的步驟,但支付過程中需要用到用戶唯一標識 openid,所以建議在用戶進入小程序時就進行這一步的操作:

  • 調用 wx.login() 接口獲取 code,并把 code 傳到服務器;
  • 后端服務器拿到 code 后調用 code2Session 接口獲取 openid 和 session_key;
  • 建議把openid存入數據庫,方便隨時獲取,下面的步驟也會用到

  • 后端服務器保好 appid, secret, mch_id, mch_key(這些數據分別在小程序后臺和商戶平臺中獲得,我是把它們做成 commonjs 模塊并保存在 config/wx.js 文件中以方便調用);
  • PS:開發者需要自行維護用戶登錄狀態(用戶登錄狀態的維護本文不做展開,請自行查閱相關資料)

    小程序端:用戶向商戶服務器發起支付請求

    這步沒什么好說的,當用戶點擊支付按鈕時,給我們自己的后端接口發起一個請求,攜帶必要的參數(如:body, total_fee 等),接口地址需要自行編寫,如我的接口地址為 https://api/prepay

    /*** 向后端發送打賞請求*/gotoPay: function (event) {// console.log(event.currentTarget.dataset.index);const totalFee = this.data.nums[event.currentTarget.dataset.index];this.setData({totalFee: totalFee,toSelectNumShow: false,paidShow: true});wx.request({url: 'https://api/prepay',method: 'post',data: {body: '打賞', // 商品描述total_fee: totalFee // 總金額,單位為元},header: {'content-type': 'application/json'},success(res) {console.log(res);if (res.data.code === 1) {try {console.log(res.data.data);// 得到接口返回的數據,向微信發起支付const result = wx.requestPayment({// 5個必傳參數timeStamp: res.data.data.timeStamp,nonceStr: res.data.data.nonceStr,package: res.data.data.packages,signType: res.data.data.signType,paySign: res.data.data.paySign});console.log('支付結果:', result);} catch (err) {console.log(err);wx.showToast({title: '支付失敗'});}} else {console.log('支付請求失敗!');console.log(res);}},fail(msg) {console.log(msg);}});},

    PS:可能會有小伙伴產生疑惑,為什么不直接通過 wx.requestPayment()
    在小程序端發起請求而要先請求商戶自己的服務器呢?原因很簡單,安全性問題,wx.requestPayment() 需要 2 個重要參數 paySign 和 package,需要 appid, secret, openid, mch_key 等私密數據,這些私密的數據不應該在前端暴露出來,而是放在自己的服務器中更安全,所以需要向自己的服務器發起這個請求拿到這些參數,下一步才能真正發起支付。


    參考文獻

    微信支付之小程序支付
    微信支付之H5支付

    總結

    以上是生活随笔為你收集整理的【微信小程序】微信支付的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。