搜尋
首頁微信小程式微信開發分享微信公眾號開發刷卡支付的實例教程

歡迎留言、轉發

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

#場景介紹

  • 步驟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_codeUSERPAYING

此時支付結果就需要透過查詢訂單介面來取得

這就是有密碼與無密碼的區別,有密碼必須透過

查詢訂單來取得支付結果,如果結果任然為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資料回傳給收銀台,收銀台繼續處理業務邏輯

分享微信公眾號開發刷卡支付的實例教程

刷卡支付.png

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

【相關推薦】

1.

微信公眾號平台源碼下載

#2. 

小豬cms(PigCms)微電商系統營運版(獨立微店商城+三級分銷系統)

3.

微信投票源碼#

以上是分享微信公眾號開發刷卡支付的實例教程的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
4 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
4 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
4 週前By尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解鎖Myrise中的所有內容
1 個月前By尊渡假赌尊渡假赌尊渡假赌

熱工具

EditPlus 中文破解版

EditPlus 中文破解版

體積小,語法高亮,不支援程式碼提示功能

VSCode Windows 64位元 下載

VSCode Windows 64位元 下載

微軟推出的免費、功能強大的一款IDE編輯器

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

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

SublimeText3 Linux新版

SublimeText3 Linux新版

SublimeText3 Linux最新版

DVWA

DVWA

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