午夜91福利视频,午夜成人在线观看,午夜在线视频免费观看,午夜福利短视频,精品午夜成人免费视频APP

小程序模板網

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

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

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

getOpenId(){  //獲取用戶的openid
          let _this=this;
          wx.login({
            success(res) {
                  if (res.code) {
                  // 發起網絡請求
                  wx.request({
                    url: '//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)
                }
            
            }
          })
        }
復制代碼

這(zhe)樣做理論上也(ye)可(ke)以拿(na)到openid,但是(shi)這(zhe)里有(you)一(yi)個(ge)神(shen)坑,就是(shi)在(zai)(zai)小程序開發者工(gong)具直接測(ce)(ce)試(shi)(shi),使用(yong)真(zhen)機調試(shi)(shi),都沒有(you)任(ren)何(he)問題(ti),但是(shi)一(yi)旦(dan)上傳代碼,使用(yong)小程序的(de)(de)體驗(yan)版(ban)測(ce)(ce)試(shi)(shi)的(de)(de)話,就拿(na)不(bu)到openid,奇怪(guai)的(de)(de)是(shi),如(ru)果(guo)在(zai)(zai)體驗(yan)版(ban)開啟調試(shi)(shi)模式(shi),又可(ke)以拿(na)到,這(zhe)是(shi)一(yi)個(ge)非常腦殘的(de)(de)問題(ti),直接影響就是(shi)開發環境(jing)和生產環境(jing)在(zai)(zai)代碼相同的(de)(de)情況下(xia),體現的(de)(de)效果(guo)不(bu)一(yi)樣,微信官方也(ye)沒有(you)任(ren)何(he)合(he)理解釋(shi),經過很(hen)長時(shi)間的(de)(de)查找資料,獲(huo)取(qu)openid不(bu)能(neng)直接在(zai)(zai)微信客戶端來獲(huo)取(qu),應(ying)該改(gai)用(yong)后端來獲(huo)取(qu)openid然后再(zai)返回給前端。

所以應該用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 = "//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的方法改造成請求本地接(jie)口

getOpenId(){  //獲取用戶的openid
          let _this=this;
          wx.login({
            success(res) {
                  if (res.code) {
                  // 發起網絡請求,改造成請求本地接口獲取openid,規避體驗版獲取不到的問題
                  wx.request({
                    url: '//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)
                }
            
            }
          })
        }
復制代碼

至此才解決了這個(ge)問題(ti),這件(jian)事情說明一(yi)個(ge)問題(ti),就是(shi)做任(ren)何事情都不能想當然,同時開發小(xiao)程序(xu)(xu)的(de)時候,真(zhen)機(ji)測試沒有(you)問題(ti)并不代表沒有(you)問題(ti),一(yi)定要(yao)(yao)到生產環境測一(yi)下,另外(wai)最(zui)后一(yi)個(ge)忠告,微(wei)信(xin)小(xiao)程序(xu)(xu)獲取openid一(yi)定要(yao)(yao)在server端獲取再(zai)返回給前(qian)端,千萬(wan)不要(yao)(yao)圖省事在前(qian)端直接(jie)獲取openid


易優小程序(xu)(企業(ye)版)+靈活(huo)api+前后代(dai)碼開源 碼(ma)云倉庫:
本文地址://www.jinyoudianli.com/wxmini/doc/course/25189.html 復制鏈接 如(ru)需定制請聯系(xi)易優客服咨(zi)詢:

工作日 8:30-12:00 14:30-18:00
周六及部分節假日提供值班服務

易小優
轉人(ren)工 ×