微信公衆賬號接入指南地址:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421135319&token=&lang=zh_CN
有關頁面如下:
基於該接入指南,填寫有關微信公衆賬號的設置,在相關位置下載測試文檔wx_sample.php,並上傳到服務器進行接入測試,詳細操作可以查看開發文檔中的接入指南。
以下是對wx_sample.php的解析:
<?php
/**
* 微信對接測試文檔
* wechat php test
*/
//define your token
//定義Token密鑰
define("TOKEN", "weixin");
//創建對象
$wechatObj = new wechatCallbackapiTest();
//驗證,成功則返回驗證字符串,並退出,註釋掉
// $wechatObj->valid();
// 開啓自動回覆功能
$wechatObj->responseMsg();
//定義類文件
class wechatCallbackapiTest
{
//實現valid驗證方法:實現對接微信公衆平臺
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
//接受用戶端發送過來的XML數據
$postStr = $GLOBALS["HTTP_RAW_POST_DATA"];
//extract post data
//判斷XML數據是否爲空
if (!empty($postStr)){
/* libxml_disable_entity_loader is to prevent XML eXternal Entity Injection,
the best way is to check the validity of xml by yourself */
libxml_disable_entity_loader(true);
//通過simplexml進行xml解析
$postObj = simplexml_load_string($postStr, 'SimpleXMLElement', 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>";
//判斷XML數據是否爲空
if(!empty( $keyword ))
{
//回覆類型,如果是"text",代表文本類型
$msgType = "text";
//回覆內容
$contentStr = "Welcome to wechat world!";
//格式化字符串
$resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);
//返回XML數據給手機端
echo $resultStr;
}else{
echo "Input something...";
}
}else {
echo "";
exit;
}
}
//定義checkSignature
private function checkSignature()
{
// you must define TOKEN by yourself
// 驗證是否定義Token密鑰
if (!defined("TOKEN")) {
throw new Exception('TOKEN is not defined!');
}
//接受微信加密簽名
$signature = $_GET["signature"];
//接受時間戳信息
$timestamp = $_GET["timestamp"];
//接受隨機數
$nonce = $_GET["nonce"];
//把TOKEN常量,賦值給$token變量
$token = TOKEN;
//把相關參數組裝成數組
$tmpArr = array($token, $timestamp, $nonce);
// use SORT_STRING rule
// 通過字典法進行排序
sort($tmpArr, SORT_STRING);
//把排序後的數組轉化爲字符串
$tmpStr = implode( $tmpArr );
//通過哈希算法對字符串進行加密操作
$tmpStr = sha1( $tmpStr );
//與加密簽名進行對比
if( $tmpStr == $signature ){
return true;
}else{
return false;
}
}
}
?>