网友真实露脸自拍10p,成人国产精品秘?久久久按摩,国产精品久久久久久无码不卡,成人免费区一区二区三区

小程序模板網(wǎng)

微信小程序開發(fā)之webview組件內(nèi)網(wǎng)頁(yè)實(shí)現(xiàn)微信原生支付

發(fā)布時(shí)間:2018-01-24 10:44 所屬欄目:小程序開發(fā)教程

前言、背景 本人目前的工作崗位是安卓工程師,在這之前對(duì)于前端和后臺(tái)的知識(shí)基本是白紙,只是在日常的工作項(xiàng)目中有需要和小伙伴進(jìn)行對(duì)接的時(shí)候接觸了那么一丟丟,對(duì)于前端和后臺(tái)的一些專業(yè)描述和理解有不當(dāng)之處還請(qǐng) ...

 
 
 

前言、背景

本人目前的工作崗位是安卓工程師,在這之前對(duì)于前端和后臺(tái)的知識(shí)基本是白紙,只是在日常的工作項(xiàng)目中有需要和小伙伴進(jìn)行對(duì)接的時(shí)候接觸了那么一丟丟,對(duì)于前端和后臺(tái)的一些專業(yè)描述和理解有不當(dāng)之處還請(qǐng)各位指正。

目前部門的主營(yíng)項(xiàng)目是一個(gè)電商項(xiàng)目,在本人入職之前整個(gè)項(xiàng)目系統(tǒng)的主營(yíng)業(yè)務(wù)流程已經(jīng)完備,也已經(jīng)在正式運(yùn)營(yíng),不過(guò)因?yàn)楦鞣N原因平臺(tái)主要是在PC端和微信公眾號(hào)進(jìn)行運(yùn)營(yíng)。小程序其實(shí)出來(lái)的挺早的,但是優(yōu)先級(jí)對(duì)于我們目前的規(guī)劃來(lái)說(shuō)其實(shí)還是很低的。直到17年11月的時(shí)候小程序推出了web-view組件,在當(dāng)時(shí)被譽(yù)為移動(dòng)電商的福音&&&&$$$...此處省略五千字。

有了web-view那什么公眾號(hào)內(nèi)容、官網(wǎng)、網(wǎng)頁(yè)有域名的那種直接就可以扔到小程序的webview組件了,極大的減少了開發(fā)成本,就是一把梭。。。。

關(guān)于小程序

小程序的解釋什么的不巴拉巴拉,直接上干貨開發(fā)文檔就不做過(guò)多解釋 微信小程序

關(guān)于小程序web-view組件

先奉上傳送門小程序 webview相關(guān)說(shuō)明和API使用 官方解釋:web-view 組件是一個(gè)可以用來(lái)承載網(wǎng)頁(yè)的容器,會(huì)自動(dòng)鋪滿整個(gè)小程序頁(yè)面。個(gè)人類型與海外類型的小程序暫不支持使用。 web-view組件開放時(shí)間并不久,所以目前的還是有很多局限性的。
關(guān)于webview配置指向的鏈接的去小程序后臺(tái)進(jìn)行配置就好(不配置webview是訪問(wèn)不了的)必須支持https 如圖:

 

示例代碼:

做過(guò)微信公眾號(hào)的童鞋應(yīng)該都知道,在公眾號(hào)里商家H5頁(yè)面內(nèi)調(diào)用JSSDK就可以實(shí)現(xiàn)微信支付功能。但是看過(guò)webview組件的API的文檔的童鞋應(yīng)該知道:webview 里面的網(wǎng)頁(yè)(公眾號(hào)遷移的網(wǎng)頁(yè))是調(diào)用不了外部的微信支付what....... 雖然微信支付也確實(shí)是提供了小程序的微信支付API,但是因?yàn)槲覀冋麄€(gè)小程序的內(nèi)容就是一個(gè)webview嵌入公眾號(hào)內(nèi)容的網(wǎng)頁(yè),在網(wǎng)頁(yè)內(nèi)下訂單的過(guò)程中是無(wú)法通過(guò)webview的api接口通知小程序調(diào)起微信支付的。 查看微信支付小程序的支付文檔,我們小程序如果要調(diào)用微信支付只需要得到以下參數(shù)就可以。
如圖:小程序調(diào)用微信支付參數(shù)
以及示例代碼:
看到這些一切就明朗了,在小程序端只要能通過(guò)某種方式得到webview內(nèi)網(wǎng)頁(yè)下單后的生成的相關(guān)參數(shù)就能調(diào)起微信支付從而實(shí)現(xiàn)webview組件內(nèi)網(wǎng)頁(yè)微信支付。

 

實(shí)現(xiàn)方式和主要流程

  1. 先說(shuō)明一下整個(gè)小程序?qū)崿F(xiàn)webview調(diào)用支付的代碼結(jié)構(gòu)如圖
整個(gè)結(jié)構(gòu)很清晰、簡(jiǎn)單,不做過(guò)多解釋。微信小程序采用的MVVM的模式。
xxxx.wxml類似于安卓activity的xml文件。
xxxx.js類似于安卓中MVC模式的控制層。
xxxx.wxss類似于前端的CSS樣式。我們目前幾乎沒(méi)用到,因?yàn)橹挥玫搅诵〕绦虻膚ebview組件。

 

  1. 原理分析

我們來(lái)看一下微信小程序支付的的業(yè)務(wù)流程:

 

上面已經(jīng)提到如果需要小程序的webview組件調(diào)起微信支付,需要網(wǎng)頁(yè)內(nèi)部統(tǒng)一下單得到支付參數(shù),然后通過(guò)小程序API調(diào)起微信支付,如下:

 

wx.requestPayment(
{
'timeStamp': '',
'nonceStr': '',
'package': '',
'signType': 'MD5',
'paySign': '',
'success':function(res){},
'fail':function(res){},
'complete':function(res){}
})

那么小程序如何得到支付參數(shù)呢,查看webview的API文檔發(fā)現(xiàn) webview的內(nèi)部網(wǎng)頁(yè)可以通過(guò)JSSDK的該API 實(shí)現(xiàn)webview網(wǎng)頁(yè)內(nèi)部控制小程序。
wx.miniProgram.navigateBack 進(jìn)行小程序頁(yè)面的跳轉(zhuǎn)比如我們的項(xiàng)目在 index.wxml 的 webview 網(wǎng)頁(yè)內(nèi)部使用該API就可以控制小程序從index page 跳轉(zhuǎn)到wxpay page。

  1. 具體實(shí)現(xiàn)步驟

1 在index.wxml文件添加webview組件,用來(lái)裝載原公眾號(hào)里面的網(wǎng)頁(yè)內(nèi)容
<web-view src="{{url}}"></web-view>
該url是index.js里面data定義的一個(gè)變量``,方便通過(guò)index.js的setData方法對(duì)webview的網(wǎng)頁(yè)進(jìn)行動(dòng)態(tài)加載

2 新建wxpay目錄,并新建wxpay的page頁(yè)面用來(lái)處理支付邏輯。(該頁(yè)面目前是空白的,功能上分析該頁(yè)面只是為了收到webview網(wǎng)頁(yè)的支付參數(shù),從用戶使用角度上來(lái)說(shuō)該頁(yè)面是一個(gè)支付頁(yè)面應(yīng)該需要添加一些用戶交互的,比如轉(zhuǎn)圈QAQ)

3 webview網(wǎng)頁(yè)用戶在生成訂單后,選擇微信支付即走微信的統(tǒng)一下單流程,生成微信支付的參數(shù)和sgin。在webview網(wǎng)頁(yè)內(nèi)部通過(guò)path攜帶參數(shù)跳轉(zhuǎn)到wxpay頁(yè)面,具體偽代碼實(shí)現(xiàn)如下(注釋很清楚):

//判斷是否是在wx小程序環(huán)境
if(small_wx  && data.resultCode=='success'){
  //點(diǎn)擊微信支付后,調(diào)取統(tǒng)一下單接口生成微信小程序支付需要的支付參數(shù)
  var params = '?timestamp='+data.jsparams.timeStamp+'&nonceStr='+data.jsparams.nonceStr
               +'&'+data.jsparams.pkg+'&signType='+data.jsparams.signType
               +'&paySign='+data.jsparams.paySign+'&orderId='+data.orderid+'&pType=0';
  //定義path 與小程序的支付頁(yè)面的路徑相對(duì)應(yīng)
  var path = '/pages/wxpay/wxpay'+params;
  //通過(guò)JSSDK的api使小程序跳轉(zhuǎn)到指定的小程序頁(yè)面
  wx.miniProgram.navigateTo({url: path});				   			
  }

4 小程序端wxpay頁(yè)面邏輯實(shí)現(xiàn)(wxpay.js),webview內(nèi)的網(wǎng)頁(yè)通過(guò)wx.miniProgram.navigateTo({url: path})攜帶參數(shù)使小程序跳轉(zhuǎn)到wxpay頁(yè)面。wxpay.js 對(duì)url中攜帶的參數(shù)進(jìn)行處理,然后通過(guò)wx.requestPayment調(diào)起微信支付并對(duì)支付的回調(diào)通知進(jìn)行處理,具體代碼實(shí)現(xiàn)如下(注釋很詳細(xì)不做過(guò)多贅述):

onLoad: function (options) {
   var that = this;
   //頁(yè)面加載調(diào)取微信支付(原則上應(yīng)該對(duì)options的攜帶的參數(shù)進(jìn)行校驗(yàn))
   that.requestPayment(options);
 },
//根據(jù) obj 的參數(shù)請(qǐng)求wx 支付
 requestPayment: function (obj) {
   //獲取options的訂單Id
   var orderId = obj.orderId;
   //調(diào)起微信支付
   wx.requestPayment({
     //相關(guān)支付參數(shù)
     'timeStamp': obj.timestamp,
     'nonceStr': obj.nonceStr,
     'package': 'prepay_id=' + obj.prepay_id,
     'signType': obj.signType,
     'paySign': obj.paySign,
     //小程序微信支付成功的回調(diào)通知
     'success': function (res) {
       //定義小程序頁(yè)面集合
       var pages = getCurrentPages();
       //當(dāng)前頁(yè)面 (wxpay page)
       var currPage = pages[pages.length - 1];  
       //上一個(gè)頁(yè)面 (index page) 
       var prevPage = pages[pages.length - 2];  
       //通過(guò)page.setData方法使index的webview 重新加載url  有點(diǎn)類似于后臺(tái)刷新頁(yè)面
       //此處有點(diǎn)類似小程序通過(guò)加載URL的方式回調(diào)通知后端 該訂單支付成功。后端邏輯不做贅述。
         prevPage.setData({
           url: "https://xxxxxxxxxx.com/wx_isPayment.jhtml?orderId=" + orderId  + '&ispay=0',
           
         }),
         //小程序主動(dòng)返回到上一個(gè)頁(yè)面。即從wxpay page到index page。此時(shí)index page的webview已經(jīng)重新加載了url 了
         //微信小程序的page 也有棧的概念navigateBack 相當(dāng)于頁(yè)面出棧的操作
         wx.navigateBack(); 
     },
     //小程序支付失敗的回調(diào)通知
     'fail': function (res) {
       console.log("支付失敗"),
         console.log(res)
         var pages=getCurrentPages();
         var currPage = pages[pages.length - 1];   
         var prevPage = pages[pages.length - 2];  
         console.log("準(zhǔn)備修改數(shù)據(jù)")
         prevPage.setData({
           url: "https://xxxxxxxxxx/wx_isPayment.jhtml?orderId=" + orderId + '&ispay=0' ,
         }),
           console.log("準(zhǔn)備結(jié)束頁(yè)面")
       wx.navigateBack(); 
     }
   })
 },
  1. 微信支付后的回調(diào)通知,當(dāng)wxpay頁(yè)面調(diào)用navigateBack的時(shí)候回到index頁(yè)面的時(shí)候webview 已經(jīng)加載https://xxxxxxxxxx/wx_isPayment.jhtml?orderId=" + orderId + '&ispay=0' 這個(gè)網(wǎng)頁(yè),后臺(tái)實(shí)現(xiàn)相關(guān)邏輯。通過(guò)orderId查詢?cè)撚唵问欠裰Ц冻晒ΑH绻Ц冻晒途W(wǎng)頁(yè)重定向到支付成功的頁(yè)面,如果支付失敗還是待支付頁(yè)面。用戶依舊可以點(diǎn)擊微信支付按鈕進(jìn)行微信支付。
  2. 至此小程序的webview組件內(nèi)網(wǎng)頁(yè)就可以實(shí)現(xiàn)微信支付了。

see you agin

如果用原生小程序組件實(shí)現(xiàn)商城支付就沒(méi)這么麻煩,但是工作量會(huì)非常巨大。直接把公眾號(hào)的網(wǎng)頁(yè)移植到小程序的webview里面,極大的節(jié)省了開發(fā)時(shí)間,對(duì)于小商戶來(lái)說(shuō)還是非常方便的。我們現(xiàn)在也算是偷懶把,畢竟投入不大、優(yōu)先級(jí)不夠、先弄個(gè)東西出來(lái)可以用,小程序沒(méi)有一個(gè)向服務(wù)端的wx.request請(qǐng)求。但是我內(nèi)心其實(shí)拒絕的。。。。。因?yàn)橛脩趔w驗(yàn)和產(chǎn)品角度都很low.........



易優(yōu)小程序(企業(yè)版)+靈活api+前后代碼開源 碼云倉(cāng)庫(kù):starfork
本文地址:http://www.xiuhaier.com/wxmini/doc/course/19604.html 復(fù)制鏈接 如需定制請(qǐng)聯(lián)系易優(yōu)客服咨詢:800182392 點(diǎn)擊咨詢
QQ在線咨詢
AI智能客服 ×