您的位置:首页 > 编程语言 > Python开发

WEB服务器:利用python CGI实现简单的微信后台服务器

2017-07-23 11:11 537 查看
17年7月第4篇博客,最近在做微信公众号后台的开发,因为项目的原因,实验了很多的方法。下面就讲解其中的一种方法,这种方法在网上的博客上还没有看到过,使用的环境是windows Server2012 ,IIS管理器,使用上面讲过的CGI脚本模块在IIS上实现CGI

下面开始简单讲解我的脚本模块,主要实现的是微信后台服务器token的验证。实现后台的微信服务器的验证,其实其原理非常简单,微信腾讯官方服务器利用get方法请求我们地址链接,并在中附带signature 、timestamp 、nonce、echostr、token。腾讯官方文档给出的例子是通过哈希算法验证,然后在等于echostr的值,等于后再返回echostr。这是官方文档给出的说法,其实这种说法与实际并不符合,在实际中我们大可不必进行哈希算法验证,直接返回echostr就可以完成验证。下面是我验证过程中使用的CGI的脚本程序:

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

#处理模块
import cgi,cgitb
import hashlib
header="Content-type:text/html\n"
form=cgi.FieldStorage()
#获取数据

a=cgi.FieldStorage()

f=open("test.txt","w+")

f.writelines(a)
f.close()

signature = form.getvalue('signature')
timestamp =form.getvalue('timestamp')
nonce=form.getvalue('nonce')
echostr=form.getvalue('echostr')
token="nzmzdd123"

#创建F的实例化
try:

list = [token, timestamp, nonce]
list.sort()
sha1 = hashlib.sha1()
map(sha1.update, list)
hashcode = sha1.hexdigest()
if hashcode == signature:
print "%s%s%s"%(header,"\n",echostr)
else:
print header+""
except Exception, Argument:
print "%s%s%s"%(header,"\n",echostr)


因为代码程序很简单,我在这里简单的解释一下代码:

这里写代码片#获取数据

a=cgi.FieldStorage()

f=open("test.txt","w+")

f.writelines(a)
f.close()


这部分主要是,只要是为了在实际的测试过程中进行数据的存储,因为在做的过程中,我想知道微信后台带过来数据,这部分不是必要的吗大家可以去掉。

header="Content-type:text/html\n"
form=cgi.FieldStorage()


这部分分别是头文件和form的导入,在进行CGI数据发送的过程中,都需要在开始时添加头文件,这个在html中有讲解,主要是为了识别html文件。form参数主要是接受get传入的数据。

signature = form.getvalue('signature')
timestamp =form.getvalue('timestamp')
nonce=form.getvalue('nonce')
echostr=form.getvalue('echostr')
token="nzmzdd123"


获取所获值

list = [token, timestamp, nonce]
list.sort()
sha1 = hashlib.sha1()
map(sha1.update, list)
hashcode = sha1.hexdigest()


上述代码为生成哈希吗

`

if hashcode == signature:

print "%s%s%s"%(header,"\n",echostr)

else:

print header+""


比较得到的哈希码是否和signature相等,然后输出得到的echostr到服务器,在输出过程中一定要加 \n 以便区分头文件和内容文件(不明白的可以查一下python cgi的一些说明)。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: