PHP を使用して WeChat 公式アカウントの決済機能を開発する方法
モバイル決済の急速な発展により、最も主流の決済方法の 1 つである WeChat 決済中国では、多くの企業や個人にとって必要な支払い方法となっています。 WeChatパブリックアカウントを開発する際に、決済機能を統合できれば、ユーザーにより便利な決済方法が提供され、企業にとってより多くのメリットがもたらされます。この記事では、PHPを使ってWeChat公式アカウントの決済機能を開発する方法と具体的なコード例を紹介します。
まず、WeChat 公式アカウントの支払いの基本的なプロセスを理解する必要があります。これは主に次のステップに分かれています:
次に、これらの手順に固有のコードを実装します。
最初のステップは、ユーザーが WeChat 公式アカウントで支払いリクエストを開始することです。フロントエンド インターフェイスに支払いボタンを追加し、ボタンがクリックされたときに支払いリクエストをトリガーする必要があります。具体的なコードは次のとおりです。
<button id="payBtn">支付</button> <script src="https://res.wx.qq.com/open/js/jweixin-1.6.0.js"></script> <script> document.getElementById('payBtn').addEventListener('click', function() { // 调用后端接口获取支付参数 fetch('/getPayParams.php', { method: 'GET' }) .then(response => response.json()) .then(data => { // 调起微信支付界面 wx.chooseWXPay({ appId: data.appId, timestamp: data.timestamp, nonceStr: data.nonceStr, package: data.package, signType: data.signType, paySign: data.paySign, success: function(res) { // 支付成功后的操作 }, cancel: function(res) { // 用户取消支付 }, fail: function(res) { // 支付失败 } }); }); }); </script>
上記のコードでは、WeChat が提供する JS-SDK を使用して、wx.chooseWXPay
メソッドを呼び出して WeChat 支払いインターフェイスをトリガーします。
2 番目のステップでは、公式アカウントが WeChat 支払いプラットフォームに支払いリクエストを送信します。バックエンドで支払いリクエストを受信し、WeChat 支払いプラットフォームに送信するコードを記述する必要があります。具体的なコードは次のとおりです。
<?php // 获取参数 $totalFee = $_GET['totalFee']; // 支付金额,单位为分,例如100表示1元 // 构造请求数据 $data = [ 'appid' => '公众号的AppID', 'mch_id' => '商户号', 'nonce_str' => uniqid(), // 随机字符串 'body' => '支付测试', // 商品描述 'out_trade_no' => time(), // 商户订单号 'total_fee' => $totalFee, // 支付金额 'spbill_create_ip' => $_SERVER['REMOTE_ADDR'], // 终端IP 'notify_url' => '支付结果通知的接收地址', 'trade_type' => 'JSAPI', // 交易类型 'openid' => '用户的openid' ]; // 生成签名 $data['sign'] = md5(http_build_query($data) . '&key=商户的Key'); // 将请求数据转为XML格式 $xmlData = '<xml>'; foreach ($data as $key => $value) { $xmlData .= "<$key>$value</$key>"; } $xmlData .= '</xml>'; // 发送请求 $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, 'https://api.mch.weixin.qq.com/pay/unifiedorder'); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, $xmlData); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); $response = curl_exec($ch); curl_close($ch); // 解析支付结果 $responseData = simplexml_load_string($response, null, LIBXML_NOCDATA); if ($responseData->return_code == 'SUCCESS' && $responseData->result_code == 'SUCCESS') { $prepayId = $responseData->prepay_id; // 获取预支付交易会话标识 // 构造返回数据 $returnData = [ 'appId' => '公众号的AppID', 'timeStamp' => time(), 'nonceStr' => uniqid(), 'package' => 'prepay_id=' . $prepayId, 'signType' => 'MD5' ]; $returnData['paySign'] = md5(http_build_query($returnData) . '&key=商户的Key'); echo json_encode($returnData); } else { echo '支付请求失败'; } ?>
上記のコードでは、最初にフロントエンドによって渡された支払い金額とその他のパラメーターを取得し、次にリクエストデータを構築し、そのリクエストを統合注文インターフェイスに送信します。 cURL を介した WeChat 支払いプラットフォーム。次に、支払い結果を解析し、支払いリクエストが成功した場合は、前払いトランザクション セッション ID (prepay_id) をフロントエンドに返します。
3 番目のステップは、フロントエンドで WeChat 支払いインターフェイスを開くことです。前のコードはすでにこの関数を実装しているため、追加のコードは必要ありません。
4 番目のステップは、WeChat 支払いプラットフォームが支払い結果通知を公開アカウントに送信することです。支払い結果通知を受信して処理するには、公式アカウントのバックエンドにコードを記述する必要があります。具体的なコードは次のとおりです。
<?php // 接收支付结果通知 $xmlData = file_get_contents('php://input'); $responseData = simplexml_load_string($xmlData, null, LIBXML_NOCDATA); // 验证通知的有效性 if ($responseData->return_code == 'SUCCESS' && $responseData->result_code == 'SUCCESS') { // 处理支付结果 // do something // 返回处理结果给微信支付平台 echo '<xml><return_code><![CDATA[SUCCESS]]></return_code><return_msg><![CDATA[OK]]></return_msg></xml>'; } else { echo '支付结果通知验证失败'; } ?>
上記のコードでは、まず決済結果通知の XML データを取得し、データを解析して通知の正当性を検証します。検証に合格すると、支払い結果が処理され、最終的に処理結果が WeChat 支払いプラットフォームに返されます。
上記のコードにより、PHPを使用してWeChat公式アカウントの決済機能を開発できます。もちろん、実際の開発プロセスでは、セキュリティやユーザー エクスペリエンスなどの要素も考慮し、それに応じて最適化する必要があります。
要約すると、PHP を使用して WeChat 公式アカウントの支払い機能を開発するには、次の手順を完了する必要があります。フロントエンド インターフェイスに支払いボタンを追加し、支払いリクエストをトリガーし、バックエンドが支払いリクエストを受け取ります。フロントエンドが WeChat 支払いインターフェイスを開き、バックエンドが支払い結果通知を受信して処理します。上記の手順をコード実装することで、WeChat公式アカウントの決済機能を簡単に実装できます。
以上がPHPを使ってWeChat公式アカウントの決済機能を開発する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。