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的脚本程序:
因为代码程序很简单,我在这里简单的解释一下代码:
这部分主要是,只要是为了在实际的测试过程中进行数据的存储,因为在做的过程中,我想知道微信后台带过来数据,这部分不是必要的吗大家可以去掉。
这部分分别是头文件和form的导入,在进行CGI数据发送的过程中,都需要在开始时添加头文件,这个在html中有讲解,主要是为了识别html文件。form参数主要是接受get传入的数据。
获取所获值
上述代码为生成哈希吗
比较得到的哈希码是否和signature相等,然后输出得到的echostr到服务器,在输出过程中一定要加 \n 以便区分头文件和内容文件(不明白的可以查一下python 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的一些说明)。
相关文章推荐
- 利用python2.7自带的简单的web服务器SimpleHTTPServer实现web页面的访问
- Python基于twisted实现简单的web服务器
- Python实现简单的WEB服务器
- Python下CGIweb服务器实现(CGIHTTPServer) 《Head First Python》第七章
- WEB服务器:在IIS上实现python CGI
- 利用Python自带的包可以建立简单的web服务器
- Python基于twisted实现简单的web服务器
- python快速建立超简单的web服务器的实现方法
- 利用Python 1分钟搭建测试Web服务器,可实现linux目录文件共享
- Python小项目四:实现简单的web服务器
- 利用lvs-nat实现两台web服务器负载均衡的简单案例
- Python利用itchat对微信中好友数据实现简单分析的方法
- Python实现简单的Web服务器 解析
- 利用xinetd实现简单web服务器(镜像站)
- 利用python自带的包可以建立简单的web服务器
- Python实现简单的Web服务器
- 基于python实现简单web服务器
- Python小项目四:实现简单的web服务器
- Python实现简单的Web服务器
- 使用Python或Node创建简单web服务器和FTP服务器实现文件共享