開發前准備:1、服務器 2、微信公眾號測試號(有真實的賬號更好)
測試號申請地址:https://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login
開發前首先要配置微信公眾號后台URL和Token,我這里是驗證通過后顯示的

驗證代碼:新建了一個wx.php,放入以下代碼,點擊后台配置,
//define your token
define("TOKEN", "aabbc_lzpt");
$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, '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>";
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, SORT_STRING);
$tmpStr = implode( $tmpArr );
$tmpStr = sha1( $tmpStr );
if( $tmpStr == $signature ){
return true;
}else{
return false;
}
}
}
將上面的文件清空,放入以下代碼,這個案例有文本消息、事件消息(訂閱和click)和自定義菜單,其余的大家可以看開發文檔
https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1445241432
<?php header("Content-type: text/html; charset=utf-8"); //自定義token,要跟微信平台定義的一樣 define("TOKEN", "lilili"); //獲取微信發送數據 $postStr = $GLOBALS["HTTP_RAW_POST_DATA"]; $wx=new Wx; $wx->menu(); $wx->msg($postStr); class Wx{ //消息處理函數 function msg($postStr){ //返回回復數據 if (!empty($postStr)) { //解析數據 $postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA); //發送消息方ID $fromUsername = $postObj->FromUserName; //接送消息方ID $toUsername = $postObj->ToUserName; //消息類型 $form_MsgType = $postObj->MsgType; //事件消息 if($form_MsgType=="event") { //獲取事件類型 $form_Event = $postObj->Event; //訂閱事件 if($form_Event=="subscribe") { //回復歡迎圖文信息 /* $resultStr = "<xml> <ToUserName><![CDATA[".$fromUsername."]]></ToUserName> <FromUserName><![CDATA[".$toUsername."]]></FromUserName> <CreateTime>".time()."</CreateTime> <MsgType><![CDATA[news]]></MsgType> <ArticleCount>2</ArticleCount> <Articles> <item> <Title><![CDATA[ 歡迎關注***微信服務平台,****]]></Title> <Description><![CDATA[這是簡短描述文字]]></Description> <PicUrl><![CDATA[http://a.hiphotos.baidu.com/baike/c0%3Dbaike116%2C5%2C5%2C116%2C38/sign=5cae7405f21f3a294ec5dd9cf84cd754/32fa828ba61ea8d32de5a1df950a304e241f5822.jpg]]></PicUrl> <Url><![CDATA[http://www.baidu.com]]></Url> </item> <item> <Title><![CDATA[最新動態]]></Title> <Description><![CDATA[]]></Description> <PicUrl><![CDATA[http://a.hiphotos.baidu.com/baike/c0%3Dbaike116%2C5%2C5%2C116%2C38/sign=5cae7405f21f3a294ec5dd9cf84cd754/32fa828ba61ea8d32de5a1df950a304e241f5822.jpg]]></PicUrl> <Url><![CDATA[http://www.baidu.com]]></Url> </item> </Articles> </xml> "; */ //回復歡迎文字信息 $reply="您好,歡迎關注****微信公眾平台"; $resultStr="<xml> <ToUserName><![CDATA[".$fromUsername."]]></ToUserName> <FromUserName><![CDATA[".$toUsername."]]></FromUserName> <CreateTime>".time()."</CreateTime> <MsgType><![CDATA[text]]></MsgType> <Content><![CDATA[".$reply."]]></Content> </xml>"; } else if($form_Event=="CLICK") { $form_Event_Key = $postObj->EventKey; if($form_Event_Key=="V3002_CONTACT") { /* $resultStr = "<xml> <ToUserName><![CDATA[".$fromUsername."]]></ToUserName> <FromUserName><![CDATA[".$toUsername."]]></FromUserName> <CreateTime>".time()."</CreateTime> <MsgType><![CDATA[news]]></MsgType> <ArticleCount>1</ArticleCount> <Articles> <item> <Title><![CDATA[如何成為本站會員]]></Title> <Description><![CDATA[本欄目介紹詳細的加入流程!]]></Description> <PicUrl><![CDATA[http://a.hiphotos.baidu.com/baike/c0%3Dbaike116%2C5%2C5%2C116%2C38/sign=5cae7405f21f3a294ec5dd9cf84cd754/32fa828ba61ea8d32de5a1df950a304e241f5822.jpg]]></PicUrl> <Url><![CDATA[http://www.baidu.com]]></Url> </item> </Articles> </xml> "; */ $reply="我們的地址:黃河東路222號\n我們的熱線:0510-88888888"; $resultStr="<xml> <ToUserName><![CDATA[".$fromUsername."]]></ToUserName> <FromUserName><![CDATA[".$toUsername."]]></FromUserName> <CreateTime>".time()."</CreateTime> <MsgType><![CDATA[text]]></MsgType> <Content><![CDATA[".$reply."]]></Content> </xml>"; } } } //文本消息 else if($form_MsgType=="text"){ $content=$postObj->Content; if($content=='測試'){ $reply="愛你"; $resultStr="<xml> <ToUserName><![CDATA[".$fromUsername."]]></ToUserName> <FromUserName><![CDATA[".$toUsername."]]></FromUserName> <CreateTime>".time()."</CreateTime> <MsgType><![CDATA[text]]></MsgType> <Content><![CDATA[".$reply."]]></Content> </xml>"; } } //地理位置消息 else if($form_MsgType=="location"){ $lng1=$postObj->Location_X; $lat1=$postObj->Location_Y; $from_Location_Label=$postObj->Label; $reply="地理位置:"; $reply.="緯度".$lat1."\t經度".$lng1."位置".$from_Location_Label; $resultStr = "<xml> <ToUserName><![CDATA[".$fromUsername."]]></ToUserName> <FromUserName><![CDATA[".$toUsername."]]></FromUserName> <CreateTime>".time()."</CreateTime> <MsgType><![CDATA[text]]></MsgType> <Content><![CDATA[".$reply."]]></Content> </xml> "; } echo $resultStr; exit; } else { echo ""; exit; } } //自定義菜單函數 function menu(){ /** * 自定義菜單--創建 * 文檔地址:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421141013 */ //獲取access_token,寫入文件保存 $accessTokenInfo = file_get_contents("access_token.log"); if($accessTokenInfo){ $tokenArr = json_decode($accessTokenInfo,true); //var_dump($tokenArr); if((time() + $tokenArr['expires_in'] -200) >time()){//保證不過期,減去200秒,做緩沖 $access_token = $tokenArr['access_token']; $url = "https://api.weixin.qq.com/cgi-bin/menu/create?access_token=" . $access_token; $postArr['button'] = [ [ 'type'=>'click', 'name'=>urlencode('地址'),//中文得處理一下,否則報錯 'key'=>'V3002_CONTACT' ],//第一個一級菜單 [ 'name'=>urlencode('菜單'), 'sub_button'=>[ [ "type"=>"view", "name"=>urlencode('搜索'), "url"=>"http://www.soso.com/" ], [ "type"=>"view", "name"=>urlencode('百度'), "url"=>"http://www.baidu.com/" ] ] ],//第二個一級菜單 ]; $postJson = urldecode(json_encode($postArr)); //CURL發送請求 $ch = curl_init(); curl_setopt($ch,CURLOPT_URL,$url); curl_setopt($ch,CURLOPT_RETURNTRANSFER,1); curl_setopt($ch,CURLOPT_POST,1); curl_setopt($ch,CURLOPT_POSTFIELDS,$postJson); $output = curl_exec($ch); curl_close($ch); var_dump(json_decode($output,true)); } }else{ //重新請求access_token寫入文件 $ch = curl_init(); $appId = "填你自己的"; $appSecret = "填你自己的";
//通過訪問這個url可以獲取到access_token,微信服務器以json格式返回的 $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=".$appId."&secret=".$appSecret; curl_setopt($ch,CURLOPT_URL,$url); curl_setopt($ch,CURLOPT_RETURNTRANSFER,1); $outPut = curl_exec($ch); curl_close($ch); file_put_contents("access_token.log",$outPut); } } } //自定義菜單 ?>

