好了,上一篇已经介绍到了如何成为一个微信开发者,并且简单介绍了如何获取和发送简单的文本信息,这次就来介绍一下其他类型数据的接收和发送方式。

我们可以通过微信端给我们发送来的xml来判断用户发送消息的类型,比如文本,图片,音频等等,具体获取看代码

$postStr = $GLOBALS["HTTP_RAW_POST_DATA"]; //获取POST数据

$postObj = simplexml_load_string($postStr,'SimpleXMLElement',LIBXML_NOCDATA);//这就是微信发来的xml

$fromUsername = $postObj->FromUserName; //获取发送方帐号(OpenID)

$toUsername = $postObj->ToUserName; //获取接收方账号

$keyword = trim($postObj->Content); //获取消息内容

$masType = $postObj->MsgType;//获取消息类型

$time = time(); //获取当前时间戳

可以看到,获取到的xml中,MsgType就是用户发送数据的类型,分别有 'text'(文本),'image'(图片),location(位置),voice(音频),video(视频)等。我们就做一个简单的根据用户发送类型来返回相应数据的demo。

首先用switch case来区分不同的类型,这个函数不知道的自己百度,而后对应来编写代码

1,文字

我们就做成简单的 “你发送的是:”格式的demo。先定义回复文本格式的xml模板,而后把刚获取的用户文字和我们需要的内容合并,最后通过 resultStr() 函数来格式化消息模板。函数用法自行百度

//返回消息模板

$textTpl = "%s

0";

switch ($masType) {

case 'text'://文字

$msgType = "text"; //消息类型

$contentStr = '你发送的是:'.$keyword;

$resultStr = sprintf($textTpl,$fromUsername,$toUsername,$time,$msgType,$contentStr);

echo $resultStr;

break;

这样就会得到一个这样的回复。

image.png

2.图片

同样的,我们还是做一个把用户发来的图片再发回给他的demo。用户在像我们的公众号发送图片的时候,微信平台会在保存图片的同时,给这张图片一个唯一的URL以及mediaId,这个URL在浏览器直接访问就是你的那张图片。开发者需要在服务器获取该图片的mediaId,而后再按照格式发送给微信方,微信就会返还对应这个mediaId的图片给用户。

$picUrl = $postObj->PicUrl;//图片的链接

$mediaId = $postObj->MediaId;//图片消息媒体id

$msgType = "image";

$replyXml = "%s";

echo sprintf($replyXml,$postObj->FromUserName,$postObj->ToUserName,time(),$msgType,$mediaId);

image.png

另外,如果你想发送指定的图片给客户,那么你需要先在开发者端把图片发送给微信方,而后获取这个图片的mediaId,你可以选择发送临时素材(保存三天)或者永久素材,具体操作请看微信官方文档。

3.图文

我们自己关注的公众号,给我们发送最多的消息应该就是图文消息了,就是类似这样的

image.png

大家肯定都知道,这样的消息,在微信公众平台,点点敲敲的就可以发送了,但是这完全没有开发者的代码逻辑在内,也无法完全控制,所以我们要用代码来实现这个功能。

首先我们定义一个二维数组,其中的参数名称如代码所示

$newsArr = array(

array(

"Title"=>"本世纪最像王昊的男人!",

"Description"=>"究竟是为何和王昊长得如此相像?",

"PicUrl"=>"http://5b0988e595225.cdn.sohucs.com/images/20171019/aab0f430638b4b1f87e48d19054b7b60.jpeg",

"Url"=>"http://www.wanghao-home.club"

),

array(

"Title"=>"艳照门祖师爷再现江湖!",

"Description"=>"究竟是电脑坏了还是存心所为…",

"PicUrl"=>"http://g.hiphotos.baidu.com/baike/pic/item/060828381f30e92496694c1044086e061c95f7c6.jpg",

"Url"=>"http://www.wanghao-home.club"

),

array(

"Title"=>"音乐才子竟拜师?",

"Description"=>"伯克利音乐才子竟然为何拜师王昊门下?让我们来一探究竟!",

"PicUrl"=>"http://img01.e23.cn/2017/1003/20171003094603817.jpg",

"Url"=>"http://www.wanghao-home.club"

)

);

可以看到,这个二维数组中,一级数组一个,二级数组三个,其中的参数也都相同

Title:文章标题 Description:文章描述 PicUrl:文章图片 Url:点击会跳转的链接

好了,数组定义完成,我们就要把数组处理成为微信可以接收的xml数据了,这里我给你提供一个方法

//判断是否为数组类型

if(!is_array($newsArr))

{

return;

}

// 判断数组是否为空数组

if(!$newsArr)

{

return;

}

$itemStr = "";

//定义item模板

$itemXml = "";

foreach($newsArr as $item)

{

$itemStr .= sprintf($itemXml,$item['Title'],$item['Description'],$item['PicUrl'],$item['Url']);

}

$replyXml = "%s

".count($newsArr)."

".$itemStr."";

echo sprintf($replyXml,$postObj->FromUserName,$postObj->ToUserName,time());

代码里也没有什么复杂的地方,就是一个循环赋值的过程,最后再格式化返回给微信方,这样我们的用户就会收到这样的一个图文消息

image.png

并且点击对应的内容,就会跳转到 www.wanghao-home.club

4.用户关注

用户在关注我们公众号时,公众平台会发送给我们一个xml数据,我们可以获取其中的事件(Event),来判断,而后回复给用户一个欢迎语句

if($postObj->Event == 'subscribe'){

$msgType = "text"; //消息类型

$contentStr = '感谢您关注wellHome!';

$resultStr = sprintf($textTpl,$fromUsername,$toUsername,$time,$msgType,$contentStr);

echo $resultStr;

}

还有就是,个人开发者的订阅号现在无法进行微信认证,所以无法自定义菜单以及一切琐碎的功能,这点这得是让我心碎啊。

自定义菜单也很简单,我们只需要准备一个 json 数组,而后根据开发者的 AppID 和 AppSecret ,在公众平台上获取一个Access_token,而后token通过验证,你的数组就可以成为公众号的菜单了。并且微信还提供了多种事件,开发者可以在代码中,通过用户不同事件所发送的值以及菜单中你自己定义的 Key值就可以做对应的操作了。

这篇文章暂时先介绍这三种回复内容的格式,下一篇再详细介绍其他内容格式,希望会对您有所帮助。

php微信公众号开发入门,PHP微信公众号开发入门(二)相关推荐

  1. 微信公众号开发系统入门教程之公众号与小程序、APP的区别

    一.概述 APP.公众号.小程序,这是现在最流行且实用的三类系统.最近准备给我们公司开发一个微信公众号,我昨天对微信公众号做了一个细致的了解,现在我就来和大家说一说他们的区别联系. 先说一下公众号与A ...

  2. 微信公众号开发系统入门教程(公众号注册、开发环境搭建、access_token管理、Demo实现、natapp外网穿透)

    由于图片图床问题,文章部分图片无法预览,暂时把该文章迁移至简书,给大家带来麻烦,抱歉了. 感兴趣的小伙伴可参考:https://www.jianshu.com/p/cc1b1050b5b4 Autho ...

  3. 【微信开发】基于微信公众号的早起签到程序

    说明:本文讲述基于公众号实现的签到程序的全部开发过程.开发环境:PHP+MySQL. 源码下载地址:敬请期待 关注微信公众号[知行校园汇]可免费下载全部源码. >>点击查看WUTer计算机 ...

  4. 微信开发学习总结(三)——开发微信公众号的最基本功能——普通消息的接收和回复...

    2019独角兽企业重金招聘Python工程师标准>>> 一.微信公众平台消息管理接口介绍 要实现微信公众号的普通消息的接收和回复,我们需要先熟悉微信公众平台API中消息接口部分,点此 ...

  5. 微信开发学习总结(三)——开发微信公众号的最基本功能——普通消息的接收和回复

    在上篇<微信开发学习总结(二)--微信开发入门>我们介绍了微信公众平台的基本原理,如何接入微信公众号,如何保持access_token的长期有效性以及进行了简单的文本消息测试,本篇再来具体 ...

  6. Java开发微信公众号(四)---微信服务器post消息体的接收及消息的处理

    在前几节文章中我们讲述了微信公众号环境的搭建.如何接入微信公众平台.以及微信服务器请求消息,响应消息,事件消息以及工具处理类的封装:接下来我们重点说一下-微信服务器post消息体的接收及消息的处理,这 ...

  7. .Net微信开发之通过UnionID机制,解决用户在不同公众号,或在公众号、移动应用之间帐号统一问题...

    开发背景: 最近一段时间一直在做关于微信方面的网站应用开发,这段时间也收获的不少关于微信开发方面的开发技能,接触的比较多的主要有微信公众号和微信网站app第三方登录授权,以及微信会员卡,优惠券和扫描二 ...

  8. 限时团购,6.9折:《微信开发深度解析:公众号、小程序高效开发秘籍》推荐序

    全书由目 Senparc.Weixin SDK 作者苏震巍历时 2 年完成,涵盖了开发微信公众号及小程序需要用的的各项后端开发技能.技巧.避坑提示,以及 Senparc.Weixin SDK 微信公众 ...

  9. 微信开发---微信网页授权、JS-SDK和微信公众号的基本设置

    用了好几个小时的时间,整理了一下关于公众号的思维导图,由于CSDN不能上传相对应的文件,所以萍子一一的分解开的截图附上来,希望对大家有所帮助哦~ 因为是电脑设备自动截图,又鉴于内容比较多,可能不是太清 ...

最新文章

  1. 十代i7前端总线频率_Intel 10nm十代酷睿终极版发布:频率暴涨、苹果独享
  2. prim 算法加模板
  3. 世界奥运建筑文学第一书  北京奥运长篇纪实第一人
  4. 迭代器(Iterator)遍历的两种方法(for和while)
  5. 企业微信jssdk分享接口管理系统
  6. 物尽其用-让推荐系统成为你学习的助手
  7. 让块元素在同一行显示的方法: float 和inline-block
  8. 人工智能十种“新”数学
  9. 基于Python班级管理系统毕业设计-附源码171809
  10. 双绞线有两种接法:EIA/TIA 568B标准和EIA/TIA 568A标准。
  11. N沟道MOSFET所需的高于电池的电源电压
  12. 源中瑞区块链baas平台一站式服务体系
  13. 基于netty+websocket实现门户游客实时统计功能
  14. 万兆网络传输速度测试_万兆带宽测试方法
  15. Matlab图像的几何变换之图像缩放
  16. SuperMap iClient3D for WebGL风向风速对粒子的影响
  17. 特岗计算机老师年度总结,特岗教师工作总结
  18. 2013年王道论坛研究生机试练习赛(一)东邪他爹解答
  19. btcd交易流程之交易的创建(一)
  20. java基于ssm的疾病控制中心管理系统

热门文章

  1. 发票识别+发票查验API
  2. petalinux-build: do_compile: oe_runmake failed do_compile: Function failed: do_compile 解决方法
  3. 基于茅台股票的数据分析 相关性图 热力图 直方图 数据+代码 +实验报告
  4. 关于分片上传 php,php分片上传简单示例
  5. Eclipse 使用 github
  6. 雷替曲塞-聚乙二醇-小麦胚凝集素 Raltitrexed-PEG-Wheat germ agglutinin
  7. 结合openCV学习DIP之机器学习CNN
  8. 概率论之大数定理与中心极限定理
  9. 类似与这种的HHH000206: hibernate.properties not found的报错!只需要把hibernate的版本换成4.点几的就行!
  10. 【Java】finally用法