DJANGO小さなプログラム - のOpenIDでのユーザ情報01を取得します

wxviews.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:])]

デモ

from WXBizDataCrypt import WXBizDataCrypt

def main():
    appId = 'wx4f4bc4dec97d474b'
    sessionKey = 'tiihtNczf5v6AKRyjwEUhQ=='
    encryptedData = 'CiyLU1Aw2KjvrjMdj8YKliAjtP4gsMZMQmRzooG2xrDcvSnxIMXFufNstNGTyaGS9uT5geRa0W4oTOb1WT7fJlAC+oNPdbB+3hVbJSRgv+4lGOETKUQz6OYStslQ142dNCuabNPGBzlooOmB231qMM85d2/fV6ChevvXvQP8Hkue1poOFtnEtpyxVLW1zAo6/1Xx1COxFvrc2d7UL/lmHInNlxuacJXwu0fjpXfz/YqYzBIBzD6WUfTIF9GRHpOn/Hz7saL8xz+W//FRAUid1OksQaQx4CMs8LOddcQhULW4ucetDf96JcR3g0gfRK4PC7E/r7Z6xNrXd2UIeorGj5Ef7b1pJAYB6Y5anaHqZ9J6nKEBvB4DnNLIVWSgARns/8wR2SiRS7MNACwTyrGvt9ts8p12PKFdlqYTopNHR1Vf7XjfhQlVsAJdNiKdYmYVoKlaRv85IfVunYzO0IKXsyl7JCUjCpoG20f0a04COwfneQAGGwd5oa+T8yO5hzuyDb/XcxxmK01EpqOyuxINew=='
    iv = 'r7BXXKkLb8qrSNn05n0qiA=='

    pc = WXBizDataCrypt(appId, sessionKey)

    print pc.decrypt(encryptedData, iv)

if __name__ == '__main__':
    main()

前記復号含む
のpython3対称暗号化アルゴリズムAES、DES3の
注意:暗号が実装されているのpython3

pip3 install pycryptodome

ダウンロードは第二章をオンにする遅い場合、私はミラーリングしている
ために、マイクロチャネルの公式
そうで
オープンインターフェイスの安全性を確保するためには、ユーザデータの返却、マイクロチャネルは、データ署名をクリアします。開発者は、データの整合性を確保し、ビジネスニーズに基づいたチェックパケットに署名することができます。

1は、データを取得し、インタフェースも(例えばwx.getUserInfo)生データ、署名、請求= SHA1シグネチャ(生データ+のSESSION_KEY)インタフェースを呼び出すことによって返され
2人の開発者が署名し、生データ開発者は、検証のためにサーバに送られます。チェックデータと一致する同一のアルゴリズム、署名の完全性とsignature2のを使用して計算SESSION_KEY signature2の対応するユーザーの署名を使用してサーバ。

アプレットindex.js

login() {
		wx.getUserInfo({
			success(res){
				console.log(res)
				var userinfo = res.userInfo
				console.log(userinfo)
			}
		})```
		

打印出来的是
{たerrMsg:「getUserInfo:OK」、RAWDATA:「{ 『愛称』: 『张』、 『性別』:1、 『言語』: 『がzh_CN』、 『CIT ... snf1Tyy9fVm3GqwUQASDWDKweuo12GuarBWeonyuOlg / 132』}」、ユーザー情報:{...}、署名:「dde08e00a9d5eaba4956abdea5802693b7a6d77f」はEncryptedData:「6PBg8Z / X2GztXFZoI7wewNetxQXXZyaklhtNPyXo9XSBxStUBm ... p8DQ997rNVrrudkY8oquEzt69rgiNVvbCY7Vsb + vAsmviJA ==」、...}

関係のみ
RAWDATA、およびSKをリンクする必要があります

SKは、前回の記事であります

print(res)




[14/Mar/2020 22:36:51] "GET /wx-login?code=021sJwPp16fSOl0qanQp1vCFPp1sJwPa&userinfo=undefined HTTP/1.1" 301 0
{'session_key': 'rCJI1l3***********dQ==', 'openid': '*********123'}

それは=未定義のUserInfo戻って見ることができます

次の章の具体的な取得のuserinfo、Djangoはで展開するユーザモデルに追加

公開された12元の記事 ウォンの賞賛0 ビュー187

おすすめ

転載: blog.csdn.net/weixin_44675051/article/details/104871212
おすすめ