php實(shí)現(xiàn)基于微信公眾平臺開發(fā)SDK(demo)擴(kuò)展的方法
本文實(shí)例講述了php實(shí)現(xiàn)基于微信公眾平臺開發(fā)SDK(demo)擴(kuò)展的方法。分享給大家供大家參考。具體分析如下:
該擴(kuò)展基于官方的微信公眾平臺SDK,這里只做了簡單地封裝,實(shí)現(xiàn)了一些基本的功能(如天氣查詢,翻譯,自動聊天機(jī)器人,自定義菜單接口)僅供學(xué)習(xí)之用.代碼如下:
$wechatObj = new wechatCallbackapiTest();
$wechatObj->responseMsg();
class wechatCallbackapiTest
{
//簽名驗(yàn)證公共接口
public function valid()
{
$echoStr = $_GET["echostr"];
if($this->checkSignature()){
echo $echoStr;
exit;
}
}
//主入口處理函數(shù)
public function responseMsg()
{
$postStr = $GLOBALS["HTTP_RAW_POST_DATA"];
if (!emptyempty($postStr)){
$postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);
$msgType=trim($postObj->MsgType);
switch($msgType){
case 'text':
$resultStr=$this->handleText($postObj);
break;
case 'event':
$resultStr=$this->handleEvent($postObj);
break;
default:
$resultStr=$this->handleDefault($postObj);
break;
}
echo $resultStr;
}else {
echo "Error";
exit;
}
}
//處理文本消息
private function handleText($obj){
$keyword=trim($obj->Content);
if(preg_match('/天氣/',$keyword)){
$contentStr=$this->handleWeather($obj);
}elseif(preg_match('/翻譯/',$keyword)){
$contentStr=$this->handleTranslation($obj);
}else{
$contentStr=$this->handleChat($obj);
}
return $this->handleStr($obj,$contentStr);
}
//處理天氣
private function handleWeather($obj){
$keyword=mb_substr($obj->Content,-2,2,'utf-8');
$zone=mb_substr($obj->Content,0,-2,'utf-8');
if($keyword=='天氣' && !emptyempty($zone)){
$zoneArr=json_decode(file_get_contents('http://api.k780.com:88/?app=weather.city&format=json'),true);
$zoneArr=$zoneArr['result'];
$cityId='';
foreach($zoneArr as $value){
if($zone==$value['citynm']){
$cityId=$value['weaid'];
break;
}
}
if(!emptyempty($cityId)){
$data=file_get_contents("http://api.k780.com:88/?app=weather.today&weaid=$cityId&appkey=10638&sign=3736578f099375665f9f141a6326b757&format=json");
$data=json_decode($data);
$contentStr="今天是:".$data->result->days.",".$data->result-> week.",".$data->result->citynm."天氣:".$data->result->weather."n溫度:".$data->result->temperature.",
".$data->result->wind_direction.",".$data->result->wind_power.", 最低溫度:".$data->result->temp_low.",最高溫度:".$data->result->temp_high;
}else{
$contentStr='找不到輸入的城市!';
}
}else{
$contentStr='輸入的查詢格式不正確!';
}
return $contentStr;
}
//處理翻譯
private function handleTranslation($obj){
$keyword=mb_substr($obj->Content,0,2,'utf-8');
$words=mb_substr($obj->Content,2,220,'utf-8');
if($keyword=='翻譯' && !emptyempty($words)){
$data=file_get_contents('http://fanyi.youdao.com/openapi.do?keyfrom=zfsblog&key=364295447&type=data&doctype=json&version=1.1&q='.urlencode($words));
$data=json_decode($data,true);
switch($data['errorCode']){
case '0':
$contentStr=$data['translation'][0];
break;
case '20':
$contentStr='要翻譯的文本過長';
break;
case '30':
$contentStr='無法進(jìn)行有效的翻譯';
break;
case '40':
$contentStr='不支持的語言類型';
break;
case '50':
$contentStr='無效的key';
break;
default:
$contentStr='Error';
break;
}
}else{
$contentStr='輸入的翻譯格式不正確!';
}
return $contentStr;
}
//處理聊天信息
private function handleChat($obj){
$keywords=$obj->Content;
$curlPost=array("chat"=>$keywords);
$ch = curl_init();//初始化curl
curl_setopt($ch, CURLOPT_URL,'http://www.xiaojo.com/bot/chata.php');//抓取指定網(wǎng)頁
curl_setopt($ch, CURLOPT_HEADER, 0);//設(shè)置header
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);//要求結(jié)果為字符串且輸出到屏幕上
curl_setopt($ch, CURLOPT_POST, 1);//post提交方式
curl_setopt($ch, CURLOPT_POSTFIELDS, $curlPost);
$data = curl_exec($ch);//運(yùn)行curl
curl_close($ch);
if(!emptyempty($data)){
$contentStr=$data;
}else{
$ran=rand(1,5);
switch($ran){
case 1:
$contentStr= "小九今天累了,明天再陪你聊天吧";
break;
case 2:
$contentStr= "小九睡覺嘍~~";
break;
case 3:
$contentStr= "呼呼~~呼呼~~";
break;
case 4:
$contentStr= "你話好多啊,不跟你聊了";
break;
case 5:
$contentStr= "你話好多啊,不跟你聊了";
break;
}
}
return $contentStr;
}
//創(chuàng)建自定義菜單
public function createMenu($data,$token){
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://api.weixin.qq.com/cgi-bin/menu/create?access_token=".$token);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (compatible; MSIE 5.01; Windows NT 5.0)');
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_AUTOREFERER, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$result = curl_exec($ch);
curl_close($ch);
return $result;
}
//查詢自定義菜單
function getMenu($token){
$url="https://api.weixin.qq.com/cgi-bin/menu/get?access_token=$token";
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,true) ; //獲取數(shù)據(jù)返回
curl_setopt($ch, CURLOPT_BINARYTRANSFER,true) ; //在啟用 CURLOPT_RETURNTRANSFER 時候?qū)@取數(shù)據(jù)返回
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,false);
return $output = curl_exec($ch);
}
//刪除自定義菜單
public function deleteMenu($token){
$url="https://api.weixin.qq.com/cgi-bin/menu/delete?access_token=".$token;
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
$result = curl_exec($ch);
curl_close($ch);
return $result;
}
//處理事件消息
private function handleEvent($obj){
$content='';
switch($obj->Event){
case 'subscribe':
$content.="welcome-歡迎關(guān)注該公眾號號!";
break;
case 'unsubscribe':
$content.="感謝您一直以來對該公眾號的關(guān)注,再見!";
break;
default:
$content.="";
break;
}
return $this->handleStr($obj,$content);
}
//處理回復(fù)消息字符串
private function handleStr($obj,$content='',$flag=0){
$textTpl = "";
return sprintf($textTpl, $obj->FromUserName, $obj->ToUserName, time(), $content,$flag);
}
//簽名驗(yàn)證函數(shù)
private function checkSignature()
{
$signature = $_GET["signature"];
$timestamp = $_GET["timestamp"];
$nonce = $_GET["nonce"];
$token = TOKEN;
$tmpArr = array($token, $timestamp, $nonce);
sort($tmpArr, SORT_STRING);
$tmpStr = implode( $tmpArr );
$tmpStr = sha1( $tmpStr );
if( $tmpStr == $signature ){
return true;
}else{
return false;
}
}
}
希望本文所述對大家的php程序設(shè)計(jì)有所幫助。
- php實(shí)現(xiàn)微信公眾平臺賬號自定義菜單類
- php微信公眾平臺開發(fā)類實(shí)例
- php實(shí)現(xiàn)微信公眾平臺賬號自定義菜單類
- php微信公眾平臺開發(fā)之獲取用戶基本信息
- 微信公眾平臺開發(fā)接口PHP SDK完整版
- PHP實(shí)現(xiàn)微信公眾平臺音樂點(diǎn)播
- php版微信公眾平臺之微信網(wǎng)頁登陸授權(quán)示例
- weiphp微信公眾平臺授權(quán)設(shè)置
- php微信公眾平臺配置接口開發(fā)程序
- php微信公眾平臺開發(fā)之微信群發(fā)信息
- PHP Curl模擬登錄微信公眾平臺、新浪微博實(shí)例代碼
- PHP封裝的微信公眾平臺接口開發(fā)操作類完整示例
相關(guān)文章
PHP中的session永不過期的解決思路及實(shí)現(xiàn)方法分享
讓PHP的session永不過期,你可能沒有遇到這么郁悶的問題,但是我遇到過,很郁悶。2011-04-04linux使用crontab實(shí)現(xiàn)PHP執(zhí)行計(jì)劃定時任務(wù)
前幾天寫過一篇文章,利用單純的php實(shí)現(xiàn)定時執(zhí)行任務(wù),但是效率不佳,對于linux來說用crontab實(shí)現(xiàn)更加合理2014-05-05PHP實(shí)現(xiàn)mysqli批量執(zhí)行多條語句的方法示例
這篇文章主要介紹了PHP實(shí)現(xiàn)mysqli批量執(zhí)行多條語句的方法,結(jié)合實(shí)例形式分析了php連接mysqli并批量執(zhí)行多條語句的相關(guān)操作技巧,需要的朋友可以參考下2017-07-07php簡單實(shí)現(xiàn)多字節(jié)字符串翻轉(zhuǎn)的方法
這篇文章主要介紹了php簡單實(shí)現(xiàn)多字節(jié)字符串翻轉(zhuǎn)的方法,涉及php操作字符串的技巧,具有一定參考借鑒價值,需要的朋友可以參考下2015-03-03JavaScript實(shí)現(xiàn)滾動欄效果的方法
這篇文章主要介紹了JavaScript實(shí)現(xiàn)滾動欄效果的方法,涉及javascript操作html元素實(shí)現(xiàn)滾動的相關(guān)技巧,非常具有實(shí)用價值,需要的朋友可以參考下2015-04-04PHP實(shí)現(xiàn)獲取文件mime類型多種方法解析
這篇文章主要介紹了PHP實(shí)現(xiàn)獲取文件mime類型多種方法解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-05-05