1. 微信开发文档地址: https://mp.weixin.qq.com/wiki/home/index.html
申请AppID 这些就不多说了,成为微信开发者之后使用一下网址就可以完成对接微信服务的测试:
我们只需要将我们写的程序运行起来之后将我们的 api接口 的地址输入到下面,点击测试如果出现配置成功则OK:
微信测试平台登录地址: http://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login, 登陆之后出现如下界面:
2. 服务器配置, 有一台自己的服务器,不需要域名也可以;
3.代码实现:
# _*_ coding:utf-8 _*_
import hashlib
import time
import xmltodict
from flask import Flask, request, make_response
app = Flask(__name__)
@app.route("/")
def hello():
return "Hello World!"
@app.route('/wechat', methods=['GET', 'POST'])
def wechat():
WECHAT_TOKEN = 'pythontest' # 这个token要和我们测试的token一致
if request.method == "GET":
"""对接微信服务器"""
signature = request.args.get('signature')
timestamp = request.args.get('timestamp')
nonce = request.args.get('nonce')
echostr = request.args.get('echostr')
tmp = [WECHAT_TOKEN, timestamp, nonce]
tmp.sort()
tmp = "".join(tmp).encode('utf-8')
tmp = hashlib.sha1(tmp).hexdigest()
if tmp == signature:
return make_response(echostr)
else:
return "error"
if __name__ == '__main__':
app.run(debug=True, host='你自己的服务器ip', port=80)
4. 完成接收消息和被动回复消息:
我们需要对收到的请求进行验证是否来自微信服务器,所以在处理请求前都要按照验证算法进行检验::
# _*_ coding:utf-8 _*_
import hashlib
import time
import xmltodict
from flask import Flask, request, make_response
app = Flask(__name__)
WECHAT_TOKEN = 'pythontest'
@app.route("/")
def hello():
return "Hello World!"
@app.before_request
def check_source():
"""进行验证是否来自微信服务器"""
signature = request.args.get('signature')
timestamp = request.args.get('timestamp')
nonce = request.args.get('nonce')
# echostr = request.args.get('echostr')
tmp = [WECHAT_TOKEN, timestamp, nonce]
tmp.sort()
tmp = "".join(tmp).encode('utf-8')
tmp = hashlib.sha1(tmp).hexdigest()
if tmp != signature:
return 'error'
@app.route('/wechat', methods=['GET', 'POST'])
def wechat():
if request.method == "GET":
"""对接微信服务器"""
echostr = request.args.get('echostr')
return make_response(echostr)
if request.method == "POST":
xml_data = request.data
dict_data = xmltodict.parse(xml_data)
msg_type = dict_data["xml"]["MsgType"]
"""
<xml>
<ToUserName><![CDATA[gh_866835093fea]]></ToUserName>
<FromUserName><![CDATA[ogdotwSc_MmEEsJs9-ABZ1QL_4r4]]></FromUserName>
<CreateTime>1478317060</CreateTime>
<MsgType><![CDATA[text]]></MsgType>
<Content><![CDATA[你好]]></Content>
<MsgId>6349323426230210995</MsgId>
</xml>
"""
if msg_type == "text":
content = dict_data["xml"]["Content"]
resp_data = {
"xml": {
"ToUserName": dict_data["xml"]["FromUserName"],
"FromUserName": dict_data["xml"]["ToUserName"],
"CreateTime": int(time.time()),
"MsgType": "text",
"Content": "文本消息",
}
}
data = xmltodict.unparse(resp_data, pretty=True)
return make_response(data)
else:
resp_data = {
"xm1": {
"ToUserName": dict_data["xml"]["FromUserName"],
"FromUserName": dict_data["xml"]["ToUserName"],
"CreateTime": int(time.time()),
"MsgType": "text",
"Content": "",
}
}
data = xmltodict.unparse(resp_data, pretty=True)
return make_response(data)
if __name__ == '__main__':
app.run(debug=True, host='', port=80)
未完>>>