Android微信掃碼支付
微信掃碼支付模式二:
微信文件:
https://pay.weixin.qq.com/wiki/doc/api/native.php?chapter=6_5。
其實做支付的都知道微信文件是個巨坑,我也踩了不少坑但是最後還是解決了,於是打算總結一下。
我相信一般做微信掃碼支付的一般都是網頁版,或者PC端,反正我就很少看到APP裡面掃碼支付的。
準備:要先去微信開發者平臺申請AppID,其次要去申請開通支付,開通支付必須要成為開發者,300/年,然後就是填一些必要的資料,什麼收款賬戶之類的那些東西,總之最後會得到以下這三個必要的東西:
1.AppID.
2.商戶號.
3.商戶金鑰
開發:
微信掃碼支付有兩種模式,我們使用的是第二種模式(文件在上面那個地址),看了文章我們就可以知道我們需要用的API
統一下單,支付結果通知等等
統一下單:
https://pay.weixin.qq.com/wiki/doc/api/native.php?chapter=9_1
統一下單的文件,看完可以得到的資訊就是,我們需要 post 微信需要的引數請求到統一下單這個介面,介面:URL地址:https://api.mch.weixin.qq.com/pay/unifiedorder(統一下單)。
注意:其中兩個引數 notify_url 這個引數設定的地址,是支付結果回撥通知的網址,這個回撥地址還需要在商戶平臺的開發配置那裡配置,配置地址和上面引數是一樣的
回撥是微信非同步發給我們的,需要我們去接收,它是一個流傳輸過來的。
sign 這個引數是要通過簽名演算法計算得出的簽名值 ,具體怎麼算微信引數描述那有說明的,其他引數 注意一下微信後面需要的要求,例如需要加密什麼的。最後需要把我們的引數,轉換成XML格式,在傳送給下單介面。
例如:
<xml>
<appid>wx2421b1c4370ec43b</appid>
<attach>支付測試</attach>
<body>JSAPI支付測試</body>
<mch_id>10000100</mch_id>
<detail><![CDATA[{ "goods_detail":[ { "goods_id":"iphone6s_16G", "wxpay_goods_id":"1001", "goods_name":"iPhone6s 16G", "quantity":1, "price":528800, "goods_category":"123456", "body":"蘋果手機" }, { "goods_id":"iphone6s_32G", "wxpay_goods_id":"1002", "goods_name":"iPhone6s 32G", "quantity":1, "price":608800, "goods_category":"123789", "body":"蘋果手機" } ] }]]></detail>
<nonce_str>1add1a30ac87aa2db72f57a2375d8fec</nonce_str>
<notify_url>http://wxpay.wxutil.com/pub_v2/pay/notify.v2.php</notify_url>
<openid>oUpF8uMuAJO_M2pxb1Q9zNjWeS6o</openid>
<out_trade_no>1415659990</out_trade_no>
<spbill_create_ip>14.23.150.211</spbill_create_ip>
<total_fee>1</total_fee>
<trade_type>JSAPI</trade_type>
<sign>0CB01533B8C1EF103065174F50BCA001</sign>
</xml>
微信會給我們放回
<xml>
<return_code><![CDATA[SUCCESS]]></return_code>
<return_msg><![CDATA[OK]]></return_msg>
<appid><![CDATA[wx2421b1c4370ec43b]]></appid>
<mch_id><![CDATA[10000100]]></mch_id>
<nonce_str><![CDATA[IITRi8Iabbblz1Jc]]></nonce_str>
<openid><![CDATA[oUpF8uMuAJO_M2pxb1Q9zNjWeS6o]]></openid>
<sign><![CDATA[7921E432F65EB8ED0CE9755F0E86D72F]]></sign>
<result_code><![CDATA[SUCCESS]]></result_code>
<prepay_id><![CDATA[wx201411101639507cbf6ffd8b0779950874]]></prepay_id>
<trade_type><![CDATA[JSAPI]]></trade_type>
<code_url>![CDATA[weixin://wxpay/s/An4baqw]]</code_url>
</xml>
這裡放回來後我們為了簡便 要把XML轉換成json資料。
上面提到的 引數轉XML, XML轉json這些工具類,網上很多我就不發了。知道思路就可以了。
我們需要的就是<code_url>,這個標籤下的這個連結,這個連結就是我們生成收款碼的東西,。
之後我們就需要我們的 Zxing,不懂就去搜尋一下,因為我們今天只是說微信掃碼支付,其他必要知識不會細說,而且其實網上有很多生成二維碼的工具類,最後會返回一個 Bitmap. 最後讓ImageView顯示出來就可以了。
支付結果通知
文件:
https://pay.weixin.qq.com/wiki/doc/api/native.php?chapter=9_7
看懂微信文件這段話就可以了:
支付完成後,微信會把相關支付結果和使用者資訊傳送給商戶,商戶需要接收處理,並返回應答。
對後臺通知互動時,如果微信收到商戶的應答不是成功或超時,微信認為通知失敗,微信會通過一定的策略定期重新發起通知,儘可能提高通知的成功率,但微信不保證通知最終能成功。 (通知頻率為15/15/30/180/1800/1800/1800/1800/3600,單位:秒)
注意:同樣的通知可能會多次傳送給商戶系統。商戶系統必須能夠正確處理重複的通知。
推薦的做法是,當收到通知進行處理時,首先檢查對應業務資料的狀態,判斷該通知是否已經處理過,如果沒有處理過再進行處理,如果處理過直接返回結果成功。在對業務資料進行狀態檢查和處理之前,要採用資料鎖進行併發控制,以避免函式重入造成的資料混亂。
特別提醒:商戶系統對於支付結果通知的內容一定要做簽名驗證,並校驗返回的訂單金額是否與商戶側的訂單金額一致,防止資料洩漏導致出現“假通知”,造成資金損失。
由於涉及到交易問題,我這邊需要存到資料庫,所以回撥通知這方面是後臺去接收,然後我再請求後臺檢視支付結果。
相關文章
- nodejs微信支付之掃碼支付NodeJS
- 微信掃碼支付全解析
- Laravel 搞定支付寶和微信掃碼支付Laravel
- 微信支付開發(2) 掃碼支付模式一模式
- 微信支付開發(4)掃碼支付模式二模式
- 微信掃碼支付(Asp.Net MVC)ASP.NETMVC
- java實現掃碼槍-微信支付Java
- 微信支付V3 Java jsApi 掃碼支付JavaJSAPI
- Thinkphp5微信掃碼支付例項PHP
- 微信的三種支付方式接入:APP支付、公眾號支付、掃碼支付APP
- 第一次使用微信掃碼支付_JavaJava
- Thinkphp5框架整合微信掃碼支付方法PHP框架
- 親身經歷之微信支付沙箱環境掃碼支付遇到的那些坑
- 微信掃碼支付~官方DEMO的坑~引數不能自定義
- 【微信開發筆記】掃碼支付之二維碼的處理筆記
- Android整合微信支付Android
- Android仿微信支付密碼彈出層Android密碼
- 整理 PC 端微信掃碼支付全過程 --- easywechat + Laravel 5.8Laravel
- iOS12捷徑掃碼付款怎麼用?蘋果iOS12微信支付寶掃碼支付捷徑設定教程iOS蘋果
- Android 接入微信支付寶支付Android
- 關於Android微信支付Android
- 基於Koa2開發微信二維碼掃碼支付相關流程
- 微信掃碼登入
- Android 微信支付開發流程Android
- Android 微信支付 微信是否安裝判斷Android
- 掃碼支付後都發生了啥?
- android微信分享、微信支付的一些坑Android
- android 整合微信支付和支付寶支付其實很簡單Android
- android自定義仿微信、支付寶 密碼輸入框Android密碼
- 微信小程式掃碼解析小程式碼微信小程式
- 微信app支付 java後臺接AndroidAPPJavaAndroid
- Android快速實現微信支付(真的!很快!)Android
- Android 快速實現微信支付(真的!很快!)Android
- Python提取支付寶和微信支付二維碼Python
- php微信掃碼領優惠券PHP
- 淺析微信掃碼登入原理
- PHP對接微信掃碼登入PHP
- 2行程式碼調起微信支付寶支付行程