ホームページ >バックエンド開発 >PHPの問題 >php WeChat の支払いプロセスとは何ですか?

php WeChat の支払いプロセスとは何ですか?

爱喝马黛茶的安东尼
爱喝马黛茶的安东尼オリジナル
2019-08-27 15:24:044734ブラウズ

php WeChat の支払いプロセスとは何ですか?

# 準備:

1. WeChat 認証サービス アカウントと WeChat 支払いを開きます

2. 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 を開きます。ファイルの 537 行目には、curl ネットワーク リクエスト構成コードがあります。 cURL によるピアの証明書の検証を無効にするために、

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);//严格校验

に置き換えられます。

(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 つの証明書を独自のものに置き換えます。支払い証明書。

関連する推奨事項: "

PHP チュートリアル "

2. パブリック アカウントのバックグラウンド設定

(1) Web ページの承認済みドメイン名 (マイ ドメイン) を設定します。 name is ( xy.chuyin.ren);

php WeChat の支払いプロセスとは何ですか?

(2) 支払い承認ディレクトリを設定します。ドメイン名は (xy.chuyin.ren) です。このドメイン名が指すディレクトリにデモが存在します。weixinopen/ フォルダの下のデモの jsapi.php ファイルは example/ ディレクトリにあるため、支払い承認ディレクトリは xy.chuyin.ren/weixinopen/wxpay/ となります。 example/


php WeChat の支払いプロセスとは何ですか?

3. 支払いプロセス

example ディレクトリにある jsapi.php ファイルを開き、支払いの開始と処理はすべてここで完了します。

(1) ユーザー openid を取得します。

APPID と APPSecert は以前に構成済みであるため、ここで処理する必要はありません。

//①、获取用户openid
$tools = new JsApiPay();
$openId = $tools->GetOpenid();

ここで初期化された JsApiPay() クラスは、最初にオブジェクトを取得します。このファイルは、example/ ディレクトリの WxPay.JsApiPay.php に対応します。GetOpenid() メソッドを呼び出すと、独自の openID が自動的に取得されます。

(2) 統合注文

//②、统一下单
$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 &#39;<font color="#f00"><b>统一下单支付单信息</b></font><br/>&#39;;
printf_info($order);
$jsApiParameters = $tools->GetJsApiParameters($order);

WxPay.Api.php の 24 行目のunifiedOrder() メソッドに対応し、注文情報と支払いコールバック関数を設定します。ここで変更:

A. 製品名:

$input->SetBody("test");

B. 注文番号

$input->SetOut_trade_no(WxPayConfig::MCHID.date("YmdHis"));

C. 支払い金額

$input->SetTotal_fee("1");

D. 支払い確認リンク

notify.php ファイルの場所を設定するので、ここでは http://xy.chuyin.ren/weixinopen/wxpay/example/notify.php

のように設定することもできます。他のアドレスを書き込みます, もちろん、支払い承認ドメイン名の下にある必要があります. 支払いが成功すると、リンクで指定されたメソッドが自動的にコールバックされ、そこで判定とデータベース操作が実行されます。

$input->SetNotify_url("http://paysdk.weixin.qq.com/example/notify.php");

E. 追加パラメータ

$input->SetAttach("test");

追加パラメータは入力することも、入力しないこともできます。入力する場合は、文字列にスペースを含めないことをお勧めします。

この時点で、[Pay] をクリックすると、支払いが成功するはずです。

(3) 支払いの開始

<script type="text/javascript">
//调用微信JS api 支付
function jsApiCall()
{
WeixinJSBridge.invoke(
&#39;getBrandWCPayRequest&#39;,
<?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(&#39;WeixinJSBridgeReady&#39;, jsApiCall, false);
}else if (document.attachEvent){
document.attachEvent(&#39;WeixinJSBridgeReady&#39;, jsApiCall); 
document.attachEvent(&#39;onWeixinJSBridgeReady&#39;, jsApiCall);
}
}else{
jsApiCall();
}
}
</script>

[今すぐ支払う]ボタンをクリックすると、callpay() 関数が呼び出され、この関数が jsApiCall() 関数を呼び出して支払いプログラムを開きます。

php WeChat の支払いプロセスとは何ですか?

jsApiCall() 関数はアクションのすべてのステップを監視します:

php WeChat の支払いプロセスとは何ですか?

res.err_msg はフロントエンドを示しますget_brand_wcpay_request:cancel の判定 支払いをキャンセルする場合、es.err_msg は get_brand_wcpay_request:ok となり、フロントエンドが支払いが成功したと判断したことを示しており、これに基づいて成功ページにジャンプできます。


(4) 成功コールバックのサポート

支払い結果はフロントエンドの jsApiCall() 関数を通じて監視できますが、これは信頼できません。支払いが成功したかどうかを確認するには、notify.php を通じてビジネス ロジックを処理する必要があります。支払い確認リンク SetNotify_url() は事前に設定されています。支払いが完了すると、WeChat サーバーはリンクに従って自動的に notify.php ファイルを要求し、このファイルを開きます。実際、このファイルのメイン コードは 2 つだけです。行:

$notify = new PayNotifyCallBack();
$notify->Handle(false);

ここから WxPay.Notify.php クラス ファイルの Handle() 関数をトレースします:

/**
 * 
 * 回调入口
 * @param bool $needSign  是否需要签名输出
 */
final public function Handle($needSign = true)
{
$msg = "OK";
//当返回false的时候,表示notify中调用NotifyCallBack回调失败获取签名校验失败,此时直接回复失败
$result = WxpayApi::notify(array($this, &#39;NotifyCallBack&#39;), $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);
}

メイン コード:

$result = WxpayApi::notify(array($this, &#39;NotifyCallBack&#39;), $msg);
然后来到WxPay.Api.php文件的第411行,notify()函数:
/**
 * 
 * 支付结果通用通知
 * @param function $callback
 * 直接回调函数使用方法: notify(you_function);
 * 回调类成员函数方法:notify(array($this, you_function));
 * $callback  原型为:function function_name($data){}
 */
public static function notify($callback, &$msg)
{
//获取通知的数据
$xml = $GLOBALS[&#39;HTTP_RAW_POST_DATA&#39;];
//file_put_contents(&#39;log.txt&#39;,$xml,FILE_APPEND);
//如果返回成功则验证签名
try {
$result = WxPayResults::Init($xml);
} catch (WxPayException $e){
$msg = $e->errorMessage();
return false;
}
return call_user_func($callback, $result);
}

$xml=$GLOBALS ['HTTP_RAW_POST_DATA'] はここです 支払いが成功すると、ユーザーは XML 形式の文字列である結果を返します。

php WeChat の支払いプロセスとは何ですか?

ここで返された XML データを記録し、それを開いて、$out_trade_no が支払い前に設定した注文番号であるかどうか、$attach が追加のパラメーター セットであるかどうかを確認できます。

注文番号を取得したら、データベース内のデータ変更など、決済成功後のロジックを直接書きます。

これでWeChat決済のJsApi決済の全体的な分析が完了しました。

php WeChat の支払いプロセスとは何ですか?

以上がphp WeChat の支払いプロセスとは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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