利用腾讯云服务器进行微校开放平台开发

版权声明:本文由追梦者原创文章,转载请注明出处: 
文章原文链接:https://www.qcloud.com/community/article/225

来源:腾云阁 https://www.qcloud.com/community

 

微校开放平台概述

腾讯微校是专注高校领域的公众号第三方平台,目前已接入公众号超过3万个,精准覆盖大学生超过2000万。通过微校开放平台,开发者可以轻松的直接向上千万大学生提供服务,公众号运营者也可以通过本文档来帮助拓展开发。

  1. 微校开放平台主要用于指导开发者如何借助微校提供的开放能力对已授权腾讯微校的公众号提供服务能力。具体公众平台接口调用规范和标准,请参照微信公众平台开发者文档
  2. 需要向运营者提供应用配置页的应用,应在运营者开启应用时,将页面链接返回微校(具体可参见应用开启请求说明),微校会以iframe的形式加载到应用管理页面,无应用配置页的应用,微校会直接展示默认应用管理页面。

  3. 微校会为优秀的开发者提供一定奖励,同时,开发者也可以向微校申请技术优化指导、免费服务器等方面的支持。

服务器环境

腾讯云主机 Centos6.5 64bit (LAMP)

下面开始

  1. 登录微校开发平台,创建一个新的应用

  2. 比如我们像上面那样,弄一个消息回复类应用

  3. 填写相关信息,上传几张测试用图

  4. 设置关键字 (我这里以“测试”为例,并且开启了模糊匹配)
    填写wxtestopen.php地址
    填写测试平台的原始id (如果不知道,可以看后面)

  5. 在填写完确认提交后,就可以看到上面这些信息,其中ApiKeyApiSecret 下面要用

  6. 如上图修改wxtestopen.php中的ApiSecret
    修改wxtestapi.php中的ApiKeyApiSecret

  7. 修改完参数后,点击接口测试,如上图时就成功了。否则请检查你的参数是否修改
    然后点击ApiSecret下面的应用测试地址,去开启应用

  8. 如上图,依次点击开启应用和确认开启


  9. 当看到如上图所示的时候,[1][2]都和我的一样,那么下面就可以去公众号测试了。
    下面我们去公众号掌上江大和RalphLuo测试
     
     

至此,此次任务全部完成
下面讲解核心代码

  1. open.php(用于来自微校的应用开启验证)
    核心代码如下

    if ($cal_sign == $sign) {
    $interval = time() - $param_array['timestamp'];
    if ($interval >= 0 && $interval < 10) {
    $url = 'http://xxx.com/wxtest/wxtestapi.php';//响应地址
    $token='wxtest';    //token设置
    echo '{
    "errcode":0,
    "errmsg":"",
    "token":"'.$token.'",
    "url":"'.$url.'",
    "config_url":"",
    "custom":{
    "response_type":1,
    "response_data":[{
    "title":"微校应用测试",
    "picurl":""
    }]
    }
    }';
    }
    }
    
  2. api.php【用于响应用户发送的关键字】核心代码如下

    //接收文本消息
    private function receiveText($object)
    {
    $media_id=$object->ToUserName;//公众号原始id
    $re=$this->getghname($media_id);
    $ghname=$re['name'];    //公众号的名称
    switch ($object->Content)
    {
            case "测试文字":
                $content = "这是个文本消息".$ghname;
                break;
        //其他的类似
            default:
                $content = date("Y-m-d H:i:s",time())."\n技术支持 ".$ghname;
                break;
        }
        if(is_array($content)){
            if (isset($content[0]['PicUrl'])){
                $result = $this->transmitNews($object, $content);
            }else if (isset($content['MusicUrl'])){
                $result = $this->transmitMusic($object, $content);
            }
        }else{
            $result = $this->transmitText($object, $content);
        }
        return $result;
    }
    
  3. 微校获取公众号信息,签名算法等函数

    function getghname($media_id){      //根据原始id(gh_id)获取公众号信息 ,返回的是数组
    $apikey="xxx";    //应用apikey
    $api_secret = 'yyy'; //应用api_secret
    $time=time();
    $noncestr=$this->createNonceStr();
    $param_array=array(
     'media_id'=>$media_id,
     'api_key'=>$apikey,
     'timestamp'=>$time,
     'nonce_str'=>$noncestr,
      );
     $sign=$this->cal_sign($param_array,$api_secret);
    $res=str_replace(array("(",")"),"",file_get_contents("http://weixiao.qq.com/common/get_media_infop?media_id=$media_id&api_key=$apikey&timestamp=$time&nonce_str=$noncestr&sign=$sign"));
    $re = json_decode($res,true);
    return $re;
    }
    function createNonceStr($length = 32) {        //生成32位随机字符
    $chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
    $str = "";
    for ($i = 0; $i < $length; $i++) {
    $str .= substr($chars, mt_rand(0, strlen($chars) - 1), 1);
    }
    return $str;
    }
    function cal_sign($param_array,$api_secret) {    //校验信息
    $names = array_keys($param_array);
    sort($names, SORT_STRING);
    $item_array = array();
    foreach ($names as $name) {
    $item_array[] = "{$name}={$param_array[$name]}";
    }
    $str = implode('&', $item_array) . '&key=' . $api_secret;
    return strtoupper(md5($str));
    }
    

在使用中,我们可以使用将公众号信息等数据存放到数据中,以便下次调用。
欢迎大家共同探讨!

posted @ 2016-11-18 18:41  偶素浅小浅  阅读(838)  评论(0编辑  收藏  举报