python獲取微信小程序openid及用戶信息


填坑記錄:1.個人微信公眾訂閱號是不能申請微信認證的。公眾號的類型在注冊時一旦選擇就不能更改,微信公眾號認證的功能除個人訂閱號外,都可以申請認證,因而個人訂閱號不能申請認證。這句話的意思就是個人訂閱號無法開發小程序。

2.個體戶營業執照(個體戶)可申請微信服務號並申請開發小程序,但需微信認證復用資質並用新郵箱注冊小程序賬號

3.微信開發工具創建微信小程序填寫的appid是小程序的appid(不是微信公眾號的),不能是個人小程序的appid,個人小程序沒有獲取用戶信息的權限

4.調用接口獲取用戶信息時填寫的appid要與創建時填寫的一樣

5.openid只能后台獲取,提高安全性

6.只獲取openid,只調用wx.login獲取code交給后台即可,如果還要獲取用戶詳細信息還要接着調用wx.getUserInfo獲取encryptedData,iv提交后台解密用戶信息

解密方法官方文檔:https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/signature.html

小程序代碼:

//登錄獲取code
  login: function () {
    //1、調用微信登錄接口,獲取code
    wx.login({
      success: function (r) {
        var code = r.code;//登錄憑證
        if (code) {
          //2、調用獲取用戶信息接口
          wx.getUserInfo({
            success: function (res) {
              //3.請求自己的服務器,解密用戶信息 獲取unionId等加密信息
              wx.request({
                url: app.globalData.loginWXUrl,//自己的服務接口地址
                method: 'post',
                header: {
                  'content-type': 'application/json'
                },
                data: { encryptedData: res.encryptedData, iv: res.iv, code: code },
                success: function (res) {
                  //4.解密成功后 獲取自己服務器返回的結果
                  if (res.data.return_code == 0) {
                    console.log(res.data.data)
                  } else {
                    console.log('解密失敗')
                  }

                },
                fail: function () {
                  console.log('系統錯誤')
                }
              })
            },
            fail: function () {
              console.log('獲取用戶信息失敗')
            }
          })

        } else {
          console.log('獲取用戶登錄態失敗!' + r.errMsg)
        }
      },
      fail: function () {
        console.log('登陸失敗')
      }
    })
  }

python后台代碼:

@app.route('/code', methods=["POST"])
def get_code():
    JSCODE = request.get_json()["code"]
    encryptedData = request.get_json()["encryptedData"]
    iv = request.get_json()["iv"]
    APPID = "小程序appid"
    SECRET = "小程序secret"
    url = 'https://api.weixin.qq.com/sns/jscode2session?appid={appid}&secret={secret}&js_code={code}&grant_type=authorization_code'.format(appid=APPID,secret=SECRET,code=JSCODE)
    res = requests.get(url)
    openid = res.json().get('openid')
    session_key = res.json().get('session_key')
    pc = WXBizDataCrypt(APPID, session_key)
    data = pc.decrypt(encryptedData, iv) #data中是解密的用戶信息
    return json_response(0,data=data)
WXBizDataCrypt中具體解密方法下載官方多種語言示例代碼:https://res.wx.qq.com/wxdoc/dist/assets/media/aes-sample.eae1f364.zip
如果導包出現 from Crypto.cipher import AES錯誤

   python 在 Windows下使用AES時要安裝的是pycryptodome 模塊   pip install pycryptodome 

   python 在 Linux下使用AES時要安裝的是pycrypto模塊   pip install pycrypto 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM