首页 /

微信订阅号

/ 微信客服消息接口推送视频和图文开发

微信客服消息接口推送视频和图文开发

  为了给用户提供更加优质的服务,有时候我们会给微信公众号用户推送视频或图文消息,如果我们以前学过客服文本或语音推送的话,再来研究学习客服的视频推送就简单了,不管是视频、图片还是图文等推送的原理都是用户发送消息给公众号,腾讯会把消息推送给开发者,开发者就可以对推送来的消息进行处理,并把消息数据返回给用户了。

  当然,这几种返回给用户消息的数据是不完全相同的,我们知道通过客服接口推送给用户的数据形式是以json格式,而这几个种类型推送的json格式也是不一样的。

发送视频消息
{
    "touser":"OPENID",
    "msgtype":"video",
    "video":
    {
      "media_id":"MEDIA_ID",
      "thumb_media_id":"MEDIA_ID",
      "title":"TITLE",
      "description":"DESCRIPTION"
    }
}


发送图文消息

  图文消息条数限制在10条以内,注意,如果图文数超过10,则将会无响应。
{
    "touser":"OPENID",
    "msgtype":"news",
    "news":{
        "articles": [
         {
             "title":"Happy Day",
             "description":"Is Really A Happy Day",
             "url":"URL",
             "picurl":"PIC_URL"
         },
         {
             "title":"Happy Day",
             "description":"Is Really A Happy Day",
             "url":"URL",
             "picurl":"PIC_URL"
         }
         ]
    }
}


  从上面的视频和图文json格式对比可以看出,它们的大体结构是一样的,但是,具体的内容和类型不是一样的这一点非常不同,在后面的编写开发代码后就会看到它们的区别。


视频消息发送开发

  要求:当用户发送“视频”后,开发者也就是我们通过我们上传到腾讯服务器后获取的media_id的值和客服接口,把要返回的视频返回给用户。

  客服接口:
https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token=ACCESS_TOKEN


  1)获取access_token:通过上面的客服的接口可以看到,要使用这个接口首先要获取access_token,关于获取token的教程在微信连已经有相关教程“微信客服消息接口推送图片和语音开发”,在这个教程里面已经把获取token的代码封装成了一个类WeChat.class.php。

  在编写视频回复代码时,可以继承这个类然后直接调用这个类里面返回的token。

  2)获取media_id:media_id是我们上传视频到服务器后获取到的id,也就是视频对应的id,关于如何获取这个id这里不讲了,请看教程“微信客户端下载多媒体文件开发”。

   您可以直接通过微信公众平台调试工具上传视频来获取media_id,调试工具是:
https://mp.weixin.qq.com/debug/cgi-bin/apiinfo?t=index&type=%E5%9F%BA%E7%A1%80%E6%94%AF%E6%8C%81&form=%E5%A4%9A%E5%AA%92%E4%BD%93%E6%96%87%E4%BB%B6%E4%B8%8A%E4%BC%A0%E6%8E%A5%E5%8F%A3%20/media/upload

   我获取到的media_id是: "dQCE2uK4lACuVY-COixvT2raUKv1pZXJyGSFf0TM97tl86rreT3QODSkZDVP4YVS",

  3)乱码的处理:在视频发送消息的json里面,我们写的标题是“微信连测试客服接口消息”,描述是“这是一个专门测试管服接口的视频!”,因为,在视频标题和描述里面有中文,有中文可能就有乱码,所以,在把这些内容转换成数组前先用php函数urlencode()进行编码,等把数组组装起来后再用函数urldecode()解码,这样便把中文的乱码问题给解决掉了。

  另外,对于视频的缩略图我们不使用这个了,只要会标题和描述这个就不难理解了。

  我们对发送视频消息json格式转换成数组如下所示:

    $title = '微信连测试客服接口消息';
    $title = urlencode($title);
    $description = '这是一个专门测试管服接口的视频!';
    $description = urlencode($description);
    $content_arr = array('media_id' => "{$media_id}", 'title' => "{$title}", 'description' => "{$description}");
    $reply_arr = array('touser' => "{$fromUsername}", 'msgtype' => 'video', 'video' => $content_arr);


  这里使用的是数组,可能有人会问,为什么不使用视频的json格式,还要把json格式转成数组,然后,再把数组转成json格式多此一举,当然,直接发使用json格式完全可以,但是,会有乱码问题,另外这样演示也为了学习开发的需要。

  4)最终代码:

else if($keyword == '视频')
{

    $media_id = 'dQCE2uK4lACuVY-COixvT2raUKv1pZXJyGSFf0TM97tl86rreT3QODSkZDVP4YVS';
    $title = '微信连测试客服接口消息';
    $title = urlencode($title);
    $description = '这是一个专门测试管服接口的视频!';
    $description = urlencode($description);
    $content_arr = array('media_id' => "{$media_id}", 'title' => "{$title}", 'description' => "{$description}");
    $reply_arr = array('touser' => "{$fromUsername}", 'msgtype' => 'video', 'video' => $content_arr);
    $post = json_encode($reply_arr);
    //url解码
    $post = urldecode($post);
    $access_token = $this->get_token();
    $url ="https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token={$access_token}";
    $this->http_request($url, $post);                        
}


  只要把这一段代码放到wx_sample.php里同的case 'text':里面,然后,在公众号里面发送“视频”就会收到media_id对应的视频,这个视频带有标题和描述,效果如下图所示:



  这里面用到的类和函数都在文件WeChat.class.php以及Wx_sample.php里面,而这个文件里面的代码我们在教程“微信客服消息接口基础和推送文本”里已经详细列出来了,这里不再重复列出。

图文消息发送开发

  从上面的图文json格式代码可以看出,图文和视频是完全不同的,图文无需要上传图片到腾讯服务器,而只需要把需要的图片上传到我们自己的服务器就可以了。另外一个不同是图文可以一次发多个图文,注意,这个时候的图片描述信息就不起作用了。

  第一张图为头条也就是我们在一些公众号里面看到的第一幅大图,下面的依次为小图,注意腾讯官方要求:图片链接,支持JPG、PNG格式,较好的效果为大图360*200,小图200*200。

  区别图文消息里面的两个url:

  一个是PicUrl:这个就是我们在微信公众号里面看到的缩略图。

  一个是Url: 点击图文消息跳转链接

  这个两连接在回复时并不是必须的,可以没有这两个url,但是,我们开发时最好有两个,这样对用户体验会更好。

  图文跟视频最大不同是我们写的数组不同,其它的几乎完全一样,所以,我们就不具体分析代码了,图文消息开发代码是:
 

else if($keyword == '图文')
{
    $content_arr1 = array(
        'title' => urlencode('微信连客服消息接口返回的图文'),
        'url' => 'http://news.baidu.com',
        'picurl' => 'http://1.wxlian.applinzi.com/tt11.png');
    $content_arr2 = array(
        'title' => urlencode('这是微信连客服消息接口返回的图文2'),
        'url' => 'http://www.phpos.net',
        'picurl' => 'http://1.wxlian.applinzi.com/t2.png');
    $content_arr = array($content_arr1, $content_arr2);
    $content_arr = array('articles' => $content_arr);
    $reply_arr = array('touser' => "{$fromUsername}", 'msgtype' => 'news', 'news' => $content_arr);
    $post = json_encode($reply_arr);
    //url解码
    $post = urldecode($post);
    $access_token = $this->get_token();
    $url ="https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token={$access_token}";
    $this->http_request($url, $post);
}


  在wx_sample.php文件里面添加上这段代码,我们到公众号里面测试一下,效果如下所示: