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语言开发微信公众平台的第一部分——环境搭建与开发接 ...
随机推荐
- AtCoder Regular Contest 089
这场一边吃饭一边打,确实还是很菜的 C - Traveling Time limit : 2sec / Memory limit : 256MB Score : 300 points Problem ...
- Educational Codeforces Round 20 D. Magazine Ad
The main city magazine offers its readers an opportunity to publish their ads. The format of the ad ...
- OA笔记
一:Asp.Net MVC请求处理原理(Asp.Net mvc 是怎样进入请求管道的.)请求-->IIS--->ISAPIRuntime-->HttpWorkRequest--> ...
- manacher-模板-hd-3068
/* 题意:给一个字符串,求该串的最长回文串的长度: 算法:Manacher O(n)复杂度,求以每一个字符为中心的最长汇文串的长度: 这个算法把奇数和偶数的情况和在一起来考虑了: */ #inclu ...
- 周赛Problem 1025: Hkhv love spent money(RMQ)
Problem 1025: Hkhv love spent money Time Limits: 1000 MS Memory Limits: 65536 KB 64-bit interger ...
- BZOJ1150 [CTSC2007]数据备份Backup 【堆 + 链表】
题目 你在一家 IT 公司为大型写字楼或办公楼(offices)的计算机数据做备份.然而数据备份的工作是枯燥乏味 的,因此你想设计一个系统让不同的办公楼彼此之间互相备份,而你则坐在家中尽享计算机游戏的 ...
- [转] Makefile 基础 (1) —— Makefile 介绍
该篇文章为转载,是对原作者系列文章的总汇加上标注. 支持原创,请移步陈浩大神博客:(最原始版本) http://blog.csdn.net/haoel/article/details/2886 我转自 ...
- fullpage在vue单页面当中使用会出现的问题以及解决办法
在 vue 单页面当中发现fullpage会报错,报错信息大概意思为,fullpage不允许初始化多次. 解决办法,在使用fullpage的组件跳转路由进入销毁组件之前的生命周期的时候对fullpag ...
- 【NOIP2016】愤怒的小鸟(状压DP)
题意: Kiana最近沉迷于一款神奇的游戏无法自拔. 简单来说,这款游戏是在一个平面上进行的. 有一架弹弓位于(0,0)处,每次Kiana可以用它向第一象限发射一只红色的小鸟,小鸟们的飞行轨迹均为形如 ...
- css3 容器内容垂直居中
.item{ top: 50%; position: absolute; transform: translateY(-50%); /* 这里我们使用css3的transform来达到类似效果 */ ...