Python Django对接企业微信第三方服务回调验证的一些坑
今天公司老总,叫我把公司的企业微信,服务商管理后台中的本地应用进行回调验证。
听起来一脸懵逼,没搞过企业微信对接情况。一头雾水,不知道如何下手。
先讲解一下,企业微信情况。
登录到企业微信后,右上角服务商管理后台
之后点击进入应用管理界面
选择网页应用,这里说下,创建应用的方法,自己去百度一下哈,如何创建我就不阐述了。这里配置回调URL,即是你网站的URL地址,
比如:https://xxxx.xxxx.com/weixin
这里我用Django框架的公司网站进行回调验证,如果没有验证回调成功,下面会有提示需要得到服务商的响应,才可以验证成功。
接下来讲讲如何实现,微信官方给了一个Python回调验证的dome演示包,我们可以在这里下载https://work.weixin.qq.com/api/doc#90000/90138/90307/python%E5%BA%93
这里就有第一个大坑,本代码使用了pycrypto这个包,这里用到一个叫crypto的东西,这个玩意3年前就不更新了。所以在网上找了一圈,怎么安装
这里我先不说安装方式,后面的博客中,继续更新如何安装这个坑爹的python包。
安装好这个包后,你会发现,我们从微信官方下载的python代码包,里面是用python2.7版本的,那么问题来了,这里我用的python3.6,纳尼?
不兼容,怎么办,先跑起来,遇到问题在说吧!
在你的Django中,添加如下ULR,这个URL需要匹配任意的请求地址。
这里我就不阐述用(.*)的意思了,就是匹配任意的URL
因为在做URL回调的时候,微信会给你发一个类似如下图的,这样一个URL,这个测试连接地址为:https://work.weixin.qq.com/api/devtools/devtool.php
如何使用这个测试连接。
按照如下内容进行填写,企业CorpID自己找到后填写正确。点击检查问题,就会有前面一张图中所示的URL地址,这个地址就可以拿来进行本地测试。因为我是现在本地测试成后,才修改在官网上的!
拿着这个测试的URL,在你的Django上先进行URL匹配测试
我这里匹配到URL以后,返回页面
说明你的URL匹配已经成功,接下来要做的就是如何解析RUL,把URL中的内容拆分出来。
在views.py中写你的匹配的方法:
def weixin(request):
if request.method == "POST":
return HttpResponse("Weixin-NO")
else:
signature = request.GET.get('msg_signature', '')
timestamp = request.GET.get('timestamp', '')
nonce = request.GET.get('nonce', '')
echo_str = request.GET.get('echostr', '')
print(signature)
print(timestamp)
print(nonce)
print(echo_str)
return HttpResponse("Weixin-yes")
在这个请求中,获取到如下数据
好的,现在数据获取到以后,接下来需要进行URL拼接,加解密过程的验证
这里说明一下,wxcpt.VerifyURL这个方法是演示demo中的
- WXBizMsgCrypt.py文件封装了WXBizMsgCrypt接口类,提供了用户接入企业微信的三个接口,Sample.py文件提供了如何使用这三个接口的示例,ierror.py提供了错误码。
- WXBizMsgCrypt封装了VerifyURL, DecryptMsg, EncryptMsg三个接口,分别用于开发者验证接收消息的url、接收消息的解密以及开发者回复消息的加密过程。使用方法可以参考Sample.py文件。
我们需要微信给我们的WXBizMsgCrypt.py文件
将这个文件放到与views.py同级目录下,导入一下,方便调用。完整代码如下
这需要几个参数:
from django.http.response import HttpResponse
from wechatpy.exceptions import InvalidSignatureException
from userApp.WXBizMsgCrypt import WXBizMsgCrypt
#回调模式里面随机生成的那个Token,EncodingAESKey
sCorpID = "这个ID是企业微信号的ID"
sToken = '这是应用回调URL下面的token'
sEncodingAESKey ="回调URL下面的EncodingAESKey"
wxcpt = WXBizMsgCrypt(sToken, sEncodingAESKey, sCorpID)
def weixin(request):
if request.method == "POST":
return HttpResponse("Weixin-NO")
else:
signature = request.GET.get('msg_signature', '')
timestamp = request.GET.get('timestamp', '')
nonce = request.GET.get('nonce', '')
echo_str = request.GET.get('echostr', '')
try:
ret, sEchoStr = wxcpt.VerifyURL(signature, timestamp, nonce, echo_str)
if (ret != 0):
print("ERR: VerifyURL ret: " + str(ret))
except InvalidSignatureException:
return HttpResponse("Weixin-NO")
response = HttpResponse(sEchoStr, content_type="text/plain")
return response
这里也可以选择不捕获这个异常。不写这一步也可。
在python3.6下主要问题出现在下面这个方法调用中,前面说到微信官方给的版本是2.7我们要将官方给的事列代码进行小改动。
ret, sEchoStr = wxcpt.VerifyURL(signature, timestamp, nonce, echo_str)
下图是官方包的导入
需要做些小改动,把没有必要的东西删除。下图是我修改后的导入
之后修改微信官方给的方法,
1、找到如下方法,进行添加
2、讲微信官方给的代码,中所有的Exception,e 还有print 全部改成python3中的写法
except Exception,e:
print e
#修改为
except Exception as e:
print (e) #所有的print改为python3的写法,print()
3、找到如下方法,修改
修改完成后,再次进行URL访问
打印一下ret 的值,如果是0,那么说明修改成功。回调验证正确。
在回调测试网站上进行测试
这里可以看到,我的EchoStr是21312,用下面这个地址,在本地进行测试时,会返回给你这个数值,如下图
这里说明验证成功。这里就可以将代码上传至服务器。然后在企业微信中点击设置,进行验证即可验证成功。
Python Django对接企业微信第三方服务回调验证的一些坑的更多相关文章
- java如何对接企业微信
前言 最近实现社群对接企业微信,对接的过程遇到一些点,在此记录. 企业微信介绍 企业微信具有和微信一样的体验,用于企业内部成员和外部客户的管理,可以由此构建出社群生态. 企业微信提供了丰富的api进行 ...
- 3. ABP .NETCore 添加企业微信第三方登录
1.企业微信登录步骤 1.获取企业微信Token 官方文档:https://work.weixin.qq.com/api/doc#90000/90135/91039 2.通过Token 与前端传的Co ...
- 发现一个企业微信第三方应用开发的疑似BUG
1.企业微信两个账号A(超级管理员),账号B(分级管理员),账号B具有创建应用与小程序权限.2.账号B添加一个第三方应用后(创建后能看到第三方应用),使用下图接口登录时回调的agent一直为空,3.超 ...
- 使用python django快速搭建微信公众号后台
前言 使用python语言,django web框架,以及wechatpy,快速完成微信公众号后台服务的简易搭建,做记录于此. wechatpy是一个python的微信公众平台sdk,封装了被动消息和 ...
- 如何用php开启企业微信开发的回调模式
猜想: 懵逼 实践: 微信公众号开发的手册中甚至给出了只需要修改几个参数就能使用的范例.企业微信开发中在一个很不显眼的地方放了一个sample. https://work.weixin.qq.com/ ...
- python实现通过企业微信发送消息
实现了通过企业微信发送消息,平时用于运维的告警还是不错的,相对于邮件来说,实时性更高,不过就是企业微信比较麻烦,此处不做过多解释. 企业微信api的详细请看:http://work.weixin.qq ...
- Java企业微信开发_09_身份验证之移动端网页授权(有完整项目源码)
注: 源码已上传github: https://github.com/shirayner/WeiXin_QiYe_Demo 一.本节要点 1.1 授权回调域(可信域名) 在开始使用网页授权之前,需要先 ...
- Java企业微信开发_10_未验证域名归属,JS-SDK功能受限
1.现象: 在企业微信后台填写可信域名后,提示:未验证域名归属,JS-SDK功能受限,如下图: 点击“申请域名校验”后, 注意:域名根目录 当时一直不清楚这个域名根目录在哪里,最后让我给试出来了 2. ...
- python Django框架接入微信公众平台
1.在接入微信公众平台之前,需要在微信公众平台配置好基本信息,如下: 这个时候点击“提交”按钮,会提示“Token校验失败”,不要着急,这是必然会出现的现象,先不要退出页面,保留各项输入的数据,按第二 ...
随机推荐
- [Swift]LeetCode989. 数组形式的整数加法 | Add to Array-Form of Integer
For a non-negative integer X, the array-form of X is an array of its digits in left to right order. ...
- 非对称加密技术里面,最近出现了一种奇葩的密钥生成技术,iFace人脸密钥技术
要说到非对称加密技术啊,得先说说对称加密技术 什么是对称加密技术 对称加密采用了对称密码编码技术,它的特点是文件加密和解密使用相同的密钥加密. 也就是密钥也可以用作解密密钥,这种方法在密码学中叫做对称 ...
- Git使用基础介绍
git教程:一.git的简介: -git是分布式版本控制系统由Linus为Linux用C语言写的. -什么是集中式版本控制系统: 版本库是集中存放在中央服务器,干活的时候用自己的电 ...
- 如何在 Linux 上复制文件/文件夹到远程系统?
从一个服务器复制文件到另一个服务器,或者从本地到远程复制是 Linux 管理员的日常任务之一. 我觉得不会有人不同意,因为无论在哪里这都是你的日常操作之一.有很多办法都能处理这个任务,我们试着加以概括 ...
- .Net 调用中国气象台Web Service
接口地址http://www.webxml.com.cn/WebServices/WeatherWebService.asmx 调用步骤:项目添加服务引用-高级-添加web引用 简单代码: web服务 ...
- JVM(2)--一文读懂垃圾回收
与其他语言相比,例如c/c++,我们都知道,java虚拟机对于程序中产生的垃圾,虚拟机是会自动帮我们进行清除管理的,而像c/c++这些语言平台则需要程序员自己手动对内存进行释放.虽然这种自动帮我们回收 ...
- Chapter 5 Blood Type——27
And then Mike staggered through the door, now supporting a sallow-looking Lee Stephens, another boy ...
- XSS Stored 测试
dvwa存储型XSS 存储型XSS:会把用户输入的数据“存储”在服务器端,一般出现在需要用户可以输入数据的地方,比如网站的留言板.评论等地方,当网站这些地方过滤不严格的时候,就会被黑客注入恶意攻击代码 ...
- CVE漏洞—PHPCMS2008 /type.php代码注入高危漏洞预警
11月4日,阿里云安全首次捕获PHPCMS 2008版本的/type.php远程GetShell 0day利用攻击,攻击者可以利用该漏洞远程植入webshell,导致文件篡改.数据泄漏.服务器被远程控 ...
- [十五]javaIO之SequenceInputStream
功能简介 SequenceInputStream 合并流 顾名思义,就是可以吧两个流合并起来 他并没有很复杂,单纯的很,仅仅实现了InputStream 他拥有两个构造方法把两个InputS ...