最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

PHP微信開(kāi)發(fā)之微信消息自動(dòng)回復(fù)下所遇到的坑

 更新時(shí)間:2016年05月09日 10:55:30   作者:web浩  
這篇文章是小編給大家介紹的微信消息自動(dòng)回復(fù)下所遇到的坑的相關(guān)內(nèi)容,在日常項(xiàng)目開(kāi)發(fā)中經(jīng)常遇到,非常具有參考借鑒價(jià)值,感興趣的小伙伴一起學(xué)習(xí)吧

微信回復(fù)原理:

當(dāng)普通微信用戶向公眾賬號(hào)發(fā)送消息時(shí),微信服務(wù)器首先收到用戶發(fā)送的消息;

然后將用戶信息和消息打包成XML格式的數(shù)據(jù)包,再將這個(gè)XML數(shù)據(jù)包通過(guò)POST方法提交到開(kāi)發(fā)者設(shè)置的URL上。

疑問(wèn)一:為何使用$GLOBALS["HTTP_RAW_POST_DATA"]保存POST過(guò)來(lái)的數(shù)據(jù),而非$_POST數(shù)組?

回答:

POST只能保存標(biāo)準(zhǔn)的數(shù)據(jù)類型,對(duì)于XML、SOAP或Application/Octet-steam之類的內(nèi)容則無(wú)法解析。

而$GLOBALS["HTTP_RAW_POST_DATA"]和$_POST是一樣的,如果POST過(guò)來(lái)的數(shù)據(jù)PHP能夠識(shí)別,則可以用$GLOBALS["HTTP_RAW_POST_DATA"]來(lái)接收。

疑問(wèn)二:simplexml_load_file()各參數(shù)和返回值是什么?

回答:

參數(shù)含義

string:需要處理的XML字符串。

class:用來(lái)指定新對(duì)象,通常設(shè)置為"SimpleXMLElement",生成一個(gè)簡(jiǎn)單XML元素的類。

options:指定附加的Libxml參數(shù),通常設(shè)置為常量LIBXML_NOCDATA,表示把CDATA設(shè)置為文本節(jié)點(diǎn)。

ns:一般省略

is_prefix:一般省略

函數(shù)執(zhí)行完成后返回SimpleXMLElement類的一個(gè)對(duì)象。

功能:公眾號(hào)只接受文字消息,且做出相應(yīng)的文字回復(fù)。

<span style="font-family:Courier New;font-size:14px;"><?php 
define("TOKEN","weixin"); 
$weixinObj = new Wechat(); 
$weixinObj->valid(); 
class Wechat{ 
public function valid(){ 
$echoStr = $_GET['echostr']; 
//如果是第一次接入 
if($this->checkSignature() && $echoStr ){ 
echo $echoStr; 
exit; 
}else{ 
$this->responseMsg(); 
} 
} 
//校驗(yàn)方法 
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; 
} 
} 
/* 普通文本消息 
<xml> 
<ToUserName><![CDATA[toUser]]></ToUserName> 
<FromUserName><![CDATA[fromUser]]></FromUserName> 
<CreateTime>1348831860</CreateTime> 
<MsgType><![CDATA[text]]></MsgType> 
<Content><![CDATA[this is a test]]></Content> 
</xml> 
*/ 
public function responseMsg(){ 
//獲取微信服務(wù)器POST請(qǐng)求中的數(shù)據(jù) 
$postStr = $GLOBALS["HTTP_RAW_POST_DATA"]; 
if( !empty($postStr) ){ 
$postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA); 
$fromUser = $postObj->FromUserName; 
$toUser = $postObj->ToUserName; 
$keyword = trim($postObj->Content); 
$time = time(); 
$template = "<xml> 
<ToUserName><![CDATA[%s]]></ToUserName> 
<FromUserName><![CDATA[%s]]></FromUserName> 
<CreateTime>%s</CreateTime> 
<MsgType><![CDATA[%s]]></MsgType> 
<Content><![CDATA[%s]]></Content> 
</xml>"; 
if( strtolower($postObj->MsgType)!='text' ){ 
$msgType = "text"; 
$content = "我只接受文本消息"; 
}else{ 
$msgType = "text"; 
if( !empty($keyword) ){ 
$content = "您發(fā)送的消息是:".$postObj->Content; 
}else{ 
$content = "請(qǐng)輸入關(guān)鍵字";//消息為空 
} 
} 
$info = sprintf($template, $fromUser, $toUser, $time, $msgType, $content); 
echo $info; 
}else{ 
echo ""; 
exit; 
} 
} 
}</span> 

功能:公眾號(hào)只接受圖片消息,且做出相應(yīng)的文字回復(fù)。

<span style="font-family:Courier New;font-size:14px;"><?php 
define("TOKEN","weixin"); 
$weixinObj = new Wechat(); 
$weixinObj->valid(); 
class Wechat{ 
public function valid(){ 
$echoStr = $_GET['echostr']; 
//如果是第一次接入 
if($this->checkSignature() && $echoStr ){ 
echo $echoStr; 
exit; 
}else{ 
$this->responseMsg(); 
} 
} 
//校驗(yàn)方法 
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; 
} 
} 
/* 接收?qǐng)D片消息格式 
<xml> 
<ToUserName><![CDATA[toUser]]></ToUserName> 
<FromUserName><![CDATA[fromUser]]></FromUserName> 
<CreateTime>1348831860</CreateTime> 
<MsgType><![CDATA[image]]></MsgType> 
<PicUrl><![CDATA[this is a url]]></PicUrl> 
<MediaId><![CDATA[media_id]]></MediaId> 
<MsgId>1234567890123456</MsgId> 
</xml> 
*/ 
public function responseMsg(){ 
//獲取微信服務(wù)器POST請(qǐng)求中的數(shù)據(jù) 
$postStr = $GLOBALS["HTTP_RAW_POST_DATA"]; 
if( !empty($postStr) ){ 
$postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA); 
$fromUser = $postObj->FromUserName; 
$toUser = $postObj->ToUserName; 
$time = time(); 
$msgType= $postObj->MsgType; 
$picUrl = $postObj->PicUrl; 
$mediaId = $postObj->MediaId; 
$template = "<xml> 
<ToUserName><![CDATA[%s]]></ToUserName> 
<FromUserName><![CDATA[%s]]></FromUserName> 
<CreateTime>%s</CreateTime> 
<MsgType><![CDATA[%s]]></MsgType> 
<Content><![CDATA[%s]]></Content> 
</xml>"; 
if( strtolower($msgType)!='image' ){ 
$msgType = "text"; 
$content = "我只接受圖片消息"; 
}else{ 
$msgType = "text"; 
if( !empty( $picUrl ) ){ 
$content = "圖片鏈接為:".$picUrl."\n"; 
$content .= "媒體id:".$mediaId; 
}else{ 
$content = "請(qǐng)發(fā)送圖片";//消息為空 
} 
} 
$info = sprintf($template, $fromUser, $toUser, $time, $msgType, $content); 
echo $info; 
}else{ 
echo ""; 
exit; 
} 
} 
}</span>

以上是小編給大家分享的微信消息自動(dòng)回復(fù)下所遇到的坑的相關(guān)知識(shí),希望對(duì)大家有所幫助!

相關(guān)文章

最新評(píng)論

九寨沟县| 涞水县| 乌兰浩特市| 漳平市| 怀柔区| 绩溪县| 屏边| 赤峰市| 临朐县| 岳阳县| 团风县| 平遥县| 定襄县| 南昌县| 新沂市| 边坝县| 阳山县| 双城市| 古浪县| 香港| 巴南区| 抚顺市| 清涧县| 湘乡市| 银川市| 灌阳县| 闸北区| 建水县| 东乌珠穆沁旗| 义马市| 武安市| 阜新| 禹州市| 宁远县| 大悟县| 绥中县| 和林格尔县| 新郑市| 从江县| 保靖县| 西宁市|