找回密码
 立即注册

QQ登录

只需一步,快速开始

微信公众号开发资源

关注:734

所属分类: 微信开发 微信公众号开发资源

本版块为微信公众号开发教程与公众号开发相关技术分享板块,技术提问请到其他对应的问答板块发帖:)

[公众号开发博客] 回复一个图片消息 - 傻瓜式微信开发教程17 - 耗子原创

[复制链接]
查看: 13524|回复: 50
 楼主| 发表于 2015-8-21 09:57:02 | 显示全部楼层 |阅读模式

如果想回复给用户一个`图片消息`,而不是图文消息的话我们就需要使用`MediaId`字段了.

我们在上传素材到服务器 - 傻瓜式微信开发教程14 - 耗子原创介绍了上传自己的图片到微信服务器获取`MediaId`的方法.
这里我们就不重复介绍了.

我们这是只是实现当用户发送给我们图片消息的时候返回给用户相同消息的功能.

当用户发送给我我们`图片消息`时,我们从SAE的日志中可以看到附带的参数大概是以下的样子:

  1. 101.226.62.77 [21-Aug-2015:09:07:30 +0800] [debug]tousername => gh_5d4275a0d53e, fromusername => okhDqsjop60PKFR86uzwY02AAHxA, createtime => 1440119249, msgtype => image, picurl => http://mmbiz.qpic.cn/mmbiz/lV0d907m3OVHTzE6XK0TibCD8afzz5R7zYz45IvnM1gQ0Sr6xDy8tAWe6JicIUIaFKyknCtvwuApj7gWg8xEibHrQ/0, msgid => 6185265077004084317, mediaid => zCOwRBD2Lbf_Sj3SI1LxTY_VwV7_nXE275l43b8Wwf5bIfZ4eNjmhungGLLxu_mS,  yq22
复制代码


关于如何使用SAE打印接收到的信息内容可以参见帖子查看SAE的DEBUG信息 - 傻瓜式微信开发教程16 - 耗子原创.

我们可以看到,在收到的信息中实际上已经存在一个用户发送过来的图片的`MediaId`参数了,这里我们直接使用就OK了.

然而不幸的是,现在的`Wechat-php`框架没有为我们提供发送图片消息的功能,
所以我们要自己实现.

首先我们需要在`Wechat.php`中定义一个新的消息类型,参照`TextResponse`就可以了:

  1. /**
  2. * 用于回复的图片消息类型
  3. */
  4. class ImageResponse extends WechatResponse {

  5.     protected $mediaId;

  6.     public function __construct($toUserName, $fromUserName, $mediaId, $funcFlag = 0) {
  7.       parent::__construct($toUserName, $fromUserName, $funcFlag);

  8.       $this->mediaId = $mediaId;
  9.       $this->template = <<<XML
  10. <xml>
  11.   <ToUserName><![CDATA[%s]]></ToUserName>
  12.   <FromUserName><![CDATA[%s]]></FromUserName>
  13.   <CreateTime>%s</CreateTime>
  14.   <MsgType><![CDATA[image]]></MsgType>
  15.   <Image>
  16.     <MediaId><![CDATA[%s]]></MediaId>
  17.   </Image>
  18.   <FuncFlag>%s</FuncFlag>
  19. </xml>
  20. XML;
  21. }
复制代码


然后我们参照`responseText`函数写一个`responseImage`函数

  1. protected function responseImage($mediaId, $funcFlag = 0){
  2.   $this->sendout(new ImageResponse($this->getRequest('fromusername'), $this->getRequest('tousername'), $mediaId, $funcFlag));
  3. }
复制代码


现在我们就为`Wechat-php`框架提供了发送图片的功能,接下来我们就可以直接调用responseImage来发送图片了.

我们重写`index.php`中接收到图片的处理函数`onImage`

  1. protected function onImage() {
  2.   // 只是简单地创建了和接收到的图片相同的回复信息
  3.   $this->responseImage($this->getRequest('MediaId'));
  4. }
复制代码


上传代码到我们的服务器后,向公众号发送图片消息,
我们就可以看到相同的图片回复了.
2-图片信息.png

整个工程代码在附件中,因为用到的SAE的特殊函数,所以在其他平台运行是会报错的.
另外记得修改token等参数为自己的参数哈.
游客,如果您要查看本帖隐藏内容请回复

回复

使用道具 举报

TA的社区排名

积分:暂未上榜

发帖:NO. 1205 名

在线:NO. 24 名

最佳答案
0 

0

主题

27

帖子

35

积分

新人求带

积分
35
发表于 2015-8-24 16:07:10 | 显示全部楼层
看看怎么回事
回复 支持 反对

使用道具 举报

TA的社区排名

积分:暂未上榜

发帖:NO. 1535 名

在线:NO. 24 名

最佳答案
0 

0

主题

23

帖子

17

积分

新人求带

积分
17
发表于 2015-9-20 21:35:27 | 显示全部楼层
授权回调页面域名:
回复 支持 反对

使用道具 举报

最佳答案
0 

0

主题

17

帖子

21

积分

新人求带

积分
21
发表于 2015-9-24 10:08:43 | 显示全部楼层
继续学习中
回复 支持 反对

使用道具 举报

最佳答案
0 

0

主题

18

帖子

10

积分

新人求带

积分
10
发表于 2015-9-25 15:29:39 | 显示全部楼层
才vvvvvvvvvvvvvvvvvvvvvv
回复 支持 反对

使用道具 举报

TA的社区排名

积分:NO. 452 名

发帖:NO. 493 名

在线:NO. 171 名

最佳答案
1 

6

主题

47

帖子

594

积分

专家路上

积分
594
发表于 2015-9-29 15:30:37 | 显示全部楼层
看。。。。。。。。。。
回复

使用道具 举报

TA的社区排名

积分:NO. 1868 名

发帖:NO. 883 名

在线:NO. 273 名

最佳答案
0 

1

主题

33

帖子

247

积分

略知一二

积分
247
发表于 2015-9-30 14:32:40 | 显示全部楼层
上帝 是
回复

使用道具 举报

最佳答案
0 

0

主题

2

帖子

4

积分

新人求带

积分
4
发表于 2015-10-10 14:36:51 | 显示全部楼层
方法好好!!!!!!!!!!!!!!!!!!!!!
回复

使用道具 举报

TA的社区排名

积分:暂未上榜

发帖:NO. 1496 名

在线:NO. 516 名

最佳答案
0 

0

主题

24

帖子

59

积分

新人求带

积分
59
发表于 2015-10-18 18:10:16 | 显示全部楼层
test..............
回复

使用道具 举报

最佳答案
0 

0

主题

14

帖子

12

积分

新人求带

积分
12
发表于 2015-10-30 02:31:09 | 显示全部楼层
看看看看看看
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

henkuai.com是专业的第三方微信开发者平台,为生态而生。


本站为第三方微信开发者平台,非腾讯官方网站。

天津市滨海新区
中新生态城中成大道生态建设公寓9号楼3层301

欢迎来这里一起喝喝茶,
聊聊你的产品。

微信公众号gongzhongkaifa

工作日12小时内回复。

网站业务
zhongcong@henkuai.com

工作日12小时内回复。

市场合作
songchang@henkuai.com