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

最新文章

  1. Spring 4 创建REST API
  2. compass General 常用api学习[Sass和compass学习笔记]
  3. django例子,question_text为中文时候报错
  4. .equal与==的区别
  5. Java多线程的安全问题
  6. 瀑布流AJAX无刷新加载数据列表--当页面滚动到Id时再继续加载数据
  7. 在js脚本里计算多个小数的加法问题
  8. vc2010配置opencv2.4.4库(图文 转)
  9. windows下搭建及配置mantis缺陷管理工具
  10. animation渐进实现点点点等待效果实例页面
  11. 支付宝支付-tp5
  12. struts入门学习(二)
  13. Java作业十二(2017-11-13)
  14. Mysql链接问题
  15. 24.QTableView函数使用,右击菜单实现
  16. cocos2dx开发之util类&amp;方法——取当前系统时间
  17. 3、CSS属性组成和作用
  18. Docker 入门(Mac环境)- part 3 服务(services)
  19. 大数据量表中,增加一个NOT NULL的新列
  20. Nginx反向代理缓冲区优化

热门文章

  1. kettle文件以邮件附件的形式发送报告
  2. 2017-2018-1 20179215《Linux内核原理与分析》第九周作业
  3. ACM学习历程—HDU 5025 Saving Tang Monk(广州赛区网赛)(bfs)
  4. 麻省理工《C内存管理和C++面向对象编程》笔记---第一讲:认识C和内存管理
  5. 拓扑排序 POJ 1094 Sorting It All Out
  6. Poj 2299 Ultra-QuickSort(归并排序求逆序数)
  7. Poj 1316 Self Numbers(水题)
  8. Poj1012_Joseph
  9. seaweedfs安装配置使用
  10. 使用python对文件夹里面所有代码行数进行统计。