1.注册微信公众号
2.申请微信公众号测试账号
测试号申请地址:https://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login
(填写好之后不要提交)
3.配置服务器与微信公众号牵手
进入这个目录,打开index.php,代码如下:再点击提交按钮,显示TOKEN验证成功
<?php
$appsecret = '03e*********e9707d';
$appid = 'wxc6a******3da1c';
$token = TOKEN;
$signature = $_GET["signature"];
$timestamp = $_GET["timestamp"];
$nonce = $_GET["nonce"];
if( $_GET['echostr'] ){
$tmpArr = array($token, $timestamp, $nonce);
sort($tmpArr, SORT_STRING);
$tmpStr = implode( $tmpArr );
$tmpStr = sha1( $tmpStr );
//file_put_contents('msg.txt',json_encode($_GET));
if( $tmpStr == $signature ){
echo $_GET['echostr'];
}else{
return false;
}
}else{
require_once 'php/wxBizMsgCrypt.php';
//$msg_sign = $_GET['msg_signatrue'];
$post_data = file_get_contents('php://input') ; //用户发送的数据
file_put_contents('test.txt',json_encode($post_data));
//$pc = new WXBizMsgCrypt($token,$appsecret,$appid);
// $msg_decrypt = $pc->decryptMsg($msg_sign,$timestamp,$nonce ,$post_data ,$msg );//安全模式下解密 $msg是解密后的结果集
$xmlToObj = simplexml_load_string($post_data);
$msg_type = $xmlToObj->MsgType;
$msg_content = $xmlToObj->Content;
$event = $xmlToObj->Event; //事件类型,subscribe(订阅)、unsubscribe(取消订阅)
//file_put_contents('123.txt',$msg_content.$msg_type);
if( $msg_type == "text"){
if( $msg_content == "图文" ){
echo transTexts($xmlToObj );
return false;
}elseif( $msg_content == "链接" ){
//echo transTexts($xmlToObj );
echo aaa($xmlToObj );
return false;
}
//file_put_contents('6.txt',json_encode($xmlToObj));
echo text($xmlToObj );
}elseif($msg_type == "image" ){
//file_put_contents('img.txt',json_encode($xmlToObj));
echo img($xmlToObj );
}elseif( $msg_type == "voice"){//语音
echo voice($xmlToObj );
}elseif( $msg_type=='event' ){
$event_key = $xmlToObj->EventKey; //对应caidan.json中的key
if( $event_key == "test1"){
echo transTexts($xmlToObj );
}
if($event=='subscribe'){ //关注
echo transTexts($xmlToObj );
}elseif($event=='unsubscribe'){ //取关
file_put_contents('info.txt','unsubscribe'."\n");
}
}
}
function text($obj){
$xml = "<xml>
<ToUserName><![CDATA[%s]]></ToUserName>
<FromUserName><![CDATA[%s]]></FromUserName>
<CreateTime>%s</CreateTime>
<MsgType><![CDATA[text]]></MsgType>
<Content><![CDATA[%s]]></Content>
<MsgId>%d</MsgId>
</xml>";
$result = sprintf($xml,$obj->FromUserName,$obj->ToUserName,time(),$obj->Content,$obj->MsgId);
return $result ;
}
function img($obj){
$xml = '<xml>
<ToUserName><![CDATA[%s]]></ToUserName>
<FromUserName><![CDATA[%s]]></FromUserName>
<CreateTime>%s</CreateTime>
<MsgType><![CDATA[image]]></MsgType>
<Image><MediaId><![CDATA[%s]]></MediaId></Image>
</xml>';
$result = sprintf($xml,$obj->FromUserName,$obj->ToUserName,time(),$obj->MediaId);
return $result;
}
function voice($obj){
$xml = '<xml>
<ToUserName><![CDATA[%s]]></ToUserName>
<FromUserName><![CDATA[%s]]></FromUserName>
<CreateTime>%s</CreateTime>
<MsgType><![CDATA[voice]]></MsgType>
<Voice><MediaId><![CDATA[%s]]></MediaId></Voice>
</xml>';
$result = sprintf($xml,$obj->FromUserName,$obj->ToUserName,time(),$obj->MediaId);
return $result;
}
function transTexts($obj){
$xml = '<xml>
<ToUserName><![CDATA[%s]]></ToUserName>
<FromUserName><![CDATA[%s]]></FromUserName>
<CreateTime>%s</CreateTime>
<MsgType><![CDATA[news]]></MsgType>
<ArticleCount>2</ArticleCount>
<Articles>
<item>
<Title><![CDATA[ttttttttttt]]></Title>
<Description><![CDATA[dddddddddd]]></Description>
<PicUrl><![CDATA[%s]]></PicUrl>
<Url><![CDATA[%s]]></Url>
</item>
<item>
<Title><![CDATA[aaaaaaaaaa]]></Title>
<Description><![CDATA[bbbbbbbb]]></Description>
<PicUrl><![CDATA[%s]]></PicUrl>
<Url><![CDATA[%s]]></Url>
</item>
</Articles>
</xml>';
$picUrl = 'http://www.lampol-blog.com/static/home/images/logo.png';
$url = 'http://www.lampol-blog.com/detail/aid/MTE4ZHdENmJ6UkJFZmJxWDB6MTZ4UG1uWnRsWnMxRzBwK3RDRXVHQg%3D%3D';
$result = sprintf($xml,$obj->FromUserName,$obj->ToUserName,time(),$picUrl,$url,$picUrl,$url);
// file_put_contents('info.txt',$result."\n");
return $result;
}
function aaa($obj){
$xml = "<xml>
<ToUserName><![CDATA[%s]]></ToUserName>
<FromUserName><![CDATA[%s]]></FromUserName>
<CreateTime>%s</CreateTime>
<MsgType><![CDATA[link]]></MsgType>
<Title><![CDATA[公众平台官网链接]]></Title>
<Description><![CDATA[公众平台官网链接]]></Description>
<Url><![CDATA[https://www.baidu.com]]></Url>
<MsgId>1234567890123456</MsgId>
</xml>";
$result = sprintf($xml,$obj->FromUserName,$obj->ToUserName,time());
file_put_contents('link.txt',$result."\n");
return $result ;
}
?>
========================获取token===================
===================自定义菜单===========================
caidan.php
<?php
$url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=wxc6****da1c&secret=03ec642*****79788e9707d";
$access_token = json_decode(file_get_contents($url),true);
file_put_contents('/home/www/blog/token.txt',$access_token['access_token']);
$menu_json = file_get_contents('caidan.json');
$msg = http_post($access_token['access_token'],$menu_json);
echo $msg;
function http_post($access_token,$data){
$url = "https://api.weixin.qq.com/cgi-bin/menu/create?access_token=".$access_token;
$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, $data);
$res = curl_exec($ch);
curl_close($ch);
return $res;
}
?>
caidan.json
{
"button":[
{
"type":"click",
"name":"今日歌曲",
"key":"test1"
},
{
"name":"菜单",
"sub_button":[
{
"type":"view",
"name":"搜索",
"url":"http://www.soso.com/"
},
{
"type":"scancode_push",
"name":"扫码推送",
"key":"saomatui1",
"sub_button":[]
},
{
"type":"scancode_waitmsg",
"name":"扫码提示",
"key":"saomatui1_2",
"sub_button":[]
},
{
"type":"click",
"name":"赞一下我们",
"key":"V1001_GOOD"
}]
}]
}
然后执行candan.php文件