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))
View Code

      4)微信公众号申请页面点击:提交

2)代码中已经有图灵机器人应用的代码。

3)功能远远不止这个,只要微信后台服务器发出的请求,能在5s内得到响应即可。

4)功能优化中...

参考学习链接:

http://www.liaoxuefeng.com/article/0013900476318564121d01facf844cba508396f95d9bb82000

https://www.hikyle.me/archives/259/

posted @ 2015-10-29 21:15  清水汪汪  阅读(179)  评论(0)    收藏  举报