この記事では、主に PHP で WeChat 決済を実装するプロセスについて説明します。私は長い間 WeChat 決済を開発してきましたが、パブリック アカウントも行ったことはありません。以前に赤い封筒を送るために、先輩たちのブログ記事を読んで、たくさんの回り道をせずに済みました。
準備:
1. WeChat 認定サービス アカウント、および有効化された WeChat 支払い SDK、ダウンロード アドレス: https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter =11_1
3. WeChat 決済プラットフォーム https://pay.weixin.qq.com/index.php/account/api_cert にログインして、支払い証明書をダウンロードします
方法の手順:
1. デモ ファイルの処理
(1) 転送公式デモ ダウンロード後、ファイル名は WxpayAPI_php_v3 になります。後でディレクトリを書きやすいように、このファイルの名前を wxpay に変更します。 (2) lib フォルダーの下にある WxPay.Api.php ファイルを開きます。コード:
curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,TRUE); curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,2);//严格校验
curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,FALSE); curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,2);//严格校验
に置き換えて、cURL によるピアの証明書の検証を無効にします。
(3) lib フォルダーの下にある WxPay.Config.php ファイルを開き、25 行目から始まり、アカウントに従って基本情報の設定を完了します。
const APPID = '公众账号APPID'; const MCHID = '商户号'; const KEY = '商户支付密钥'; const APPSECRET = '公众帐号secert';
(4) lib フォルダーの下にある WxPay.Notify.php ファイルを開きます。フォルダーの 79 行目のコード:
if($needSign == true && $this->GetReturn_code($return_code) == "SUCCESS") { $this->SetSign(); }
は、次のように変更されます:
if($needSign == true && $this->GetReturn_code() == "SUCCESS") { $this->SetSign(); }
(5) 証明書証明書ディレクトリを開き、中にある 2 つの証明書を独自の支払い証明書に置き換えます。
2. 公式アカウントの背景設定
(1) Web ページの認証ドメイン名を設定します。私のドメイン名は (xy.chuyin.ren) です。 (1) 支払い認証ディレクトリを設定します。ドメイン名は (xy.chuyin.ren) です。このドメイン名が指すディレクトリの weixinopen/ フォルダーにデモを置きました。デモ内の jsapi.php ファイルは example/ ディレクトリにあるため、支払いの承認が行われます。ディレクトリは: xy.chuyin.ren/weixinopen/wxpay/ example/ 3. 支払いプロセス example ディレクトリ内の jsapi.php ファイルを開きます。支払いの開始と処理はすべてここで完了します。
(1) ユーザーの openid を取得します
//①、获取用户openid $tools = new JsApiPay(); $openId = $tools->GetOpenid();ここで初期化された JsApiPay() クラスは、example/ ディレクトリ内の WxPay.JsApiPay.php に対応するオブジェクトを取得します。 GetOpenid() メソッドを呼び出すと、独自の openID が自動的に取得されます。
//②、统一下单 $input = new WxPayUnifiedOrder(); $input->SetBody("test"); $input->SetAttach("test"); $input->SetOut_trade_no(WxPayConfig::MCHID.date("YmdHis")); $input->SetTotal_fee("1"); $input->SetTime_start(date("YmdHis")); $input->SetTime_expire(date("YmdHis", time() + 600)); $input->SetGoods_tag("test"); $input->SetNotify_url("http://paysdk.weixin.qq.com/example/notify.php"); $input->SetTrade_type("JSAPI"); $input->SetOpenid($openId); $order = WxPayApi::unifiedOrder($input); echo '<font color="#f00"><b>统一下单支付单信息</b></font><br/>'; printf_info($order); $jsApiParameters = $tools->GetJsApiParameters($order);
$input->SetBody("test");
B. 注文番号
$input->SetTotal_fee("1");D.notify.php ファイルの場所に設定します。は Location にあるので、ここに http://xy.chuyin.ren/weixinopen/wxpay/example/notify.php として設定します
もちろん、他のアドレスを書くこともできます。支払い承認ドメインの下にある必要があります。支払いが成功すると、リンクで指定されたメソッドが自動的にコールバックされ、そこで判定とデータベース操作を実行できます。 .com/example/notify.php");
E. 追加パラメータ$input->SetOut_trade_no(WxPayConfig::MCHID.date("YmdHis"));追加パラメータは入力することも、入力しないこともできます。入力する場合は、文字列にスペースを含めないことをお勧めします。 この時点で、「Pay」をクリックすると、支払いが成功するはずです。 (3) 支払いを開始します
$input->SetAttach("test");「Pay Now」ボタンをクリックして callpay() 関数を呼び出します。これにより jsApiCall() 関数が呼び出され、支払いプログラムが開きます。
jsApiCall() 関数はあらゆるアクションを監視します:
res.err_msg は get_brand_wcpay_request:cancel でフロントエンドによって判断された支払いのキャンセルを示し、es.err_msg は get_brand_wcpay_request:ok で端末の前で判断されたことを示します支払いが成功したと判断した場合、これに基づいて支払いを成功ページにリダイレクトできます。
支払い結果はフロントエンドの jsApiCall() 関数を通じて監視できますが、これは信頼できません。支払いが成功したかどうかを確認するには、notify.php を通じてビジネス ロジックを処理する必要があります。支払い確認リンク SetNotify_url() は事前に構成されています。支払いが完了すると、WeChat サーバーはリンクに従って自動的に notify.php ファイルを要求し、このファイルのメイン コードは 2 つだけです。行:
<script type="text/javascript"> //调用微信JS api 支付 function jsApiCall() { WeixinJSBridge.invoke( 'getBrandWCPayRequest', <?php echo $jsApiParameters; ?>, function(res){ WeixinJSBridge.log(res.err_msg); alert(res.err_code+res.err_desc+res.err_msg); } ); } function callpay() { if (typeof WeixinJSBridge == "undefined"){ if( document.addEventListener ){ document.addEventListener('WeixinJSBridgeReady', jsApiCall, false); }else if (document.attachEvent){ document.attachEvent('WeixinJSBridgeReady', jsApiCall); document.attachEvent('onWeixinJSBridgeReady', jsApiCall); } }else{ jsApiCall(); } } </script>
これに従って、WxPay.Notify.php クラス ファイルの Handle() 関数に移動します:
$notify = new PayNotifyCallBack(); $notify->Handle(false);
/** * * 回调入口 * @param bool $needSign 是否需要签名输出 */ final public function Handle($needSign = true) { $msg = "OK"; //当返回false的时候,表示notify中调用NotifyCallBack回调失败获取签名校验失败,此时直接回复失败 $result = WxpayApi::notify(array($this, 'NotifyCallBack'), $msg); if($result == false){ $this->SetReturn_code("FAIL"); $this->SetReturn_msg($msg); $this->ReplyNotify(false); return; } else { //该分支在成功回调到NotifyCallBack方法,处理完成之后流程 $this->SetReturn_code("SUCCESS"); $this->SetReturn_msg("OK"); } $this->ReplyNotify($needSign); }
次に、WxPay.Api.php ファイルの 411 行目、notify() に移動します。 function:
$result = WxpayApi::notify(array($this, 'NotifyCallBack'), $msg);
=$GLOBALS['HTTP_RAW_POST_DATA'] 内の $xml は、支払いが成功した後にユーザーから返される結果であり、xml 形式の文字列です。
ここで返された XML データを記録し、それを開いて確認できます。$out_trade_no は支払い前に設定した注文番号で、$attach は追加のパラメーター セットです。
注文番号を取得して、そのすぐ下にデータベース内のデータ変更など、決済が成功した後のロジックを書きました。
このようにして、WeChat決済のJsApi決済を大まかに分析します。
これは、公式の SDK を統合することによって実装されます。SDK を使用しない場合は、PHP を使用して WeChat 支払い (jsapi 支払い) と返金を実装することができます (支払いを統合する必要はありません)。 SDK)
関連おすすめ:
以上がPHP は WeChat 支払いプロセス共有を実装しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。