1. WeChat バックグラウンド設(shè)定
1. テスト認(rèn)証ディレクトリとテスト ホワイトリストを追加します。
WeChat バックグラウンドで、テスト認(rèn)証ディレクトリ (xxx.sinaapp.com/example/ など) を設(shè)定し、それを追加します。テストのホワイトリスト WeChat ID。
ここでの「?jìng)€(gè)人 WeChat ID」は、QQ アカウントや個(gè)人のニックネームではないことに注意してください。これは、WeChat にログインした後の「Me」インターフェースの「WeChat ID」フィールドの文字列です。
ただテストしているだけなので、支払い承認(rèn)ディレクトリが設(shè)定されているかどうかは関係ありません。
2. コンテンツのリスト
Web ページの承認(rèn)済みドメイン名を設(shè)定します:
「開発者センター/インターフェイス権限テーブル/Web ページのアカウント/ユーザーの基本情報(bào)を取得する Web ページの権限」で設(shè)定します。 Web ページの承認(rèn)済みドメイン名は、xxx.sinaapp.com などのテスト サーバーのドメイン名に設(shè)定されます。http:// は必要ありません。
2. マーチャントプラットフォームの設(shè)定
1. 証明書をダウンロードします
「アカウント設(shè)定/APIセキュリティ/API証明書」でダウンロードします。管理者の攜帯電話認(rèn)証コードが必要です。ダウンロードして解凍した後、apiclient_key.pem と apiclient_cert.pem を使用する必要があります。
2. 支払いキーを生成
「アカウント設(shè)定/APIセキュリティ/APIキー」で設(shè)定します。支払いキーは支払い時(shí)に使用されます。この値は、ソース コード構(gòu)成ファイル內(nèi)の KEY 定數(shù)です。
3. 公式 V3.7 サンプル コードを使用します
1. 主に Wxpay.pub.config.php の設(shè)定を変更します:
const APPID //公眾號(hào)中“開發(fā)者中心”看到的AppID
const MCHID //微信支付商戶資料審核成功郵件中的商戶號(hào)
const KEY //你在商戶平臺(tái)中設(shè)置的支付key
const APPSECRET //公眾號(hào)中“開發(fā)者中心”看到的AppSecret
const JS_API_CALL_URL //設(shè)置這個(gè)url,可在此頁面中獲得用戶的openid。
//證書路徑,注意應(yīng)該填寫絕對(duì)路徑
const SSLCERT_PATH // apiclient_cert.pem文件url
const SSLKEY_PATH // apiclient_key.pem文件url,如’/cert/ apiclient_key.pem’
const NOTIFY_URL //異步通知url,可使用demo中的notify_url.php
2. 公式コードのバグを変更します:
If "curl_setopt( ) パラメータ 2 が長(zhǎng)いことが予想されます」というエラーは、WxPayPubHelper.php 內(nèi)に「curl_setopt」のスペルを間違えて「curl_setop」としている箇所がいくつかあるためです。それを修正するだけです。 「curl_close(): 11 is not a valid」が表示される場(chǎng)合は、閉じられたcurlセッションが誤って閉じられたことが原因です:
if(gettype($ch) == 'resource') curl_close($ch);
3. 公式デモは直接実行できません。私たちはそれを自分たちで理解する必要があります。まず、index.php にリンクを追加します:
<a href="pay.php"> 獲取openid</a></h4>
3. 次に、pay.php ページを作成してユーザーの openid を取得し、支払いを開始します:
<?php
/**
* JS_API支付demo
* ====================================================
* 在微信瀏覽器里面打開H5網(wǎng)頁中執(zhí)行JS調(diào)起支付。接口輸入輸出數(shù)據(jù)格式為JSON。
* 成功調(diào)起支付需要三個(gè)步驟:
* 步驟1:網(wǎng)頁授權(quán)獲取用戶openid
* 步驟2:使用統(tǒng)一支付接口,獲取prepay_id
* 步驟3:使用jsapi調(diào)起支付
*/
include_once ("WxPayPubHelper.php");
$jsApi = new JsApi_pub();
// =========步驟1:網(wǎng)頁授權(quán)獲取用戶openid============
// 通過code獲得openid
if (! isset($_GET['code'])) {
// 觸發(fā)微信返回code碼
$url = $jsApi->createOauthUrlForCode(WxPayConf_pub::JS_API_CALL_URL);
Header("Location: $url");
} else {
// 獲取code碼,以獲取openid
$code = $_GET['code'];
$jsApi->setCode($code);
$openid = $jsApi->getOpenId();
}
$goods = "test";
// 使用統(tǒng)一支付接口
$unifiedOrder = new UnifiedOrder_pub();
$unifiedOrder->setParameter("openid", "$openid"); // 用戶openid
$unifiedOrder->setParameter("body", "$goods"); // 商品描述
// 自定義訂單號(hào),此處僅作舉例
$timeStamp = time();
$out_trade_no = WxPayConf_pub::APPID . "$timeStamp"; // 商戶訂單號(hào)
$unifiedOrder->setParameter("out_trade_no", "$out_trade_no");
$price = "1";
$unifiedOrder->setParameter("total_fee", "$price"); // 總金額
$unifiedOrder->setParameter("notify_url", WxPayConf_pub::NOTIFY_URL); // 通知地址
$unifiedOrder->setParameter("trade_type", "JSAPI"); // 交易類型
$prepay_id = $unifiedOrder->getPrepayId();
// =========步驟3:使用jsapi調(diào)起支付============
$jsApi->setPrepayId($prepay_id);
$jsApiParameters = $jsApi->getParameters();
echo $jsApiParameters;
?>
<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8" />
<meta name="viewport" content="width=device-width,initial-scale=1.0" />
<title>微信安全支付</title>
<script type="text/javascript">
//調(diào)用微信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>
</head>
<body>
<p> </p>
<p> </p>
<p align="center">
<table border="1">
<tr>
<td>openID</td>
<td><?php echo $openid;?></td>
</tr>
<tr>
<td>商品名稱</td>
<td><?php echo $goods;?></td>
</tr>
<tr>
<td>訂單號(hào)</td>
<td><?php echo $out_trade_no;?></td>
</tr>
<tr>
<td>prepay_id</td>
<td><?php echo $prepay_id;?></td>
</tr>
<tr>
<td>價(jià)格</td>
<td><?php echo $price;?></td>
</tr>
</table>
<button data-theme="b" type="button" onclick="callpay()">貢獻(xiàn)一下</button>
</p>
</body>
</html>
4. 公式 V3 サンプル コードを使用します
1。コード
最新の SDK バージョンは V3.7 ですが、V3.7 のデモをダウンロードするのではなく (このサンプルは機(jī)能しません)、代わりに V3 のサンプルをダウンロードしてください:
pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=11_1
2。 Web ルート ディレクトリの下にあります。たとえば、圧縮パッケージを解凍した後のディレクトリは WxpayAPI_php_v3 です。このディレクトリに入り、すべてのファイルを選択して、プロジェクト ディレクトリにコピーする必要があります。このディレクトリにはindex.phpがあるため、テスト時(shí)にはxxx.sinaapp.com/index.phpにアクセスする必要があります。
3.index.php內(nèi)のタグのURLアドレスをサーバー上のURLアドレスに変更します。
4. WeChat で會(huì)話ウィンドウを開き、index.php アドレス (xxx.sinaapp.com/index.php など) を入力し、會(huì)話ウィンドウ內(nèi)のこのリンクをクリックします。いくつかのボタンが表示されます?!窲SAPI Payment」ボタンをクリックすると、支払い金額が 1 セントのウィンドウが表示されます。荷受人を入力して支払います。支払い成功インターフェイスがポップアップ表示されます。
この時(shí)點(diǎn)で、基本的に公式の支払いコードが利用可能であることを意味します。次に、それをベースにして獨(dú)自のコードに変更できます。
5. cert ディレクトリ內(nèi)の apiclient_key.pem と apiclient_cert.pem を獨(dú)自の証明書に置き換えます。
6. WxPay.Config.php の次の項(xiàng)目を獨(dú)自のものに変更します:
const APPID //公眾號(hào)中“開發(fā)者中心”看到的AppID
const MCHID //微信支付商戶資料審核成功郵件中的商戶號(hào)
const KEY //你在商戶平臺(tái)中設(shè)置的支付key
const APPSECRET //公眾號(hào)中“開發(fā)者中心”看到的AppSecret
7. Sina の sae をテスト サーバーとして使用しているため、sae ではファイル io を直接書き込むことができないため、公式 Web サイトを追加できます。ファイル操作はそれに応じて変更されます (SaeStorage を使用)。つまり、log.php の CLogFileHandler クラスを変更する必要があります:
class CLogFileHandler implements ILogHandler
{
private $fn=null;
private $ss=null;
public function construct($file = '')
{
$this->fn=str_replace("../logs/", "", $file);
$this->ss=new SaeStorage();
}
public function write($msg)
{
$bytes = $this->ss->read('log', $this->fn);
$str = $bytes;
$this->ss->write('log', $this->fn, "$str\n$msg");
}
public function destruct()
{
$fn=null;
$ss=null;
}
}
8. 署名失敗のエラーが発生した場(chǎng)合は、WeChat の支払いインターフェイス デバッグ ツールを使用してテストできます: pay.weixin.qq.com/wiki /tools/signverify /.
このツールは「スキャンされた支払い」を検証するために使用されますが、「パラメータの追加」ボタンと「パラメータの削除」ボタンを使用して、「公式アカウントの支払い」のテストにも使用できます。たとえば、送信した XML の內(nèi)容が次の場(chǎng)合 (ログ機(jī)能を使用して、送信した XML コンテンツを sae ストレージに保存し、ログ ファイルをダウンロードできます):
<xml><openid><![CDATA[om8888LTHBj99992Qgl_eUAOFgxs]]></openid><body><![CDATA[test]]></body><out_trade_no><![CDATA[wx111196222243ffa1143858aaaa]]></out_trade_no><total_fee>1</total_fee><notify_url><![CDATA[http://xxx.sinaapp.com/wxpay/demo/notify_url.php]]></notify_url><trade_type><![CDATA[JSAPI]]></trade_type><appid><![CDATA[wx000096104a431111]]></appid><mch_id>6666833333</mch_id><spbill_create_ip><![CDATA[10.211.76.107]]></spbill_create_ip><nonce_str><![CDATA[1agieoxyi8hc7e817rsnjlyn9lxmsnxj]]></nonce_str><sign><![CDATA[817034E4DE8E6067EB85CDF7318EF0A1]]></sign></xml>
次に、フォームに記入できます。テストツールは次のようになります:

「署名を生成」をクリックします。取得した署名とログ ファイル內(nèi)の署名を比較して一貫性があるかどうかを確認(rèn)すると、署名アルゴリズムの問??題を排除できます。
2 つの署名が一致する場(chǎng)合、それは間違いなく支払いキーに問題があります。製品 MM が間違いを犯したか、AppSecret と支払いキーが逆になったかのどちらかです (製品 MM が間違った支払いキーを使用するように指示したことがあり、3 日間の時(shí)間を無駄にしました。バックグラウンドを設(shè)定した後、毎回すべてのコードを繰り返し確認(rèn)しました)問題は支払いキーだったので、私は管理者ではなかったので、モバイル用の製品 MM にログインしました。電話認(rèn)証コードと支払いキーをリセットすると、コードはワンクリックで機(jī)能します)
[関連する推奨事項(xiàng)]
1. WeChatパブリックアカウントプラットフォームのソースコードのダウンロード
2. WeChat公式アカウント開発におけるクレジットカード決済のチュートリアルを共有する
3. WeChat決済開発におけるクレジットカード決済のサンプルの詳細(xì)な説明
4. WeChatアプレット決済機(jī)能の開発
以上がWeChat開発のためのWeChat支払いの詳細(xì)內(nèi)容です。詳細(xì)については、PHP 中國語 Web サイトの他の関連記事を參照してください。