网友真实露脸自拍10p,成人国产精品秘?久久久按摩,国产精品久久久久久无码不卡,成人免费区一区二区三区

小程序模板網

關于微信小程序生產環境體驗版獲取不到openId的問題(大坑)

發布時間:2020-05-15 10:32 所屬欄目:小程序開發教程

我們知道openid是微信用戶驗證的重要標識,支付功能嚴重依賴這個東西,之前我們做微信支付的時候是通過在微信客戶端直接調用官方接口,通過傳code參數來調用,下面這樣

getOpenId(){  //獲取用戶的openid
          let _this=this;
          wx.login({
            success(res) {
                  if (res.code) {
                  // 發起網絡請求
                  wx.request({
                    url: 'https://api.weixin.qq.com/sns/jscode2session',
                    data: {
                        appid:appId,  //開發者appid
                        secret:secret, //開發者AppSecret(小程序密鑰)	
                        grant_type:"authorization_code",  //默認authorization_code
                        js_code: res.code    //wx.login登錄獲取的code值
                    },
                    success(res) {
                      _this.userinfo.openid=res.data.openid;
                      _this.userinfo.session_key=res.data.session_key;						   
                }
                  })
                } else {
                  console.log('登錄失敗!' + res.errMsg)
                }
            
            }
          })
        }
復制代碼

這樣做理論上也可以拿到openid,但是這里有一個神坑,就是在小程序開發者工具直接測試,使用真機調試,都沒有任何問題,但是一旦上傳代碼,使用小程序的體驗版測試的話,就拿不到openid,奇怪的是,如果在體驗版開啟調試模式,又可以拿到,這是一個非常腦殘的問題,直接影響就是開發環境和生產環境在代碼相同的情況下,體現的效果不一樣,微信官方也沒有任何合理解釋,經過很長時間的查找資料,獲取openid不能直接在微信客戶端來獲取,應該改用后端來獲取openid然后再返回給前端。

所以應該用Django來獲取openid

def getopenid(request):
    res = {}
    appId = request.GET.get('appId')#開發者appid
    secret = request.GET.get('secret')#開發者AppSecret(小程序密鑰)  
    grant_type = "authorization_code"  #默認authorization_code
    js_code = request.GET.get('js_code')#wx.login登錄獲取的code值

    data = {'appId':appId,'secret':secret,"grant_type":grant_type,"js_code":js_code}
    url = "https://api.weixin.qq.com/sns/jscode2session"
    jscode = requests.get(url,data)
    res = jscode.json()
    return JsonResponse(res,safe=False,json_dumps_params={'ensure_ascii':False})
復制代碼

而前端獲取openid的方法改造成請求本地接口

getOpenId(){  //獲取用戶的openid
          let _this=this;
          wx.login({
            success(res) {
                  if (res.code) {
                  // 發起網絡請求,改造成請求本地接口獲取openid,規避體驗版獲取不到的問題
                  wx.request({
                    url: 'http://localhost:8000/getopenid',
                    data: {
                        appid:appId,  //開發者appid
                        secret:secret, //開發者AppSecret(小程序密鑰)  
                        grant_type:"authorization_code",  //默認authorization_code
                        js_code: res.code    //wx.login登錄獲取的code值
                    },
                    success(res) {
                      _this.userinfo.openid=res.data.openid;
                      _this.userinfo.session_key=res.data.session_key;               
                }
                  })
                } else {
                  console.log('登錄失敗!' + res.errMsg)
                }
            
            }
          })
        }
復制代碼

至此才解決了這個問題,這件事情說明一個問題,就是做任何事情都不能想當然,同時開發小程序的時候,真機測試沒有問題并不代表沒有問題,一定要到生產環境測一下,另外最后一個忠告,微信小程序獲取openid一定要在server端獲取再返回給前端,千萬不要圖省事在前端直接獲取openid


易優小程序(企業版)+靈活api+前后代碼開源 碼云倉庫:starfork
本文地址:http://www.xiuhaier.com/wxmini/doc/course/25189.html 復制鏈接 如需定制請聯系易優客服咨詢:800182392 點擊咨詢
QQ在線咨詢
AI智能客服 ×