以前、会社のプロジェクト開発における支払いは、シンプルでカジュアルと呼ばれるアリババの支払いを使用して行われていましたが、悲しいことに、現在は会社がWeChat公式アカウントを開発したため、落とし穴に満ちたWeChat支払い開発に足を踏み入れました。 。 。
ビジネスプロセス:
この WeChat 公式 Web サイトで詳しく説明されています (ポータル:)。
一般的なプロセスは次のとおりです: ユーザーが支払いボタンをクリック -> バックエンド処理 (実際には、支払いに必要なデータをカプセル化して prepay_id を取得し、それといくつかの必要なパラメータをカプセル化して渡すことです)フロントデスクに送信します)--> フロントデスクはデータを受け取り、WeChat の js を呼び出してデータを処理し、支払いを呼び出します--> ユーザーには、金額やその他の情報を含むパスワードを入力するためのインターフェイスが表示されます-- >ユーザーがパスワードを入力すると、支払い成功ページが表示され、WeChat が インターフェースをコールバックします 支払い結果を通知します (プロセスのこの部分は WeChat 自体によって完了します。心配する必要はありません)それについて) --> システム自身のページに戻ります。
開発手順:
1. 支払いディレクトリを設定します
この公式ドキュメントは、読んだ後、混乱して少しめまいがするほど書かれています。理解できませんが、すごいと思います!ポータル:
2. 承認済みドメイン名を設定します
これら 2 つのステップを完了したら、大きな穴が近づいているので、休憩しても構いません。 。 。
3. マーチャントサーバーは統合注文インターフェースを呼び出して注文をリクエストします
これは何をするのでしょうか?最初にそれを始めたとき、私は混乱しましたが、WeChat 決済チームを「NB」と呼ぶのは誰ですか? 。 。理解できない場合は、ドキュメントに従ってください
ポータル: WeChat 公式がパラメーターについて詳しく説明しました。長い間読んだ後、必要なパラメータをいくつかカプセル化して、このインターフェイスにアクセスしてデータを取得するという方法で要約しました。以下は、他の人の紹介を詳細に直接コピーするパラメータです:
この部分の概要は、まずデータをマップにカプセル化し、次にそれを変換することです。ツールを介して XML に入力し (ツールは上で説明されています。戻って自分で読み込んでください)、ポスト リクエストを通じて [WeChat 統合注文インターフェイス] をリクエストします。署名に問題がなければ、大量の XML が返されます。このパラメータに必要なデータは prepay_id です。署名を生成してフロント デスクに戻ります。これでこの手順は完了です。
問題の概要 (このプロセスで遭遇した問題): 1 (重要) appid と openid は一致する必要があります。つまり、ユーザーの openid は現在の公式アカウント (公式アカウントが複数あります) のユーザーである必要があります。もしかしたらこの問題に遭遇することはないかもしれませんが、非常に重要なので、最初にお話しさせてください) 2
<span style="text-decoration: underline; color: #ff0000">第二步,生成签名并返回到前台</span><span style="color: #ff0000">这个过程中一定要注意参数一定要写对了,大小写,是否有空格,我在这上面掉了一个大坑,界面调用支付时一直闪退,注意.<br><br></span>
4、H5は、渡されたパラメータでWeChat支払いの組み込みJSを呼び出します
nonceStr == とにかく、先ほど署名と同じランダムな文字列を使用しました。理論的には、使用しなくても問題はありません。勤勉な友人は試してみてください。
public String return_data(HttpServletRequest request, HttpServletResponse response) throws Exception { logger.info("微信支付请求回调了"); String resXml = ""; Map<String, String> backxml = new HashMap<String, String>(); InputStream inStream;try { inStream = request.getInputStream(); ByteArrayOutputStream outSteam = new ByteArrayOutputStream();byte[] buffer = new byte[1024];int len = 0;while ((len = inStream.read(buffer)) != -1) { outSteam.write(buffer, 0, len); } outSteam.close(); inStream.close(); String result = new String(outSteam.toByteArray(), "utf-8");// 获取微信调用我们notify_url的返回信息Map<String, String> map = WXPayUtil.xmlToMap(result);if (map.get("result_code").toString().equalsIgnoreCase("SUCCESS")) {if (WXPayUtil.isSignatureValid(map, PayConfigUtil.API_KEY)) { logger.info("微信支付-签名验证成功");// backxml.put("return_code", "SUCCESS");// backxml.put("return_msg", "OK");// String toXml = WXPayUtil.mapToXml(backxml);// response.getWriter().write(toXml);resXml = "<xml>" + "<return_code><![CDATA[SUCCESS]]></return_code>"+ "<return_msg><![CDATA[OK]]></return_msg>" + "</xml> ";//业务处理开始 //业务处理结束 } BufferedOutputStream out = new BufferedOutputStream(response.getOutputStream());out.write(resXml.getBytes());out.flush();out.close(); } } catch (IOException e) { e.printStackTrace(); }return resXml; }
3、マーチャントサーバーは統合注文インターフェースを呼び出して注文をリクエストしますattachパラメータで、ここにビジネスデータを取り込むと非常に便利です
以上がWeChat パブリック アカウント決済開発 (Java) 例の詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。