笔者最近因要在微信公众号上开发项目,接触微信公众号的开发
主要是使用了 新浪云服务器+微信公众平台测试号来搭建项目
后台用Python语言使用Tornado框架
手机端页面使用bootstrap框架
数据库也是新浪云上的phpmyadmin。
下面简要记录微信开发的一些简单步骤,也是为了方便自己查看。大致会讲讲微信公众号的各接口以及要注意的细节。
首先呢,初学者在没有注册微信服务号(需要营业执照等等,个人注册比较难),或者使用的是订阅号(加收300元服务费才能有自定义菜单功能接口),建议先使用微信公众测试号。然后手机扫一下二维码就有了微信公众号开发必要的appID和appsecret了。
可以参考微信提供的公众平台开发文档点击打开链接。
接着需要填写你的域名URL,如果没有的话可以用新浪云平台免费注册一个。而Token则是自己取得一个后期与微信端和自己服务器端进行连接必要的验证信息。扫描二维码可以看到自己在测试号端有了一条记录,一长串由字母和数字组成的“微信号”在测试阶段很常用。
在页面下方的体验接口权限表中,打开其中的页面可以找到使用网页调试工具调试该接口字样,点击可进入调试接口。
如图:
1.接口类型选择“基础支持”,并填写注册测试号时获得的appID和appsecret。
点击“检查问题”,在下方得到的“返回结果中”,可以提取到"access_token"。讲到这里,后续的微信接口测试都可以参考接口文档的步骤进行尝试,其中的access_token就是这个,一般有效时间是7200秒,即两小时。
二、将自己的新浪云服务器与微信端进行对接
以下默认创建的新浪云应用是Python,使用的框架式tornado。(注明:新浪云说明只支持2.2版本的tornado,且tornado不太稳定)
1.服务器端与微信端连接验证:
如微信开发文档中写的:开发者提交URL和Token的时候,微信服务器将发送get请求到填写的URL上,get请求携带下面四个参数:signature,timestamp,nonce,echostr.
开发者获取这四个参数,并通过如下步骤验证,
1)将token,timestamp,nonce三个参数进行字典序排序。
2)将三个参数字符串拼接成一个字符串进行sha1加密。
3)开发者获得加密后的字符串,并与signature对比,标识该请求来源于微信。
若确认该get请求来着微信服务器,则返回echostr参数内容,成功成为微信开发者。
tornado框架下的index.wsgi文件中,使用默认匹配的路径为 (r"/", WeChatCheckHandler) 。
其中WeChatCheckHandler类实现代码如下:
# -*- coding: utf-8 -*-
import tornado.wsgi
import sae
import hashlib
def checkSignature(signature, timestamp, nonce):
token = 'Token'
args = [token, timestamp, nonce]
args.sort() #字典序
mysig = hashlib.sha1(''.join(args)).hexdigest() #sha1加密
return mysig == signature<span style="white-space:pre"> </span> #对比
class WeChatValidHandler(tornado.web.RequestHandler):
def get(self):
signature = self.get_argument('signature')
timestamp = self.get_argument('timestamp')
nonce = self.get_argument('nonce')
echostr = self.get_argument('echostr')
if checkSignature(signature, timestamp, nonce):
self.write(echostr) #返回echostr
else:
self.write('Valid Failed!')
开发文档中有php示例代码点击打开链接。
private function checkSignature() { $signature = $_GET["signature"]; $timestamp = $_GET["timestamp"]; $nonce = $_GET["nonce"]; $token = TOKEN; $tmpArr = array($token, $timestamp, $nonce); sort($tmpArr, SORT_STRING); $tmpStr = implode( $tmpArr ); $tmpStr = sha1( $tmpStr ); if( $tmpStr == $signature ){ return true; }else{ return false; } }
至此,微信认证成功,可进行项目的编码。