开发前准备: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); } } } //自定义菜单 ?>