ホームページ > 記事 > WeChat アプレット > クレジット カード支払い用の WeChat パブリック アカウントの開発に関するサンプル チュートリアルを共有する
メッセージを残して転送することを歓迎します
この記事では、特に WeChat クレジット カード支払いについて説明します
シナリオの紹介
ステップ 1: ユーザーはクレジット カード支払いを選択し、WeChat を開き、「私」と入力します->「ウォレット」->「スワイプ カード」バーコード インターフェイス
ステップ 2: レジ担当者が販売者システムで操作して支払い注文を生成し、ユーザーが支払い金額を確認します
販売者のレジ担当者がスキャン デバイス/QR コードを使用してユーザーのバーコードをスキャンし、販売者のレジ担当者システムが支払いを送信します
ステップ 4: WeChat 支払いバックエンド システムが支払いリクエストを受信し、パスワード検証ルールに基づいてユーザーの支払いパスワードを検証するかどうかを決定します。パスワード検証を必要としないトランザクションは直接控除を開始し、検証が必要です。 パスワードトランザクションの場合、パスワード入力ボックスがポップアップ表示されます。支払いが成功すると、WeChat に成功ページが表示されます。支払いが失敗した場合は、エラー メッセージが表示されます
詳細なドキュメントの紹介については、プロセスを簡単に理解するだけで済みます。ここをクリックしてください
カード支払いアクセス モードは、マーチャント バックエンド アクセス (同様のサードパーティによる使用のために他者に提供される) とストア アクセス (自身の使用のため) に分類できます。 の違いは、支払い結果が一度配布されることです。詳細
。 区别就是支付结果多分发一次
。
根据用户是否需要输入支付密码可分为:免密模式和验密模式。
支付金额>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
支払い確認パスワードのルール
ユーザーアカウントはパスワードなしで1日あたり最大5回の取引を行うことができ、その後はパスワードの確認が必要になります
WeChat決済バックエンドがユーザーの決済動作に異常があると判断し、パスワードフリールールに準拠した取引にもパスワード認証が必要となります
パスワードフリーモードとパスワード認証モードの違いは後で説明します
カード支払いで使用される支払いインターフェイスは次のとおりです: カード支払いを送信するAPI🎜 使用リクエストはhttps
であり、WeChat 支払い証明書は必要ありません。 🎜🎜以下は具体的な実装コードです: 🎜com.javen.weixin.controller.WeixinPayController
のmicropay()
🎜rrreee🎜 オープンソースでアクセスアドレスをテストしますproject weixin-guide は http://domain name[/project name]/pay/micropay?auth_code=xxxxx
で、authorization code auth_code
はバーコードに表示される番号です。 WeChat クライアント カード スワイプ インターフェイス上で。 🎜🎜 (注: ユーザー カード スワイプ バーコード ルール: 10、11、12、13、14、15 で始まる 18 桁の純粋な数字) 🎜🎜テスト
🎜 スキャンする必要はありませんthe code Gun を使ってテストすることもできますが、認証コードを手動で入力するのが少し面倒(1分に1回更新される)し、素早く認証コードを入力する必要があります。コード スキャナは認証コードを読み取るだけで、他には何も行いません。 🎜🎜🎜ポート マッピング テスト用のローカル アドレスは次のとおりです: 🎜🎜auth_code
値は誰によっても書き込まれます🎜http://domain name/pay/micropay?auth_code=111
ブラウザで 🎜🎜 にアクセスすると、返される結果は次のようになります: 🎜rrreee🎜 カードを 5 回以上スワイプして支払うと、パスワードの入力を求められます 🎜🎜 返されたerr_code code> は <code>USERPAYING
です🎜🎜この時点では、クエリ注文インターフェイスを通じて支払い結果を取得する必要があります🎜🎜これは、パスワードがある場合とない場合の違いです。query order
を通じて支払い結果を取得する必要があります。結果がUSERPAYING
である場合は、5 秒ごとに ループ 🎜クエリ注文 API code> を呼び出し、実際の支払い結果を決定します。ユーザーが支払いをキャンセルするか、ユーザーが 30 秒間支払いを怠った場合、販売者のレジ<a href="http://www.php.cn/code/6835.html" target="_blank"> クエリ プロセスを終了した後、引き続き <code>Cancel Order API
を呼び出してキャンセルします。支払いトランザクション。 🎜🎜🎜正しいauth_code
を入力すると、返される結果は次のとおりです: 🎜rrreee🎜使用シナリオの説明🎜🎜 🎜アクセス モードがマーチャント バックエンド アクセス🎜で、支払いが成功した場合、 WeChat 支払いシステムは、上記のxml
データが販売者に返され、販売者は支払い結果を店舗のレジ担当者にコールバックし、レジ担当者はビジネス ロジックの処理を続行します🎜🎜If🎜 アクセス モード -店舗へのアクセス🎜 支払いが成功しました WeChat 支払いシステム 上記のxml
データがレジ担当者に返され、レジ担当者はビジネス ロジックの処理を続行します🎜🎜🎜🎜🎜🎜🎜 スワイプ カード支払い.png 🎜🎜 以上でWeChatカード決済の詳細が完了しました。 🎜🎜【関連推奨事項】🎜🎜1. 🎜WeChatパブリックアカウントプラットフォームのソースコードダウンロード🎜🎜🎜2. 🎜PigCmsマイクロ電子商取引システム運用バージョン(独立したマイクロストアモール+3レベルの流通システム)🎜🎜🎜3 🎜WeChat投票ソースコード🎜🎜
以上がクレジット カード支払い用の WeChat パブリック アカウントの開発に関するサンプル チュートリアルを共有するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。