下面的没用tp5,哪里错了呢
<?php
header('Content-type:text');
//验证服务器地址的有效性
function check(){
//1.将timestamp,nonce,token按字典序排序
$timestamp = $_GET['timestamp'];
$nonce = $_GET['nonce'];
$token = "weixin";
$signature = $_GET['signature'];
$echostr = $_GET['echostr'];
//$_GET 变量用于收集来自 method="get" 的表单中的值。从带有 GET 方法的表单发送的信息,对任何人都是可见的(会显示在浏览器的地址栏),并且对发送的信息量也有限制(最多 100 个字符)
$array = array( $timestamp,$nonce,$token );
//创建名为 $array 的索引数组,向它赋三个元素
sort($array);
//2.将排序后的三个参数进行拼接之后再用sha1加密
$tmpstr = implode('',$array);
//把数组元素按指定规则组合为字符串
$tmpstr = sha1( $tmpstr );
//3.将加密后的字符串与signature进行对比,判断该请求是否来自微信
if( $tmpstr == $signature && $echostr){
//第一次接入微信api
echo $echostr;
exit;
} else{
//之后接入api即用户关注公众号和发送消息
responseMsg();
}
}
check();
//接收事件推送并回复
function responseMsg(){
//1.获取微信推送过来的数据,即post数据(为xml格式)
$postArr = file_get_contents('php://input');
//2.处理推送数据,并设置回复类型和内容
/*推送XML数据包示例:
<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数据转为对象
//判断该数据包是否是订阅的事件推送
if( strtolower( $postObj -> MsgType) == 'event'){
//如果是关注事件即subscribe则回复消息
if(strtolower( $postObj -> Event) == 'subscribe'){
$toUser = $postObj -> FromUserName;
$fromUser = $postObj -> ToUserName;
$createTime = 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 ,$toUser,$fromUser,$createTime,$msgType,$content);//将xml数据包进行对应的变量赋值
echo $info;
}
}
}
?>
<?php
require('sdk.php');
define("TOKEN", "weixin");
$wechatObj = new wechatCallbackapiTest();
$wechatObj->valid();
//$wechatObj->getWxServerIp();
class wechatCallbackapiTest
{
public function valid()
{
$echoStr = $_GET["echostr"];
//valid signature , option
if($this->checkSignature() && $echoStr){
header('content-type:text');
echo $echoStr;
exit;
}else{
header('content-type:text');
$this->responseMsg();
}
}
public function responseMsg()
{
//get post data, May be due to the different environments
$postStr = $GLOBALS["HTTP_RAW_POST_DATA"];
$postObj = simplexml_load_string( $postStr );
//$postObj->ToUserName = '';
//$postObj->FromUserName = '';
//$postObj->CreateTime = '';
//$postObj->MsgType = '';
//$postObj->Event = '';
// gh_e79a177814ed
//判断该数据包是否是订阅的事件推送
if( strtolower( $postObj->MsgType) == 'event'){
//如果是关注 subscribe 事件
if( strtolower($postObj->Event == 'subscribe') ){
//回复用户消息(纯文本格式)
$sdk=new sdk();
$sdk->guanzhu($postObj);
}
}
/*<xml>
<ToUserName><![CDATA[toUser]]></ToUserName>
<FromUserName><![CDATA[fromUser]]></FromUserName>
<CreateTime>12345678</CreateTime>
<MsgType><![CDATA[text]]></MsgType>
<Content><![CDATA[你好]]></Content>
</xml>*/
if(strtolower($postObj->MsgType) == 'text' && trim($postObj->Content)=='tuwen'){
//图文回复
$arr = array(
array(
'title'=>'imooc',
'description'=>"imooc is very cool",
'picUrl'=>'http://www.imooc.com/static/img/common/logo.png',
'url'=>'http://www.imooc.com',
),
array(
'title'=>'hao123',
'description'=>"hao123 is very cool",
'picUrl'=>'https://www.baidu.com/img/bdlogo.png',
'url'=>'http://www.hao123.com',
),
array(
'title'=>'qq',
'description'=>"qq is very cool",
'picUrl'=>'http://www.imooc.com/static/img/common/logo.png',
'url'=>'http://www.qq.com',
),
);
$sdk=new sdk();
$sdk->tuwen($postObj,$arr);
}else{
//纯文本回复
switch( trim($postObj->Content) ){
case 1:
$content = '您输入的数字是1';
break;
case 2:
$content = '您输入的数字是2';
break;
case 3:
$content = '您输入的数字是3';
break;
case 4:
$content = "<a href='http://www.imooc.com'>慕课</a>";
break;
case '英文':
$content = 'imooc is ok';
break;
}
$sdk=new sdk();
$sdk->guanjianzi($postObj,$content);
}
}
//token验证
private function checkSignature()
{
$signature = $_GET["signature"];
$timestamp = $_GET["timestamp"];
$nonce = $_GET["nonce"];
$token = TOKEN;
$tmpArr = array($token, $timestamp, $nonce);
sort($tmpArr);
$tmpStr = implode( $tmpArr );
$tmpStr = sha1( $tmpStr );
if( $tmpStr == $signature ){
return true;
}else{
return false;
}
}
//获取accesstoken
function getWxAccessToken(){
//1.请求url地址
$appid = 'wx99c1aced49601c8a';
$appsecret = 'a722ca3ca9e7ffb093ec2758ec071176';
$url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=".$appid."&secret=".$appsecret;
//2初始化
$ch = curl_init();
//3.设置参数
curl_setopt($ch , CURLOPT_URL, $url);
curl_setopt($ch , CURLOPT_RETURNTRANSFER, 1);
//4.调用接口
$res = curl_exec($ch);
//5.关闭curl
curl_close( $ch );
if( curl_errno($ch) ){
var_dump( curl_error($ch) );
}
$arr = json_decode($res, true);
var_dump( $arr );
}
//获取服务器ip
function getWxServerIp(){
$accessToken = "QFXsNxpeDci-EYiggO_AGr_QHd7tqZPT5MG5yBygiGgdlp4ZrkYO8VDKCZ5STRtBJaHk6GxBajsJFPm1QRGN8oabd9hSGJeHKg0JpkgvvCO8PoUBgFROkQ_8-hL9cevPTJHdAJAAQO";
$url = "https://api.weixin.qq.com/cgi-bin/getcallbackip?access_token=".$accessToken;
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
$res = curl_exec($ch);
curl_close($ch);
if(curl_errno($ch)){
var_dump(curl_error($ch));
}
$arr = json_decode($res,true);
echo "<pre>";
var_dump( $arr );
echo "</pre>";
}
}
用面向对象来写吧。