8-网页,网站,微信公众号基础入门(使用Python程序实现微信token验证)
https://www.cnblogs.com/yangfengwu/p/11062034.html
设置一下IP白名单: 填写自己的服务器的IP地址
是不是不可以哈,有多少人都会入这个坑........官方呀,,,唉
https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1472017492_58YV5
他是说,你这个
不是直接随意写个就完了,,他是会用http访问你里面的内容,你内容里面写的Token要和你网页上写的一样,然后返回给它,这样的话就OK了
所以需要自己在服务器上写一些程序
官方给了python 的参考程序
因为咱在数据篇的时候已经用了python 了,所以咱先用python 实现,然后呢,咱再用php实现
https://www.cnblogs.com/yangfengwu/category/1410242.html
前面准备了这么多知识,现在正在一点点的使用起来...整个教程真是不太好搞,,,涉及的真是太多,我在做教程之前花费了好多时间去总结......
然后才有了基础篇,升级篇,数据篇,安全篇,最后才是微信小程序篇.
总是有人给我抱怨说,为什么没有一篇直接先安装整个用到的东西的,我总会说,你直接看视频教程一节一节的看就可以,每一节用到的所有东西都放在了每一节视频教程里面.
我的教程涉及的太多太多,我这样子做是最好的方式了.
对了还有一件事情: 我对于我自己的学习能力是完全肯定的,只不过是经过长期(2~3年)的自学,形成了我现在的自学能力(学习知识的思维)..以前我从来都没有想过为什么我学一样东西总是那么的快,我以前还认为只有经过长时间的自学才能形成惊人的自学能力 , 后来偶尔读了一篇文章,我才知道我为什么学东西又快又好...原来确实有规律可寻,只不过我是长时间潜移默化形成的这种学习思维......
这是以前我写的一篇日记
https://www.cnblogs.com/yangfengwu/p/11062408.html
先说一下我学东西哈:我每学一个知识点,都会力求让自己给自己讲明白这个知识点,如果给自己讲不明白,就再接着看这个知识点,然后就是一直循环,直至自己给自己说,我确确实实完全明白了这个知识点...我大学里面大二以后都是这样自学过来的..孤独,煎熬,痛苦,但会一直坚持着,因为....我也不知道为什么我能一直坚持下去,当所有人都不认可我的时候,当很多人都不看好我的时候,当很多人开始嘲讽我的时候......我越是那么的坚持....算了,都是些陈年往事
大家百度下 费曼学习法 世界公认最好的学习法 我是100%认同的
https://jingyan.baidu.com/article/4ae03de3cf103c3eff9e6bb6.html
好了,,接着说
咱打开咱数据篇开发python的软件,新建一个工程,把官方给的例子复制过去
实际上就是用python实现的Web服务器,然后如果收到get指令,解析一下微信get指令(就是咱点击提交的时候微信自己给咱发的get信息,get的地址就是咱上面填写的地址)里面携带的信息,然后返回信息...完了
可以按照官方的来,,新建一个main.py 用来测试Web服务器是不是可以
咱让软件安装一下Web模块...可以参考数据篇的 https://www.bilibili.com/video/av55668802
还有就是这个 https://www.cnblogs.com/yangfengwu/p/10177261.html
安装失败了
在pycharm界面按alt+F12调出命令行窗口
具体看 http://webpy.org/docs/0.3/tutorial
这样就证明可以了 , 这个程序是可用的
然后接着写
import sys
sys.path.append(sys.path[]+'/venv/Lib/site-packages')
import web
from handle import Handle urls = (
'/wx', 'Handle',
) if __name__ == '__main__':
app = web.application(urls, globals())
app.run()
版本问题报了个错
3.6版本的还有个地方
需要加括号
但是还有问题...导入不了这个模块
....先不找解决方案,我就来个直接的
import sys
sys.path.append(sys.path[]+'/venv/Lib/site-packages')
import web
import hashlib urls = (
'/wx', 'Handle',
) class Handle(object):
def GET(self):
try:
data = web.input()
if len(data) == :
return "hello, this is handle view"
signature = data.signature
timestamp = data.timestamp
nonce = data.nonce
echostr = data.echostr
token = "xxxx" #请按照公众平台官网\基本配置中信息填写 list = [token, timestamp, nonce]
list.sort()
sha1 = hashlib.sha1()
map(sha1.update, list)
hashcode = sha1.hexdigest()
print ("handle/GET func: hashcode, signature: ", hashcode, signature)
if hashcode == signature:
return echostr
else:
return ""
except Exception as Argument:
return Argument if __name__ == '__main__':
app = web.application(urls, globals())
app.run()
还有一点
然后把工程放到云端去,最好先压缩再上传,否则会比较慢
记得关掉以前的
报错了
最好用软件打开修改,,,否则有可能由于别的记事本文件的编码和缩进问题造成代码看着没有问题,实质上内部编码上就是有问题
把原来的
yield next(seq)
改为
try:
yield next(seq)
except StopIteration:
return
注意一下缩进
如果还有问题,自己先在自己电脑本地修改测试,然后再放到云端
然后
还是有问题
计算出来的两个值不一样......................
handle/GET func: hashcode,signature: da39a3ee5e6b4b0d3255bfef95601890afd80709
494b4ed79eb454e574421526b8a053799075299f
223.166.222.112:49585 - - [21/Jun/2019 07:54:58] "HTTP/1.1 GET /wx" - 200 OK
hashcode = da39a3ee5e6b4b0d3255bfef95601890afd80709
signature = 494b4ed79eb454e574421526b8a053799075299f
......我再找找原因
可以了,不过需要修改下代码
修改了一下代码
import sys
sys.path.append(sys.path[]+'/venv/Lib/site-packages')
import web
import hashlib urls = (
'/wx', 'Handle',
) class Handle(object):
def GET(self):
try:
wechat_data = web.input()
signature = wechat_data['signature']
timestamp = wechat_data['timestamp']
nonce = wechat_data['nonce']
echostr = wechat_data['echostr']
token = 'mnifdv' check_list = [token, timestamp, nonce]
check_list.sort()
s1 = hashlib.sha1()
s1.update(''.join(check_list).encode())
hashcode = s1.hexdigest()
print("handle/GET func: hashcode, signature:{0} {1}".format(hashcode, signature))
if hashcode == signature:
return echostr
else:
return ""
except Exception as Argument:
return Argument """
class Handle(object):
def GET(self):
try:
data = web.input()
if len(data) == :
return "hello, this is handle view"
signature = data.signature
timestamp = data.timestamp
nonce = data.nonce
echostr = data.echostr
token = "mnifdv" #请按照公众平台官网\基本配置中信息填写 list = [token, timestamp, nonce]
list.sort()
sha1 = hashlib.sha1()
map(sha1.update, list)
hashcode = sha1.hexdigest() print("signature=%s\r\n", signature)
print("timestamp=%s\r\n", timestamp)
print("nonce=%s\r\n", nonce)
print("echostr=%s\r\n", echostr)
print("hashcode=%s\r\n", hashcode)
if hashcode == signature:
return echostr
else:
return ""
except Exception as Argument:
return Argument """ if __name__ == '__main__':
app = web.application(urls, globals())
app.run()
其实我是直接百度的 微信token验证 python 因为我看了程序,实质就是微信会先用hash 通过
token, timestamp, nonce 用 hash 算出来 signature 咱也用他的算法,算出来 hashcode 然后比较一下两个一不一样...如果一样就返回 echostr 因为就是这样算的...所以如果算不对,肯定是程序哪地方获取数据的方式,或者计算时候的一些小细节影响了计算数据...
别人呢一定研究过,碰到过类似的问题,所以直接百度就好 替换掉原来的main.py
https://item.taobao.com/item.htm?spm=a1z38n.10677092.0.0.3e3b1deb80xzYz&id=569295486025
好了,这节先自己消化,下一节 咱用php实现 https://www.cnblogs.com/yangfengwu/p/11066036.html
8-网页,网站,微信公众号基础入门(使用Python程序实现微信token验证)的更多相关文章
- 14-网页,网站,微信公众号基础入门(网页版MQTT,小试牛刀)
https://www.cnblogs.com/yangfengwu/p/11192639.html 抱歉哈...最近由于做板子,,教程的进度落下了... 这些天总共做了还几块板子 首先对当前这个教程 ...
- 总想自己动动手系列·3·微信公众号和外网服务交互之通过TOKEN验证(准备篇·1)
一.准备工作 (1)准备一个微信公众号(对私的订阅号或者对公的服务号). (2)准备一台部署了web应用,并且已经发布出去的Linux服务器(需要说明的是:微信公众号强烈建议使用80端口,使用其他自定 ...
- 10-网页,网站,微信公众号基础入门(使用微信自带配置选项实现Airkiss配网)
https://www.cnblogs.com/yangfengwu/p/11066036.html 如果提交失败多提交两次,只要上一节可以,,这一节一定可以的 如果没有设备 这个是我的二维码 咱就测 ...
- 16-网页,网站,微信公众号基础入门(网页版MQTT,页面控件位置调整入门)
https://www.cnblogs.com/yangfengwu/p/11200767.html 说一下,只要你java学的很好,那么几乎所有的语言都不在话下了 来看一下样式设置 运行 在左上角感 ...
- 17-网页,网站,微信公众号基础入门(使用Adobe Dreamweaver CS6 制作网页/网站)
https://www.cnblogs.com/yangfengwu/p/11351182.html https://www.cnblogs.com/yangfengwu/p/11200767.htm ...
- 13--网页,网站,微信公众号基础入门(PHP获取网页的get请求)
https://www.cnblogs.com/yangfengwu/p/11148976.html 大家在访问网页的时候有没有注意一件事情 现在咱来看这种哈 现在咱做个功能哈,类似于这样 长话短说 ...
- 15-网页,网站,微信公众号基础入门(网页版MQTT,做自己的MQTT调试助手)
https://www.cnblogs.com/yangfengwu/p/11198572.html 说一下哈,,如果教程哪里看不明白...就去自己百度补充哪一部分,,学习不是死记硬背,需要会学习,永 ...
- 12-网页,网站,微信公众号基础入门(编写后台PHP程序,实现Airkiss配网)
https://www.cnblogs.com/yangfengwu/p/11067590.html 首先说一下,这两个地方需要配置一样 网站根目录建个文件夹 airkiss的文件夹 里面放上 ind ...
- 4-网页,网站,微信公众号基础入门(配置网站--下载安装PHP)
https://www.cnblogs.com/yangfengwu/p/10979101.html 这一节咱看一下如何在原先的基础上实现网站 首先去下载 PHP https://windows.ph ...
随机推荐
- 【题解】分离与合体 [Loj10151]
[题解]分离与合体 [Loj10151] 传送门:分离与合体 \([Loj10151]\) [题目描述] 给定一个长度为 \(n\) 的序列,如果从某个点 \(k\) 处将区间 \([l,r]\) 断 ...
- C# 接口、抽象类、以及事件
接口.抽象类,用于项目集成,如: Interface icls = appid == "A" ? new ClassA() : new ClassA();icls.func(&qu ...
- spring boot整合spring Data JPA和freemarker
1.spring Data JPA简介 是一个替代hibernate的一个作用于数据库的框架. 2.整合 1.导入依赖 <dependency> <groupId>org.sp ...
- drf--权限组件
目录 权限简介 局部使用 全局使用 源码分析 权限简介 权限就是某些功能只对特定的用户开放,比如django中创建用户可分为超级用户和普通用户,此时超级用户就有权限进入后台管理系统,而普通用户就没有权 ...
- 记一下python的method resolution order(MRO)机制
一直用python都是拿着cookbook和库的文档直接撸,很少会把细节过得那么彻底,遇到问题才会翻文档. 今天看到这个例子的时候我突然触及了我的盲区,我不确定这样的继承层级调用super.foo() ...
- 【开发笔记】-通过js控制input禁止输入空格
<input type="text" id="fname" onkeyup="myFunction(id)"> <scri ...
- 数据结构与算法—Trie树
Trie,又经常叫前缀树,字典树等等.它有很多变种,如后缀树,Radix Tree/Trie,PATRICIA tree,以及bitwise版本的crit-bit tree.当然很多名字的意义其实有交 ...
- Apache Kafka是数据库吗?
最近思路有些枯竭,找些务虚的话题来凑.本文内容完全来自于Martin Kelppmann在2019年Kafka伦敦峰会上的演讲.顺便提一句,Kelppmann是<Designing Data-I ...
- Springboot+Mybatis的逆向工程
Mybatis逆向工程,自动生成 entity类和常用的增删改查方法. 1.pom.xml引入类 <!-- 通用mapper 用于mabatis封装的基础增删改查的功能--><dep ...
- JavaScript数值和字符串、特殊字符
一.JavaScript数值 1.整数和浮点数 根据国际标准 IEEE 754,64 位浮点数格式的 64 个二进制位中,第0 位到第 51 位储存有效数字部分,第 52 到第 62 位储存指数部分, ...