ホームページ  >  記事  >  バックエンド開発  >  WeChatインターフェースのシミュレーションテストとWeChat開発テストコード_PHPチュートリアル

WeChatインターフェースのシミュレーションテストとWeChat開発テストコード_PHPチュートリアル

WBOY
WBOYオリジナル
2016-07-13 17:18:38836ブラウズ

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 = "
msg['FromUserName']}]]>
msg['ToUserName']}]]>
{$CreateTime}


%s
" ;
return sprintf($textTpl,$text,$FuncFlag);
}
//配列パラメータに基づいてテキストおよびグラフィックメッセージを返信します
public function makeNews($newsData=array())
{
$CreateTime = time( );
$FuncFlag = $this->setFlag ? 1 : 0;
$newTplHeader = "
msg['FromUserName']}]]>
msg['ToUserName']}]>
{ $CreateTime}


%s";
$newTplItem = "




";
$newTplFoot = "
%s
";
$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);
?>

WeChat インターフェイスのコードを使用します。curl 関数を完了するには、PHP のcurl 拡張機能を開く必要があります。 weixin.php ファイルの //$weixin->valid(); からコメントを削除して確認してください。完了したら、この文をコメントアウトしてください。





//header("Content-Type: text/html;charset=utf-8"); //データを準備します
define('TOKEN', ' itwatch');//定義したトークンは通信用の秘密鍵です
$echostr = 'このデータが返されるということは、それが正しいことを示します。 ';
$timestamp = (string)time(); //これは整数なので文字列に変換する必要があります
$nonce = 'my-nonce';
$signature = signed(TOKEN, $timestamp, $nonce) ;

関数シグネチャ($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;
?>

上記のコア コードは weixin.class.php と weixin.php の 2 つのファイルで、デバッグは成功し、サーバーにデプロイされました。テストしたい場合は、携帯電話の WeChat を使用して WeChat ID: itwatch を聞き、「Hello」と入力すると、次の文字列が返されます: Net Vision Weixin Public Platform へようこそ。入力するだけでグラフィックメッセージが開きます。


さて、私はとても眠くてこれから寝ようとしているので、上記のコードが非常に汚いことは認めます。しかし、上記のコードは実際に動作し、典型的な原理実装テスト コードです。 WeChat 開発者がそれを理解した後、データベースと組み合わせて完全に機能する WeChat 情報バックグラウンド管理プログラムを作成できるようにするためのアイデアを提供したいと考えています。 。
WeChat サービス アカウントをお持ちの場合は、それに基づいてメニューを開発し、上記のコードに基づいて開発されたメッセージ返信システムを呼び出すことができます。実はとても簡単です。
これは、企業の Web サイトを作成してデータを入力し、それを順番に取得してページに表示するよりもはるかに興味深い、本物のネットワーク コミュニケーション プログラムです。

メッシュ・チャン・チン
2013-12-3 ?

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/621644.html技術記事 WeChat パブリック アカウント (サブスクリプション アカウントまたはサービス アカウント) の開発者になるには、まずインターフェイスを確認する必要があります。これは WeChat https://mp.weixin.qq.com バックエンドにログインした後に設定できます。でも面倒だな…
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。