python项目公众号,开发一个微信公众号
今天公司老板让我在公司企业微信和服务商管理后台查本地应用。
听起来像是欺负人,我也没搞过企业微信对接。很迷茫,不知道怎么开始。
先说明一下企业微信的情况。
登录企业微信后,右上角服务商管理后台。
然后点击进入应用管理界面。
选择web应用程序。下面是如何创建一个应用程序。自己去百度吧。我就不解释怎么创建了。在此配置回拨URL,这是您的网站的URL地址。
例如:https://xxxx.xxxx.com/weixin
这里我用Django框架的公司网站来验证回调。如果回调验证不成功,在验证成功之前,下面会有一个提示,要求服务提供商做出响应。
这里是第一个大坑。这个代码使用pycrypto包,这里有一个叫crypto的东西,3年前没有更新过。于是我上网搜了一下,怎么安装?
这里就不说安装方法了。在后面的博客里,我会继续更新如何安装这个坑爹的python包。
安装这个包后,你会发现我们从微信官方下载的python代码包使用的是Python 2.7版本,那么问题来了。我这里用的是Python版,纳尼?
水火不容,怎么办?先跑步,遇到问题再聊!
在您的Django中,添加以下ULR。此URL需要匹配任何请求地址。
我就不解释用(。*)这里,就是匹配任何URL。
如何使用此测试连接。
按照以下内容填写,企业的CorpID找到后会正确填写。点击检查问题,会出现上图所示的URL地址,可用于本地测试。因为我是在本地测试完成后在官网修改的!
获取这个测试的URL,首先在您的Django上进行URL匹配测试。
在我匹配了这里的URL之后,我将返回到页面。
说明你的网址匹配成功了。接下来要做的是如何解析RUL并拆分URL中的内容。
在views.py中编写匹配项的方法:
def Weixin(request):if request . method== POST :返回HttpResponse(Weixin-NO)else:
签名=请求。GET.get(msg_signature ,)
时间戳=请求。GET.get(时间戳,)
nonce=请求。GET.get(nonce ,)
echo_str=请求。GET.get(echostr , )print(签名)print(时间戳)print(nonce)print(echo _ str)return http response( Weixin-yes )
在这个请求中,获得了以下数据
好了,现在获得数据后,需要进行URL拼接和加解密过程验证。
这里解释一下,这个方法wxcpt。VerifyURL用于演示。
WXBizMsgCrypt.py文件封装了WXBizMsgCrypt的接口类,为用户访问企业微信提供了三个接口。Sample.py文件提供了如何使用这三个接口的示例,错误代码由ierror.py提供
WXBizMsgCrypt封装了三个接口:verify url、decrypt msg和encrypt msg,这三个接口是开发者用来验证接收消息的url、解密接收消息和加密开发者的回复消息的。使用方法引用Sample.py文件。
我们需要微信给我们的WXBizMsgCrypt.py文件。
将此文件放在与views.py同级的目录中,导入以便于调用。完整的代码如下
这需要几个参数:
from django . http . response importhttpresponse from we chatpy . exceptions importinvalidsignatureexception from user app . wxbizmsgcrypt importwxBizmsgcrypt #回调令牌中随机生成的令牌,EncodingAESKey
Corbid=这个id是企业微信号的Stoken=这个是回调URL下的令牌 sEncodingAESKey=,回调URL下的encodingaaeskey wxcpt=wxBizmsgcrypt(Stoken,sEncodingAESKey,scorpid)。
defweixin(请求):
if request.method==POST :
返回HttpResponse(Weixin-NO )
否则:
签名=请求。GET.get(msg_signature ,)时间戳=请求。GET.get(timestamp , )nonce=请求。GET.get(nonce , )echo_str=request。GET.get(echostr , )try: ret,sEchoStr=wxcpt。VerifyURL(签名,时间戳,nonce,echo_str) if (ret!=0):print( ERR:verify URL ret: str(ret))exception invalidsignatureexception:return HttpResponse( Weixin-NO )response=HttpResponse(sec hostr,content_type=text/plain )返回响应
您也可以选择不在这里捕获这个异常。不,写这一步。
在python3.6下,主要问题出现在下面的方法调用中。前面说了,微信正式版是2.7,我们要对官方列表代码做小改动。
ret,sEchoStr=wxcpt。VerifyURL(签名、时间戳、随机数、echo_str)
下图显示了官方包的导入。
我们需要做一些小改动,删除不必要的东西。下图是我修改后的导入。
然后修改微信官方给的方法,
1.找到下面的方法并添加它。
2.说说微信官方给的代码。代码中所有的Exception、e和print都改为python3。
ExceptException,e:printe#: print #被修改为
except exception as e:print(e)# all print改为python3,print()
3.找到以下方法并修改它们
修改后,再次访问网址。
打印ret的值。如果为0,则修改成功。验证回调是否正确。
在回拨测试网站上测试。
这里可以看到,我的EchoStr是21312,在本地测试的时候会用下面的地址返回给你,如下图。
这里,验证是成功的。在这里,您可以将代码上传到服务器。然后在企业微信中点击设置进行验证,验证成功。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。