微信公众帐号验证

前段时间申请了一个微信公共帐号,想要在服务器端编程实现自动回复,同时也接触一下关于django编程,以继续发扬我在python的web道路。终于到现在,网站空间,我才有时间​将这个过程记录下来,具体如下:

首先明确目标——成为微信公众号第三方开发者,通过消息API认证。

使用的语言和框架:python的django

主机的平台:sae云平台

微信平台:微信公众帐号

当然,先要阅读微信的消息接口,其是通过微信服务器获取用户的回复,用get请求发送到我的服务器,然后我给予回应。所以只需要简单的编程就可以完成验证了。

步骤1:申请微信公众帐号,需要填写若干资料,传送门,填写好后,则可以阅读其开放API文档,里面有提到如何验证:发送一个echochar,原样返回就可以了。但是其中要验证该get请求是否来自微信服务器,则需要详细核对生成的hash值。文档里面有范例php文件,可以直接下载研读。

步骤2:在sae上搭建应用,先有帐号,然后新建一个app,选择python或者php,如果选择了php可以使用微信提供的代码,google一下也会有很详细的教程。如果选用python,也可以参考本文或者文章后面的链接。

在sae上搭建应用,需要在本地新建一个版本库,所以要在sae管理平台上先初始化第一个版本,这个版本什么代码都没有,只有两个配置文件config.yaml,index.wsgi,用svncheckout到本地的工作目录。就可以看到有一个名为"1"的文件夹,也就是第一个版本。然后我们可以在该文件夹内构建django应用了,如果你安装好了django,那么可以到目录"1"下,然后在命令行运行

django-admin.pystartprojectmysite

mysite是你的应用的名字,运行命令时要予以更换。

然后就创建了本地工作目录,可是这个适合创建的目录处于1下面,我们最终要达到下面这个样子:tree命令察看目录树

所以要将mysite下的文件或目录全部移动到1之下,因为mysite/暂时未纳入版本控制,所以可以手动拷贝后用svn将文件或目录纳入svn目录。故而形成manage.py在1之下,其他django文件在mysite(这里是scnuwriter)之下。

步骤3:在本地架设好django应用,然后用svncommit命令上传到sae服务器。这里需要参考sae的文档,关于搭建python开发环境的操作。有疑问的可以察看这里。总之就是要配置好各种文件,上传代码就行了。

步骤4:编写好微信验证的代码,代码如下view.py文件:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

#-*-coding:utf-8-*-

fromdjango.httpimportHttpResponse

fromdjango.templateimportRequestContext,Template

fromdjango.views.decorators.csrfimportcsrf_exempt

fromdjango.utils.encodingimportsmart_str,smart_unicode

importhashlib

TOKEN="mytoken"

#toverifytheAPIserver

defcheckSignature(request):

globalTOKEN

signature=request.GET.get("signature",None)

timestamp=request.GET.get("timestamp",None)

nonce=request.GET.get("nonce",None)

echoStr=request.GET.get("echostr",None)

token=TOKEN

tmpList=[token,timestamp,nonce]

tmpList.sort()

tmpstr="%s%s%s"%tuple(tmpList)

tmpstr=hashlib.sha1(tmpstr).hexdigest()

iftmpstr==signature:

returnHttpResponse(echoStr)

else:

returnNone

当然如果不怕安全性的损失,可以不验证这是微信服务器发来的get请求,而直接在第17行后面returnHttpResponse(echoStr)就可以了。从微信的示例php文件中可以看出来,它将验证封装在一个专门的函数中供调用。但其实验证的内容与返回的东西无关。很多教程里面写的是returnechoStr,我搞了半天才发现不行,返回的不是一个http响应,故而需要对echoStr做一个HttpResponse的包装。

另外需要在url设置里面进行设置,美国空间,然后在微信发送验证时填写url的时候填写对应的url。例如,在django工作目录下面修改url.py如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

fromdjango.conf.urlsimportpatterns,include,url

#Uncommentthenexttwolinestoenabletheadmin:

#fromdjango.contribimportadmin

#admin.autodiscover()

fromscnuwriter.viewsimport*

urlpatterns=patterns(”,

#Examples:

#url(r’^$’,’scnuwriter.views.home’,name=’home’),

#url(r’^scnuwriter/’,include(‘scnuwriter.foo.urls’)),

url(r’^$’,checkSignature),

)

第12行表示,在url中什么也不加,如这样就可以访问checkSignature了。每次在本地目录做了更改,都需要在终端中用svn命令commit一下,这个就不用多说了。

步骤4:验证

验证的原理很简单,就是确认这个东西是微信服务器发来的,而且把这个东西原样返回就行了。登陆微信公众平台,填写url和token(在本例子中就是程序中的TOKEN,也就是"mytoken"),美国服务器,按验证就可以了。

没有朋友的人生是孤独的,不完整的,可是,因为生活的忙碌,

微信公众帐号验证

相关文章:

你感兴趣的文章:

标签云: