• 技术文章 >php教程 >php手册

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

    2016-06-06 20:15:34原创629

    这篇文章主要介绍了php实现基于微信公众平台开发SDK(demo)扩展的方法,包括处理文本消息、天气、翻译、聊天信息及自定义菜单等,需要的朋友可以参考下

    本文实例讲述了php实现基于微信公众平台开发SDK(demo)扩展的方法。分享给大家供大家参考。具体分析如下:

    该扩展基于官方的微信公众平台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,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='无法进行有效的翻译';
    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, 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) ; //获取数据返回
    curl_setopt($ch, CURLOPT_BINARYTRANSFER,true) ; //在启用 CURLOPT_RETURNTRANSFER 时候将获取数据返回
    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;
    }

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    上一篇:PHP获取youku视频真实flv文件地址的方法 下一篇:php实现refresh刷新页面批量导入数据的方法
    VIP课程(WEB全栈开发)

    相关文章推荐

    • 【活动】充值PHP中文网VIP即送云服务器• PHP -time(),date(),mktime()日期与时间函数库• PHP中根据IP地址判断城市实现城市切换或跳转代码• php中DOMDocument简单用法示例代码(XML创建、添加、删除、修改)• 继续收藏一些PHP常用函数第1/2页• php设计模式 Factory(工厂模式)
    1/1

    PHP中文网