微信官方给出解密算法,下载PYTHON的,会出现两个文件,一个demo.js,一个是WX****.js
上一章已经贴过了。
在项目APP中新建一个WXBizDataCrypt.py,将微信给的WXBizDataCrypt.py文件中所有内容粘贴进去。
import base64
import json
from Crypto.Cipher import AES
class WXBizDataCrypt:
def __init__(self, appId, sessionKey):
self.appId = appId
self.sessionKey = sessionKey
def decrypt(self, encryptedData, iv):
# base64 decode
sessionKey = base64.b64decode(self.sessionKey)
encryptedData = base64.b64decode(encryptedData)
iv = base64.b64decode(iv)
cipher = AES.new(sessionKey, AES.MODE_CBC, iv)
decrypted = json.loads(self._unpad(cipher.decrypt(encryptedData)))
if decrypted['watermark']['appid'] != self.appId:
raise Exception('Invalid Buffer')
return decrypted
def _unpad(self, s):
return s[:-ord(s[len(s)-1:])]
原封不动。
在wx_api.py中,写入视图。
@api_view(['GET','POST'])
def wx_jiemi(request):
appId = request.GET['appId']
sessionKey = request.GET['sessionKey']
encryptedData = request.GET['encryptedData']
iv = request.GET['iv']
pc = WXBizDataCrypt(appId,sessionKey)
userinfo = pc.decrypt(encryptedData, iv)
print(userinfo)
打印出来userinfo的相关信息,这里不做演示。
然后将userinfo的openid与USER中的admin.username对比,有的话直接登入,没有的话添加以openid为账户和密码的admin,存入SQL中,其他信息作为user的拓展信息。这样小程序与Django的前后端互交就完成了。
下一张我们操作,小程序端的swpier获取django的轮播图。
如果有疑问的可以在下面留言。