欧美午夜精品久久久久免费视/欧美黄色精品/国产一级A片在线播出/A片免费视频在线观看

開發(fā)微信支付功能一定要架設(shè)服務(wù)器嗎?2019年最后一天
2024-01-06 14:01:10 歡樂點(diǎn)

一、開發(fā)微信支付功能一定要架設(shè)服務(wù)器嗎?

2019年的最后三天,舍得哥哥沉溺在探求的激動(dòng)中,驗(yàn)證了微信小程序云開發(fā)也能甜美實(shí)現(xiàn)微信支付!小程序的目標(biāo)是構(gòu)建一個(gè)“”環(huán)境,不用自行架設(shè)服務(wù)器,而完全通過小程序、云函數(shù)、云儲(chǔ)存、云數(shù)據(jù)庫來實(shí)現(xiàn)整個(gè)應(yīng)用功能。理念很有吸引力,就是那句話:一個(gè)人也要像一支隊(duì)伍!

然而,云開發(fā)剛才推出一年多,好多地方不夠完美,方向是“去服務(wù)器”,但好多地方離開服務(wù)器就寸步難行。例如,要想在小程序上面實(shí)現(xiàn)微信支付功能,連官方文檔都說開發(fā)者必須完善自己的服務(wù)器。

二、云函數(shù)替代商戶系統(tǒng)實(shí)現(xiàn)微信支付的可行性

舍得哥哥正在開發(fā)微信租賃店,想既便捷顧客使用,又便捷對設(shè)備進(jìn)行管理,須要微信支付功能。但又不想為了一個(gè)支付功能跑去租服務(wù)器哪些的,后期運(yùn)維也費(fèi)時(shí)吃力,于是研究探求了一番微信下單系統(tǒng),總算取得成功!不用架設(shè)服務(wù)器,而僅僅借助一個(gè)node.js云函數(shù),就可以實(shí)現(xiàn)微信支付的支付、退款、查詢等全部功能。舍得爺爺把關(guān)鍵的策略和步驟記錄出來,供自己未來查看,也分享給男子伴們,少走彎路。

三、微信小程序?qū)崿F(xiàn)微信支付的原理

先說微信小程序上面要實(shí)現(xiàn)微信支付功能,開發(fā)者就必須同時(shí)具備2個(gè)前提條件:1、必須先開通微信支付平臺(tái)帳戶,目前只有企業(yè)法人經(jīng)過認(rèn)證能夠開通;2、小程序要跟微信支付平臺(tái)帳戶綁定才行。具體步驟怎樣,這兒不累述,官方文檔寫得很清楚。

微信支付業(yè)務(wù)是網(wǎng)銀公司的,這是一家人民建行批準(zhǔn)的三方支付公司;而微信是騰訊公司的。兩個(gè)業(yè)務(wù)主體不一樣。微信支付雖然發(fā)跡于微信,但微信支付是要讓用戶無論通過web、app、微信公眾號、還是小程序,都能獲得相同的支付體驗(yàn),還要有極高的安全性,符合監(jiān)管要求,因而業(yè)務(wù)流程比較復(fù)雜。

這兒是小程序微信支付的開發(fā)文檔:。微信支付官方提供的小程序?qū)崿F(xiàn)微信支付的流程示意圖如下,這只是支付功能的微信下單系統(tǒng),發(fā)生在顧客點(diǎn)擊支付到提示支付成功期間,各角色應(yīng)當(dāng)做的全部工作??梢钥匆?,支付過程中,微信小程序與微信支付后臺(tái)之間,有一個(gè)黑色的商戶系統(tǒng),像一道屏障把二者隔開!這么,為何微信小程序不是直接與微信后臺(tái)進(jìn)行通訊,而非要弄個(gè)“商戶系統(tǒng)”在中間進(jìn)行“阻隔”,何況還要讓開發(fā)者投入財(cái)力和精力為這個(gè)“阻隔”買單呢?

image

這就叫“跑得了僧人,跑不了廟”!須要微信支付功能的,就要申請微信支付平臺(tái)帳戶,就要構(gòu)建服務(wù)器,就要有固定IP地址(甚至必須是經(jīng)過備案的網(wǎng)址),這是廟;而瀏覽器、app那些是僧人!三方支付的角色和權(quán)責(zé)界定得很清楚,這是人民建行監(jiān)管部門對三方支付平臺(tái)的安全性要求。

回到微信小程序,實(shí)際上十分非常,它不是他人家的應(yīng)用,而是處在微信原生環(huán)境中,是微信的一部份。不但微信后的廟是自己的跑不了,連微信和微信小程序這種僧人也是自家造的機(jī)器人,不會(huì)亂竄。但對于微信支付業(yè)務(wù)的主體網(wǎng)銀而言依然要考慮廟不是自己的,該有的流程和步驟不能省。

四、用云函數(shù)替代商戶系統(tǒng)完成微信支付

這么,能不能變通一下,用云函數(shù)替代商戶系統(tǒng)呢?答案是可以!流程圖上,商戶系統(tǒng)”支付“過程中做了3個(gè)工作:

1、配合小程序端獲得用戶的;

2、生成用戶訂單,并調(diào)用微信支付統(tǒng)一下單API,讓微信支付為正式發(fā)生的交易預(yù)先產(chǎn)生一個(gè)單子,之后將返回?cái)?shù)據(jù)(5個(gè)參數(shù))進(jìn)行組合再度簽名返回給小程序,小程序用這5個(gè)參數(shù)就可以調(diào)用微信小程序API彈出支付對話框,完成支付;3、將支付結(jié)果推獻(xiàn)給商戶系統(tǒng),商戶系統(tǒng)可以據(jù)此更新訂單狀態(tài)為已付款。

用一個(gè)云函數(shù)寫實(shí)現(xiàn)這幾個(gè)功能是完全可行的!尤其第1項(xiàng)工作,云函數(shù)調(diào)用的時(shí)侯微信系統(tǒng)在云函數(shù)參數(shù)中就帶著;而2和3,須要在云函數(shù)中寫一些代碼。有位男子伴把這件事情講的很清楚,值得參考:。但看起來覺得還是有點(diǎn)麻煩,尤其是這僅僅是一個(gè)支付功能,其它例如退貨和付款狀態(tài)查詢等功能還要寫不少代碼。莫非沒有一套泛型實(shí)現(xiàn)這種標(biāo)準(zhǔn)化的支付相關(guān)功能嗎?嘿

嘿,還真有!云函數(shù)的運(yùn)行環(huán)境是node.js,好多功能模塊都能在這兒找到。有一個(gè)叫node-的項(xiàng)目,把騰訊微信支付功能打包成泛型供其他人免費(fèi)使用,項(xiàng)目網(wǎng)址:。特別謝謝這個(gè)項(xiàng)目的創(chuàng)建者,這套解釋器寫得十分棒,不但可以應(yīng)用在微信小程序云開發(fā)中,也可以用于在H5、app、微信服務(wù)號中實(shí)現(xiàn)微信支付功能,讓開發(fā)者不用每位人都自己造一遍車輪子了。

五、使用node-實(shí)現(xiàn)微信支付功能

下邊就說一下node-的使用:

1.node.js的安裝和使用

使用任何一個(gè)node.js模塊,都要先安裝node.js系統(tǒng)。在云函數(shù)中使用,就要在開發(fā)微信小程序的筆記本上要安裝node.js系統(tǒng)。與云函數(shù)最終運(yùn)行在微信后臺(tái)的node.js環(huán)境下,開發(fā)者要上傳云函數(shù)和相關(guān)依賴,并且相關(guān)依賴也要安裝在開發(fā)者本地。

image.png

node.js有適宜各類操作系統(tǒng)的,下載安裝特別便捷,但一開始用有點(diǎn)別扭。node.js沒有圖形化的操作界面,所有操作都是借助命令行的指令運(yùn)行相關(guān)程序,其中npm(node打包管理)程序的基本使用方式須要把握。由于想要使用任何一個(gè)node.js模塊,都須要運(yùn)行npm指令安裝到本地筆記本指定目錄才行。但這兒不多說了。

2.微信小程序云開發(fā)項(xiàng)目

在微信小程序新建項(xiàng)目的時(shí)侯選擇小程序云開發(fā),之后創(chuàng)建一個(gè)云函數(shù),例如叫,在IDE環(huán)境下右鍵點(diǎn)擊文件夾,在終端下打開,出現(xiàn)命令行窗口,運(yùn)行:npm,就安裝在了這個(gè)目錄下,用資源管理器可以看見文件夾下多了一個(gè)文件夾,微信小程序IDE通常會(huì)隱藏這個(gè)文件夾,文件資源管理器可以看見,及其依賴的全部模塊就在這兒,npm就會(huì)生成一個(gè)-lock.json文件,描述全部依賴關(guān)系,微信小程序IDE可以看見-lock.json,這個(gè)會(huì)上傳到目標(biāo)環(huán)境,在目標(biāo)環(huán)境下安裝依賴關(guān)系。

image

3.云函數(shù)代碼index.js:

//云函數(shù)實(shí)現(xiàn)微信支付
const cloud = require('wx-server-sdk')
cloud.init({
  env: 'shedeshushuXXXXXX'
})
// 步驟1、引入tenpay微信支付
const tenpay = require('tenpay');
// 步驟2、配置支付信息
const config = {
  appid: 'wx349b000d8703a000',
  mchid: '1487305888',
  partnerKey: 'aaaaIIIIgggg11112222333344445555',     //就是微信支付賬戶里面設(shè)置的API密鑰
  pfx: require('fs').readFileSync('apiclient_cert.p12'),      //這是pfx格式的證書,支付不用證書,但是退款什么的會(huì)用到
  notify_url: 'http://www.weixin.qq.com/wxpay/pay.php', //隨便寫一個(gè),云函數(shù)無法實(shí)現(xiàn)返回結(jié)果,但有巧妙的方法實(shí)現(xiàn)同樣功能
  spbill_create_ip: '127.0.0.1'   //隨便寫一個(gè),為一些POS場合用的
};
// 云函數(shù)入口函數(shù)
exports.main = async(event, context) => {
  const wxContext = cloud.getWXContext()
  //步驟3,初始化支付
  const api = tenpay.init(config);
  //步驟4,調(diào)用,想用一個(gè)云函數(shù)實(shí)現(xiàn)全部支付功能,包括支付、退款、查詢等
  switch (event.command) {
    case "pay":  //支付功能
      return await api.getPayParams({
        out_trade_no: event.out_trade_no,   //這是商戶的訂單號,要求商戶內(nèi)唯一
        body: event.body,
        total_fee: event.total_fee,       //訂單金額(單位是分),
        openid: wxContext.OPENID   //付款用戶的openid,直接拿就行
      })
      break
    case "payOK":    //想利用微信小程序得到付款成功消息后,給云函數(shù)來一個(gè)通知,解決付結(jié)果返回沒有服務(wù)器的問題
      console.log("en payOK, I known:", event.out_trade_no);
      break
    case "refund":    //退款功能
      console.log("refund, event, wxContext.OPENID", event, wxContext.OPENID);
      return await api.refund({
        // transaction_id, out_trade_no 二選一
        // transaction_id: '微信的訂單號',
        out_trade_no: event.out_trade_no,    //商戶訂單號
        out_refund_no: event.out_trade_no + 're',  //商戶退款訂單號,要求商戶內(nèi)唯一
        total_fee: event.total_fee,  //原單訂單金額(單位是分)
        refund_fee: event.refund_fee,
        refund_desc: event.refund_desc
      })
      // 相關(guān)默認(rèn)值:
      // op_user_id - 默認(rèn)為商戶號(此字段在小程序支付文檔中出現(xiàn))
      // notify_url - 默認(rèn)為初始化時(shí)傳入的refund_url, 無此參數(shù)則使用商戶后臺(tái)配置的退款通知地址
      break
  }
}

4.小程序端的代碼片斷

  //提交訂單
  confirmOrder: function() {
    let that = this;
    wx.cloud.callFunction({
      name: "payment",
      data: {
        command: "pay",
        out_trade_no: "test0005",
        body: 'a7r2相機(jī)租賃',
        total_fee: 100
      },
      success(res) {
        console.log("云函數(shù)payment提交成功:", res.result)
        that.pay(res.result)
      },
      fail(res) {
        console.log("云函數(shù)payment提交失?。?, res)
      }
    })
  },
  //實(shí)現(xiàn)小程序支付
  pay(payData) {
    //官方標(biāo)準(zhǔn)的支付方法
    wx.requestPayment({ //已經(jīng)得到了5個(gè)參數(shù)
      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)
        wx.cloud.callFunction({  //巧妙利用小程序支付成功后的回調(diào),再次調(diào)用云函數(shù),通知其支付成功,以便進(jìn)行訂單狀態(tài)變更
          name: "payment",
          data: {
            command: "payOK",
            out_trade_no: "test0004"
          },
        })
      },
      fail(res) {
        console.log("支付失?。?, res)
      },
     complete(res) {
        console.log("支付完成:", res)
      }
    })
  },
  //退款
  refund: function() {
    let that = this;
    wx.cloud.callFunction({
      name: "payment",
      data: {
        command: "refund",
        out_trade_no: "test0005",
        body: 'a7r2相機(jī)租賃',
        total_fee: 1,
        refund_fee: 1,
        refund_desc: '押金退款'
      },
      success(res) {
        console.log("云函數(shù)payment提交成功:", res)
      },
      fail(res) {
        console.log("云函數(shù)payment提交失敗:", res)
      }
    })
  }

5.借助小程序端支付成功反彈云函數(shù),取向想商戶系統(tǒng)推送支付結(jié)果

小程序在調(diào)用wx.()發(fā)起支付后,假如支付成功,在反彈函數(shù)中可以再度調(diào)用云函數(shù),通知云函數(shù)支付成,借此替代向商戶系統(tǒng)服務(wù)推送支付結(jié)果。這樣可以在不架設(shè)服務(wù)器的情況,實(shí)現(xiàn)微信支付的全部功能。

6.實(shí)現(xiàn)退貨功能必需要有證書

根據(jù)支付功能類似的方式做退貨申請,卻反復(fù)失敗報(bào)錯(cuò)!實(shí)際上,作者顯然早已在中講清楚了:

說明:

pfx-證書文件(選填,在微信商戶管理界面獲取)

當(dāng)不須要調(diào)用依賴證書的API時(shí)可不填此參數(shù)

若業(yè)務(wù)流程中使用了依賴證書的API則須要在初始化時(shí)傳入此參數(shù)

微信支付平臺(tái)獲取證書,這兒就不細(xì)說了,根據(jù)官方說明一步一步做即可,生成的zip文件一定要保存好。這個(gè)zip文件中有3個(gè)文件,微信支付使用的是pfx,右圖中后綴為.p12的這個(gè)文件就是,將這個(gè)文件置于云函數(shù)的文件內(nèi),會(huì)與云函數(shù)其他文件一起上傳到運(yùn)行環(huán)境,退票申請就成功了。注意證書是由時(shí)效性的,似乎是1年,到期須要重新配置。

image

image

image

7.在一個(gè)云函數(shù)中實(shí)現(xiàn)全部微信支付API調(diào)用

不僅支付功能外,微信支付還有退貨、查詢訂單、查詢退貨等多個(gè)功能,這種功能可以集中在一個(gè)云函數(shù)中全部實(shí)現(xiàn)。通過參數(shù)分辨須要調(diào)用那個(gè)功能,微信小程序和云函數(shù)都可以調(diào)用這個(gè)微信支付云函數(shù)。具體代碼等舍得姐姐建立后在貼出吧!

免責(zé)聲明:部分文章信息來源于網(wǎng)絡(luò)以及網(wǎng)友投稿,本站只負(fù)責(zé)對文章進(jìn)行整理、排版、編輯,出于傳遞更多信息之目的,并不意味著贊同其觀點(diǎn)或證實(shí)其內(nèi)容的真實(shí)性,如本站文章和轉(zhuǎn)稿涉及版權(quán)等問題,請作者在及時(shí)聯(lián)系本站,我們會(huì)盡快為您處理。

歡樂點(diǎn)

留言咨詢

×