关于微信平台开发者学习

<?php

class wechatCallbackapiTest
{
    public $access_token;  //作为一个数组存储,‘AccToken‘存储获得的access token,‘deadtime‘存储有效时间,‘CTime‘记录获得的access token的时间
    private $menu;   //存放自定义菜单,数组类型

    function __construct()
    {
      //$this->get_AccToken();
      //$this->delete_menu();
      //$this->create_menu();
      $this->responseMsg();
    }
    public function responseMsg()
    {
        //get post data, May be due to the different environments
        $postStr = $GLOBALS["HTTP_RAW_POST_DATA"];

        if (!empty($postStr)){

                  $postObj = simplexml_load_string($postStr, ‘SimpleXMLElement‘, LIBXML_NOCDATA);

                $type=trim($postObj->MsgType);
                switch($type)
                {
                  case "text":
                        $ret=$this->handle_text($postObj);
                        break;
                  case "image":
                        $ret=$this->handle_pic($postObj);
                        break;
                  case "event":
                        $ret=$this->handle_event($postObj);
                        break;
                  case "voice":
                        $ret=$this->handle_voice($postObj);
                        break;
                  case "link":
                        $ret=$this->handle_link($postObj);
                        break;
                  case "location":
                        $ret=$this->handle_location($postObj);
                        break;
                  default:
                        $contentStr = "未识别的消息";
                        $ret=$this->res_text($postObj,$content);
                 }
                 echo $ret;
        }
        else
        {
            echo "";
            exit;
        }
    }

    private function res_text($postObj,$content)  //回复一条文字消息
    {
        $fromUsername = $postObj->FromUserName;
        $toUsername = $postObj->ToUserName;
        $time = time();
        $textTpl = "<xml>
                    <ToUserName><![CDATA[%s]]></ToUserName>
                    <FromUserName><![CDATA[%s]]></FromUserName>
                    <CreateTime>%s</CreateTime>
                    <MsgType><![CDATA[%s]]></MsgType>
                    <Content><![CDATA[%s]]></Content>
                    </xml>";
        $msgType = "text";
        $contentStr=$content;
        $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);
        return $resultStr;
    }

    private function handle_text($postObj)  //处理接收到的文字消息  test
    {
        $keyword = trim($postObj->Content);
        if(!empty( $keyword ))
        {
            $content = "这是一条文字消息";
            $ret=$this->res_text($postObj,$content);
            return $ret;
        }
        else
        {
            echo "Input something...";
        }
    }

   /*private function handle_pic($postObj)
    {
        $content= "这是一条图片消息";
        $ret=$this->res_text($postObj,$content);
        return $ret;
    }*/
    private function handle_pic($postObj)

    {
        $MediaID = $postObj->MediaId;
        /*$fromUsername = $postObj->FromUserName;
        $toUsername = $postObj->ToUserName;
        $time = time();
        $textTpl = "<xml>
                    <ToUserName><![CDATA[%s]]></ToUserName>
                    <FromUserName><![CDATA[%s]]></FromUserName>
                    <CreateTime>%s</CreateTime>
                    <MsgType><![CDATA[%s]]></MsgType>
                    <Image>
                    <MediaId><![CDATA[media_id]]></MediaId>
                    </Image>
                    </xml>";
        $msgType = "image";
        $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $image);
        return $resultStr;*/
        $ret=$this->res_text($postObj,$MediaID);
        return $ret;
    }

    private function handle_event($postObj)
    {
        $event=$postObj->Event;
        switch($event)
        {
           case "CLICK":
                $eventkey=trim($postObj->EventKey);
                switch($eventkey)
                {
                      case "yingxin":
                          $content= "你点击的是迎新特刊";
                          $ret=$this->res_text($postObj,$content);
                          return $ret;
                      case "jieri":
                          $content= "你点击的是节日特刊";
                          $ret=$this->res_text($postObj,$content);
                          return $ret;
                      case "zhoumo":
                          $content= "你点击的是周末特刊";
                          $ret=$this->res_text($postObj,$content);
                          return $ret;
                      case "gesai":
                          $content= "校园歌手大赛";
                          $ret=$this->res_text($postObj,$content);
                          return $ret;
                      case "gehui":
                          $content= "毕业歌会";
                          $ret=$this->res_text($postObj,$content);
                          return $ret;
                      case "yuedu":
                          $content= "光华悦读读书季";
                          $ret=$this->res_text($postObj,$content);
                          return $ret;
                      case "jinisi":
                          $contentStr = "工大吉尼斯";
                          $ret=$this->res_text($postObj,$content);
                          return $ret;
                      case "tingxie":
                          $content= "听写大赛";
                          $ret=$this->res_text($postObj,$content);
                          return $ret;
                      case "weiquanfangshi":
                          $content= "     ———维权方式———\n维权邮箱:\n    [email protected]\n维权电话:\n       13161106308\n\n ***全心权益,为你服务***";
                          $ret=$this->res_text($postObj,$content);
                          return $ret;
                      case "weiquanchengguo":
                          $content= "你点击的是维权成果";
                          $ret=$this->res_text($postObj,$content);
                          return $ret;
                      case "woyaoweiquan":
                          $content= "     ———我要维权———\n如果你在校园生活当中遇到权益问题。\n回复发送:“维权”+内容。\n我们将努力为你解决。\n\n ***全心权益,为你服务***";
                          $ret=$this->res_text($postObj,$content);
                          return $ret;
                }
        }
    }

    /*private function handle_voice($postObj)
    {
        if (!empty($postObj->Recognition))
        $content=$postObj->Recognition;
        $ret=$this->res_text($postObj,$content);
        return $ret;

    }*/

    private function handle_voice($postObj)
    {
        $MediaID = $postObj->MediaId;
        $fromUsername = $postObj->FromUserName;
        $toUsername = $postObj->ToUserName;
        $time = time();
        $textTpl = "<xml>
                    <ToUserName><![CDATA[%s]]></ToUserName>
                    <FromUserName><![CDATA[%s]]></FromUserName>
                    <CreateTime>%s</CreateTime>
                    <MsgType><![CDATA[voice]]></MsgType>
                    <Voice>
                    <MediaId><![CDATA[media_id]]></MediaId>
                    </Voice>
                    </xml>";
        $msgType = "voice";
        $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $MediaID);
        return $resultStr;
    }

    private function handle_link($postObj)
    {
        $contentStr ="这是一条链接消息" ;
        $ret=$this->res_text($postObj,$content);
        return $ret;

    }

    private function handle_location($postObj)
    {
        $contentStr ="这是一个位置消息" ;
        $ret=$this->res_text($postObj,$content);
        return $ret;
    }

    public function get_AccToken()   //用于获取access token
    {
        $TOKEN_URL="https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=".APPID."&secret=".APPSECRET;
        $json=file_get_contents($TOKEN_URL);
        $result=json_decode($json,true);
        $this->access_token=array(‘AccToken‘=>$result[‘access_token‘],‘deadtime‘=>$result[‘expires_in‘],‘CTime‘=>time(),);
        return $this->access_token;
    }

    private function legal_time()  //判断access token的时间是否有效
    {
        $cur=time();  //获取当前时间
        if($cur-$this->access_token[‘CTime‘]>=$this->access_token[‘deadtime‘])  //当前时间减去获取时间大于等于有效期时失效,自动重新请求
        {
           $this->get_AccToken();
        }
    }

    private function create_menu()
    {
      $this->menu=‘ {
    "button": [
        {
            "name": "毕业歌会",
            "sub_button": [
                {
                    "type": "click",
                    "name": "红色",
                    "key": "yingxin"
                },
                {
                    "type": "click",
                    "name": "橙色",
                    "key": "jieri"
                },
                {
                    "type": "click",
                    "name": "紫色",
                    "key": "zhoumo"
                },
                {
                    "type": "click",
                    "name": "蓝色",
                    "key": "yingxin"
                },
                {
                    "type": "click",
                    "name": "绿色",
                    "key": "yingxin"
                }
            ]
        },
        {
            "name": "精彩活动",
            "sub_button": [
                {
                    "type": "click",
                    "name": "校园歌手大赛",
                    "key": "gesai"
                },
                {
                    "type": "click",
                    "name": "毕业歌会",
                    "key": "gehui"
                },
                {
                    "type": "click",
                    "name": "光华悦读读书季",
                    "key": "yuedu"
                },
                {
                    "type": "click",
                    "name": "工大吉尼斯",
                    "key": "jinisi"
                },
                {
                    "type": "click",
                    "name": "听写大赛",
                    "key": "tingxie"
                }
            ]
        },
        {
            "name": "全心权益",
            "sub_button": [
                {
                    "type": "click",
                    "name": "维权方式",
                    "key": "weiquanfangshi"
                },
                {
                    "type": "click",
                    "name": "维权成果",
                    "key": "weiquanchengguo"
                },
                {
                    "type": "click",
                    "name": "我要维权",
                    "key": "woyaoweiquan"
                }
            ]
        }
    ]
}
‘;

       $m=urldecode(json_encode($this->menu));
       $this->legal_time();
       $MENU_URL="https://api.weixin.qq.com/cgi-bin/menu/create?access_token=".$this->access_token[‘AccToken‘];
       //$rt=ltrim($MENU_URL,"https://api.weixin.qq.com/cgi-bin/menu/create");
       $ch = curl_init(); 

       curl_setopt($ch, CURLOPT_URL, $MENU_URL);
       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,$this->menu);
       curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 

       $info = curl_exec($ch);
       $retData=json_decode($info,true);
       $ret=$retData[‘errcode‘];
       return $ret;
    }

    private function query_menu()
    {
        $QUR_URL="https://api.weixin.qq.com/cgi-bin/menu/get?access_token=ACCESS_TOKEN".$this->access_token[‘AccToken‘];
        $json=file_get_contents($QUR_URL);
        $result=json_decode($json,true);
        return $result;
    }

    private function delete_menu()
    {
        $DEL_URL="https://api.weixin.qq.com/cgi-bin/menu/delete?access_token=".$this->access_token[‘AccToken‘];
        $json=file_get_contents($DEL_URL);
        $result=json_decode($json,true);
        $ret=$result[‘errcode‘];
        return $ret;
    }
}

首先,在这个项目中我采用了百度云服务器进行编辑和发布

了解了关于TOKEN的发送,还有微信端和服务器之间的联系

时间: 2024-11-05 23:21:53

关于微信平台开发者学习的相关文章

微信公众平台开发者文档

微信公众平台开发者文档 公众平台开发接口介绍微信公众平台开发者文档,布布扣,bubuko.com

微信公众平台开发者模式自动回复功能与自定义菜单

微信开发者模式自动回复功能 1.提取POST来的数据中的信息 2.判断微信客户端发来的信息内容(以文本信息为例) 3.根据信息内容进行处理 4.把处理结果以XML的形式返回给微信服务器 5.微信服务器反馈内容给微信客户端 1.获取用户发来的文本信息的内容 private void ExtractPostData() /*** 提取POST来的数据中的信息 ***/ { Stream s = HttpContext.Current.Request.InputStream; //读取post来的数据

2015 MVP 社区大课堂开课了, 给App及Web开发者学习最新的Universal Windows 平台知识

Windows 10 Developer Readiness - Powered by MVPs - 由微软最有价值专家(MVP)主讲在免费线直播课程 ---------- One windows platform, the Universal Windows Platform ---------- 欢迎参加在6月11日周四晚上7点,由微软MVP专家为您带来de Windows 10应用开发课程,微软最有价值专家MVP讲师将为您呈现微软最新技术,帮助开发者在Universal Windows 平

C#微信公众平台开发者模式开启代码

using System;using System.IO;using System.Text;using System.Web.Security; namespace HPZJ.Web.sys.excel{    public partial class hpd_api_weixin : System.Web.UI.Page    {        const string Token = "token";  //你的token        protected void Page_L

Java微信公众平台开发(十四)【番外篇】--微信web开发者工具使用

转自:http://www.cuiyongzhi.com/post/58.html 为帮助开发者更方便.更安全地开发和调试基于微信的网页,微信推出了 web 开发者工具.它是一个桌面应用,通过模拟微信客户端的表现,使得开发者可以使用这个工具方便地在 PC 或者 Mac 上进行开发和调试工作.你可以: 使用自己的微信号来调试微信网页授权 调试.检验页面的 JS-SDK 相关功能与权限,模拟大部分 SDK 的输入和输出 使用基于 weinre 的移动调试功能 利用集成的 Chrome DevTool

微信小程序学习

以下内容均转自微信平台,为学习所用. 本文档将带你一步步创建完成一个微信小程序,并可以在手机上体验该小程序的实际效果.这个小程序的首页将会显示欢迎语以及当前用户的微信头像,点击头像,可以在新开的页面中查看当前小程序的启动日志. 1. 获取微信小程序的 AppID 登录 https://mp.weixin.qq.com ,就可以在网站的"设置"-"开发者设置"中,查看到微信小程序的 AppID 了,注意不可直接使用服务号或订阅号的 AppID . 注意:如果要以非管理

微信平台开发教程

转自:http://www.cnblogs.com/txw1958/p/wechat-tutorial.html 关键字:微信公众平台开发作者:方倍工作室 在这篇微信公众平台开发教程中,我们假定你已经有了PHP语言程序.MySQL数据库.计算机网络通讯.及HTTP/XML/CSS/JS等基础. 我们将使用微信公众账号方倍工作室作为讲解的例子,二维码见底部. 本系列教程将引导你完成如下任务: 创建新浪云计算平台应用 启用微信公众平台开发模式 了解数据收发原理及消息格式 开发实现微信天气预报功能 第

水滴微信平台bug

最近在学习如何做微信营销,发现了一款非常好用的工具:水滴微信平台 它可以通过添加插件方式在微信里面组织很多活动,比如抽奖.送积分.用户和平台互动的管理等,非常方便,但最近为了给自己新的订阅号注册账号时候发现了一个bug. 现在来大致描述一下: 1.在此账号注册以后需要在微信公众平台的开发者中心->设置URL(服务器地址),Token(令牌),自动生成EncodingAESKey,设置完成以后到水滴平台点击验证按钮: 2.点击验证后发现错误: 3.通过水滴客服发现是URL在水滴平台上写错了,呵呵!

微信小程序学习指南

作者:初雪链接:https://www.zhihu.com/question/50907897/answer/128494332来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 微信小程序正式公测, 张小龙全面阐述小程序,定档1月9日上线(附90分钟演讲全文) ... 前言:新人第一坑,跳坑指南:修改后,必须保存:ctrl+S: 1:官方工具:https://mp.weixin.qq.com/debug/w ... tml?t=1476434678461 2:简易教