微信公众平台开发接口将不再支持多图文。
官方消息如下:
> 微信公众平台对多图文消息类型进行了调整。从2018年10月12日起,被动回复消息与客服消息接口的图文消息类型中图文数目只能为一条,请知悉。
微信团队
2018年09月30日
根据这一规则,本书中涉及回复多图文消息的SDK需要进行修改,**只需要修改消息类型和客服接口的2个SDK**,其他地方均保持不动,修改方法如下。
1、被动回复图文消息的修改
在回复图文消息的时候,检查图文是单图文还是多图文,如果是多图文,则转换为文字进行回复,如果多图文中有链接,则做成A标签。如果是单图文则保持不变。代码如下
```
//回复图文消息
private function transmitNews($object, $newsArray)
{
if(!is_array($newsArray)){
return "";
}
//多图文转文本回复
if (count($newsArray) > 1){
$content = "";
foreach ($newsArray as &$item) {
$content .= "\n\n".(empty($item["Url"]) ? $item["Title"] : "<a href='".$item["Url"]."'>".$item["Title"]."</a>");
}
$result = $this->transmitText($object, trim($content));
return $result;
}
$itemTpl = " <item>
<Title><![CDATA[%s]]></Title>
<Description><![CDATA[%s]]></Description>
<PicUrl><![CDATA[%s]]></PicUrl>
<Url><![CDATA[%s]]></Url>
</item>
";
$item_str = "";
foreach ($newsArray as $item){
$item_str .= sprintf($itemTpl, $item['Title'], $item['Description'], $item['PicUrl'], $item['Url']);
}
$xmlTpl = "<xml>
<ToUserName><![CDATA[%s]]></ToUserName>
<FromUserName><![CDATA[%s]]></FromUserName>
<CreateTime>%s</CreateTime>
<MsgType><![CDATA[news]]></MsgType>
<ArticleCount>%s</ArticleCount>
<Articles>
$item_str </Articles>
</xml>";
$result = sprintf($xmlTpl, $object->FromUserName, $object->ToUserName, time(), count($newsArray));
return $result;
}
```
2、客服消息的修改方法
思路和上述一样,将多图文转为文字或A标签。
代码如下
```
public function send_custom_message($touser, $type, $data)
{
$msg = array('touser' =>$touser);
$msg['msgtype'] = $type;
switch($type)
{
case 'text':
$msg[$type] = array('content'=>urlencode($data));
break;
case 'news':
if (count($data) == 1){
$data2 = array();
foreach ($data as &$item) {
$item2 = array();
foreach ($item as $k => $v) {
$item2[strtolower($k)] = urlencode($v);
}
$data2[] = $item2;
}
$msg[$type] = array('articles'=>$data2);
}else{
//多图文转文本
$content = "";
foreach ($data as &$item) {
$url = isset($item["url"]) ? $item["url"] : $item["Url"];
$title = isset($item["title"]) ? $item["title"]:$item["Title"];
$content .= "\n\n".(empty($url) ? $title : "<a href='".$url."'>".$title."</a>");
}
$msg['msgtype'] = 'text';
$msg['text'] = array('content'=>urlencode(trim($content)));
}
break;
case 'music':
case 'image':
case 'voice':
case 'video':
case 'wxcard':
$msg[$type] = $data;
break;
default:
$msg['text'] = array('content'=>urlencode("不支持的消息类型 ".$type));
break;
}
$url = "https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token=".$this->access_token;
return $this->http_request($url, urldecode(json_encode($msg)));
}
```
- 前言
- 专家推荐
- 更新记录
- 重要更新
- 第一章 微信公众平台介绍
- 1.1 微信及其平台
- 1.2 微信公众账号注册
- 1.2.1公众账号的注册
- 1.2.2测试号的注册
- 1.3微信公众平台的使用
- 1.3.1功能
- 1.3.2微信支付
- 1.3.3管理
- 1.3.4推广
- 1.3.5统计
- 1.3.6设置
- 1.3.7开发
- 1.4本章小结
- 第二章 本地开发环境搭建及程序开发基础
- 2.1 本地开发环境搭建
- 2.1.1phpStudy安装
- 2.1.1WAMP安装
- 2.1.2其他开发环境套件
- 2.2 程序开发基础
- 2.2.1PHP语法及使用
- 2.2.2MySQL的使用
- 2.2.3其他常用语言
- 2.3本章小结
- 2.4本章源代码下载
- 第三章 服务器资源与消息交互原理
- 3.1服务器资源
- 3.1.1新浪云SAE
- 3.1.2其他服务器资源
- 3.2开发工具
- 3.3微信开发者中心
- 3.3.1配置和启用服务器
- 3.3.2配置失败常见问题与分析
- 3.3.3自动回复当前时间
- 3.3.4消息交互原理分析
- 3.3.5消息体加解密实现
- 3.4微信开发调试工具
- 3.4.1微信调试器
- 3.4.2接口调试工具
- 3.5本章小节
- 3.6本章源代码下载
- 第四章 接收消息与发送消息
- 4.1接收普通消息
- 4.1.1文本消息
- 4.1.2图片消息
- 4.1.3语音消息
- 4.1.4视频消息
- 4.1.5地理位置消息
- 4.1.6链接消息
- 4.2发送被动回复消息
- 4.2.1文本消息
- 4.2.2图片消息
- 4.2.3语音消息
- 4.2.4视频消息
- 4.2.5音乐消息
- 4.2.6图文消息
- 4.3接收事件推送消息
- 4.3.1关注/取消关注
- 4.4案例实践
- 4.4.1微信基础消息SDK
- 4.4.2调用API实现图文天气预报
- 4.4.3查询数据库实现笑话
- 4.5本章小结
- 4.6本章源代码下载
- 第五章 AccessToken和自定义菜单
- 5.1Access Token
- 5.1.1Access Token介绍
- 5.1.2接口调用请求说明
- 5.1.3 IP白名单
- 5.1.4实现代码
- 5.2自定义菜单
- 5.2.1自定义菜单介绍
- 5.2.2按钮类型
- 5.2.3创建菜单
- 5.2.4个性化菜单
- 5.2.5查询菜单
- 5.2.6删除菜单
- 5.2.7菜单事件推送
- 5.3案例实践
- 5.3.1自动缓存与更新Access Token
- 5.3.2扫描快码条码查询进度
- 5.4本章小结
- 5.5本章源代码下载
- 第六章 用户信息与用户管理
- 6.1用户标签管理
- 6.1.1创建标签
- 6.1.2查询所有标签
- 6.1.3修改标签名
- 6.1.4给用户打标签
- 6.1.5获取用户标签列表
- 6.2用户备注
- 6.3用户地理位置
- 6.3.1获取用户地理位置
- 6.3.2转换坐标到地址
- 6.4获取用户列表
- 6.4.1获取用户列表
- 6.4.2分批获取
- 6.5获取用户基本信息
- 6.5.1获取用户基本信息
- 6.6案例实践
- 6.6.1个性化欢迎语
- 6.6.2同步所有用户信息
- 6.7本章小结
- 6.8本章源代码下载
- 第七章 网页授权与网页应用开发
- 7.1OAuth2.0网页授权
- 7.1.1OAuth2.0
- 7.1.2授权过程
- 7.1.3详细步骤
- 7.2WeUI
- 7.2.1元素类型
- 7.3案例实践
- 7.3.1网页授权获取个人信息
- 7.3.2网页判断用户是否关注
- 7.3.3二次授权多个域名
- 7.4本章小结
- 7.5本章源代码下载
- 第八章 参数二维码与来源统计
- 8.1参数二维码
- 8.1.1创建二维码ticket
- 8.1.2通过url生成二维码图片
- 8.1.3通过ticket换取二维码
- 8.1.4下载二维码
- 8.1.5扫描带参数二维码事件
- 8.2案例实践
- 8.2.1渠道来源统计
- 8.2.2 微信二维码海报
- 8.3本章小结
- 8.4本章源代码下载
- 第九章 客服接口与群发接口
- 9.1客服接口
- 9.1.1客服接口实现
- 9.2群发接口
- 9.2.1上传图文消息内的图片
- 9.2.2上传缩略图
- 9.2.3上传图文消息素材
- 9.2.4预览群发内容
- 9.2.5根据标签进行群发
- 9.2.6根据OpenID列表进行群发
- 9.2.7删除群发
- 9.2.8查询群发消息发送状态
- 9.2.9接收群发结果
- 9.3案例实践
- 9.3.1一次回复多条消息
- 9.3.2服务号每日群发
- 9.4本章小结
- 9.5本章源代码下载
- 第十章 微信小店和模板消息
- 10.1微信小店搭建
- 10.1.1微信小店概况
- 10.1.2运费模版管理
- 10.1.3商品分组管理
- 10.1.4图片库
- 10.1.5添加商品
- 10.1.6货架管理
- 10.2微信小店二次开发
- 10.2.1微信小店SDK
- 10.2.2订单付款通知
- 10.2.3我的订单查询
- 10.2.4微信快递查询
- 10.2.5模板消息提醒
- 10.3本章小结
- 第十一章 客服管理
- 11.1消息转发到客服
- 11.1.1消息转发到客服
- 11.1.2消息转发到指定客服
- 11.2客服管理
- 11.2.1获取客服列表
- 11.2.2获取在线客服列表
- 11.2.3添加客服帐号
- 11.2.4邀请绑定客服帐号
- 11.2.5设置客服信息
- 11.2.6上传客服头像
- 11.2.7删除客服帐号
- 11.3会话控制
- 11.3.1创建会话
- 11.3.2关闭会话
- 11.3.3获取客户会话状态
- 11.3.4获取客服会话列表
- 11.3.5获取未接入会话列表
- 11.4获取聊天记录
- 11.4.1获取聊天记录
- 11.6本章小结
- 第十二章 素材管理
- 12.1新增临时素材
- 12.2获取临时素材
- 12.3新增永久素材
- 12.3.1新增永久图文素材
- 12.3.2新增其他类型永久素材
- 12.4获取永久素材
- 12.5删除永久素材
- 12.6修改永久图文素材
- 12.7获取素材总数
- 12.8获取素材列表
- 12.9本章小结
- 第十三章 数据统计
- 13.1用户分析数据接口
- 13.2图文分析数据接口
- 13.3消息分析数据接口
- 13.4接口分析数据接口
- 13.5本章小结
- 第十四章 微信JS SDK
- 14.1JS SDK
- 14.1.1JSAPI Ticket
- 14.1.2 JS SDK签名
- 14.1.3卡券Ticket
- 14.1.4sdk实现
- 14.2JS SDK使用
- 14.3 接口列表
- 14.4 案例实践
- 14.4.1分享到朋友圈后查看内容
- 14.4.2获取用户坐标及地址
- 14.4本章小结
- 14.5 本章源代码下载
- 第十五章 微信门店
- 15.1门店管理
- 15.1.1创建门店
- 15.1.2审核事件推送
- 15.1.3查询门店信息
- 15.1.4查询门店列表
- 15.1.5修改门店服务信息
- 15.1.6删除门店
- 15.1.7门店类目表
- 15.2案例实践
- 15.2.1获取门店ID列表
- 15.3本章小结
- 第十六章 微信卡券与会员卡
- 16.1创建卡券
- 16.1.1上传卡券Logo
- 16.1.2卡券颜色
- 16.1.3 创建卡券
- 16.2投放卡券
- 16.2.1创建二维码投放
- 16.2.2创建货架投放
- 16.2.3群发投放
- 16.3卡券核销
- 16.3.1查询Code
- 16.3.2核销Code
- 16.4 卡券统计
- 16.4.1获取卡券概况数据
- 16.4.2获取免费券数据
- 16.5会员卡
- 16.4.1创建会员卡
- 16.4.2激活会员卡
- 16.4.3更新会员信息
- 16.6朋友的券
- 16.6特殊票券
- 16.6.1会议/演出门票
- 16.6.2飞机票
- 16.6.3电影票
- 16.6.4景区门票
- 16.7案例实践
- 16.7.1HTML5网页领取卡券
- 16.7.2 创建会议门票
- 16.8本章小结
- 第十七章 微信支付与微信红包
- 17.1微信支付基础
- 17.1.1申请微信支付
- 17.1.2配置微信支付
- 17.1.3设置API密钥
- 17.1.4微信支付基础类
- 17.2公众号支付
- 17.3扫码支付
- 17.3.1模式一静态链接
- 17.3.2模式二动态链接
- 17.4刷卡支付
- 17.5 H5支付
- 17.6微信红包
- 17.6.1普通红包
- 17.6.2裂变红包
- 17.7企业付款
- 17.8代金券
- 17.9 微信报关
- 17.10订单查询
- 17.11 退款申请
- 17.12 退款查询
- 17.13 下载对账单
- 17.14本章小结
- 17.15本章源代码下载
- 第十八章 微信连Wi-Fi
- 18.1Wi-Fi门店管理
- 18.1.1获取Wi-Fi门店列表
- 18.1.2查询门店Wi-Fi信息
- 18.2密码型设备配置
- 18.2.1 添加密码型设备
- 18.2.2 获取物料二维码
- 18.3Portal型设备开发
- 18.3.1 添加Portal型设备
- 18.3.2 AC/AP设备改造
- 18.3.3 Portal页面开发
- 18.4Wi-Fi关联设置
- 18.4.1 设置商家主页
- 18.4.2设置首页欢迎语
- 18.4.3设置连网完成页
- 18.4.4设置门店卡券投放
- 18.5Wi-Fi效果监控
- 18.5.1设备查询
- 18.5.2 数据统计查询
- 18.6本章小结
- 第十九章 微信摇一摇周边
- 19.1设备管理
- 19.1.1添加设备
- 19.1.2配置设备
- 19.1.3激活设备
- 19.1.4查询设备
- 19.2设备分组
- 19.2.1 添加分组
- 19.2.2编辑分组信息
- 19.2.3删除分组
- 19.2.4查询分组列表
- 19.2.5查询分组详情
- 19.2.6添加设备到分组
- 19.2.7从分组中移除设备
- 19.3页面管理
- 19.3.1添加模板页面
- 19.3.2编辑页面
- 19.3.3查询页面
- 19.3.4删除页面
- 19.4周边业务开发
- 19.4.1 Ticket
- 19.4.2摇一摇事件通知
- 19.4.3摇一摇关注
- 19.4.4获取设备及用户信息
- 19.5关联设备和页面
- 19.5.1 配置关联关系
- 19.5.2查询关联关系
- 19.6数据统计
- 19.6.1查询设备统计数据
- 19.6.2批量查询设备统计数据
- 19.6.3查询页面统计数据
- 19.6.4批量查询页面统计数据
- 19.7案例实践
- 19.7.1 会议签到及室内定位
- 19.8本章小结
- 19.9本章源代码下载
- 第二十章 微信企业号和企业微信
- 20.1企业号开发基础
- 20.1.1启用回调模式
- 20.1.2使用回调模式
- 20.1.3管理组
- 20.1.4Access Token
- 20.2部门管理
- 20.2.1 创建部门
- 20.2.2 更新部门
- 20.2.3 删除部门
- 20.2.4 获取部门列表
- 20.3成员管理
- 20.3.1 创建成员
- 20.3.2更新成员
- 20.3.3删除成员
- 20.3.4 获取成员
- 20.3.5 获取部门成员详情
- 20.4应用管理
- 20.4.1 获取应用
- 20.4.2设置应用
- 20.5自定义菜单
- 20.5.1 创建菜单
- 20.5.2获取菜单列表
- 20.6素材管理
- 20.6.1上传临时素材
- 20.6.2获取临时素材
- 20.6.3上传永久素材
- 20.6.4获取永久素材
- 20.6.5删除永久素材
- 20.6.6修改永久图文素材
- 20.6.7 获取素材列表
- 20.7收发消息
- 20.7.1接收普通消息
- 20.7.2接收事件
- 20.7.3被动回复消息
- 20.7.4主动发送消息
- 20.8企业客服服务
- 20.8.1设置客服类型
- 20.8.2向客服发送消息
- 20.8.3客服回复消息回调
- 20.9网页开发
- 20.9.1企业号网页授权
- 20.9.2企业号JS SDK
- 20.10本章小结
- 20.11本章源代码下载
- 第二十一章 微信小程序
- 21.1开发入门
- 21.1.1AppID
- 21.1.2创建项目
- 21.1.3编写代码
- 21.1.4手机预览
- 21.2框架
- 21.2.1 文件结构
- 21.2.2配置
- 21.2.3逻辑层
- 21.2.4视图层
- 21.3组件
- 21.3.1视图容器
- 21.3.2基础内容
- 21.3.3表单组件
- 21.3.4导航
- 21.3.5媒体组件
- 21.3.6地图
- 21.3.7画布
- 21.4接口
- 21.4.1 网络
- 21.4.2 媒体
- 21.4.3 数据
- 21.4.4 位置
- 21.4.5 设备
- 21.4.6 界面
- 21.4.7开放接口
- 21.5案例实践
- 21.5.1天气预报
- 21.6本章小结
- 21.7 本章源码
- 第二十二章 微信开放平台
- 22.1移动应用
- 22.1.1微信登录
- 22.1.2APP支付
- 22.2网站应用
- 22.2.1 微信登录
- 22.3公众账号
- 22.4UnionID
- 22.5公众号第三方平台
- 22.5.1 消息加解密
- 22.5.2公众账号授权第三方平台
- 22.5.3全网发布接入检测
- 22.6 智能接口
- 22.6.1 语义理解
- 22.7本章小结
- 22.8 本章源码
- 第二十三章 微信开发实用技巧
- 23.1表情雨飘落效果
- 23.2QQ表情和Emoji表情
- 23.3获取微信版本及手机系统
- 23.4兴趣部落
- 23.5公众号一键关注
- 23.6本章小节
- 第二十四章 微信常用功能开发实现
- 24.1基本文本消息的聊天机器人
- 24.1.1API接口
- 24.1.2自动聊天开发实现
- 24.2基于图片消息的人脸识别
- 24.2.1人脸识别接口
- 24.2.2夫妻相实现方案
- 24.2.3代码实现
- 24.3基于位置消息的地图导航
- 24.3.1 地图线路规划接口
- 24.3.2开发实现
- 24.4基于表单提交的预约订单
- 24.4.1前端设计与实现
- 24.4.2表单提交开发实现
- 24.5基于Ajax交互的大转盘
- 24.5.1数据库设计
- 24.5.2网页授权防作弊
- 24.5.3用户信息收集
- 24.5.4前端页面实现
- 24.5.5 Ajax提交与转盘控制
- 24.5.6中奖算法实现
- 24.5.7中奖记录查询
- 24.6基于HTML5的微网站开发
- 24.6.1首页布局与设计
- 24.6.2图片滑动特效实现
- 24.6.3栏目页设计与实现
- 24.6.4内容页设计与实现
- 24.7本章小结
- 24.8源代码下载
- 24.8.1
- 第二十五章 基于ThinkPHP5的微信用户管理系统
- 25.1ThinkPHP5
- 25.1.1介绍与下载
- 25.1.2目录结构
- 25.1.3常用概念
- 25.2系统设计
- 25.2.1模块设计
- 25.2.2数据库设计
- 25.2.3系统配置
- 25.3登录模块
- 25.3.1 身份验证
- 25.3.2验证码
- 25.3.3系统信息查看
- 25.4接口模块
- 25.4.1微信消息接口实现
- 25.4.2微信API接口实现
- 25.5 用户管理
- 25.5.1同步用户关注列表
- 25.5.2同步用户基本信息
- 25.5.3关注时更新用户
- 25.5.4用户信息列表展示
- 25.5.5用户信息统计分析
- 25.6群发实现
- 25.6.1更新互动记录
- 25.6.2群发通知实现
- 25.7本章小结
- 25.8源代码下载