Python在Apache下开发微信公共平台应用
(1)申请微信公众号以配置:
1)https://mp.weixin.qq.com 有三种公众号,选择订阅号即可。
2)开发者中心-〉服务器配置(选择修改配置),其中:
URL填写,微信后台服务器将消息发送到的我们自己的服务器地址(例如:www.weixin.domainname.com)
Token填写一个字符串,用于微信后台服务器和我们自己的服务器之前传递消息的身份认证
EncodingAESKey 随机生成
加密模式,选择明文模式
先别着急点击确认,因为一旦点击了,微信后台服务器就会发请求到我们上面写的URL去认证。不然反馈给你的
肯定是“URL超时”、“Token认证失败”等信息
先配置点东西:
1)配置Apache >>> vi /etc/apache2/sites_enabled/000_default.conf 中添加一个虚拟主机配置:

说明:本人域名zhs.space, weixin.zhs.space是我的子域名,在域名管理中添加了一个A记录,启用了CGI编程,输入链接:
http://weixin.zhs.space 访问的是DocumentRoot目录, 默认访问的是index.py(在这里面写了认证信息check_signature)
AddHandler 中添加了支持执行.py脚本.
2)service apache2 restart
3)实现index.py
1 #!/usr/bin/python 2 # -*- coding: utf-8 -*- 3 4 import os 5 import sys 6 import cgitb 7 import urlparse 8 import time 9 import requests 10 import json 11 from wechat_sdk import WechatBasic 12 13 # 图灵机器人的 API KEY 14 # www.tuling123.com申请领取key 15 TURING_API_KEY = [替换成您的key] 16 17 # 微信公众平台 TOKEN 18 TOKEN = [替换为自己设置的微信开发者 TOKEN] 19 20 # 图灵机器人 21 def get_turing(message): 22 url = 'http://www.tuling123.com/openapi/api?key=' + TURING_API_KEY + '&info=' 23 req = requests.get(url + message) 24 #json通信解析{"code":xxx, "text":xxx} 25 return json.loads(req.content)["text"] 26 27 # 启用调试 28 cgitb.enable() 29 30 # 获取 POST 内容 31 body_text = sys.stdin.read() 32 33 # 获取 URL 参数 34 query_string = os.environ.get("QUERY_STRING") 35 36 # 不带参数直接访问,则跳转回主页 37 if query_string == '': 38 print 'Status: 301 Moved Permanently' 39 print 'Location: https://zhs.space' 40 print '' 41 sys.exit(1) 42 43 # 如果含参数,解析各个参数 CGI编程 44 print 'Content-Type: text/html' 45 print '' 46 47 arguments = urlparse.parse_qs(query_string) 48 49 signature = arguments['signature'][0] 50 timestamp = arguments['timestamp'][0] 51 nonce = arguments['nonce'][0] 52 53 # 校验时间戳。5 分钟以前的 timestamp 自动拒绝 54 current_timestamp = int(time.time()) 55 56 if (current_timestamp - int(timestamp)) > 300: 57 print 'Status: 403 Forbidden' 58 print '' 59 print 'Incorrect timestamp' 60 sys.exit(1) 61 62 # 实例化 Wechat 63 wechat = WechatBasic(token=TOKEN) 64 65 # 接口检测部分 66 try: 67 echostr = arguments['echostr'][0] 68 except: 69 echostr = None 70 71 if echostr != None: 72 if wechat.check_signature(signature=signature, timestamp=timestamp, nonce=nonce): 73 print echostr 74 sys.exit(0) 75 else: 76 print 'Signature Mismatch' 77 sys.exit(1) 78 79 # 对来自微信服务器的信息处理部分 80 if wechat.check_signature(signature=signature, timestamp=timestamp, nonce=nonce): 81 # 对 XML 数据进行解析 82 wechat.parse_data(body_text) 83 84 # 获得解析结果, message 为 WechatMessage 对象 (wechat_sdk.messages中定义) 85 message = wechat.get_message() 86 87 response = None 88 89 if message.type == 'text': 90 if message.content.lower() in ('hello', 'hi'): 91 response = wechat.response_text(u'Nice to meet you!'); 92 else: 93 response = wechat.response_text(get_turing(message.content))
4)微信公众号申请页面点击:提交
2)代码中已经有图灵机器人应用的代码。
3)功能远远不止这个,只要微信后台服务器发出的请求,能在5s内得到响应即可。
4)功能优化中...
参考学习链接:
http://www.liaoxuefeng.com/article/0013900476318564121d01facf844cba508396f95d9bb82000
https://www.hikyle.me/archives/259/

浙公网安备 33010602011771号