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;
}
}
}
}
哥们,$echostr这个变量你没有定义啊,要接受$_GET['echostr']
PHP实现微信公众平台开发—提升篇
64947 学习 · 371 问题
相似问题