ホームページ バックエンド開発 PHPチュートリアル WeChatパブリックプラットフォームのサンプルコード分析

WeChatパブリックプラットフォームのサンプルコード分析

Mar 29, 2017 pm 04:33 PM
php マイクロチャネルパブリックプラットフォーム

この記事では、主に php WeChat パブリック プラットフォームのサンプル コードを詳細に紹介します。興味のある友人は参照してください

1. 概要

WeChat パブリック プラットフォームは、さらなる開発の前に、簡単な php サンプル コードを提供します。私たちはそれを詳細に理解する必要があります。

2. コードを取得します


3. コードを分析します

完全なコードは次のとおりです:


rreee

オリジナルサンプルコードは大きく4つのパートに分かれています:

TOKENを定義する
クラスwechatCallbackapiTestを宣言する
クラスwechatCallbackapiTestのインスタンスオブジェクト$wechatObjを作成する
クラスのvalid()メソッドを呼び出す。

3.2 詳細な分析

3.2.1 TOKENの定義

<?php
/**
 * wechat php test
 */

//define your token
define("TOKEN", "weixin");
$wechatObj = new wechatCallbackapiTest();
$wechatObj->valid();

class wechatCallbackapiTest
{
 public function valid()
 {
  $echoStr = $_GET["echostr"];

  //valid signature , option
  if($this->checkSignature()){
   echo $echoStr;
   exit;
  }
 }

 public function responseMsg()
 {
  //get post data, May be due to the different environments
  $postStr = $GLOBALS["HTTP_RAW_POST_DATA"];

  //extract post data
  if (!empty($postStr)){
    
    $postObj = simplexml_load_string($postStr, &#39;SimpleXMLElement&#39;, LIBXML_NOCDATA);
    $fromUsername = $postObj->FromUserName;
    $toUsername = $postObj->ToUserName;
    $keyword = trim($postObj->Content);
    $time = time();
    $textTpl = "<xml>
       <ToUserName><![CDATA[%s]]></ToUserName>
       <FromUserName><![CDATA[%s]]></FromUserName>
       <CreateTime>%s</CreateTime>
       <MsgType><![CDATA[%s]]></MsgType>
       <Content><![CDATA[%s]]></Content>
       <FuncFlag>0</FuncFlag>
       </xml>";    
    if(!empty( $keyword ))
    {
     $msgType = "text";
     $contentStr = "Welcome to wechat world!";
     $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);
     echo $resultStr;
    }else{
     echo "Input something...";
    }

  }else {
   echo "";
   exit;
  }
 }
  
 private function checkSignature()
 {
  $signature = $_GET["signature"];
  $timestamp = $_GET["timestamp"];
  $nonce = $_GET["nonce"]; 
    
  $token = TOKEN;
  $tmpArr = array($token, $timestamp, $nonce);
  sort($tmpArr);
  $tmpStr = implode( $tmpArr );
  $tmpStr = sha1( $tmpStr );
  
  if( $tmpStr == $signature ){
   return true;
  }else{
   return false;
  }
 }
}

?>
ログイン後にコピー

defineは、定数に値を代入するために使用される関数です。この文は、定数値「TOKEN」を「weixin」に代入することを意味します。

TOKEN は対話型セキュリティ認証に使用され、開発者が自由に定義でき、パブリック プラットフォームで設定されたものと同じである必要があります。

3.2.2 クラスの宣言

define("TOKEN", "weixin");
ログイン後にコピー


3 つのメソッド (関数) を含むクラス wechatCallbackapiTest を宣言します。

a. public 関数 valid()

は、開発者になるための申請時に WeChat に検証情報を送信するために使用されます。

b. public 関数 responseMsg()

は、最もよく使用される関数でもあります。

responseMsg 関数の詳細:

class wechatCallbackapiTest{
}
ログイン後にコピー

WeChat パブリック プラットフォームから送信されたユーザー メッセージを受信します。メッセージ データ構造は XML であり、PHP のデフォルトの識別データ型ではないため、$GLOBALS['HTTP_RAW_POST_DATA'] は次のようになります。ここで使用されているものを受け取り、その値を $postStr

if (!empty($postStr))
に代入します。 $postStr が空でない (データが受信されている) 場合は、次のステートメントを実行し続けます。 ; 空の場合は、対応する else ステートメントにジャンプします。

$postStr = $GLOBALS["HTTP_RAW_POST_DATA"];
ログイン後にコピー

simplexml_load_string() 関数を使用して、受信した XML メッセージ データをオブジェクト $postObj にロードします。この厳密な書き方の後に、読み込みが成功したかどうかを判定するための条件文を追加する必要がありますが、書かなくても大丈夫です。

$postObj = simplexml_load_string($postStr, &#39;SimpleXMLElement&#39;, LIBXML_NOCDATA);
ログイン後にコピー

オブジェクト$postObj内のメッセージを送信したユーザーのOPENIDを$fromUsername変数に代入します

$fromUsername = $postObj->FromUserName;
ログイン後にコピー

オブジェクト$postObj内のパブリックアカウントのIDを$toUsername変数に代入します

$toUsername = $postObj->ToUserName;
ログイン後にコピー

trim () 関数 文字列の両端にある空白文字やその他の事前定義された文字を削除します。 1 日の 00:00:00 から現在時刻までの秒数。


$keyword = trim($postObj->Content);
ログイン後にコピー

WeChat 出力コンテンツを保存するテンプレート

$time = time();
ログイン後にコピー

$keyword が空でない場合は、対応する else ステートメントにジャンプします。 is echo "何かを入力してください...";

$textTpl = "<xml>
       <ToUserName><![CDATA[%s]]></ToUserName>
       <FromUserName><![CDATA[%s]]></FromUserName>
       <CreateTime>%s</CreateTime>
       <MsgType><![CDATA[%s]]></MsgType>
       <Content><![CDATA[%s]]></Content>
       <FuncFlag>0</FuncFlag>
       </xml>";
ログイン後にコピー

メッセージタイプはテキストタイプです

if(!empty( $keyword ))
ログイン後にコピー

返信メッセージの内容

$msgType = "text";
ログイン後にコピー

sprintf()関数を使用して、フォーマットされたデータを変数に書き込みます;

$fromUsername, $ toUsername、$time、$msgType、$contentStr は、テンプレート内の "%s" 位置を順番に置き換えます。つまり、変数 "$resultStr" は、実際には次のようになります。



$contentStr = "Welcome to wechat world!";
ログイン後にコピー

echo $resultStr;


c. プライベート関数 checkSignature()

開発者は署名をチェックすることでリクエストを検証します (検証方法は以下にあります)。この GET リクエストが WeChat サーバーからのものであることが確認され、echostr パラメータの内容がそのまま返された場合はアクセスが有効となり、それ以外の場合はアクセスが失敗します。 signature は、開発者によって入力されたトークンパラメータと、リクエスト内のタイムスタンプパラメータおよびノンスパラメータを組み合わせます。

暗号化/検証プロセス:

1. 3 つのパラメーターのトークン、タイムスタンプ、ノンスを辞書順に並べ替えます

2. 開発者は、暗号化された文字列を取得し、比較できます。リクエストが WeChat からのものであることを示す署名を付けます

3.2.3 インスタンス オブジェクトを作成します

$resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);
ログイン後にコピー

3.2.4 クラスのメソッドを呼び出して検証します

<xml>
<ToUserName><![CDATA[$toUsername]]></ToUserName>
<FromUserName><![CDATA[$fromUsername]]></FromUserName>
<CreateTime>$time</CreateTime>
<MsgType><![CDATA[$msgType]]></MsgType>
<Content><![CDATA[$contentStr]]></Content>
<FuncFlag>0</FuncFlag>  //位0x0001被标志时,星标刚收到的消息。
</xml>
ログイン後にコピー

その後、クラスの valid() メソッドを呼び出してインターフェイスの検証を実行します。インターフェイスが正常に設定された場合は、コメントアウトします。


4. まとめ


上記はWeChatの公式サンプルコードを分析したものです。誤った説明がある場合は専門家に指摘してください。さらに、このコードは公式が提供する単純なサンプルコードにすぎません。複雑な開発が必要な場合、開発者は引き続きこのコードを厳密な開発モデルに従って書き直す必要があります。これについては後続のチュートリアルで説明します。

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

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Dec 24, 2024 pm 04:42 PM

PHP 8.4 では、いくつかの新機能、セキュリティの改善、パフォーマンスの改善が行われ、かなりの量の機能の非推奨と削除が行われています。 このガイドでは、Ubuntu、Debian、またはその派生版に PHP 8.4 をインストールする方法、または PHP 8.4 にアップグレードする方法について説明します。

CakePHP の日付と時刻 CakePHP の日付と時刻 Sep 10, 2024 pm 05:27 PM

Cakephp4 で日付と時刻を操作するには、利用可能な FrozenTime クラスを利用します。

CakePHP ファイルのアップロード CakePHP ファイルのアップロード Sep 10, 2024 pm 05:27 PM

ファイルのアップロードを行うには、フォーム ヘルパーを使用します。ここではファイルアップロードの例を示します。

CakePHP について話し合う CakePHP について話し合う Sep 10, 2024 pm 05:28 PM

CakePHP は、PHP 用のオープンソース フレームワークです。これは、アプリケーションの開発、展開、保守をより簡単にすることを目的としています。 CakePHP は、強力かつ理解しやすい MVC のようなアーキテクチャに基づいています。モデル、ビュー、コントローラー

CakePHP バリデータの作成 CakePHP バリデータの作成 Sep 10, 2024 pm 05:26 PM

Validator は、コントローラーに次の 2 行を追加することで作成できます。

CakePHP のロギング CakePHP のロギング Sep 10, 2024 pm 05:26 PM

CakePHP へのログインは非常に簡単な作業です。使用する関数は 1 つだけです。 cronjob などのバックグラウンド プロセスのエラー、例外、ユーザー アクティビティ、ユーザーが実行したアクションをログに記録できます。 CakePHP でのデータのログ記録は簡単です。 log()関数が提供されています

PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法 PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法 Dec 20, 2024 am 11:31 AM

Visual Studio Code (VS Code とも呼ばれる) は、すべての主要なオペレーティング システムで利用できる無料のソース コード エディター (統合開発環境 (IDE)) です。 多くのプログラミング言語の拡張機能の大規模なコレクションを備えた VS Code は、

CakePHP クイックガイド CakePHP クイックガイド Sep 10, 2024 pm 05:27 PM

CakePHP はオープンソースの MVC フレームワークです。これにより、アプリケーションの開発、展開、保守がはるかに簡単になります。 CakePHP には、最も一般的なタスクの過負荷を軽減するためのライブラリが多数あります。

See all articles