网上有不少微信公众号的开发教程,可是都是好几年前的了,并且不少都是抄袭其余人的,内容几乎如出一辙。真的无语了。只好本身总结一下开发的一些简单流程。web
一先去注册个微信公众号,这个就不详细说了,flask
二登陆后台,进入开发中的基本配置,配置下服务器后端
填写url和token,url是服务器的地址,token是本身定义的服务器
三登陆服务器开发微信
网上不少教程用的什么新浪sae啊,webpy都是好久以前的。如今不少东西都变了,因此我没有用,我用的阿里的服务器以及flask作后端。app
代码以下加密
# coding:utf-8
from hashlib import sha1 from flask import Flask, request token = 'xxxxxx' app = Flask(__name__) def get_update(token, timestamp, nonce): arguments = '' for k in sorted([token, timestamp, nonce]): arguments = arguments + str(k) m = sha1() m.update(arguments.encode('utf8')) return m.hexdigest() def check_signature(): signature = request.args.get('signature', '') timestamp = request.args.get('timestamp', '') nonce = request.args.get('nonce', '') check = get_update(token, timestamp, nonce) return True if check == signature else False def parse_xml(data): try: import xml.etree.cElementTree as ET except ImportError: import xml.etree.ElementTree as ET root = ET.fromstring(data) datas = '<xml>' for child in root: if child.tag == 'ToUserName': toUser = child.text datas += '<FromUserName>%s</FromUserName>' % toUser elif child.tag == 'FromUserName': fromUser = child.text datas += '<ToUserName>%s</ToUserName>' % fromUser else: datas += '<' + child.tag + '>' datas += child.text datas += '</' + child.tag + '>' datas += '</xml>' return datas @app.route('/weixin', methods=['GET', 'POST']) def weixinInterface(): if check_signature: if request.method == 'GET': echostr = request.args.get('echostr', '') return echostr elif request.method == 'POST': data = request.data msg = parse_xml(data) return msg else: return 'signature error' if __name__ == '__main__': app.run(host='0.0.0.0')
一开始的话微信会让你验证填写的url,验证方式是经过传入时间戳timestamp,随机数nonce,token事先约定好的,echostr随机字符串,以及签名signature,须要根据时间戳,随机数,token的值进行字典序排序,而后用sha1加密获得签名,检验签名是否一致,是的话返回随机字符串echostr。若是校验成功,就能够提交了,提交以后就能够启用服务器配置。url
上面的代码还包括了若是用户发送信息给公众号,返回该信息,固然只是很简单的解析xml以及构造xml。其余更复杂的功能须要查询微信的文档。spa