原文:微信原生支付 Native掃碼支付( V3.3.7 版本)php
[尊重別人的勞動成果,轉載請註明出處:一縷晨光工做室,www.wispdawn.com]html
前言算法
辛苦研究三天,遇到各類困難,最終仍是克服了,把個人理解和思路分享給須要幫助的人,若是你覺的好,請幫我分享一下,謝謝。 在沒有作以前,我覺得和支付寶,以及銀聯同樣,會在官網找到相應的demo,照葫蘆畫瓢便可,沒有什麼複雜的,真正去作的時候,發現各類錯誤,不少時候都莫名其妙找不到北, 在網上搜了不知道多少遍,有V3版的,不過都是js api版本的,沒有找到原生掃碼支付,下了幾個V2版本的微信支付c#demo,感受亂糟糟的。官網只提供了一個php版本的demo 研究了一天沒有結果,次日我決定從官網的php的原生掃碼支付,根據他的邏輯,用c#寫出來,下面就是全部思路及代碼,文章最後我放上整個解決方案壓縮包。數據庫
想實現掃碼支付須要三大步驟c#
最終效果如圖api
下面一步一步講解數組
這步驟比較簡單,根據官網文檔 ,須要固定的參數,其中籤名算法已經寫好,以下代碼微信
下圖是用於生成二維碼字符串,app
最終生成的url微信公衆平臺
weixin://wxpay/bizpayurl?appid=wxed94e****9b4bc&mch_id=122468****&nonce_str=877A9BA7A98F75B90A9D49F53F15A858& product_id=1&sign=B2A03B1B6583972FF67C8AD3D7414DD1&time_stamp=1420466744
有了文本想生成二維碼就簡單了,起初我是採用ThoughtWorks.QRCode.dll,後來發現一值報錯,超出數組範圍,估計是字符串太長了,最後選擇使用一個開源項目 Gma.QrCodeNet.Encoding.dll,速度很快。
代碼以下
前臺js調用
這個頁面主要任務是當掃碼二維碼的時候,微信向這個頁面post XML數據,其中包含產品id,即二維碼上的產品id ,咱們須要根據產品id,查詢產品名稱,總價格,以及一些附屬信息, 咱們須要再次把這些參數post給微信統一支付接口,若是數據正確,微信會給咱們生成一個prepay_id 預支付id,咱們再次把prepay_id post給微信,整個流程便是這樣子的,其實產品id就至關於一個訂單號,惟一性,固然你也能夠根據產品id,在這個頁面裏面下單,業務根據本身須要處理。
頁面代碼以下
這個頁面用來處理成功通知的,微信把交易的結果依xml形式post該頁面,當你收到消息後,若是成功了,你能夠根據此來修改數據庫,或者更新狀態,等等。我作到這步時候,須要實現掃碼二維碼,支付成功後,3秒後調整, 實現思路是這樣的,在二維碼頁面,setinterval get後臺數據庫是否已經支付,若是已經支付則執行settimeout 3秒後調整到成功頁面。目前我是這樣實現的,不知作別人怎麼實現的。
通知代碼以下。
若是你也是須要掃描原生支付,能夠直接下載本解決方案,只須要把 WxPayHelper構造函數中的參數修改下便可使用
本文主要講解整個思路,詳細請看代碼,點擊下載本解決方案
尊重別人的勞動成功,轉載請註明出處:一縷晨光工做室,www.wispdawn.com