ホームページ >バックエンド開発 >PHPチュートリアル >PHP 開発 IIS7 の落とし穴を埋める WeChat アプレット

PHP 開発 IIS7 の落とし穴を埋める WeChat アプレット

不言
不言オリジナル
2018-04-17 11:22:131600ブラウズ

この記事は主に WeChat アプレットを紹介し、PHP 開発 IIS7 の落とし穴を詳しく説明します。興味のある友人は参考にしてください。

7 日間モール アプレットに取り組んできました。ドキュメントは包括的ではないので、すべてを自分で調べる必要があります

オンラインにした後は、バージョンが 1.2 以降である必要があります。 Alibaba Cloud 上の無料の CA 証明書 インターネット上にはたくさんのチュートリアルがあります。2018.4.16 親愛なるあなたはそれを申請することができますが、証明書を申請するにはナビゲーションでランダムにクリックし、無料の CA 証明書をクリックする必要があります

Windows Power を通じて Windows 2008 r2 のバージョンを 1.2 以降にアップグレードするには、インターネット上にも多くのチュートリアルがあります


以下は主に開発に関する落とし穴について説明します

1: まずピットにログインします

session_key と openid を取得する

https://developers.weixin.qq.com/miniprogram/dev/api/api-login.html

フロントエンド code

wx.login({
  success: (loginRes) =>  
  { 
    loginRes.code
  }
})

server に移動します 取得したコードをフロントエンドで完了させるのではなく、サーバーに送信する必要があるのはなぜですか?

公式ドキュメントには次の一節があります:

セッションキー session_key は、ユーザーデータの暗号化と署名のためのキーです。アプリケーション自身のデータのセキュリティを確保するために、開発者サーバーはセッション キーをアプレットに配信したり、このキーを外部に提供したりすべきではありません。

サーバーサイドphpはhttps://api.weixin.qq.com/sns/jscode2sessionを通じてsession_keyとopenidを取得します

ユーザーのアバターニックネームなどは

フロントエンドを通じて取得できます wx.getUserInfo インターフェイス

データの

改ざんを防ぐために、WeChat は公式に encryptedData 戻り値を提供しており、これはサーバー

のアルゴリズムを通じてロックを解除できます https://developers.weixin .qq.com/miniprogram/dev/ api/signature.html?t=20161122

1: Payment Pit

これについては WeChat 公式を賞賛したいと思います。この文書は本当に乱雑です。ページがあります。ここ、そこのページ、特に最後のステップ

支払いの検証で失敗しました これは間違いなくケースの問題です。たとえば、appId はどこでも appid ですが、ここでは大文字にする必要があります。以下に php コードを投稿します。ご不明な点がある場合は、公式がオンライン認証を提供しますhttps://pay.weixin.qq.com/wiki/tools/signverify/

支払い手順

ユーザーがフロントエンドで支払いを開始します -> サーバーと通信します -> サーバーがパラメータを送信します WeChat 支払いインターフェース (https://api.mch.weixin.qq.com/pay/unifiedorder) に移動して prepay_id を取得します -> ; サーバーは検証パラメータを生成し、フロントエンドに送信します。フロントエンドは、統一された注文を行うために wx.requestPayment

を実行します。ドキュメント: https://pay.weixin.qq.com/wiki/doc /api/wxa/wxa_api.php?chapter=9_1

wx.requestPayment ドキュメント: https://developers.weixin.qq.com/miniprogram/ dev/api/api-pay.html

統一注文を通過した後appid と nonce_Str の 2 つの間違った記述方法を長い間繰り返し確認しました。以下に例を示します。配列と疑似クエリの変換に便利な変換関数もいくつか提供します。

$params=array(
        'appId'=>'',
        'package'=>'prepay_id='.'',
        'timeStamp'=>'',
        'signType'=>'MD5',
        'nonceStr'=>''
);

$params['paySign']=md5Sign($params);
unset($params['appId']);

次に、$params をフロントエンドに渡して、wx.requestPayment インターフェイスを呼び出します

以下は、アカウントをブロックするために私が一般的に使用する PHP 側の開発関数です

/*
by 醉亦逝愁
md5Sign用于小程序服务端签名校验
*/
function md5Sign($params){ 		
    	ksort($params); 
	$stringA=arr2str($params);
	$stringSignTemp=$stringA.'&key='.'商户key(mch_key)';
	$sign=strtoupper(md5($stringSignTemp));
	return $sign;
} 
/*
by 醉亦逝愁
arr2str用于小程序服务端Array转伪Query
*/
function arr2str($array){
 
    $string = [];
 
    if($array && is_array($array)){
 
        foreach ($array as $key=> $value){
            $string[] = $key.'='.$value;
        }
    }
 
    return implode('&',$string);
}
/*
by 醉亦逝愁
arr2str用于小程序服务端Array转Xml
用途https://api.mch.weixin.qq.com/pay/unifiedorder
*/
function arr2xml($arr,$item='root'){        
    $dom = new DOMDocument("1.0"); 
    $item = $dom->createElement($item); 
    $dom->appendChild($item); 
    foreach ($arr as $key=>$val){ 
        $itemx = $dom->createElement(is_string($key)?$key:"item"); 
        $item->appendChild($itemx); 
        if (!is_array($val)){ 
            $text = $dom->createCDATASection($val); 
            $itemx->appendChild($text); 
        }else { 
            arrayToXml($val,$dom,$itemx); 
        } 
    } 
    return $dom->saveXML($item); 
}





https://api.mch.weixin.qq.com/pay/unifiedorder インターフェースから返される xml は、以下の関数により Array になります

$xmlstring=simplexml_load_string($data, 'SimpleXMLElement', LIBXML_NOCDATA);
$data=get_object_vars($xmlstring);

その他は後ほど追加します。

関連する推奨事項:

php WeChatパブリックアカウント開発現金赤い封筒







以上がPHP 開発 IIS7 の落とし穴を埋める WeChat アプレットの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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