zoukankan      html  css  js  c++  java
  • 微信公众平台开发,图文回复、access_token生成调用、以及微信SDK的实现(2)

    上一节课,我给大家分享了微信API接入以及事件推送的回复,这是微信开发的第二节课,重点给说一说单图文回复,多图文回复,access_token,微信SDK。

    公众号消息回复很多种形式,常见的形式有,文本,图片,视频,音频,图文等,常用的也就是文本,图文。文本回复上一节已经说过了,图文回复分为两种,单图文,多图文两种。其实实现的原理的一样的,只要会单图文,多图文自然也就会了。

    单图文代码实现

    <?php

              /**

                   以下的代码是一个方法,接着上一节中的IndexAction.class.php类的,把以下的方法复制到上一个类中

             **/

              public  function  reposeNews(){

                          //获取微信用户发的信息

                          $object = $GLOBALS['HTPP_RAW_POST_DATA'];

                         //获取的数据是xml格式的,需要转换为对象的型的,这里使用simplexml_load_string()函数

                          $objNews = simplexml_load_string($object);

                         /**

                          微信图文回复的固定模板

                         <xml><ToUserName>< ![CDATA[toUser] ]></ToUserName><FromUserName>< ![CDATA[fromUser] ]></FromUserName><CreateTime>12345678</CreateTime><MsgType>< ![CDATA[news] ]></MsgType><ArticleCount>2</ArticleCount><Articles><item><Title>< ![CDATA[title1] ]></Title> <Description>< ![CDATA[description1] ]></Description><PicUrl>< ![CDATA[picurl] ]></PicUrl><Url>< ![CDATA[url] ]></Url></item><item><Title>< ![CDATA[title] ]></Title><Description>< ![CDATA[description] ]></Description><PicUrl>< ![CDATA[picurl] ]></PicUrl><Url>< ![CDATA[url] ]></Url></item></Articles></xml>

                          **/

                          //设置数据,正常来说这里的数据都是来自数据库的数据调取

                          $arr = array(

                                    array("title"=>"网红星闻快手","description"=>"我们不生产八卦,我们只是八卦的搬运工。","picurl"=>"http://www.souhong.wang/img/logo2.png","url"=>"http://www.baidu.com")

                          );

                          //发送数据

                           $toUser = $objNews->FromUserName;

                           $fromUser = $objNews->ToUserName;

                           $time  =  time();

                           //分析模板可以得出,上半部分是固定的,下半部分数据的遍历,由此我们可以把这个模板进行分拆,分拆成三块,中间那个块就是图文

                           $template = "<xml><ToUserName>< ![CDATA[%s] ]></ToUserName><FromUserName>< ![CDATA[%s] ]></FromUserName><CreateTime>%s</CreateTime><MsgType>< ![CDATA[news] ]></MsgType><ArticleCount>.count($arr).</ArticleCount><Articles>";

                        foreach($arr as $key=>$v){

           $template .= "<item><Title>< ![CDATA[".$v['title']."] ]></Title> <Description>< ![CDATA[".$v['description']."] ]></Description><PicUrl>< ![CDATA[".$v['picurl']."] ]></PicUrl><Url>< ![CDAT".$v['url']."]></Url></item>";

                        }

           $template .= "</Articles></xml>";

                        if($objNews->MsgType == "text" && $objNews->content == "tuwen1"){

                                       $info = sprintf($template,$toUser,$fromUser,$time);

                                        echo $info; 

                        }  

              }

    以上代码就完成了单图文的回复了,所谓的多图文也就是多几条数据,默认第一条数据是大图,数据不能超过8条,超过8条则无响应,上面的关键字可以用swich自己设置,这样就可以多个选择了。

    除了事件推送,文本,图文之外,微信公众平台还有非常多的功能,要想调用这些强大的功能就离不开一个东西,那就是access_token,这个在微信文档上叫票据,我更喜欢叫它令牌,就像古代皇帝给钦差大臣的令牌一样,持有令牌可以干好多事。要想使用access_token就先得获取access_token,获取令牌需要两个数据,一个appid,一个appsecret,这个两个参数。这两个参数上微信公众平台上面开发者模式下,已经提供了这两个数据。微信文档提供了API调用路径:https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET,看到这好多同学应该知道怎么去做了,但对于很多php新手来说,可能就不知道怎么做了,这里就要用到php一个强大的工具curl,curl的具体说明这里就不详细说,看代码:

    <?php

               $appid = "wx37f6709f8475030assdf";//这里去自己的公众号里去取

               $appsecret =  "Q1mInjfJukdh8ydITbezRQAYsSTbm4ytGFGhj4S9nvP";//这里去自己的公众号里去取

               $url  = " https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=".$appid."&secret=".$appsecret;

               //使用curl进行请求,第一步初始化

               $ch = curl_init();

              //设置参数

              curl_setopt($ch , CURLOPT_URL , $url);

              curl_setopt($ch , CURLRETURNTRANSFER, 1);

              //执行

              $token = curl_exec($ch);

               curl_close();

              //微信返回的数据格式是json的,所以这里需要用的php函数json_decode

              $token = json_decode($token,true);//这里记得加参数tru,否则返回的就是一个对象。

              $token = $token['access_token'];

    到这里就拿到了票据access_token,拿到access_token需要注意两点,一点是token的唯一性,时效性,全局只有一个token,有效时长是2个小时,一天可以请求2000个token,这里对于我们一般的开发者足够了。

    这里我们就用token获取微信服务器地址(主要是为了安全角度考虑),代码如下:

             $url  = "https://api.weixin.qq.com/cgi-bin/getcallbackip?access_token=".$token;

             $ch = curl_init();

             curl_setopt($ch,CURLOPT_URL,$url);

             curl_setopt($ch,RETURNTRANSFER,1);

             $ip = curl_exec();

             curl_close();

             $ip = json_decode($ip,true);

             var_dump($ip['ip_list']); //全部的微信服务器ip地址

    微信SDK,好多同学可能不知道SDK是什么意思?SDK是软件开发工具包的意思,这个概念可能比较抽象,大家这里可以把SDK理解为封装了很多方法的包,把我们大家经常用的一些方法封装起来,这样就可以使我们开发起来更加的方便快捷,在TP框架中如何添加SDK呢?刚才我也说了,SDK就是封装了很多的方法,所以我们在TP框架定义一个模型,把我们微信开发常用的一些固定化的东西放到模型中去,在我们的控制器中我们就可以直接实例化使用就可以了。示例代码如下:

    <?php

              class  IndexModel extends Model{

                        public function resposeMsg($object){

                               //固定的方法写入就可以了

                        }

              }

    以上就是这次的基本内容了,补充一点,在微信开发中如何调用第三方的API,例如查询天气,关于查询天气的API,我比较习惯去百度的APIstore或者聚合数据去查找,我这里演示用的是百度的天气查询的一个系统。

     $city = "北京";

     $city = urlencode($city);

      $url = "http://v.juhe.cn/weather/index?format=2&cityname=".$city."&key=您申请的KEY";

      $ch = curl_init();

      curl_setopt($ch,CURLOPT_URL,$url);

      curl_setopt($ch,RETURNTRANSFER,1);

      $tianqi = curl_exec();

      curl_close();

      $tianqi = json_decode($tianqi,true);

      把天气的数据直接返回过用户,微信中调用第三方天气API就是这么简单。

      接下来的微信开发我会讲解微信开发中的自定义菜单功能。

             

  • 相关阅读:
    动态规划(0-1背包)---划分数组为和相等的两部分
    动态规划(0-1背包)
    动态规划(最长递增子序列)---最长公共子序列
    动态规划(最长递增子序列)---最长摆动子序列
    动态规划(最长递增子序列)---最长递增子序列
    动态规划(最长递增子序列)
    动态规划(分割整数)---分割整数构成字母字符串
    浅谈进程同步和互斥的概念
    如何由Height Map生成Normal Map
    3D中的切线空间简介
  • 原文地址:https://www.cnblogs.com/beili/p/8431185.html
Copyright © 2011-2022 走看看