接了个小活:要求公众号中用户回复1,公众号被动回复7位数验证码,同时把用户openId和验证码写入数据库
简单写了各测试demo:工具 thinkphp 订阅号子钦有话说内申请的测试账号
接口配置信息修改
Controller控制器 输入1得到被动回复验证码(里面大多数代码与标题无关,想必大家能用到,所以没有删除)
<?php namespace Home\Controller; use Home\Common\CommonController; /** *@parame 微信公众号开发 */ class WeChatController extends CommonController { //配置接口信息接入api public function index() { //1.获得参数 signature nonce token timestamp echostr $nonce = $_GET['nonce']; $token = 'zhangmangde'; $timestamp = $_GET['timestamp']; $echostr = $_GET['echostr']; $signature = $_GET['signature']; //2.拼成数组,然后按字典序排序 $array = array(); $array = array($nonce,$timestamp,$token); sort($array); //3.拼成字符串,sha1加密,然后和$signature进行比较 $str = sha1(implode($array)); if($str == $signature && $echostr){ //第一次接入微信api的时候 echo $echostr; exit; }else{ $this->responseMsg(); } } /*public function show(){ echo 'zhangmangde'; }*/ //接受事件,推送并回复 public function responseMsg(){ //1.获取到微信推送过来的post数据(xml格式) $postArr = $GLOBALS['HTTP_RAW_POST_DATA']; //2.处理消息类型,并设置回复内容和类型 /*<xml> <ToUserName><![CDATA[toUser]]></ToUserName> <FromUserName><![CDATA[FromUser]]></FromUserName> <CreateTime>123456789</CreateTime> <MsgType><![CDATA[event]]></MsgType> <Event><![CDATA[subscribe]]></Event> </xml>*/ $postObj = simplexml_load_string($postArr);//将xml字符串载入对象中 //$postObj->ToUserName = ''; //$postObj->FromUserName = ''; //$postObj->CreateTime = ''; //$postObj->MsgType = ''; //$postObj->Event = ''; //判断该数据包是否是订阅的事件推送 if(strtolower($postObj->MsgType) == 'event'){ //如果是关注subcribe事件 if(strtolower($postObj->Event) == 'subscribe'){ //回复用户消息 $arr = array( array( 'title' => '欢迎关注子钦的公众号开发版哟^^~~^^', 'description' => '张子钦很酷哦 or ziqin is very cool 哈哈!关注有惊喜哦', 'picUrl' => 'http://waphd.simufengyun.com/Public/Home/images/zmd123.png', 'url' => 'http://wap.simufengyun.com/', ), ); //实例化模型 $weChatModel = new \Home\Model\WeChatModel;//实例化时,一定要注意Model的路径问题 下面a()方法是测试路径问题 $weChatModel->responseSubscribe($postObj,$arr);//调用模型中的方法 } //点击事件 if(strtolower($postObj->Event) == 'click'){ //如果是自定义菜单中的event->click if(strtolower($postObj->EventKey) == 'item1'){ $content = "这是菜单一事件的推送"; } if(strtolower($postObj->EventKey) == 'songs'){ $content = "这是歌曲事件的推送"; } //实例化模型 //实例化模型 $weChatModel = new \Home\Model\WeChatModel; $weChatModel->responseText($postObj,$content);//调用方法 } //跳转事件 if(strtolower($postObj->Event) == 'view'){ //如果是自定义菜单中的event->view $content = "要跳转的链接是".$postObj->EventKey; //实例化模型 $weChatModel = new \Home\Model\WeChatModel; $weChatModel->responseText($postObj,$content);//调用方法 } // if(strtolower($postObj->Event) == 'SCAN'){ //自定义菜单中的event->scan $content = "扫描场景".$postObj->EventKey; //实例化模型 $weChatModel = new \Home\Model\WeChatModel; $weChatModel->responseText($postObj,$content);//调用方法 } if(strtolower($postObj->Event) == 'LOCATION'){