WeChat パブリック アカウント (サブスクリプション アカウントまたはサービス アカウント) の開発者になるには、まず、WeChat https://mp.weixin.qq.com バックエンドにログインした後に設定できるインターフェイスを確認する必要があります。しかし、面倒だったので、検証機能(テキストメッセージやグラフィックメッセージへの返信機能)を組み込んだインターフェースクラスを開発しました。実際、開発者になってからインターフェースの検証は役に立ちません。
WeChat 基本クラスのコードをアップロードします: weixin.class.php
class Weixin
{
public $token = '';//token
public $debug = false;//デバッグ ステータスの表示が便利かどうかus デバッグ中に中間データを記録します
public $setFlag = false;
public $msgtype = 'text' //('text','image','location')
public $msg = array();
public function __construct($token,$debug)
{
$this->token = $token;
$this->debug = $debug;
}
//ユーザーが送信したメッセージ (メッセージの内容とメッセージ タイプ) を取得します
public function getMsg()
{
$postStr = $GLOBALS["HTTP_RAW_POST_DATA"];
if ($this->debug)
{
$this->write_log($postStr);
}
if (!empty($ postStr))
{
$this->msg = (array)simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);
$this->msgtype = strto lower($this->msg['MsgType']);
}
}
//テキストメッセージに返信
public function makeText($text='')
{
$CreateTime = time();
$FuncFlag = $this->setFlag 1 : 0;
$textTpl = "
return sprintf($textTpl,$text,$FuncFlag);
}
//配列パラメータに基づいてテキストおよびグラフィックメッセージを返信します
public function makeNews($newsData=array())
{
$CreateTime = time( );
$FuncFlag = $this->setFlag ? 1 : 0;
$newTplHeader = "
%s";
$newTplItem = "
$newTplFoot = "
$Content = '';
$itemsCount = count($newsData);
$itemsCount = $itemsCount if ($itemsCount)
{
foreach ($newsData as $key => $item)
{
if ($key {
$Content .= sprintf($ newTplItem,$item ['タイトル'],$item['説明'],$item['PicUrl'],$item['Url']);
}
}
}
$header = sprintf($newTplHeader, $newsData[' content'],$itemsCount);
$footer = sprintf($newTplFoot,$FuncFlag);
return $header . $footer;
}
public function Reply($data)
{
if ($this->debug)
{
$this->write_log($data);
}
echo $data;
}
public function valid()
{
if ($this->checkSignature())
{
//if ( $_SERVER['REQUEST_METHOD']=='GET' )
//{
echo $_GET['echostr'];
exit;
//}
}
else
{
write_log('Authentication失敗しました');
exit;
}
}
プライベート関数 checkSignature()
{
$signature = $_GET["signature"];
$timestamp = $_GET["timestamp"];
$nonce = $_GET[ "nonce"] ;
$tmpArr = array($this->token, $timestamp, $nonce);
sort($tmpArr);
$tmpStr = implode( $tmpArr );
$tmpStr = sha1( $tmpStr ) ;
if( $tmpStr == $signature )
return true;
else
return false;
}
private function write_log($log)
{
//ここはデバッグ情報を記録する場所です。中間用に自分で改良してください。デバッグ中
}
}
?>
WeChat インターフェイス コード: weixin.php
header("Content-Type: text/html;charset=utf-8");
include_once('weixin.class.php') //WeChat を定義したばかりのリファレンスメッセージ処理クラス
define("TOKEN", "itwatch"); //mmhelper
define('DEBUG', false);
$weixin = new Weixin(TOKEN, DEBUG) //$ weixin-> valid();
$weixin->getMsg();
$type = $weixin->msgtype; //メッセージタイプ
$username = $weixin->msg['FromUserName']; //どのユーザーが与えるメッセージ送信されると、この $username は WeChat によって暗号化されますが、各ユーザーは 1 対 1 で対応します
if ($type==='text')
{
//if ($weixin->msg[' Content'] =='Hello2BizUser')
if ($weixin->msg['Content']=='Hello')
{ //WeChat ユーザーがあなたのアカウントを初めてフォローすると、あなたの公開アカウントはメッセージを受け取ります'Hello2BizUser' の内容で
$reply = $weixin->makeText('Net Vision WeChat パブリック プラットフォームへようこそ');
}
else
{ //ユーザーが入力したテキスト情報です
$keyword = $weixin->msg['Content']; //ユーザーのテキストメッセージの内容
//include_once("chaxun.php") //テキストメッセージはクエリプログラムを呼び出します
//$chaxun= new chaxun(DEBUG, $キーワード, $ユーザー名);
//$results['items'] =$chaxun->search(); //クエリコード
//$reply = $weixin->makeNews($results);
$arrayCon = array(
array(
"タイトル"=>"コンピュータ学習ネットワーク",
"説明"=>"10万のなぜ - コンピュータ学習ネットワーク",
"PicUrl"=>"http://www.veryphp.cn /datas/userfiles/8bd108c8a01a892d129c52484ef97a0d/images/website13.jpg",
"Url"=>"http://www.why100000.com/"
),
array(
"Title"=>"Very PHP Learning Network" ,
"説明"=>"大規模な PHP 学習共有コミュニティ",
"PicUrl"=>"http://www.veryphp.cn/datas/userfiles/8bd108c8a01a892d129c52484ef97a0d/images/php01.jpg",
"Url"= >"http://www.veryphp.cn/"
)
);
$results = $arrayCon;
$reply = $weixin->makeNews($results);
}
}
elseif ($type== ='location')
{
//ユーザーは後で処理される位置情報を送信します
}
elseif ($type==='image')
{
//ユーザーは後で処理される画像を送信します
}elseif ( $type==='voice')
{
// ユーザーは後で処理される音声を送信します
}
//
$weixin->reply($reply);
?>
関数シグネチャ($token, $timestamp, $nonce)
{
$tmpArr = array($token, $timestamp, $nonce);
sort($tmpArr);
$tmpStr = implode($tmpArr) ;
$tmpStr = sha1($tmpStr);
return $tmpStr;
}
//Submit
$post_data = array(
"signature=$signature",
"timestamp=$timestamp",
"nonce=$nonce ",
"echostr=$echostr"
);
$post_data = implode('&',$post_data);
$url='http://www.veryphp.cn/tools/weixin/weixin.php';
$ ch =curl_init();
curl_setopt($ch, CURLOPT_URL, $url.'?'.$post_data); //GETメソッドをシミュレートします
ob_start();
curl_exec($ch);
$result = ob_get_contents ();
ob_end_clean();
echo $result;
?>
さて、私はとても眠くてこれから寝ようとしているので、上記のコードが非常に汚いことは認めます。しかし、上記のコードは実際に動作し、典型的な原理実装テスト コードです。 WeChat 開発者がそれを理解した後、データベースと組み合わせて完全に機能する WeChat 情報バックグラウンド管理プログラムを作成できるようにするためのアイデアを提供したいと考えています。 。
WeChat サービス アカウントをお持ちの場合は、それに基づいてメニューを開発し、上記のコードに基づいて開発されたメッセージ返信システムを呼び出すことができます。実はとても簡単です。
これは、企業の Web サイトを作成してデータを入力し、それを順番に取得してページに表示するよりもはるかに興味深い、本物のネットワーク コミュニケーション プログラムです。
メッシュ・チャン・チン
2013-12-3 ?