ホームページ  >  記事  >  WeChat アプレット  >  クレジット カード支払い用の WeChat パブリック アカウントの開発に関するサンプル チュートリアルを共有する

クレジット カード支払い用の WeChat パブリック アカウントの開発に関するサンプル チュートリアルを共有する

零下一度
零下一度オリジナル
2017-05-19 16:02:462800ブラウズ

メッセージを残して転送することを歓迎します

この記事では、特に 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_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

ユーザーが支払いパスワードを入力する必要があるかどうかに応じて、パスワード不要モードとパスワード検証モードに分けることができます。

支払い確認パスワードのルールクレジット カード支払い用の WeChat パブリック アカウントの開発に関するサンプル チュートリアルを共有する

支払い金額が500元を超える取引では、ユーザーの支払いパスワードを確認する必要があります

ユーザーアカウントはパスワードなしで1日あたり最大5回の取引を行うことができ、その後はパスワードの確認が必要になります

WeChat決済バックエンドがユーザーの決済動作に異常があると判断し、パスワードフリールールに準拠した取引にもパスワード認証が必要となります

パスワードフリーモードとパスワード認証モードの違いは後で説明します

具体的な実装については以下で説明します

カード支払いで使用される支払いインターフェイスは次のとおりです: カード支払いを送信するAPI🎜 使用リクエストは https であり、WeChat 支払い証明書は必要ありません。 🎜🎜以下は具体的な実装コードです: 🎜com.javen.weixin.controller.WeixinPayControllermicropay() 🎜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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。