论如何使用Python进行微信公众号的开发
2016-07-21 13:58
716 查看
说到微信公众号的开发,不外乎两种,一种是使用官方提供的接口开发,一种就是通过模拟登录来实现接口(这种方式有被封的风险,这里不论述)
Python发展至今,已经有多种完善的服务器框架可以使用,Django,Tornado,Flask等,可以使用这些框架打造一个服务器,在其之上实现微信公众号的功能就好。
至于怎么申请微信公众号、设置开发模式和指定开发token的url这类问题,这里也不一一论述,毕竟这在网上一搜就能找到了。
在我看来,微信公众号的开发在接口上说来也只有两种,一种就是验证,另一种就是回应,可以根据请求方法来区分
第一种,验证:简单点说来,就是验证请求的内容是否正确,这一点是个大前提,也就是说这一点决定了在公众号上设置URL和token时是否能通过。关于这一点,就是关于微信公众好的验证算法了,简单点说来就是,根据设定的token值、请求的timestamp值、请求的nonce值进行排序后组成字符串,再经过哈希的sha1加密后和请求的signature相比较。如下实例:
第二种,回应:这里的功能就需要根据自己需求了,你可以实现一些自动回复的功能或是一些有趣的功能,这里无非就是对基础接口的运用,根据指定的格式来回应,来来去去也就是文本、图像、声音、事件等等单一或集合的形式,这里的接口众多(官方都有详细的介绍,什么类型的请求有什么样的字段信息,回应什么类型的信息使用什么格式等都有很详细的介绍),就不一一列举,只举个实例来形容一下(如下实例是发送位置返回经纬度和位置信息):
微信公众号开发不难,按照官方的接口来开发,更是不是什么技术点,看起来就像是格式的组装以及HTTP请求而已,真正难的是你的创意,实现什么功能,在你没什么好创意时,而又想尝试一下微信公众号的开发,我建议先使用官方的接口来尝试一下,之后可以使用一些现成的接口(例如google提供的API,百度提供的API等等)来为公众号添加一些功能,例如百度的导航,这些都是可以实现的,只要会使用这类API就可以,使用接口不难,难的都让实现接口的人做好了。
另外,例如使用Django开发出来服务器运行在本机上是无法使用的,因为默认是无法出外网的,需要一些手段才可以,这里不作介绍。推荐使用SAE、BAE这类,可以把代码放在上面运行得到一个链接,关键有免费的额度,至于怎么使用,可以找搜一下,这不是什么秘密。
Python发展至今,已经有多种完善的服务器框架可以使用,Django,Tornado,Flask等,可以使用这些框架打造一个服务器,在其之上实现微信公众号的功能就好。
至于怎么申请微信公众号、设置开发模式和指定开发token的url这类问题,这里也不一一论述,毕竟这在网上一搜就能找到了。
在我看来,微信公众号的开发在接口上说来也只有两种,一种就是验证,另一种就是回应,可以根据请求方法来区分
@csrf_exempt def handleWechatRequest(request): if request.method == "GET": # createMenu() response = HttpResponse(checkSignature(request),content_type="text/plain") return response elif request.method == "POST": response = HttpResponse(responseMsg(request),content_type="application/xml") return response else: response = None return response
第一种,验证:简单点说来,就是验证请求的内容是否正确,这一点是个大前提,也就是说这一点决定了在公众号上设置URL和token时是否能通过。关于这一点,就是关于微信公众好的验证算法了,简单点说来就是,根据设定的token值、请求的timestamp值、请求的nonce值进行排序后组成字符串,再经过哈希的sha1加密后和请求的signature相比较。如下实例:
def checkSignature(request): signature = request.GET.get("signature", None) timestamp = request.GET.get("timestamp", None) nonce = request.GET.get("nonce", None) echostr = request.GET.get("echostr", None) token = Wechat_Token tmpList = [token, timestamp, nonce] tmpList.sort() tmpstr = "%s%s%s" % tuple(tmpList) tmpstr = hashlib.sha1(tmpstr).hexdigest() if tmpstr == signature: return echostr else: return None
第二种,回应:这里的功能就需要根据自己需求了,你可以实现一些自动回复的功能或是一些有趣的功能,这里无非就是对基础接口的运用,根据指定的格式来回应,来来去去也就是文本、图像、声音、事件等等单一或集合的形式,这里的接口众多(官方都有详细的介绍,什么类型的请求有什么样的字段信息,回应什么类型的信息使用什么格式等都有很详细的介绍),就不一一列举,只举个实例来形容一下(如下实例是发送位置返回经纬度和位置信息):
def responseMsg(request): rawData = smart_str(request.body) xml = ET.fromstring(rawData) msg = paraseMsgXml(xml) MsgType = msg.get("MsgType") if MsgType == "text": return textMsg(msg) elif MsgType == "location": return locationMsg(msg)
def paraseMsgXml(rootElem): msg = {} if rootElem.tag == "xml": for child in rootElem: msg[child.tag] = smart_str(child.text) return msg
def locationMsg(msg): ToUserName = msg.get("ToUserName") FromUserName = msg.get("FromUserName") j = msg.get("Location_X") w = msg.get("Location_Y") Label = msg.get("Label") replyContent = "纬度:"+j+"\n经度:"+w+"\n位置信息:"+Label locationXML = """<xml> <ToUserName><![CDATA[%s]]></ToUserName> <FromUserName><![CDATA[%s]]></FromUserName> <CreateTime>%s</CreateTime> <MsgType><![CDATA[text]]></MsgType> <Content><![CDATA[%s]]></Content> </xml>""" %(FromUserName,ToUserName,str(int(time.time())),replyContent) return locationXML
微信公众号开发不难,按照官方的接口来开发,更是不是什么技术点,看起来就像是格式的组装以及HTTP请求而已,真正难的是你的创意,实现什么功能,在你没什么好创意时,而又想尝试一下微信公众号的开发,我建议先使用官方的接口来尝试一下,之后可以使用一些现成的接口(例如google提供的API,百度提供的API等等)来为公众号添加一些功能,例如百度的导航,这些都是可以实现的,只要会使用这类API就可以,使用接口不难,难的都让实现接口的人做好了。
另外,例如使用Django开发出来服务器运行在本机上是无法使用的,因为默认是无法出外网的,需要一些手段才可以,这里不作介绍。推荐使用SAE、BAE这类,可以把代码放在上面运行得到一个链接,关键有免费的额度,至于怎么使用,可以找搜一下,这不是什么秘密。
相关文章推荐
- Python动态类型的学习---引用的理解
- Python3写爬虫(四)多线程实现数据爬取
- 垃圾邮件过滤器 python简单实现
- 下载并遍历 names.txt 文件,输出长度最长的回文人名。
- install and upgrade scrapy
- Scrapy的架构介绍
- Centos6 编译安装Python
- 使用Python生成Excel格式的图片
- 让Python文件也可以当bat文件运行
- [Python]推算数独
- Python中zip()函数用法举例
- Python中map()函数浅析
- Python将excel导入到mysql中
- 如何做到日消息量100万的微信公众号?
- Python在CAM软件Genesis2000中的应用
- 使用Shiboken为C++和Qt库创建Python绑定
- FREEBASIC 编译可被python调用的dll函数示例