求大神指教,不用tp5可以實現(xiàn)自動回復(fù)嗎?
下面的沒用tp5,哪里錯了呢
<?php
header('Content-type:text');
//驗證服務(wù)器地址的有效性
function check(){
??? //1.將timestamp,nonce,token按字典序排序
?? ??? ?$timestamp = $_GET['timestamp'];
?? ??? ?$nonce = $_GET['nonce'];
?? ??? ?$token = "weixin";
?? ??? ?$signature = $_GET['signature'];
?? ??? ?$echostr = $_GET['echostr'];
//$_GET 變量用于收集來自 method="get" 的表單中的值。從帶有 GET 方法的表單發(fā)送的信息,對任何人都是可見的(會顯示在瀏覽器的地址欄),并且對發(fā)送的信息量也有限制(最多 100 個字符)
?? ??? ?$array = array( $timestamp,$nonce,$token );
//創(chuàng)建名為 $array 的索引數(shù)組,向它賦三個元素
?? ??? ?sort($array);
?? ??? ?//2.將排序后的三個參數(shù)進(jìn)行拼接之后再用sha1加密
?? ??? ?$tmpstr = implode('',$array);
//把數(shù)組元素按指定規(guī)則組合為字符串
?? ??? ?$tmpstr = sha1( $tmpstr );
?? ??? ?//3.將加密后的字符串與signature進(jìn)行對比,判斷該請求是否來自微信
?? ??? ?if( $tmpstr == $signature && $echostr){
??????????? //第一次接入微信api
??????????? echo $echostr;
??????????? exit;
??????? } else{
?????? ??? ?//之后接入api即用戶關(guān)注公眾號和發(fā)送消息
??????????? responseMsg();
??????? }
}
?? ?check();
//接收事件推送并回復(fù)
function responseMsg(){
?? ?
??? //1.獲取微信推送過來的數(shù)據(jù),即post數(shù)據(jù)(為xml格式)
??? $postArr = file_get_contents('php://input');
??? //2.處理推送數(shù)據(jù),并設(shè)置回復(fù)類型和內(nèi)容
??? /*推送XML數(shù)據(jù)包示例:
??????? <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數(shù)據(jù)轉(zhuǎn)為對象
??? //判斷該數(shù)據(jù)包是否是訂閱的事件推送
??? if( strtolower( $postObj -> MsgType) == 'event'){
?????? ?
?????? ??? ?//如果是關(guān)注事件即subscribe則回復(fù)消息
?????? ??? ? if(strtolower( $postObj -> Event) == 'subscribe'){
??????????? ??? ? $toUser = $postObj -> FromUserName;
???????????????? $fromUser = $postObj -> ToUserName;
???????????????? $createTime = time();
???????????????? $msgType = 'text';
???????????????? $content = '您已成功關(guān)注該平臺';
???????????????? $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數(shù)據(jù)包進(jìn)行對應(yīng)的變量賦值
??????????? ??? ? echo $info;
???????????? }
?? ??? ?}
}
?>
2017-04-10
<?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
?? ??? ?//判斷該數(shù)據(jù)包是否是訂閱的事件推送
?? ??? ?if( strtolower( $postObj->MsgType) == 'event'){
?? ??? ??? ?//如果是關(guān)注 subscribe 事件
?? ??? ??? ?if( strtolower($postObj->Event == 'subscribe') ){
?? ??? ??? ??? ?//回復(fù)用戶消息(純文本格式)?? ?
?? ??? ??? ??? ?$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'){
??????????? //圖文回復(fù)
????????? ?
?? ??? ??? ?$arr = array(
?? ??? ??? ??? ?array(
?? ??? ??? ??? ??? ?'title'=>'imooc',
?? ??? ??? ??? ??? ?'description'=>"imooc is very cool",
?? ??? ??? ??? ??? ?'picUrl'=>'http://idcbgp.cn/static/img/common/logo.png',
?? ??? ??? ??? ??? ?'url'=>'http://idcbgp.cn',
?? ??? ??? ??? ?),
?? ??? ??? ??? ?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://idcbgp.cn/static/img/common/logo.png',
?? ??? ??? ??? ??? ?'url'=>'http://www.qq.com',
?? ??? ??? ??? ?),
?? ??? ??? ?);
?? ??? ??? ?$sdk=new sdk();
??????????? $sdk->tuwen($postObj,$arr);
?? ??? ??? ?
?? ??? ??? ?
?? ??? ?}else{
??????????? //純文本回復(fù)
?????? ??? ?switch( trim($postObj->Content) ){
?? ??? ??? ??? ?case 1:
?? ??? ??? ??? ??? ?$content = '您輸入的數(shù)字是1';
?? ??? ??? ??? ?break;
?? ??? ??? ??? ?case 2:
?? ??? ??? ??? ??? ?$content = '您輸入的數(shù)字是2';
?? ??? ??? ??? ?break;
?? ??? ??? ??? ?case 3:
?? ??? ??? ??? ??? ?$content = '您輸入的數(shù)字是3';
?? ??? ??? ??? ?break;
?? ??? ??? ??? ?case 4:
?? ??? ??? ??? ??? ?$content = "<a href='http://idcbgp.cn'>慕課</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.設(shè)置參數(shù)
?? ??? ?curl_setopt($ch , CURLOPT_URL, $url);
?? ??? ?curl_setopt($ch , CURLOPT_RETURNTRANSFER, 1);
?? ??? ?//4.調(diào)用接口
?? ??? ?$res = curl_exec($ch);
?? ??? ?//5.關(guān)閉curl
?? ??? ?curl_close( $ch );
?? ??? ?if( curl_errno($ch) ){
?? ??? ??? ?var_dump( curl_error($ch) );
?? ??? ?}
?? ??? ?$arr = json_decode($res, true);
?? ??? ?var_dump( $arr );
?? ?}
?? ?
?? ?//獲取服務(wù)器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>";
?? ?}
}
2017-04-10
用面向?qū)ο髞韺懓伞?/p>