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 ...
随机推荐
- Tomcat 类加载器的实现
Tomcat 内部定义了多个 ClassLoader,以便应用和容器访问不同存储库中的类和资源,同时达到应用间类隔离的目的.本文首发于公众号:顿悟源码. 1. Java 类加载机制 类加载就是把编译生 ...
- C# Dapper 的简单实用
首先引入dapper PM>Install-Package Dapper -Version 2.0.4 (可能会出现因版本问题而安装失败详情见官网:https://stackexchange. ...
- C#利用控件mscomm32.ocx读取串口datalogic扫描枪数据
1).开发环境VS12,语言C# 2).扫描枪品牌:datalogic 4470 3).通讯协议:串口 1.首先,第一步创建一个新工程,windows窗体应用程序,命名为TestScanner,如下: ...
- CMS-headless or non-headless, page-based or object-based storage?
内容管理系统对于很多在线教育企业来说都是至关重要的,他不仅可以用于内容的创作,编辑,发布,撤销,展示也可以用于运营或者市场产生他们需要的页面. 传统上,Wordpress是一个非常成功的CMS,他将内 ...
- 简单了解Eureka
1.Eureka简介 Eureka是Spring Cloud Netflix微服务套件中的一部分,是一套成熟的服务注册和发现组件,可以与Springboot构建的微服务很容易的整合起来. Eureka ...
- mybatis关联映射一对多
实际项目中也存在很多的一对多的情况,下面看看这个简单的例子 table.sql CREATE TABLE tb_clazz( id INT PRIMARY KEY AUTO_INCREMENT, CO ...
- 【转载】C#中ArrayList集合类使用Add方法添加元素
ArrayList集合是C#中的一个非泛型的集合类,是弱数据类型的集合类,可以使用ArrayList集合变量来存储集合元素信息,任何数据类型的变量都可加入到同一个ArrayList集合中,因此使用Ar ...
- vue组件5 组件和v-for指令
使用v-for遍历一个数组的时候,并且给定的数组变化时vue不会重复生成所有的元素,而是智能的找到需要更改的元素,并只改变这些元素 key属性可以告诉vue数组中的每个元素都应该与页面上的哪个元素相关 ...
- JavaScript 数组(二)数组练习
1.求一组数中的最大值和最小值,以及所在位置(最大值和最小值在这组数中的位置) var numbers = [120, 13, 101, 88, 10, 25]; var max = numbers[ ...
- grpc:超时机制
工作中遇到一个问题,上游服务通过grpc调用下游服务,但是由于下游服务负载太高导致上游服务的调用会随机出现超时的情况,但是有一点不太明确:超时之后,下游服务还会继续进行计算么? 于是自己写了一个dam ...


