java推送微信消息换行_微信公众号开发被动回复用户消息,回复内容Content使用了\n换行符还是没有换行...
使用语言和框架:本人后端开发使用的Python的DRF(Django REST framework)框架
需求:在微信公众号开发时,需要实现自动回复,即被关注回复、收到消息回复、关键词回复
发现问题:按照微信公众号的开发文档,在写完逻辑代码后,测试时发现:Content回复的消息内容,使用"\n",预期效果应该是文字内容有换行效果,微信的文档也说明了换行可以使用"\n"换行符,但是实际测试的效果是没有换行。这个问题纠结了一天,最后发现是我响应给微信服务器的数据类型错误了。
问题分析过程:微信公众号文档里的原话(当用户发送消息给公众号时(或某些特定的用户操作引发的事件推送时),会产生一个POST请求,开发者可以在响应包(Get)中返回特定XML结构,来对该消息进行响应(现支持回复文本、图片、图文、语音、视频、音乐)。严格来说,发送被动响应消息其实并不是一种接口,而是对微信服务器发过来消息的一次回复。)
文档已经说得很明白,在接收到微信的Post请求后,处理完具体的业务逻辑后,要对微信服务器作响应回复,如果需要特定的回复则返回特定XML结构,如果不作任何处理推荐方式直接回复success
根本原因:因为使用的是DRF框架,自然而然的在响应的时候使用了rest_framework.response.Response,但其实响应给微信服务器的是一个响应体数据,而我使用Response响应给微信服务器的是响应对象
解决方案:使用django.http.HttpResponse响应返回数据
代码演示:
#使用的是类视图APIView
defpost(self, request):"""接收微信Post数据,并处理"""data= request.body.decode("utf-8")
doc= xmltodict.parse(data) #解析xml数据
to_user = doc["xml"]["ToUserName"] #开发者微信号
from_user = doc["xml"]["FromUserName"] #发送方帐号(一个OpenID)
if doc["xml"]["MsgType"] == "text": #文本消息处理
dict ={"ToUserName" =from_user"FromUserName" =to_user"CreateTime" =int(time.time())"Content" = "欢迎关注公众号!\n新人好礼等你来拿"}#返回回复文本消息特定XML结构
xml_form = """
{CreateTime}
"""
#根据判断是否返回回复文本消息还是不作任何处理
if....:#回复文本消息
return HttpResponse(xml_form.format(**dict))else:#不作任何处理
return HttpResponse("success")
django.http.HttpResponse和rest_framework.response.Response的区别:
1、HttpResponse
可以使用django.http.HttpResponse来构造响应对象,HttpResponse对象由开发人员创建,适用于返回图片,视频,音频等二进制文件
格式:HttpResponse(content=响应体, content_type=响应体数据MIME类型, status=状态码)
MIME(Multipurpose Internet Mail Extensions)多用途互联网邮件扩展类型:
text/html html
text/plain 普通文本
application/json json
响应头设置: 可以直接将HttpResponse对象当做字典进行响应头键值对的设置
response = HttpResponse('响应内容')
response['Itcast'] = 'Python' # 自定义响应头Itcast, 值为Python
2、Response
REST framework提供的一个响应类Response,使用该类构造响应对象时,响应的具体数据内容会被转换(render渲染)成符合前端需求的类型。
格式:Response(data, status=None, headers=None, content_type=None)
参数说明:
data: 字典类型,为响应准备的序列化处理后的数据;
status: 状态码,默认200;
headers: 用于存放响应头信息的字典;
content_type: 响应数据的Content-Type,通常此参数无需传递,REST framework会根据前端所需类型数据来设置该参数。
补充:JsonResponse对象是HttpResponse 的常用子类
帮助我们将数据转换为json字符串,再返回给客户端,会设置响应头 Content-Type 为 application/json
from django.http import JsonResponse
def resp(request):
return JsonResponse({'city': 'beijing', 'subject': 'python'})
当包含的内容中包含中文时,会返回该中文对应的编码,例如:
def resp(request):
# 最终看到的效果是: {"name": "\u5f20\u4e09"}
response = JsonResponse({"name":"张三"})
return response
解决:JsonResponse(data, json_dumps_params={'ensure_ascii':False})
JsonResponse可以接收非字典数据,需要指定 safe=False
java推送微信消息换行_微信公众号开发被动回复用户消息,回复内容Content使用了\n换行符还是没有换行...相关推荐
- 为何公众号推送会延迟发送_关于公众号推送延迟更新的说明
关于公众号推送延迟更新的说明 亲爱的朋友: 我们是红星公众号自创立以来,得到了很多朋友们的支持,经常与我们互动,在这里非常感谢各位! 最近公众号更新出现了"不定时"的情况,相信您也 ...
- 使用Python进行微信公众号开发(三)回复消息
写在前面 <使用Python进行微信公众号开发>系列文章将与大家分享如何使用Python一步步搭建微信公众号后台服务器. 效果体验 扫码"是雯子吖"公众号进行体验 配置 ...
- springboot推送告警消息至企业微信
0.前言 需求:实现告警信息推送到企业微信群 1).机器人推送消息 2).企业微信支持 自建应用 推送消息 1.代码截图 2.pom <?xml version="1.0" ...
- java推送叮叮消息,叮叮叮!请及时签收入门学习Java导航路线
原标题:叮叮叮!请及时签收入门学习Java导航路线 引言 想必有很多像我一样刚学习Java会有很迷茫的人吧,今天给小伙伴们整理了一些资料,有需要的小伙伴们可以私信我,顺便推荐一个免费学习的Qqun,里 ...
- 4 微信公众号开发 被动回复消息 回复没有反应怎么办
接收到用户的消息,我们需要做出反馈. 文档地址:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140543 官方返回的数 ...
- 公众号开发(4) —— 使用Senparc.Weixin SDK进行模板消息推送
微信公众号支持推送模板消息给特定用户,只要获取到公众号用户的openid向微信提供的接口发送post请求即可向特定用户推送模板消息,以下记录简单记录使用Senparc.Weixin SDK进行模板消息 ...
- java上传图文消息_微信公众号开发之上传图文消息素材(十二)
群发消息太重要了,公众号管理员需要定期通过公众号群发一些消息,用户通过推送的消息可以定期了解公众号的最新信息. 群发图文消息的过程如下: 首先,预先将图文消息中需要用到的图片,使用上传图文消息内图片接 ...
- 微信公众号开发之上传图文消息素材(十二)
群发消息太重要了,公众号管理员需要定期通过公众号群发一些消息,用户通过推送的消息可以定期了解公众号的最新信息. 群发图文消息的过程如下: 首先,预先将图文消息中需要用到的图片,使用上传图文消息内图片接 ...
- 微信公众号开发--图文消息发送不显示图片的问题
使用微信公众号接口实现图文消息推送,遇到问题,不显示图片,且content内容中有英文双引号也不行 1.微信不允许有外链的图片,所以会自动过滤 2."双引号格式问题. 前端把双引号传给后端后 ...
最新文章
- JavaScript高级程序设计(第3版)第六章读书笔记
- Java将mysql输出csv,如何从Java中的Access数据库导出表并将其保存到.csv
- LeetCode刷题-7
- Android开发工具之Android Studio--调用系统隐藏方法之操作aidl文件步骤
- PyCharm入门教程——在编辑器中选择文本
- 1.8 编程基础之多维数组 11 图像旋转 4分 python
- linux mysql dump命令_linux下mysql命令
- prefetch 和preload_preload_prefetch
- 【收藏】ASP.NET英文技术文章推荐[11/4 - 11/11]
- [LeetCode]Count and Say
- C4认证Java基础Excel练习题
- Xcode MacOS与clang c++版本关系
- 樊登读书会用事实说话读后感_樊登读书《用事实说话》读书笔记
- c++01(数据类型 运算符 选择结构)
- 掘金 AMA:听闲鱼客户端架构师--邬吉风聊 Flutter 和移动端开发那些事
- 开尔文夹接线图解_什么是开尔文四线检测|Kelvin Four-terminal sensing|开尔文|Kelvin 4|开尔文四线电阻检测-产品知识-资讯-深圳华壬电子...
- 迷宫问题寻找最短路径(BFS)
- 论文翻译-Densely Connected Convolutional Networks
- S5_笔记(树,二叉树)
- 高合汽车是汽车界的“苹果”,还是鳄鱼皮外壳的8848?
热门文章
- 谈谈高并发秒拍系统架构设计
- html导出excel表头多了一行空行,Excel中批量插入空行的技巧,会用2个算你厉害
- 360加固助手实现多渠道打包终极讲解
- X86指令编码内幕 --- 指令 Opcode 码
- Box-Muller 与 ziggurat
- python 识别excel 公式_python – pandas读取excel值而不是公式
- JAVA导出excel表格标题加粗,【excle特定文字加粗】java如何设置excel单元格中部分文字加粗 例如:标题(加粗): 内容(不加粗)...
- MATLAB Appdesigner实用技巧(三):在App中实现示波器效果/动态波形效果
- div 设置a4大小_设计适用于打印的CSS样式
- sdut算法分析oj题目整合