訂閱事件與回復響應消息,請老師幫我看下,我的怎么不行呀!
<?php
namespace Imooc\Controller;
use Think\Controller;
class IndexController extends Controller {
? ? public function index(){
? ? // 1.將token、timestamp、nonce三個參數(shù)進行字典序排序
// timestamp 時間戳
// nonce 隨機數(shù)
// token 隨機字符串
// signature 微信加密字符串
define("TOKEN", "imooc"); ?
serialVersionUID;
$signature = $_GET["signature"];
$timestamp = $_GET["timestamp"];
$nonce = $_GET["nonce"];
$token = TOKEN;
$tmpArr = array($token, $timestamp, $nonce);
sort($tmpArr); // 將數(shù)組排序
// 2.將三個參數(shù)字符串拼接成一個字符串進行sha1加密
$tmpStr = implode('', $tmpArr );
$tmpStr = sha1( $tmpStr );
// 3.開發(fā)者獲得加密后的字符串可與signature對比,標識該請求來源于微信
if( $tmpStr == $signature && $echostr){
// 第一次接入微信API接口
echo $echostr;
exit;
}else{
$this->reponseMsg();
}
? ? }
? ? // 接收事件推送并回復
? ? public function reponseMsg(){
? ? // 1.獲取到微信推送過來的POST數(shù)據(jù)(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 開發(fā)者微信號
FromUserName 發(fā)送方帳號(一個OpenID)
CreateTime 消息創(chuàng)建時間
MsgType 消息類型,event
Event 事件類型,subscribe(訂閱)、unsubscribe(取消訂閱)
? ? */
? ? $postObj = simplexml_load_string($posrArr);
? ? // 判斷數(shù)據(jù)包是否是訂閱的事件推送
? ? if(strtolower($postObj->MsgType) == 'event'){
? ? // 如果是關注 subscribe(訂閱) 事件
? ? if(strtolower($postObj->Event == 'subscribe')){
? ? // 回復用戶消息
? ? $toUser = $postObj->FromUserName;
? ? $fromUser = $postObj->ToUserName;
? ? $time = time();
? ? $MsgType = 'text';
? ? $Content = '歡迎關注我們的微信公眾號';
? ? // 回復文本消息 ?發(fā)送給用戶的模板
? ? $template = "
? ? <xml>
<ToUserName><![CDATA[%s]]></ToUserName>
<FromUserName><![CDATA[%s]]></FromUserName>
<CreateTime>%s</CreateTime>
<MsgType><![CDATA[%s]]></MsgType>
<Content><![CDATA[%s]]></Content>
<xml>
? ? ";
? ? // sprintf()把格式化的字符串寫入一個變量中
? ? // 第一個參數(shù)指定解析的模板
? ? $info = sprintf($template,$toUser,$fromUser,$time,$MsgType,$content);
? ? echo $info;
? ? }
? ? }
? ?
? ?
? ? }
}
2016-08-08
哥們,$echostr這個變量你沒有定義啊,要接受$_GET['echostr']