码迷,mamicode.com
首页 > 微信 > 详细

微信公众号开发(2)---接收订阅事件推送并回复消息

时间:2017-07-23 18:20:12      阅读:309      评论:0      收藏:0      [点我收藏+]

标签:知识   lan   sha1   track   exit   post   php框架   extends   bind   

在thinkphp框架内完成的,下面是控制器页面(不涉及其他页面)

<?PHP

namespace Home\Controller;
use Think\Controller;

class IndexController extends Controller {
    //token验证,微信服务器发送post请求过来
    public function index(){
      $timestamp = $_GET["timestamp"];//a时间戳
      $nonce = $_GET["nonce"];//随机数
      $token = "weixin";//token
      $signature = $_GET["signature"];//加密签名
      $echoStr = $_GET["echostr"];;//随机字符串
      //1)将token、timestamp、nonce三个参数进行字典序排序
      $tmpArr = array($token, $timestamp, $nonce);
      sort($tmpArr, SORT_STRING);
     //2)将三个参数字符串拼接成一个字符串进行sha1加密
     $tmpStr = implode( $tmpArr );
     $tmpStr = sha1( $tmpStr );
     //3)开发者获得加密后的字符串可与signature对比,标识该请求来源于微信
    if( ($tmpStr == $signature) && $echoStr ){
         echo  $echoStr;//第一次接入
         exit;
       }else{
           $this->responseMsg();//第二、三、、、、、、次接入,除了第一次接入,以后的接入不会传送$echoStr
       }
    }
   //用户关注后,微信推送过来一个包含用户信息的xml数据包,我们接收后并回复
    public function responseMsg(){
       //获取到微信推送过来的数据
       $postArr = $GLOBALS["HTTP_RAW_POST_DATA"];
       
       //处理消息
//<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);//转成了对象
        //判断消息类型
        if(strtolower($postObj->MsgType) == "event"){
            //判断事件类型,是订阅(subscribe),还是退订(unsubscribe)
            if(strtolower($postObj->Event) == "subscribe"){
        $toUserName = $postObj->FromUserName;
        $fromUserName = $postObj->ToUserName;
        $crateTime = time();
        $msgType = "text";
        $content = "旅行者,欢迎你"; 
        $template="
        <xml>
        <ToUserName><![CDATA[%s]]></ToUserName>
        <FromUserName><![CDATA[%s]]></FromUserName>
        <CreateTime>%s</CreateTime>
        <MsgType><![CDATA[%s]]></MsgType>
        <Content><![CDATA[%s]]></Content>
        </xml>";
        $info = sprintf($template,$toUserName,$fromUserName,$crateTime,$msgType,$content);
        echo $info;
            }
        }
    }
}
 
 

微信公众号开发(2)---接收订阅事件推送并回复消息

标签:知识   lan   sha1   track   exit   post   php框架   extends   bind   

原文地址:http://www.cnblogs.com/yinmeng/p/7225261.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!