是微信公众平台开发的程序,获取微信用户发来的文本。但是在测试号上一直返回textview显示富文本,不知道是什么原因??

猪八戒客户端
需求发布后1小时内收到服务商响应每个需求平均有10个服务商参与95%以上的需求得到了圆满解决所有需求不向雇主和服务商收取任何佣金流量暴涨,转化飙升,销量翻倍
您当前的位置:
微信公众平台开发多的常见问题解惑
18:36 && && 阅读:4318 && 作者:
1、订阅号与服务号的主要区别是什么?& & & 订阅号每天能群发一条消息没有自定义菜单及高级接口权限;服务号有自定义菜单及高级接口权限但每月只能群发一条消息。2、到底该申请订阅号还是服务号?& & & 申请哪种类型的公众账号主要取决于账号的用途。服务号主要面向企业和组织旨在为用户提供服务;订阅号主要面向媒体和个人旨在为用户提供信息和资讯。3、个人订阅号是否支持编程开发?& & & 不管是订阅号还是服务号在高级功能中都有编辑模式和开发模式订阅号也支持编程开发同样也能与企业系统对接。4、为什么申请的公众账号没有高级功能?& & & 公众账号注册后要经过微信团队的审核在审核未完成之前不显示高级功能。一般审核会在15个工作日内完成如果一两周没审核通过均属正常现象还请耐心等待。5、现在订阅号能否申请自定义菜单?& & & 不能。个人订阅号目前不能,企业订阅号只有在申请认证,才有自定义菜单,6、现在申请的订阅号能否转服务号?&& & & 不能。只有日微信5.0发布以前申请的订阅号才有一次转服务号的机会在此之后申请的订阅号不能转服务号。那如果真的有转服务号的需求怎么解决?只能重新申请一个服务号。7、目前一个身份证号能申请几个公众账号?& & & &5个。8、使用一个邮箱申请多少个公众账号?& & & &1个&9、在注册公众账号时提示“你注册的公众号名称存在侵权风险请先完成微博验证”这是什么意思?& & & 公众平台对一些可能存在侵权的关键词进行了保护例如:“微信”、“移动”、“搜狐”等如果注册的公众账号名称中包含这类关键词提交时就会提示存在侵权风险。遇到这种情况时要么避开这些关键词换个名称注册要么就根据提示先完成微博验证再继续注册。10、个人能否申请服务号?不能个人只能申请订阅号。& & & 服务号的运营主体必须为组织例如:企业、政府、其他组织等。11、公众账号的名称可以重复吗?& & & 公众账号的名称可以重复不用担心被他人抢注。12、公众账号的名称可以修改吗?& & & 公众账号名称一经设置无法修改公众平台没有提供账号改名的功能因此在注册账号时取名应谨慎。13、微信认证与微博认证有什么区别?& & & 微信认证是针对于服务号微博认证是针对于订阅号。也就是说订阅号只能申请微博认证服务号只能申请微信认证。14、是否需要粉丝数达到500才能申请微信认证?& & & 只要是服务号都可以申请微信认证与粉丝数无关。只有订阅号申请微博认证才要求粉丝数必须达到500。15、编辑模式与开发模式能够同时使用吗?& & & 不能这两种模式是互斥的开启编辑模式就必须关闭开发模式开启开发模式就必须关闭编辑模式。16、现在用的是编辑模式以后还可以选择使用开发模式吗?& & & 可以任何时候都可以根据需要切换到另外一种模式。17、编辑模式切换到开发模式之后在编辑模式中设置的内容还在吗?还有效吗?& & & 在编辑模式中设置的内容只要自己不手动删除会永远存在的但这些设置在开发模式下无效。18、开发模式的菜单为什么突然消失了?& & & 菜单不会无缘无故的消失如果开发人员没有手动删除那一定是有人开启过编辑模式引起的。请注意:开启编辑模式后在开发模式下创建的菜单会被删除。19、使用开发模式需要具备哪些条件?& & & 1)至少掌握一门编程语言;2)具备公网服务器资源。20、微信公众平台支持哪些编程语言?应该如何选择?& & & 凡是支持动态Web开发的编程语言都能够用于微信公众平台开发例如:Java、PHP、ASP.NET、Ruby、Python、Note.js等。开者人员应该选择自己最擅长的编程语言进行开发如果都不擅长怎么办?如果都不擅长建议选择Java或PHP原因在于网上关于微信公众平台开发的资料大都是基于Java和PHP的开发起来要相对容易。21、没有公网服务器资源怎么办?& & & &1)免费:可以考虑使用云环境例如BAE(Baidu App Engine百度应用引擎)和SAE(Sina App&Engine新浪应用引擎)。2)付费:可以考虑租用VPS(Virtual Private Server虚拟专用服务器)或阿里云的云服务器。如果仅是为了学习微信公众平台开发个人建议使用BAE。22、如果想使用Java进行微信公众平台开发至少需要掌握哪些内容?& & & 至少需要掌握Java基础知识、JSP、Servlet、Javabean和JDBC(操作数据库)。23、公司的项目大都是基于SSH框架进行开发能使用SSH开发微信公众账号吗?& & & 当然可以前面说过凡是支持动态Web开发的编程语言都能用于微信公众平台开发。其实Struts本质上也是Servlet。24、公众账号能够通过程序主动向关注用户发消息吗?& & & &截止目前公众平台还没有开放主动向用户发消息的接口。为什么招行可以?我前面说的是没有“开放”主动发消息的接口并不代表没有该接口。如果贵公司也有招行的实力我相信你也有办法申请到;如果没有这样的实力那就不要费事了。25、订阅号使用开发模式能够向用户回复图片、语音和视频消息吗?& & & &可以虽然订阅号没有多媒体文件上传接口权限无法通过上传多媒体文件到微信服务器获取MediaId但仍可以变相得到MediaId同样可以实现回复多媒体消息。变相的实现方法是将用户发送给公众账号的多媒体消息的MediaId记录下来给用户回复多媒体消息时可以使用。26、订阅号使用开发模式能够向用户回复音乐消息吗?& & & 可以。27、音乐消息包含参数ThumbMediaId没有高级接口权限的公众账号无法获得ThumbMediaId怎么回复音乐消息?& & & &ThumbMediaId不是音乐消息的必须参数给用户回复音乐消息时可以不传ThumbMediaId参数类似下面这种示例格式也能正确回复音乐消息:&xml&&ToUserName&&![CDATA[toUser]]&&/ToUserName&&FromUserName&&![CDATA[fromUser]]&&/FromUserName&&CreateTime&&/CreateTime&&MsgType&&![CDATA[music]]&&/MsgType&&Music&&Title&&![CDATA[TITLE]]&&/Title&&Description&&![CDATA[DEscriptION]]&&/Description&&MusicUrl&&![CDATA[MUSIC_Url]]&&/MusicUrl&&HQMusicUrl&&![CDATA[HQ_MUSIC_Url]]&&/HQMusicUrl&&/Music&&/xml&28、订阅号与非微信认证的服务号能够向回复哪些类型的消息?& & & 在开发模式下订阅号与非微信认证的服务号只能向用户回复文本消息、音乐消息和图文消息。29、为什么项目代码与柳峰老师教程中的一样发消息给公众账号却没有任何响应?& & & &这是我写微信公众平台开发教程以来初学者给我反馈最多的问题。可以肯定的是至今为止我博客中贴出的所有代码全部都能正常运行没有任何问题。遇到上面这种问题大都是由以下三种情况引起:1)在公众平台开发模式下成为开发者却忘记开启开发模式即开发模式的开关是关闭状态。2)通过上传WAR包的方式部署应用时导出的WAR包中没有包含JAR。建议初学者直接将项目需要的JAR拷贝到项目中这样通过开发工具导出的WAR包就会包含JAR。3)项目中引入的第三方JAR包与笔者教程中使用的JAR包版本不一致。30、为什么自定义菜单创建成功了在微信客户端的公众账号上却不显示?& & & &由于微信客户端缓存的原因自定义菜单创建成功后需要24小时以后才能显示出来。开发者在测试时可以尝试取消关注公众账号后再次关注这样能立即看到最新的菜单效果。PS:菜单更新、菜单删除也会有缓存。31、如果要更新公众账号的自定义菜单需要先将原有菜单删除吗?& & & 不需要直接执行菜单创建方法即可每次创建菜单会自动覆盖以前的菜单。32、什么是微网站?& & & &微网站是新瓶装老酒被一些搞营销的人给神化了以至于很多开发者都在问什么是微网站如何开发微网站。微网站本质上就是以微信浏览器为入口的手机网站(Web&APP)能够兼容Android、iOS、WP等操作系统。开发微网站用到的技术与开发普通网站一样都是基于HTML(HTML5)、CSS、javascript等所以有普通网站开发经验的开发者完全有能力开发微网站。PS:初学者以后再看到什么以“微”开头的新名词例如:微商城、微客服、微统计直接把“微”字去掉或者把“微”当作是“基于微信的”就不难理解了。33、什么是模拟登录?模拟登录微信公众平台能够干什么?& & & &模拟登录指的是通过程序模拟用户在浏览器上的操作。例如我们通过浏览器访问微信公众平台先要登录登录成功后能够查看用户信息、给用户回复消息、群发消息等其实通过程序也能够实现这些操作。PS:对于模拟登录官方并没有明确表态是允许还是禁止请谨慎使用万一哪天被封号就不划算了也没法向关注你公众账号的用户交待。34、微信认证是如何收费的?& & & &服务号申请微信认证需要支付300元/次的审核服务费用无论最终的认证审核通过与否都需要支付这笔费用。微信认证成功后认证的有效期是一年在有效期快结束时还要再次申请微信认证。35、微信支付如何申请?& & & &申请完微信认证后,提交企业资料和开户账号既可申请微信支付。36、临时带参二维码有哪些应用场景?& & & &通过微信扫描二维码登录微信网页版就是临时带参二维码的典型应用场景。37、微信公众平台开发一般如何调试?& & & &微信公众平台提供的在线接口调试工具旨在帮助开发者检测调用公众平台接口时传入的参数是否正确这款工具对开发者的帮助其实并不大。对于调试本地运行的公众账号后台程序这里给读者推荐两种方法:1)使用“微信开发调试小工具”该工具支持在本地调试工具的用法及下载请访问:/linkbiz/。2)使用花生壳动态域名解析软件通过路由器端口映射可以将自己的电脑变成一台外网服务器这样本机运行的公众账号后台程序就能直接与微信服务器进行交互了。38、为什么项目在本地运行正常也能获取到数据部署到服务器上之后公众账号没有任何响应?& & & &遇到这类情况请读者尝试从以下几个方面排查问题:1)检查项目在服务器上是否部署成功可以尝试方法以前能够正常运行的功能模块看能否正确响应以便缩小问题范围。2)检查项目中通过URL传递参数时如果传递特殊字符(例如:中文、+、&等)是否对特殊字符进行了编码。3)检查程序的处理是否超时如果超过5秒公众账号不响应。4)检查返回的文本消息、图文消息是否超过限制(文本消息长度&=2048字节图文消息条数&=10条)若超过限制公众账号不响应。5)公众账号不响应也有可能是微信公众平台自身故障导致。39、为什么URL在浏览器能访问放到微信上却不能访问?& & & &请检查URL中是否包含特殊字符例如:中文、+、&等PC上的浏览器通常都会对URL中包含的特殊字符自动编码但有些浏览器不会。为了保证所有的浏览器都能正常访问URL请务必对URL中包含特殊字符显示编码显示编码的意思是代码中能够明确看出编码方式是UTF8、GB2312或者其它。例如像下面这样:// 采用操作系统默认的字符集进行编码在不同的操作系统上表现不一致不推荐java.net.URLEncoder.encode(chinese);//&显示编码推荐用法java.net.URLEncoder.encode(chinese&&UTF-8&);&&PS:很多初学者都认为只有URL中包含中文时才需要编码结果导致OAuth2.0授权接口、通过ticket换取二维码接口总是调用不成功。OAuth2.0授权接口中的回调地址redirect_uri中包含大量特殊字符必须进行编码通过ticket换取二维码接口中的ticket中可能包含+号也要进行编码。
有什么疑问,可以直接给我留言,我会尽全力给你解答!
阅读(4318) 回复(3)
相关推荐:
作者:阅读(4136)
作者:阅读(4017)
作者:阅读(4748)
作者:阅读(1048)
作者:阅读(978)
作者:阅读(788)
1小时内推荐3-5家服务商
专业交易顾问1V1全程服务
交易过程官方免费担保
服务范围:
店铺优化&&
社会化营销-删除&&
淘宝店铺策划&&
微信开发&&
好评率:100%
综合评分:5.0
简介:论坛推广,微信,微博认证营销,网站建设,网站的SEO!
查看(1027)回复(0)
查看(1333)回复(0)
查看(722)回复(1)
TA出售的服务
他的最近完成的交易
评价:暂无评价
评价:暂无评价
评价:我是刚接触这个网的服务,抱着试一试的态度,没想到服务质量如此高,谢谢你们,特别感谢!
评价:更满意的服务,已经在这合作几次了
在线客服的工作时间为周一至周五 9:00-18:00目前微信公众平台的开发者模式能实现那些功能?
技术小白,几乎看不懂开发者模式的说明,就想知道能实现什么,然后好研究看看需要不需要学习相关的技术。
按投票排序
最近微信公众平台更新很多,重新编辑了一下。题主可以先认真参考微信官方文档&&首先,你要明白开发者模式是什么。To 小白用户:简单的说,就是先验证你的服务器地址,验证完成之后,用户一旦发消息,腾讯的服务器就把微信用户的消息发生到地址上。你的服务器接到数据后,然后你自己设计一套程序,输出一个结果,腾讯的服务器会自动抓取,最后返回信息发送给用户。为了直观,自己做了个图,有点丑。。而你能做的,就是在你的服务器上,发挥你的聪明才智,设计出各种有趣功能程序的逻辑实现。楼下说的那些“天气预报”,“公交查询”等等功能,说到底就是在服务器上实现的。所以题主想要使用开发者模式的话,去学习一门服务器端脚本语言就好了。&-----------------------------------------------------我是分割线---------------------------------------------------&To 初级开发者:首先要明白openid是什么openid就是一个加密的串,每个用户对一个某个公众号的openid是唯一的。我能获取到哪些信息?有了openid,你可以拿到这个用就可以获取到用户的头像,性别、昵称、所在地区等公开信息。但是有个信息是拿不到的,就是用户的微信号。&-----------------------------------------------------我是分割线---------------------------------------------------&下面开始回答题主的问题,题主问的是能实现什么功能。相信题主已经试过一些第三方的微信平台。RT:这是某微信第三方平台所提供的功能.看起来是不是很多?其实这些第三方平台之所以有存在的价值,利用的就是信息的不对等。准确的说,就是欺负咱一般的老百姓不懂技术。用他们的平台,可以让不懂技术的人也能实现查快递,查询天气等等功能。回到原题,要想知道能实现什么功能,你先要知道开发者模式有那些接口。先打开微信公众平台后台,点击开发者中心,看看你目前有的接口权限。所有的功能,都是基于这些接口的。以下我尽量用自己开发过的项目来举例子。 以我的《英雄小助手》为例,使用
这个接口,再配合上数据库操作,我就可以实现记录用户角色信息的功能。用过自动回复在和用户聊天的过程中,我已经把用户的ID和大区记下了。这些都是通过程序自动实现的。高级接口是需要认证的,认证之后,你就可以有这些接口:咱把这些接口好好利用起来,发挥你的想象力,可以实现很多功能。例一:利用
,这个接口,获取到用户性别、头像、微信号等等信息以后,你就可以开发一个交友类的微信。比如我之前开发的打分交友例二:再发挥你的想象里,配合新浪微博的接口,我开发了一个“我爱的ta”微信号。使用方法很简单,先绑定你女神的微博,女神一旦发新微博或者删微博,这个微信号就会第一时间提醒你。就像这样:这些都是我很久以前开发过的项目啦。再比如:利用
这个接口,你可以开发一个微信号,自动帮你寻找附近的餐厅。微信开发模式所实现的功能,主要是在和微信号对话的时候用到。而微信除了开发者模式,还有一个很重要的领域,就是 移动网页。微信说白了,就是一个聊天工具 + 内置浏览器。只有你会一些技术,就可以在H5网页开发出很不错的东西。比如
,上传一张照片,可以自动识别以及打分。甚至可以开发html5游戏,比如最近很火的围住神经猫,说白了就一个html5网页。========================================利用接受图片消息的接口,再做一个移动端的网页,就是可以实现这个功能。只要直接给公众号发照片,就可以上墙 在这个页面就可以查看用户分享的照片了,当然还做了一个PC版的: =============================================后来我利用这个接口,开发了一个文章评论功能。可以给推送的文章,加入评论功能。=============================================利用地址位置的接口,再配合上百度地图,做了一个 撸友地图的功能只要把你的位置发现公众号,可以自动查看附近的撸友,简单粗暴=============================================再比如利用 比特币网站的接口+微信主动客服消息接口,可以在微信上做一个比特币自动交易的功能,比特币是7X24小时都可以交易的,写一个程序,设定好自己的心理价位,然后安心得去睡觉就行了。在睡觉的时候都可以帮你买卖。当然,这个功能只是我自己用来玩玩,没有开放给其他人使用。没错,题主只要能明白微信开发者模式的原理,再加上你的灵感和想象力,就能实现非常多很有趣的功能呢。如果你还不懂技术,强烈建议你学习一门服务器端脚本语言。================================看见自己3年前的回答。。。有点感慨LZ目前最近的一个项目:英雄小助手目前粉丝数300W。详见:
就微信公众平台现在开放的接口(),作为一个开发者,我们能做以下事情(以我的项目为例):用户添加关注时,自动回复;用户输入关键词(股票代码、拼音、名称等),返回相应匹配内容(行情);自定义菜单(最新要闻、股市行情、领涨行业、黄金报价、全球股市、基金净值)。
能实现的很多啊,只要是基于一问一答形式的都可以1.查询:如查天气、股票、星座等等2.对话:如聊天机器人、小黄鸡等等3.问答:一站到底、猜谜语或人物等等4.搜索:可以搜索自己网站内容5.结合地理位置可查询周边、天气、公交等等6.听歌:可以发送想听的歌曲名,返回音频7.活动、游戏:一般就需要返回图文跳转到其他的网站进行,既然已经跳转到其他的网站,那可以做的就太多了举几个例子,其他的看你的想象力。我们也看到很多在用微信公众的人们对开发不太了解,才做了一个接口平台网站,可以傻瓜式拥有各种功能。不过想要和自己的项目结合的好,还是需要自行开发。还有一些朋友通过各种方式取得了微信并没有开放的用户信息或功能,虽然github上也有这样的代码,真作为一个微信公众账号运营者来说还是不用为好,如果真被封了,到时候欲哭无泪啊
我写了两个微信公共账号.一个是音乐搜索:在微信里扫描下面的二维码或者点击朋友们–&添加朋友–&搜号码,搜索getall就可以了.关注后输入想听的歌曲或歌手名,就会给你返回个搜索结果,点击结果中的歌曲就可以完整收听.另一个是每日nba视频:另一个是每日nba视频:可以搜索球星/球队的视频,输入日期的话返回当天五佳球,视频可直接观看。请搜索账号:allnba 关注.或扫描下面的二维码.可惜现在微信不支持自动主动推送,要不就能在视频更新后第一时间推送到手机了.
一、最核心的功能就是用户输入信息,服务端返回相应结果用户发送文字、图片、语音、视频、地理位置等信息到服务端,服务端实现相应的功能,并以文本、图片、图文、语音、视频、音乐的形式返回信息到微信。比如南方航空的公众平台,可以输入文本、语音来实现查询航班、票价,办理登机牌,查询登机口,查询货运等功能。二、信息的展示以最美应用为例。1、
可以通过图文列表的形式展示信息; 2、
开发者平台可以创建编辑底部的一级菜单,二级菜单;3、
可以链接到第三方网页。三、发送消息给用户1、
在用户输入信息,服务端处理后发送消息给用户;2、
用户主动发消息给公众账号后,可以通过客户系统人工给用户发信息,类型包括文本、图片、语音、视频、音乐以及图文消息;3、
群发消息给用户,并且可以根据用户分组来群发,查看群发消息的成功数和失败数。四、用户管理1、给对用户进行分组;2、获取用户信息,昵称、头像、性别、所在城市、语言和关注时间;3、获取关注者列表、用户地理位置;4、获取用户的网络状态,如3g还是wifi?五、客服功能1、
用户发送的消息可以被转到客户系统,由客服处理回复;2、
获取客服聊天记录,开发 “工作监控”、“客服绩效考核”之类的功能。六、微信小店基于微信支付,包括添加商品、商品管理、订单管理、货架管理、维权等功能。
什么都可以实现几乎,当然还是要基于自己的网站数据
编辑模式不是也可以实现吗
试试wechat模块,五分钟搭建自己的机器人 GS提到的功能,中间件都提供了支持:- 签名验证- 消息序列化和反序列化- 会话支持(能够鉴别相同用户)- 消息路由(text,location, event, image, voice, link)- 列表响应/等待回复- 文字回复/图文回复/语音回复菜单的功能微信暂时没有正式公开,功能代码已经在分支开发中了。
1、调戏机器人最基本的功能了,这个公众平台就可以设置。但开发者也可以自己做接口,可以让机器人的回复更丰富如逛、冷笑话、2、机器人关键词查询与调戏类似,主要性质不一样。一般与网站数据接口同步,微信用户发送关键词时可以把网站匹配的内容显示出来。wordpress就有插件可以实现,免开发了。还有像外卖,车辆违规查询等都算。暂时知道这些,更多新方向待发现。
考虑微信在养猪场的普及程度很高,微猪科技用微信开发了一个猪场信息管理系统。系统公开后的第一天,就得到了近千人关注。在一个星期内,100多家猪场在系统中进行注册。
已有帐号?
无法登录?
社交帐号登录开发者必读
开发者工具
获取接口调用凭据
消息加解密
自定义菜单管理
数据统计接口
微信JS-SDK
微信小店接口
微信卡券接口
微信门店接口
微信智能接口
设备功能介绍
多客服功能
摇一摇周边
微信连Wi-Fi
出自微信公众平台开发者文档
公众号可通过本接口来获取帐号的关注者列表,关注者列表由一串OpenID(加密后的微信号,每个用户对每个公众号的OpenID是唯一的)组成。一次拉取调用最多拉取10000个关注者的OpenID,可以通过多次拉取的方式来满足需求。
接口调用请求说明
http请求方式: GET(请使用https协议)
access_token
调用接口凭证
next_openid
第一个拉取的OPENID,不填默认从头开始拉取
正确时返回JSON数据包:
{"total":2,"count":2,"data":{"openid":["","OPENID1","OPENID2"]},"next_openid":"NEXT_OPENID"}
关注该公众账号的总用户数
拉取的OPENID个数,最大值为10000
列表数据,OPENID的列表
next_openid
拉取列表的最后一个用户的OPENID
错误时返回JSON数据包(示例为无效AppID错误):
{"errcode":40013,"errmsg":"invalid appid"}
附:关注者数量超过10000时
当公众号关注者数量超过10000时,可通过填写next_openid的值,从而多次拉取列表的方式来满足需求。
具体而言,就是在调用接口时,将上一次调用得到的返回中的next_openid值,作为下一次调用中的next_openid值。
示例如下:
公众账号A拥有23000个关注的人,想通过拉取关注接口获取所有关注的人,那么分别请求url如下:
"total":23000,
"count":10000,
"OPENID1",
"OPENID2",
"OPENID10000"
"next_openid":"OPENID10000"
"total":23000,
"count":10000,
"openid":[
"OPENID10001",
"OPENID10002",
"OPENID20000"
"next_openid":"OPENID20000"
返回结果(关注者列表已返回完时,返回next_openid为空):
"total":23000,
"count":3000,
"openid":[
"OPENID20001",
"OPENID20002",
"OPENID23000"
"next_openid":"OPENID23000"114354人阅读
本次的教程主要是对微信公众平台开发者模式的讲解,网络上很多类似文章,但很多都让初学微信开发的人一头雾水,所以总结自己的微信开发经验,将微信开发的整个过程系统的列出,并对主要代码进行讲解分析,让初学者尽快上手。
在阅读本文之前,应对微信公众平台的官方开发文档有所了解,知道接收和发送的都是xml格式的数据。另外,在做内容回复时用到了,这是一个自然语言解析的开放平台,可以帮我们解决整个微信开发过程中最困难的问题,此处不多讲,下面会有其详细的调用方式。
1.1 在登录微信官方平台之后,开启开发者模式,此时需要我们填写url和token,所谓url就是我们自己服务器的接口,用WechatServlet.java来实现,相关解释已经在注释中说明,代码如下:
package demo.
import java.io.BufferedR
import java.io.IOE
import java.io.InputS
import java.io.InputStreamR
import java.io.OutputS
import javax.servlet.ServletE
import javax.servlet.http.HttpS
import javax.servlet.http.HttpServletR
import javax.servlet.http.HttpServletR
import demo.process.WechatP
* 微信服务端收发消息接口
* @author pamchen-1
public class WechatServlet extends HttpServlet {
* The doGet method of the servlet. &br&
* This method is called when a form has its tag value method equals to get.
* @param request
the request send by the client to the server
* @param response
the response send by the server to the client
* @throws ServletException
if an error occurred
* @throws IOException
if an error occurred
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding(&UTF-8&);
response.setCharacterEncoding(&UTF-8&);
/** 读取接收到的xml消息 */
StringBuffer sb = new StringBuffer();
InputStream is = request.getInputStream();
InputStreamReader isr = new InputStreamReader(is, &UTF-8&);
BufferedReader br = new BufferedReader(isr);
String s = &&;
while ((s = br.readLine()) != null) {
sb.append(s);
String xml = sb.toString(); //次即为接收到微信端发送过来的xml数据
String result = &&;
/** 判断是否是微信接入激活验证,只有首次接入验证时才会收到echostr参数,此时需要把它直接返回 */
String echostr = request.getParameter(&echostr&);
if (echostr != null && echostr.length() & 1) {
//正常的微信处理流程
result = new WechatProcess().processWechatMag(xml);
OutputStream os = response.getOutputStream();
os.write(result.getBytes(&UTF-8&));
os.flush();
os.close();
} catch (Exception e) {
e.printStackTrace();
* The doPost method of the servlet. &br&
* This method is called when a form has its tag value method equals to
* @param request
the request send by the client to the server
* @param response
the response send by the server to the client
* @throws ServletException
if an error occurred
* @throws IOException
if an error occurred
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
1.2 相应的web.xml配置信息如下,在生成WechatServlet.java的同时,可自动生成web.xml中的配置。前面所提到的url处可以填写例如://服务器地址/项目名/wechat.do
&?xml version=&1.0& encoding=&UTF-8&?&
&web-app version=&2.5&
xmlns=&/xml/ns/javaee&
xmlns:xsi=&http://www.w3.org/2001/XMLSchema-instance&
xsi:schemaLocation=&/xml/ns/javaee
/xml/ns/javaee/web-app_2_5.xsd&&
&description&This is the description of my J2EE component&/description&
&display-name&This is the display name of my J2EE component&/display-name&
&servlet-name&WechatServlet&/servlet-name&
&servlet-class&demo.servlet.WechatServlet&/servlet-class&
&/servlet&
&servlet-mapping&
&servlet-name&WechatServlet&/servlet-name&
&url-pattern&/wechat.do&/url-pattern&
&/servlet-mapping&
&welcome-file-list&
&welcome-file&index.jsp&/welcome-file&
&/welcome-file-list&
&/web-app&
1.3 通过以上代码,我们已经实现了微信公众平台开发的框架,即开通开发者模式并成功接入、接收消息和发送消息这三个步骤。
下面就讲解其核心部分——解析接收到的xml数据,并以文本类消息为例,通过图灵机器人api接口实现智能回复。
2.1 首先看一下整体流程处理代码,包括:xml数据处理、调用图灵api、封装返回的xml数据。
package demo.
import java.util.D
import demo.entity.ReceiveXmlE
* 微信xml消息处理流程逻辑类
* @author pamchen-1
public class WechatProcess {
* 解析处理xml、获取智能回复结果(通过图灵机器人api接口)
* @param xml 接收到的微信数据
* @return 最终的解析结果(xml格式数据)
public String processWechatMag(String xml){
/** 解析xml数据 */
ReceiveXmlEntity xmlEntity = new ReceiveXmlProcess().getMsgEntity(xml);
/** 以文本消息为例,调用图灵机器人api接口,获取回复内容 */
String result = &&;
if(&text&.endsWith(xmlEntity.getMsgType())){
result = new TulingApiProcess().getTulingResult(xmlEntity.getContent());
/** 此时,如果用户输入的是“你好”,在经过上面的过程之后,result为“你也好”类似的内容
因为最终回复给微信的也是xml格式的数据,所有需要将其封装为文本类型返回消息
result = new FormatXmlProcess().formatXmlAnswer(xmlEntity.getFromUserName(), xmlEntity.getToUserName(), result);
2.2 解析接收到的xml数据,此处有两个类,ReceiveXmlEntity.java和ReceiveXmlProcess.java,通过反射的机制动态调用实体类中的set方法,可以避免很多重复的判断,提高代码效率,代码如下:
package demo.
* 接收到的微信xml实体类
* @author pamchen-1
public class ReceiveXmlEntity {
private String ToUserName=&&;
private String FromUserName=&&;
private String CreateTime=&&;
private String MsgType=&&;
private String MsgId=&&;
private String Event=&&;
private String EventKey=&&;
private String Ticket=&&;
private String Latitude=&&;
private String Longitude=&&;
private String Precision=&&;
private String PicUrl=&&;
private String MediaId=&&;
private String Title=&&;
private String Description=&&;
private String Url=&&;
private String Location_X=&&;
private String Location_Y=&&;
private String Scale=&&;
private String Label=&&;
private String Content=&&;
private String Format=&&;
private String Recognition=&&;
public String getRecognition() {
public void setRecognition(String recognition) {
Recognition =
public String getFormat() {
public void setFormat(String format) {
public String getContent() {
public void setContent(String content) {
public String getLocation_X() {
return Location_X;
public void setLocation_X(String locationX) {
Location_X = locationX;
public String getLocation_Y() {
return Location_Y;
public void setLocation_Y(String locationY) {
Location_Y = locationY;
public String getScale() {
public void setScale(String scale) {
public String getLabel() {
public void setLabel(String label) {
public String getTitle() {
public void setTitle(String title) {
public String getDescription() {
public void setDescription(String description) {
Description =
public String getUrl() {
public void setUrl(String url) {
public String getPicUrl() {
return PicU
public void setPicUrl(String picUrl) {
PicUrl = picU
public String getMediaId() {
return MediaId;
public void setMediaId(String mediaId) {
MediaId = mediaId;
public String getEventKey() {
return EventK
public void setEventKey(String eventKey) {
EventKey = eventK
public String getTicket() {
public void setTicket(String ticket) {
public String getLatitude() {
public void setLatitude(String latitude) {
Latitude =
public String getLongitude() {
public void setLongitude(String longitude) {
Longitude =
public String getPrecision() {
public void setPrecision(String precision) {
Precision =
public String getEvent() {
public void setEvent(String event) {
public String getMsgId() {
return MsgId;
public void setMsgId(String msgId) {
MsgId = msgId;
public String getToUserName() {
return ToUserN
public void setToUserName(String toUserName) {
ToUserName = toUserN
public String getFromUserName() {
return FromUserN
public void setFromUserName(String fromUserName) {
FromUserName = fromUserN
public String getCreateTime() {
return CreateT
public void setCreateTime(String createTime) {
CreateTime = createT
public String getMsgType() {
return MsgT
public void setMsgType(String msgType) {
MsgType = msgT
package demo.
import java.lang.reflect.F
import java.lang.reflect.M
import java.util.I
import org.dom4j.D
import org.dom4j.DocumentH
import org.dom4j.E
import demo.entity.ReceiveXmlE
* 解析接收到的微信xml,返回消息对象
* @author pamchen-1
public class ReceiveXmlProcess {
* 解析微信xml消息
* @param strXml
public ReceiveXmlEntity getMsgEntity(String strXml){
ReceiveXmlEntity msg =
if (strXml.length() &= 0 || strXml == null)
// 将字符串转化为XML文档对象
Document document = DocumentHelper.parseText(strXml);
// 获得文档的根节点
Element root = document.getRootElement();
// 遍历根节点下所有子节点
Iterator&?& iter = root.elementIterator();
// 遍历所有结点
msg = new ReceiveXmlEntity();
//利用反射机制,调用set方法
//获取该实体的元类型
Class&?& c = Class.forName(&demo.entity.ReceiveXmlEntity&);
msg = (ReceiveXmlEntity)c.newInstance();//创建这个实体的对象
while(iter.hasNext()){
Element ele = (Element)iter.next();
//获取set方法中的参数字段(实体类的属性)
Field field = c.getDeclaredField(ele.getName());
//获取set方法,field.getType())获取它的参数数据类型
Method method = c.getDeclaredMethod(&set&+ele.getName(), field.getType());
//调用set方法
method.invoke(msg, ele.getText());
} catch (Exception e) {
// TODO: handle exception
System.out.println(&xml 格式异常: &+ strXml);
e.printStackTrace();
调用图灵机器人api接口,获取智能回复内容:
package demo.
import java.io.IOE
import java.io.UnsupportedEncodingE
import java.net.URLE
import org.apache.http.HttpR
import org.apache.http.client.ClientProtocolE
import org.apache.http.client.methods.HttpG
import org.apache.http.impl.client.HttpC
import org.apache.http.util.EntityU
import org.json.JSONE
import org.json.JSONO
* 调用图灵机器人api接口,获取智能回复内容
* @author pamchen-1
public class TulingApiProcess {
* 调用图灵机器人api接口,获取智能回复内容,解析获取自己所需结果
* @param content
public String getTulingResult(String content){
/** 此处为图灵api接口,参数key需要自己去注册申请,先以代替 */
String apiUrl = &/openapi/api?key=&info=&;
String param = &&;
param = apiUrl+URLEncoder.encode(content,&utf-8&);
} catch (UnsupportedEncodingException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} //将参数转为url编码
/** 发送httpget请求 */
HttpGet request = new HttpGet(param);
String result = &&;
HttpResponse response = HttpClients.createDefault().execute(request);
if(response.getStatusLine().getStatusCode()==200){
result = EntityUtils.toString(response.getEntity());
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
/** 请求失败处理 */
if(null==result){
return &对不起,你说的话真是太高深了……&;
JSONObject json = new JSONObject(result);
//以code=100000为例,参考图灵机器人api文档
if(100000==json.getInt(&code&)){
result = json.getString(&text&);
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
2.4 将结果封装为微信规定的xml格式,并返回给1.1中创建的servlet接口。
package demo.
import java.util.D
* 封装最终的xml格式结果
* @author pamchen-1
public class FormatXmlProcess {
* 封装文字类的返回消息
* @param to
* @param from
* @param content
public String formatXmlAnswer(String to, String from, String content) {
StringBuffer sb = new StringBuffer();
Date date = new Date();
sb.append(&&xml&&ToUserName&&![CDATA[&);
sb.append(to);
sb.append(&]]&&/ToUserName&&FromUserName&&![CDATA[&);
sb.append(from);
sb.append(&]]&&/FromUserName&&CreateTime&&);
sb.append(date.getTime());
sb.append(&&/CreateTime&&MsgType&&![CDATA[text]]&&/MsgType&&Content&&![CDATA[&);
sb.append(content);
sb.append(&]]&&/Content&&FuncFlag&0&/FuncFlag&&/xml&&);
return sb.toString();
总结,以上便是微信公众平台开发的全部流程,整体来看并不复杂,要非常感谢图灵机器人提供的api接口,帮我们解决了智能回复这一高难度问题。其他类型的消息处理与示例中类似,有兴趣的开发者可以联系我进行交流学习,希望本文对大家有所帮助。
本问中的代码示例已经上传到了csdn的个人资源中,有需要的可以去下载:http://download.csdn.net/detail/pamchen/7793979
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:324044次
积分:2920
积分:2920
排名:第8383名
原创:52篇
转载:37篇
评论:180条
(5)(1)(3)(2)(4)(1)(1)(3)(1)(22)(2)(10)(11)(4)(9)(8)(3)

我要回帖

更多关于 textview富文本 的文章

 

随机推荐