ホームページ  >  記事  >  バックエンド開発  >  PHP は WeChat 支払いプロセス共有を実装します

PHP は WeChat 支払いプロセス共有を実装します

小云云
小云云オリジナル
2018-03-20 15:42:2416831ブラウズ

この記事では、主に 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 を取得します

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->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 で端末の前で判断されたことを示します支払いが成功したと判断した場合、これに基づいて支払いを成功ページにリダイレクトできます。

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

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

<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>

これに従って、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, &#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);
}

次に、WxPay.Api.php ファイルの 411 行目、notify() に移動します。 function:

$result = WxpayApi::notify(array($this, &#39;NotifyCallBack&#39;), $msg);

=$GLOBALS['HTTP_RAW_POST_DATA'] 内の $xml は、支払いが成功した後にユーザーから返される結果であり、xml 形式の文字列です。

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

注文番号を取得して、そのすぐ下にデータベース内のデータ変更など、決済が成功した後のロジックを書きました。

このようにして、WeChat決済のJsApi決済を大まかに分析します。


これは、公式の SDK を統合することによって実装されます。SDK を使用しない場合は、PHP を使用して WeChat 支払い (jsapi 支払い) と返金を実装することができます (支払いを統合する必要はありません)。 SDK)

関連おすすめ:

WeChat決済返金機能開発

WeChat決済とAlipay決済のPHP開発サンプル

PHP WeChat決済開発WeChat返金機能サンプル

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

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