歡迎留言、轉發
這篇文章具體來聊聊微信刷卡支付
#場景介紹
步驟1:用戶選擇刷卡付款付款並打開微信,進入「我」->「錢包」->「刷卡」條碼介面
#步驟2:收銀員在商家系統操作產生支付訂單,用戶確認支付金額
#步驟3:商家收銀員用掃碼裝置掃描使用者的條碼/二維碼,商家收銀系統提交付款
步驟4:微信支付後台系統收到付款請求,根據驗證密碼規則判斷是否驗證用戶的支付密碼,不需要驗證密碼的交易直接發起扣款,需要驗證密碼的交易會彈出密碼輸入框。支付成功後微信端會彈出成功頁面,付款失敗會彈出錯誤提示
商戶側流程
詳細文件介紹只需要簡單了解流程點擊這裡
刷卡支付接取模式可分為:商家後台接取(提供給別人使用類似第三方)與門市接取(自己使用);差異就是支付結果多分送一次
。
依照使用者是否需要輸入付款密碼可分為:免密模式和驗密模式。
支付驗證密碼規則
支付金額>500元的交易需要驗證使用者支付密碼
- ##用戶帳號每天最多有5筆交易可以免密,超過後需要驗證密碼
- 微信支付後台判斷用戶支付行為有異常情況,符合免密規則的交易也會要求驗證密碼
免密模式和驗密模式兩者的差異會在後面講到下面來講講具體實作#刷卡支付當中使用的支付介面為: 提交刷卡支付
API 使用的是https請求;不需要微信支付憑證。
com.javen.weixin.controller.WeixinPayController中的
micropay()
public void micropay(){ String url="https://api.mch.weixin.qq.com/pay/micropay"; String total_fee="1"; //授权码 String auth_code = getPara("auth_code"); Map<String, String> params = new HashMap<String, String>(); params.put("appid", appid); params.put("mch_id", partner); params.put("device_info", "javen205");//终端设备号 params.put("nonce_str", System.currentTimeMillis() / 1000 + ""); params.put("body", "刷卡支付测试"); // params.put("detail", "json字符串");//非必须 params.put("attach", "javen205");//附加参数非必须 String out_trade_no=System.currentTimeMillis()+""; params.put("out_trade_no", out_trade_no); params.put("total_fee", total_fee); String ip = IpKit.getRealIp(getRequest()); if (StrKit.isBlank(ip)) { ip = "127.0.0.1"; } params.put("spbill_create_ip", ip); params.put("auth_code", auth_code); String sign = PaymentKit.createSign(params, paternerKey); params.put("sign", sign); String xmlResult = HttpUtils.post(url, PaymentKit.toXml(params)); //同步返回结果 System.out.println("xmlResult:"+xmlResult); Map<String, String> result = PaymentKit.xmlToMap(xmlResult); String return_code = result.get("return_code"); if (StrKit.isBlank(return_code) || !"SUCCESS".equals(return_code)) { //通讯失败 String err_code = result.get("err_code"); //用户支付中,需要输入密码 if (err_code.equals("USERPAYING")) { //等待5秒后调用【查询订单API】https://pay.weixin.qq.com/wiki/doc/api/micropay.php?chapter=9_2 } renderText("通讯失败>>"+xmlResult); return; } String result_code = result.get("result_code"); if (StrKit.isBlank(result_code) || !"SUCCESS".equals(result_code)) { //支付失败 renderText("支付失败>>"+xmlResult); return; } //支付成功 renderText(xmlResult); }在開源專案weixin-guide中測試存取位址為
http://網域名稱[/專案名稱]/pay/micropay?auth_code=xxxxx ,
授權碼auth_code 為微信用戶端刷卡介面條碼上顯示的數字。
(註:使用者刷卡條碼規則:18位元純數字,以10、11、12、13、14、15開頭)測試
不用掃碼槍也可以測試,只是測試手動輸入授權碼麻煩一點(1分鐘刷新一次),需要你快速輸入授權碼。掃碼槍只是讀取授權碼並沒有多做其他的事情。我本地做連接埠對映測試的位址如下:其中
auth_code 值是誰便寫的
http://域名/pay/micropay?auth_code=111 在瀏覽器中訪問
<xml><return_code><![CDATA[SUCCESS]]></return_code> <return_msg><![CDATA[OK]]></return_msg> <appid><![CDATA[您公众号的appid]]></appid> <mch_id><![CDATA[您微信商户号]]></mch_id> <device_info><![CDATA[javen205]]></device_info> <nonce_str><![CDATA[eXgczazQq54pqcyH]]></nonce_str> <sign><![CDATA[FF03DA0E58845CCE1FCC2166EC03FBE5]]></sign> <result_code><![CDATA[FAIL]]></result_code> <err_code><![CDATA[AUTH_CODE_INVALID]]></err_code> <err_code_des><![CDATA[请扫描微信支付被扫条码/二维码]]></err_code_des> </xml>刷卡支付超過5次就會提示輸入密碼#返回的
err_code 為
USERPAYING
這就是有密碼與無密碼的區別,有密碼必須透過輸入正確的查詢訂單
來取得支付結果,如果結果任然為
USERPAYING,則每隔5秒
循環呼叫查詢訂單API判斷實際支付結果,如果用戶取消支付或累計30秒用戶都未支付,商家收銀台
退出查詢流程後繼續呼叫撤銷訂單API撤銷支付交易。
auth_code 傳回的結果如下:
<xml><return_code><![CDATA[SUCCESS]]></return_code> <return_msg><![CDATA[OK]]></return_msg> <appid><![CDATA[您公众号的appid]]></appid> <mch_id><![CDATA[您微信商户号]]></mch_id> <device_info><![CDATA[javen205]]></device_info> <nonce_str><![CDATA[Z9p14VPJ822ZTPXP]]></nonce_str> <sign><![CDATA[03BD421A33A5079A1BE6030E2EBA8291]]></sign> <result_code><![CDATA[SUCCESS]]></result_code> <openid><![CDATA[o_pncsidC-pRRfCP4zj98h6slREw]]></openid> <is_subscribe><![CDATA[Y]]></is_subscribe> <trade_type><![CDATA[MICROPAY]]></trade_type> <bank_type><![CDATA[CFT]]></bank_type> <total_fee>1</total_fee> <fee_type><![CDATA[CNY]]></fee_type> <transaction_id><![CDATA[4009682001201610156761057959]]></transaction_id> <out_trade_no><![CDATA[1476523316727]]></out_trade_no> <attach><![CDATA[javen205]]></attach> <time_end><![CDATA[20161015172058]]></time_end> <cash_fee>1</cash_fee> </xml>使用場景描述
如果存取模式為商家後台存取 付款成功了微信支付系統就會將上面的xml
如果資料回傳給商戶,商家再將付款結果回調到門市收銀台,收銀台繼續處理業務邏輯
接入模式-門市接入 付款成功了微信支付系統就會將上面的xml
資料回傳給收銀台,收銀台繼續處理業務邏輯
小豬cms(PigCms)微電商系統營運版(獨立微店商城+三級分銷系統)
3.以上是分享微信公眾號開發刷卡支付的實例教程的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

EditPlus 中文破解版
體積小,語法高亮,不支援程式碼提示功能

VSCode Windows 64位元 下載
微軟推出的免費、功能強大的一款IDE編輯器

MinGW - Minimalist GNU for Windows
這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

SublimeText3 Linux新版
SublimeText3 Linux最新版

DVWA
Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中