加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php实现基于微信公众平台开发SDK(demo)扩展的方法

发布时间:2020-12-13 02:17:20 所属栏目:PHP教程 来源:网络整理
导读:《PHP实例:php实现基于微信公众平台开发SDK(demo)扩展的方法》要点: 本文介绍了PHP实例:php实现基于微信公众平台开发SDK(demo)扩展的方法,希望对您有用。如果有疑问,可以联系我们。 PHP编程 本篇章节讲解php实现基于微信公众平台开发SDK(demo)扩展的

《PHP实例:php实现基于微信公众平台开发SDK(demo)扩展的方法》要点:
本文介绍了PHP实例:php实现基于微信公众平台开发SDK(demo)扩展的方法,希望对您有用。如果有疑问,可以联系我们。

PHP编程本篇章节讲解php实现基于微信公众平台开发SDK(demo)扩展的办法.分享给大家供大家参考.具体分析如下:

PHP编程该扩展基于官方的微信公众平台SDK,这里只做了简单地封装,实现了一些基本的功能(如天气查询,翻译,自动聊天机器人,自定义菜单接口)仅供学习之用.代码如下:

代码如下:
define("TOKEN","xingans");
$wechatObj = new wechatCallbackapiTest();
$wechatObj->responseMsg();
class wechatCallbackapiTest
{
?? //签名验证公共接口
?? public function valid()
?? {
?????? $echoStr = $_GET["echostr"];
?????? if($this->checkSignature()){
?????????? echo $echoStr;
?????????? exit;
?????? }
?? }
?
?? //主入口处理函数
?? 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,'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,'utf-8');
?????? $words=mb_substr($obj->Content,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='无法进行有效的翻译';
?????????????????? 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');//抓取指定网页
?????? curl_setopt($ch,CURLOPT_HEADER,0);//设置header
?????? curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);//要求结果为字符串且输出到屏幕上
?????? curl_setopt($ch,CURLOPT_POST,1);//post提交方式
?????? curl_setopt($ch,CURLOPT_POSTFIELDS,$curlPost);
?????? $data = curl_exec($ch);//运行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;
????? }
?????
????? //创建自定义菜单
????? public function createMenu($data,$token){
??????? $ch = curl_init();
??????? curl_setopt($ch,"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,CURLOPT_USERAGENT,'Mozilla/5.0 (compatible; MSIE 5.01; Windows NT 5.0)');
??????? curl_setopt($ch,CURLOPT_FOLLOWLOCATION,1);
??????? curl_setopt($ch,CURLOPT_AUTOREFERER,$data);
??????? curl_setopt($ch,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,true) ; //获取数据返回
?????? curl_setopt($ch,CURLOPT_BINARYTRANSFER,true) ; //在启用 CURLOPT_RETURNTRANSFER 时候将获取数据返回???
?????? curl_setopt($ch,false);
?????? curl_setopt($ch,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,$url);
?????? curl_setopt($ch,1);
?????? curl_setopt($ch,false);
?????? $result = curl_exec($ch);
?????? curl_close($ch);
?????? return $result;
????? }

PHP编程????? //处理事件消息
????? private function handleEvent($obj){
????????? $content='';
????????? switch($obj->Event){
????????????? case 'subscribe':
????????????????? $content.="welcome-欢迎关注该公众号号!";
????????????????? break;
????????????? case 'unsubscribe':
????????????????? $content.="感谢您一直以来对该公众号的关注,再见!";
????????????????? break;
????????????? default:
????????????????? $content.="";
????????????????? break;
????????? }
????????? return $this->handleStr($obj,$content);
????? }
?????
????? //处理回复消息字符串
????? private function handleStr($obj,$content='',$flag=0){
?????? $textTpl = "";
?????? return sprintf($textTpl,$obj->FromUserName,$obj->ToUserName,time(),$content,$flag);
????? }
??
?? //签名验证函数
?? 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编程希望本文所述对大家的php程序设计有所赞助.

《PHP实例:php实现基于微信公众平台开发SDK(demo)扩展的方法》是否对您有启发,欢迎查看更多与《PHP实例:php实现基于微信公众平台开发SDK(demo)扩展的方法》相关教程,学精学透。编程之家 52php.cn为您提供精彩教程。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读