日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

微信开发之刷卡支付

發(fā)布時間:2024/3/13 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 微信开发之刷卡支付 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

此項目已開源歡迎Start、PR、發(fā)起Issues一起討論交流共同進(jìn)步
https://github.com/Javen205/IJPay
http://git.oschina.net/javen205/IJPay

文章首發(fā)地址:http://www.jianshu.com/p/ef6c9c5c5807
微信極速開發(fā)系列文章:點擊這里

上兩篇文章介紹了微信公眾號支付以及微信掃碼支付

此篇文章具體來聊聊微信刷卡支付


刷卡支付-官方文檔


場景介紹

  • 步驟1:用戶選擇刷卡支付付款并打開微信,進(jìn)入“我”->“錢包”->“刷卡”條碼界面
  • 步驟2:收銀員在商戶系統(tǒng)操作生成支付訂單,用戶確認(rèn)支付金額
  • 步驟3:商戶收銀員用掃碼設(shè)備掃描用戶的條碼/二維碼,商戶收銀系統(tǒng)提交支付
  • 步驟4:微信支付后臺系統(tǒng)收到支付請求,根據(jù)驗證密碼規(guī)則判斷是否驗證用戶的支付密碼,不需要驗證密碼的交易直接發(fā)起扣款,需要驗證密碼的交易會彈出密碼輸入框。支付成功后微信端會彈出成功頁面,支付失敗會彈出錯誤提示

商戶側(cè)流程


詳細(xì)文檔介紹只需要簡單了解流程 點擊這里


刷卡支付接入模式可分為:商戶后臺接入(提供給別人使用類似第三方)和門店接入(自己使用);區(qū)別就是支付結(jié)果多分發(fā)一次。

根據(jù)用戶是否需要輸入支付密碼可分為:免密模式和驗密模式。

支付驗證密碼規(guī)則

  • 支付金額>500元的交易需要驗證用戶支付密碼
  • 用戶賬號每天最多有5筆交易可以免密,超過后需要驗證密碼
  • 微信支付后臺判斷用戶支付行為有異常情況,符合免密規(guī)則的交易也會要求驗證密碼

免密模式和驗密模式兩者的區(qū)別會在后面講到

下面來講講具體實現(xiàn)

刷卡支付當(dāng)中使用的支付接口為: 提交刷卡支付API 使用的是https請求;不需要微信支付證書。

以下是具體實現(xiàn)代碼:
com.javen.weixin.controller.WeixinPayController中的micropay()

public void micropay(){String url="https://api.mch.weixin.qq.com/pay/micropay";String total_fee="1";//授權(quán)碼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");//終端設(shè)備號params.put("nonce_str", System.currentTimeMillis() / 1000 + "");params.put("body", "刷卡支付測試"); // params.put("detail", "json字符串");//非必須params.put("attach", "javen205");//附加參數(shù)非必須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));//同步返回結(jié)果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秒后調(diào)用【查詢訂單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 , 授權(quán)碼auth_code 為微信客戶端刷卡界面條形碼上顯示的數(shù)字。

(注:用戶刷卡條形碼規(guī)則:18位純數(shù)字,以10、11、12、13、14、15開頭)

測試

不用掃碼槍也可以測試,只是測試手動輸入授權(quán)碼麻煩一點(1分鐘刷新一次),需要你快速輸入授權(quán)碼。掃碼槍只是讀取授權(quán)碼并沒有多做其他的事情。

我本地做端口映射測試的地址如下:

其中auth_code 值是誰便寫的
http://域名/pay/micropay?auth_code=111 在瀏覽器中訪問

返回結(jié)果如下:

<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

此時支付結(jié)果就需要通過 查詢訂單接口來獲取

這就是有密碼與無密碼的區(qū)別,有密碼必須通過查詢訂單來獲取支付結(jié)果,如果結(jié)果任然為USERPAYING,則每隔5秒循環(huán)調(diào)用查詢訂單API判斷實際支付結(jié)果,如果用戶取消支付或累計30秒用戶都未支付,商戶收銀臺退出查詢流程后繼續(xù)調(diào)用撤銷訂單API撤銷支付交易。

輸入正確的auth_code 返回的結(jié)果如下:

<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>

使用場景描述

如果接入模式為商戶后臺接入 支付成功了微信支付系統(tǒng)就會將上面的xml數(shù)據(jù)返回給商戶,商戶再將支付結(jié)果回調(diào)給門店收銀臺,收銀臺繼續(xù)處理業(yè)務(wù)邏輯

如果接入模式-門店接入 支付成功了微信支付系統(tǒng)就會將上面的xml數(shù)據(jù)返回給收銀臺,收銀臺繼續(xù)處理業(yè)務(wù)邏輯


碼字完畢,以上就是微信刷卡支付的詳細(xì)介紹。

歡迎留言、轉(zhuǎn)發(fā)

微信極速開發(fā)系列文章:http://www.jianshu.com/p/a172a1b69fdd

此文章項目開源地址:極速開發(fā)微信公眾號-Start支持項目發(fā)展

后續(xù)更新預(yù)告
1、微信紅包
2、企業(yè)轉(zhuǎn)賬

總結(jié)

以上是生活随笔為你收集整理的微信开发之刷卡支付的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。