PHP7.0微信公众平台开发6: 实例三:群发预览消息
2017-08-29 11:36
656 查看
PHP7.0微信公众平台开发6: 实例三:群发预览消息
1. API接口的声明2. PHP脚本代码
3. 运行结果
4. “群发”与“接收普通消息”的区别
本文给出根据用户openID群发图文消息的实例。
1. API接口的声明
1)新增永久图片素材要构成一个图文消息,首先得先向微信服务器上传图文消息中的图片素材,然后微信服务器会返回所上传的图片的media_id, 使用这个media_id将图片插入图文消息中。
media就是我们上传的图片的路径,又返回说明可知,该接口最终返回上传的图片的media_id.
-2) 新增永久图文素材
上传完图片,就可以利用图片的meida_id将图片插入图文中了。同样,整理好的图文还需要当做素材上传到微信服务器中,然后微信服务器返回该图文的media_id,最后在群发接口中使用这个media_id发送该图文。
返回的media_id就是新增的图文素材。
3)预览接口
获取到图文消息素材的media_id之后,就可以将该图文根据用户的openID群发。由于群发接口一个月只能调用4次,而且该接口订阅号不可用,只能用于服务号,所以为了测试,我选用预览接口,预览接口每日可调用100次。
预览接口和群发接口的差别在于:预览接口中的“touser”只有一个,而群发接口中可以是一个用户openID的列表,也就是说预览接口只能发送给一个人。
“touser”中的用户openID可以用上一篇文章中的方法获得!对于测试号,也可直接在测试号管理平台上查看。
2. PHP脚本代码
<?php define("TOKEN", "peng"); $wechatObj = new wechatCallbackapiTest(); if (!isset($_GET['echostr'])) { $wechatObj->sendMsgAll(); //调用sendMsgAll()群发预览图文消息 }else{ $wechatObj->valid(); //其实已经不再调用 } class wechatCallbackapiTest { private $access_token; public function __construct(){ //构造函数,初始化access_token $this->access_token = $this->getAccessToken(); } public function valid(){ //略,本系列第一篇中有代码 } private function checkSignature(){ //略,本系列第一篇中有代码 } public function https_request($url,$type,$res,$arr){ //略,本系列第二篇中有代码 } public function getAccessToken(){ //略,本系列第二篇中有代码 } //可用于上传除图文素材以外的其他素材(图片,文本,视频,语音等),获得素材的meida_id public function addMaterial($imageName) { $type='image'; //定义该素材为图片素材 $url = "https://api.weixin.qq.com/cgi-bin/material/add_material?access_token=".$this->access_token."&type=".$type; //获取图片路径,对于php7.0,路径格式得用if中的方法,对于php5得用else中的方法获得 if(class_exists('\CURLFile')){ $data = array('media' => new \CURLFile(realpath($imageName))); } else{ $data = array('media' => '@'.realpath($imageName)); } $res=$this->https_request($url ,'post', 'json', $data); return $res['media_id']; } //上传图文素材 public function addMpnews(){ $thumb_media_id1 = $this->addMaterial('/home/peng/http/baidu.jpg' 4000 ); $thumb_media_id2 = $this->addMaterial('/home/peng/http/amazon_cn.png'); $thumb_media_id3 = $this->addMaterial('/home/peng/http/amazon_co_uk.png'); $thumb_media_id4 = $this->addMaterial('/home/peng/http/amazon_fr.png'); $url = "https://api.weixin.qq.com/cgi-bin/material/add_news?access_token=".$this->access_token; $array = array( "articles" => array( array( "title" => urlencode('百度'), "thumb_media_id" => $thumb_media_id1, "author" => urlencode('Peng'), "digest" => urlencode('百度的描述'), //单图文显示,多图文不显示描述 "show_cover_pic" => 1, "content" => urlencode("百度很棒!"), //图文消息的文字,可以是字符串,也可是用html的标签写 "content_source_url" => urlencode("http://www.baidu.com") //点击阅读原文后跳转的链接 ), array( "title" => urlencode('中国亚马逊'), "thumb_media_id" => $thumb_media_id2, "author" => urlencode('Peng'), "digest" => urlencode('中国亚马逊的描述'), "show_cover_pic" => 1, "content" => urlencode("<div>你好,亚马逊!</div>"), "content_source_url" => urlencode("https://www.amazon.cn/") ), array( "title" => urlencode('Amazon in UK'), "thumb_media_id" => $thumb_media_id3, "author" => urlencode('Peng'), "digest" => urlencode('The description of Amazon of the UK'), "show_cover_pic" => 1, "content" => urlencode("<div>Hello,amazon!</div>"), "content_source_url" => urlencode("https://www.amazon.co.uk/") ), array( "title" => urlencode('Amazon en France'), "thumb_media_id" => $thumb_media_id4, "author" => urlencode('Peng'), "digest" => urlencode('La description d\'Amazon de la France'), "show_cover_pic" => 1, "content" => urlencode("<div>Bonjour,amazon!</div>"), "content_source_url" => urlencode("https://www.amazon.fr/") ) ) ); $postJson = urldecode( json_encode( $array ) ); $res = $this->https_request($url ,'post', 'json', $postJson); return $res['media_id']; } //调用群发接口将上面的图文消息群发给所有用户 public function sendMsgAll(){ $url = "https://api.weixin.qq.com/cgi-bin/message/mass/preview?access_token=".$this->access_token; $array = array( 'touser' => 'o637_wEU************iyo-REa4', //用户的openID 'mpnews'=>array("media_id"=>$this->addMpnews()), 'msgtype'=>'mpnews' ); $postJson = json_encode($array); $res = $this->https_request($url,'post','json',$postJson); var_dump($res); } } ?>
3. 运行结果
在浏览器中运行php脚本,http://www.peng.com/wechat.php,结果如图:此图代表没有任何错误,已经发送到用户的微信上。
查看手机微信,结果如图:
比如点开“中国亚马逊”这条消息,结果如右图所示,上面的蓝色提醒就说明我们正在使用“预览接口”,点击下方的“阅读原文”即可打开我们定义在”content_source_url”中的连接。
4. “群发”与“接收普通消息”的区别
在第一个实例中,我介绍了接收普通消息的例子,最终的界面和这个差不多,但是二者的差别在于如下几点:1) 群发是微信服务器主动发送消息给用户,而接收普通消息必须是用户先给用户发送一个请求,如第一篇中的“tuwen”就是个请求,然后微信服务器才发送消息给用户;
2) 群发可以发给多个用户,而接收普通消息只能发给单个用户;
3) 二者都定义了亚马逊的URL地址,但是群发要想打开亚马逊,必须点击图文消息,然后进去后点击下方的“阅读原文”才能打开,但是接收普通消息的话,用户点击图文消息后可直接打开网页。
相关文章推荐
- PHP7.0微信公众平台开发5: 实例二:获取用户列表
- PHP对接微信公众平台消息接口开发流程详解及实例(一)
- 开发微信公众平台群发接口时,在对接“上传图文消息素材”时,返回44003
- 微信公众平台开发实例 PHP开发 代码挂载SAE平台(六)星座物语 php解析xml文件
- 微信公众平台开发实例(琴岛学院校园之声) PHP开发 代码挂载SAE平台(一)
- 微信公众平台开发实例(琴岛学院校园之声) PHP开发 代码挂载SAE平台(三)
- php 微信公众平台开发模式实现多客服的实例代码
- php 微信公众平台开发之微信群发信息
- 微信公众平台开发实例(琴岛学院校园之声) PHP开发 代码挂载SAE平台(五)琴院Siri功能
- php版微信公众平台开发之验证步骤实例详解
- php微信公众平台开发之微信群发信息
- 基于php的微信公众平台开发入门实例
- 微信公众平台开发实例文档 wx_sample.php 详细解释
- 微信公众平台开发实例(琴岛学院校园之声) PHP开发 代码挂载SAE平台(四)自习功能
- PHP-微信公众平台开发-接收用户输入消息类型并响应
- 微信公众平台消息接口开发(2)-封装weixin.class.php
- PHP-微信公众平台开发-接收用户输入消息类型并响应
- 微信公众平台消息接口开发-封装weixin.class.php(转)