订阅事件与回复响应消息,请老师帮我看下,我的怎么不行呀!

来源:3-2 接收事件订阅与回复响应消息(二)

WEB海边的风

2016-08-07 23:27

<?php

namespace Imooc\Controller;

use Think\Controller;

class IndexController extends Controller {

    public function index(){

    // 1.将token、timestamp、nonce三个参数进行字典序排序

// timestamp 时间戳

// nonce 随机数

// token 随机字符串

// signature 微信加密字符串

define("TOKEN", "imooc");  

serialVersionUID;

$signature = $_GET["signature"];

$timestamp = $_GET["timestamp"];

$nonce = $_GET["nonce"];

$token = TOKEN;

$tmpArr = array($token, $timestamp, $nonce);

sort($tmpArr); // 将数组排序


// 2.将三个参数字符串拼接成一个字符串进行sha1加密

$tmpStr = implode('', $tmpArr );

$tmpStr = sha1( $tmpStr );

// 3.开发者获得加密后的字符串可与signature对比,标识该请求来源于微信

if( $tmpStr == $signature && $echostr){

// 第一次接入微信API接口

echo $echostr;

exit;

}else{

$this->reponseMsg();

}

    }


    // 接收事件推送并回复

    public function reponseMsg(){

    // 1.获取到微信推送过来的POST数据(XML格式)

    $posrArr = $GLOBALS['HTTP_RAW_POST_DATA'];


    // 2. 处理消息类型,并设置返回类型及内容

    /**

<ToUserName><![CDATA[toUser]]></ToUserName>

<FromUserName><![CDATA[FromUser]]></FromUserName>

<CreateTime>123456789</CreateTime>

<MsgType><![CDATA[event]]></MsgType>

<Event><![CDATA[subscribe]]></Event>


ToUserName 开发者微信号

FromUserName 发送方帐号(一个OpenID)

CreateTime 消息创建时间

MsgType 消息类型,event

Event 事件类型,subscribe(订阅)、unsubscribe(取消订阅)

    */

    $postObj = simplexml_load_string($posrArr);

    // 判断数据包是否是订阅的事件推送

    if(strtolower($postObj->MsgType) == 'event'){

    // 如果是关注 subscribe(订阅) 事件

    if(strtolower($postObj->Event == 'subscribe')){

    // 回复用户消息

    $toUser = $postObj->FromUserName;

    $fromUser = $postObj->ToUserName;

    $time = 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>

    ";

    // sprintf()把格式化的字符串写入一个变量中

    // 第一个参数指定解析的模板

    $info = sprintf($template,$toUser,$fromUser,$time,$MsgType,$content);

    echo $info;

    }

    }


   

   

    }

}


写回答 关注

1回答

  • 墨菲小M
    2016-08-08 17:33:28

    哥们,$echostr这个变量你没有定义啊,要接受$_GET['echostr']

PHP实现微信公众平台开发—提升篇

本课程详细讲解了接收微信用户发送的消息和接收订阅关注的事件推送

64947 学习 · 371 问题

查看课程

相似问题