DJANGO与小程序-通过openid获取用户信息02

微信官方给出解密算法,下载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的轮播图。

如果有疑问的可以在下面留言。

发布了12 篇原创文章 · 获赞 0 · 访问量 185

猜你喜欢

转载自blog.csdn.net/weixin_44675051/article/details/104894386