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

小程序模板網(wǎng)

關(guān)于微信小程序生產(chǎn)環(huán)境體驗(yàn)版獲取不到openId的問(wèn)題(大坑)

發(fā)布時(shí)間:2020-05-15 10:32 所屬欄目:小程序開(kāi)發(fā)教程

我們知道openid是微信用戶驗(yàn)證的重要標(biāo)識(shí),支付功能嚴(yán)重依賴這個(gè)東西,之前我們做微信支付的時(shí)候是通過(guò)在微信客戶端直接調(diào)用官方接口,通過(guò)傳code參數(shù)來(lái)調(diào)用,下面這樣

getOpenId(){  //獲取用戶的openid
          let _this=this;
          wx.login({
            success(res) {
                  if (res.code) {
                  // 發(fā)起網(wǎng)絡(luò)請(qǐng)求
                  wx.request({
                    url: 'https://api.weixin.qq.com/sns/jscode2session',
                    data: {
                        appid:appId,  //開(kāi)發(fā)者appid
                        secret:secret, //開(kāi)發(fā)者AppSecret(小程序密鑰)	
                        grant_type:"authorization_code",  //默認(rèn)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)
                }
            
            }
          })
        }
復(fù)制代碼

這樣做理論上也可以拿到openid,但是這里有一個(gè)神坑,就是在小程序開(kāi)發(fā)者工具直接測(cè)試,使用真機(jī)調(diào)試,都沒(méi)有任何問(wèn)題,但是一旦上傳代碼,使用小程序的體驗(yàn)版測(cè)試的話,就拿不到openid,奇怪的是,如果在體驗(yàn)版開(kāi)啟調(diào)試模式,又可以拿到,這是一個(gè)非常腦殘的問(wèn)題,直接影響就是開(kāi)發(fā)環(huán)境和生產(chǎn)環(huán)境在代碼相同的情況下,體現(xiàn)的效果不一樣,微信官方也沒(méi)有任何合理解釋,經(jīng)過(guò)很長(zhǎng)時(shí)間的查找資料,獲取openid不能直接在微信客戶端來(lái)獲取,應(yīng)該改用后端來(lái)獲取openid然后再返回給前端。

所以應(yīng)該用Django來(lái)獲取openid

def getopenid(request):
    res = {}
    appId = request.GET.get('appId')#開(kāi)發(fā)者appid
    secret = request.GET.get('secret')#開(kāi)發(fā)者AppSecret(小程序密鑰)  
    grant_type = "authorization_code"  #默認(rèn)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})
復(fù)制代碼

而前端獲取openid的方法改造成請(qǐng)求本地接口

getOpenId(){  //獲取用戶的openid
          let _this=this;
          wx.login({
            success(res) {
                  if (res.code) {
                  // 發(fā)起網(wǎng)絡(luò)請(qǐng)求,改造成請(qǐng)求本地接口獲取openid,規(guī)避體驗(yàn)版獲取不到的問(wèn)題
                  wx.request({
                    url: 'http://localhost:8000/getopenid',
                    data: {
                        appid:appId,  //開(kāi)發(fā)者appid
                        secret:secret, //開(kāi)發(fā)者AppSecret(小程序密鑰)  
                        grant_type:"authorization_code",  //默認(rèn)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)
                }
            
            }
          })
        }
復(fù)制代碼

至此才解決了這個(gè)問(wèn)題,這件事情說(shuō)明一個(gè)問(wèn)題,就是做任何事情都不能想當(dāng)然,同時(shí)開(kāi)發(fā)小程序的時(shí)候,真機(jī)測(cè)試沒(méi)有問(wèn)題并不代表沒(méi)有問(wèn)題,一定要到生產(chǎn)環(huán)境測(cè)一下,另外最后一個(gè)忠告,微信小程序獲取openid一定要在server端獲取再返回給前端,千萬(wàn)不要圖省事在前端直接獲取openid


易優(yōu)小程序(企業(yè)版)+靈活api+前后代碼開(kāi)源 碼云倉(cāng)庫(kù):starfork
本文地址:http://www.xiuhaier.com/wxmini/doc/course/25189.html 復(fù)制鏈接 如需定制請(qǐng)聯(lián)系易優(yōu)客服咨詢:800182392 點(diǎn)擊咨詢
QQ在線咨詢
AI智能客服 ×