步骤1.
步骤2.
登陆进去->高级功能,这时候要想开发必须要输入url和token,这里方法我引一下别人的文章http://www.cnblogs.com/txw1958/p/wechat-tutorial.html。
步骤3.
步骤4.
这里我再一次引一下别人的http://kf.qq.com/faq/120911VrYVrA130807m22MVB.html,*注:一般理由合理再过了一天就可以看到消息,点通知
步骤5.
步骤6.
https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=你的appid&secret=你的secret
输入后会得到{"access_token":"BWGjR6KafrmbPEYOaocez56RZwVj7pIVpmf1p6RqgVoGKJhfKVD3hkX2YfLOHYyJouocwnup9sGB23HBOkWKAaFqsyePW4-TKa-7SaAZXksMtMeqH2boDAoDrsWEj251bZYQct6IU9l6th4WHB5_6g","expires_in":7200}这样的一个代码access_token就是你需要的access_token,7200是access_token这个的过期时间
步骤7.
<?php
$xjson = ‘{
"button":[
{
"name":"业务办理",
"sub_button":[
{
"type":"view",
"name":"新车上户",
"url":"http://www.ixp86.com:808/"
},
{
"type":"view",
"name":"爱车保养",
"url":"http://www.ixp86.com:808/"
}]
},
{
"name":"信息查询",
"sub_button":[
{
"type":"click",
"name":"进度查询",
"key":"jdcx"
},
{
"type":"click",
"name":"违章查询",
"key":"wzcx"
},
{
"type":"click",
"name":"保养查询",
"key":"bycx""
}]
}]
}‘;
$result = vpost($url,$xjson);
var_dump($result);
function vpost($url,$data){ // 模拟提交数据函数
$curl = curl_init(); // 启动一个CURL会话
curl_setopt($curl, CURLOPT_URL, $url); // 要访问的地址
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE); // 对认证证书来源的检查
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE); // 从证书中检查SSL加密算法是否存在
curl_setopt($curl, CURLOPT_USERAGENT, ‘Mozilla/5.0 (compatible; MSIE 5.01; Windows NT 5.0)‘); // 模拟用户使用的浏览器
// curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1); // 使用自动跳转
// curl_setopt($curl, CURLOPT_AUTOREFERER, 1); // 自动设置Referer
curl_setopt($curl, CURLOPT_POST, 1); // 发送一个常规的Post请求
curl_setopt($curl, CURLOPT_POSTFIELDS, $data); // Post提交的数据包x
curl_setopt($curl, CURLOPT_TIMEOUT, 30); // 设置超时限制防止死循环
curl_setopt($curl, CURLOPT_HEADER, 0); // 显示返回的Header区域内容
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); // 获取的信息以文件流的形式返回
$tmpInfo = curl_exec($curl); // 执行操作
if (curl_errno($curl)) {
echo ‘Errno‘.curl_error($curl);//捕抓异常
}else {
}
curl_close($curl); // 关闭CURL会话
return $tmpInfo; // 返回数据
}
?>
上面的json就是菜单了,让这个页面上线,再预览{"errcode":0,"errmsg":"ok"}这样就是成功了,等大约10秒钟看手机就有效果
如果是string(49) "{"errcode":42001,"errmsg":"access_token expired"}"说明
access_token过期了重新运行
然后再试捕捉菜单点击事件
在消息处理页面中也就是最开始要求我们写入url和token 的那个页面在处理消息的函数
public function responseMsg()
{
$postStr = $GLOBALS["HTTP_RAW_POST_DATA"];
if (!empty($postStr)){
$postObj = simplexml_load_string($postStr, ‘SimpleXMLElement‘, LIBXML_NOCDATA);
$fromUsername = $postObj->FromUserName;//游客的账号
$toUsername = $postObj->ToUserName;//开发者的账号
$event = $postObj->Event;//事件这里我也要的是click,
$eventKey = $postObj->EventKey;//这个事件对应的名称,如我这里就有jdcx等
$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($event == "CLICK"){//判断事件类型
$contentStr="";
switch($eventKey){//这个事件的名称
case "jdcx":
$contentStr=$postObj->FromUserName;
break;
case "wzcx":
$contentStr="违章查询前请输入手机号";
break;
case "bycx":
$contentStr="保养查询前请输入手机号";
break;
}
$msgType = "text";
$resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);
echo $resultStr;
}