Django开发微信公众平台
处理微信发来的信息,实际上就是处理xml的过程。先写xml工具类
# -*- coding:utf-8 -*-
from xml.dom import minidom
from Web.model.WeiXin import * def get_attrvalue(node, attrname):
return node.getAttribute(attrname) if node else '' def get_nodevalue(node, index = 0):
return node.childNodes[index].nodeValue if node else '' def get_xmlnode(node,name):
return node.getElementsByTagName(name) if node else [] def xml_to_string(xml):
doc = minidom.parse(xml)
return doc.toxml('UTF-8') def get_xml_data(xml):
doc = minidom.parseString(xml)
root = doc.documentElement
ToUserName = get_nodevalue(get_xmlnode(root,'ToUserName')[0]).encode('utf-8','ignore')
FromUserName = get_nodevalue(get_xmlnode(root,'FromUserName')[0]).encode('utf-8','ignore')
CreateTime = get_nodevalue(get_xmlnode(root,'CreateTime')[0]).encode('utf-8','ignore')
MsgType = get_nodevalue(get_xmlnode(root,'MsgType')[0]).encode('utf-8','ignore')
Content = get_nodevalue(get_xmlnode(root,'Content')[0]).encode('utf-8','ignore')
MsgId = get_nodevalue(get_xmlnode(root,'MsgId')[0]).encode('utf-8','ignore')
return WeiXin(ToUserName=ToUserName,FromUserName=FromUserName,CreateTime=CreateTime,MsgType=MsgType,Content=Content,MsgId=MsgId) if __name__ =='__main__':
xml = '<xml><ToUserName><![CDATA[gh_d740805e3dda]]></ToUserName><FromUserName><![CDATA[otvK9uEl5TdgfKaDtBhSb6CM49Xs]]></FromUserName><CreateTime>1426579233</CreateTime><MsgType><![CDATA[text]]></MsgType><Content><![CDATA[哈哈]]></Content><MsgId>6127111151090981083</MsgId></xml>'
print get_xml_data(xml)
封装一个微信xml实体类:
__author__ = 'zan'
class WeiXin():
def __init__(self,ToUserName,FromUserName,CreateTime,MsgType,Content,MsgId):
self.ToUserName= ToUserName
self.FromUserName= FromUserName
self.CreateTime= CreateTime
self.MsgType= MsgType
self.Content= Content
self.MsgId= MsgId
def __repr__(self):
return 'ToUserName=%s,\n FromUserName=%s,\nCreateTime=%s,\n,MsgType=%s,\nContent=%s,\nMsgId=%s\n' %(self.ToUserName,self.FromUserName,self.CreateTime,self.MsgType,self.Content,self.MsgId)
最后解析xml,并返回xml
def weixin(requset):
print 'requset.body=========%s'%requset.body
if not requset.body.strip():
return HttpResponse('error')
weixinObj = get_xml_data(requset.body)
print '解析之前 %s'%weixinObj
toUserName = weixinObj.FromUserName;
fromUserName = weixinObj.ToUserName;
weixinObj.FromUserName = fromUserName;
weixinObj.ToUserName = toUserName;
print '解析之后 %s'%weixinObj
result = '<xml><ToUserName><![CDATA[%s]]></ToUserName><FromUserName><![CDATA[%s]]></FromUserName><CreateTime>%s</CreateTime><MsgType><![CDATA[%s]]></MsgType><Content><![CDATA[%s]]></Content><MsgId>%s</MsgId></xml>'%(weixinObj.ToUserName,weixinObj.FromUserName,weixinObj.CreateTime,weixinObj.MsgType,weixinObj.Content,weixinObj.MsgId)
return HttpResponse(result)
Django开发微信公众平台的更多相关文章
- django开发微信公众平台遇到的问题记录
在pythonanywhere.com上使用django开发微信公众平台应用,结果用户发送的信息,微信服务器一次也没有成功转发到pythonanywhere上来,但是用接口测试工具调试却发现是正常的, ...
- [c#]asp.net开发微信公众平台(1)数据库设计
开发微信公众平台之前,先去微信官方了解下大概的情况 这里:http://mp.weixin.qq.com/wiki/index.php :看了之后心里大致有数了,开始设计数据库,尽可能的考虑,未考虑到 ...
- [C#]asp.net开发微信公众平台----目录汇总-持续更新
1.[c#]asp.net微信公众平台开发(1)数据库设计 2.[c#]asp.net微信公众平台开发(2)多层架构框架搭建和入口实现 3.[c#]asp.net微信公众平台开发(3)微信消息封装及反 ...
- [c#]asp.net开发微信公众平台(8)微信9大高级接口,自定义菜单
前7篇把最基础的消息接收和回复全做完了, 也把高级接口的入口和分拆处理写好了空方法, 此篇接着介绍微信的9大高级接口, 并着重讲解其中的自定义菜单. 微信9大接口为: 1.语音识别接口 2.客服接 ...
- [c#]asp.net开发微信公众平台(7)前6篇的整体框架demo源码
这里给出的demo是具备整体框架的微信公众平台源码, 所谓demo就是拿过去就可以直接演示使用的东西, 当然不会具备非常详细的具体到业务层面.数据层面的东西, 每个人都可以在此基础上自由发挥, 只 ...
- [c#]asp.net开发微信公众平台(6)阶段总结、服务搭建、接入
经过前5篇,跟着一步步来的话,任何人都能搭建好一个能处理各种微信消息的框架了,总结一下最容易忽略的问题: 1.文本消息中可以使用换行符\n : 2.微信发来的消息中带的那个长整型的时间,我们完全 ...
- [c#]asp.net开发微信公众平台(5)微信图文消息
上篇已经成功响应了关注事件,也实现了文本消息的发送,这篇开始图文消息处理, 微信中最常用的消息类型就是图文消息了,因为它图文并茂,最能表达信息. 图文消息在微信中的接口定义如下: <xml> ...
- C#开发微信公众平台-就这么简单(附Demo)转载
C#开发微信公众平台-就这么简单(附Demo) 来源:https://www.cnblogs.com/xishuai/p/3625859.html#!comments 写在前面 阅读目录: 服务号和 ...
- 使用Java开发微信公众平台(二)——消息的接收与响应
上一篇文章(http://www.jerehedu.com/fenxiang/171807_for_detail.htm )中,我们学习了使用Java语言开发微信公众平台的第一部分——环境搭建与开发接 ...
随机推荐
- ubuntu检测到系统错误解决方法
解决方案: 1.打开终端,输入 sudo gedit /etc/default/apport 2.把里面的enabled=1改成enabled=0,保存
- ibatis 动态SQL
直接使用JDBC一个非常普遍的问题就是动态SQL.使用参数值.参数本身和数据列都是动态SQL,通常是非常困难的.典型的解决办法就是用上一堆的IF-ELSE条件语句和一连串的字符串连接.对于这个问题,I ...
- 性能测试之七--jdbc
jdbs用任意协议打开都行,具体脚本见下 在vuser_init里面 #include "Ptt_Mysql.h" vuser_init() { lr_load_dll (&quo ...
- JStorm源代码阅读——消息的确认机制
Acker //Acker相当于一个bolt,用于处理事件 public class Acker implements IBolt { private RotatingMap<Object, A ...
- [SDOI2010] 地精部落 (组合数学,动态规划)
题目链接 Solution 很巧妙的 DP. 可以看这里的题解. 比我自己讲要好的多. Code #include <bits/stdc++.h> using namespace std; ...
- Cannot open include file: 'initializer_list': No such file or directory
Cannot open include file: 'initializer_list': No such file or directory今天使用VS2012编译一个项目的时候,遇到了这个问题,上 ...
- bzoj3997[TJOI2015]组合数学(求最长反链的dp)
组合数学 给出一个网格图,其中某些格子有财宝,每次从左上角出发,只能向下或右走.问至少走多少次才能将财宝捡完.此对此问题变形,假设每个格子中有好多财宝,而每一次经过一个格子至多只能捡走一块财宝,至少走 ...
- LOJ#2303. 「NOI2017」蚯蚓排队
$n \leq 200000$的$1 \leq a_i \leq 6$的蚯蚓,有三种操作:让一只队头蚯蚓接在一只队尾蚯蚓后面:让一队蚯蚓从某个蚯蚓后面断成两队:问:给个字符串,问他的..算了你们直接看 ...
- 转 Django+Bootstrap练习--我的类博客系统开发
转自: http://blog.sina.com.cn/s/blog_7e050dc80102w312.html 本文记录了一个类博客网站从无到有的搭建过程,同时也是我入门django以及再次入门前端 ...
- TStringList的Find,IndexOf和Sort
procedure TForm1.Button1Click(Sender: TObject); var MyList: TStringList; begin MyList := TStringList ...