使用login code获取openid失败
发布于 5 年前 作者 wantao 16758 次浏览 来自 问答

appid:wxd4298cf3aff9db35

获取openid返回的错误;

 errcode: 40029 errMsg: invalid code, hints: [ req_id: 9r2gBa0398ns84 ]

10 回复

常做善事,常存善念……人品够了,就会有一个昵称里带着蓝色【官】字的官技进到这个帖子里来……

确实是如此,弱弱问一下,如何请求官方协助啊;

ok;明白了;非常感谢!!

再补一张小程序端wx.login()返回值的图:

麻烦帮忙看下,万分感谢;

//获取code
var getCode = function(callback) {
  wx.login({
    success: function(res){
      if(res.code) {
        console.log('syslogin: ', res)
        console.log('request id:', res.code)
        typeof callback === "function" && callback(res.code)
      }
      else {
        console.log('获取code失败!' + res.errMsg)
      }
    }
  })
}
 
// 获取access_token
function getToken (callback) {
  getCode((code) => {
    wx.getUserInfo({
      success: function(res){
        console.log('用户允许授权')
        var request = "code=" + code
        wx.request({
          url: Api.session,
          data: {
            code: request,
          },
          method: 'GET',
          header:{
            "Content-Type": "application/x-www-form-urlencoded"
          },
          success: function(res){
            typeof callback == "function" && callback(res.data)
          },
          fail: function() {
            console.log('wx.request 请求失败')
          }
        })
      },
      fail: function(res) {
        if(res.errMsg) {
          console.log('用户拒绝授权', res)
          typeof callback == "function" && callback({errMsg : "userDenyed"})
        }
      }
    })
  })
}

小程序端代码

//golang代码,服务端
func Login(ctx *context.Context) {
    ctx.Request.ParseForm()
 
    code := ctx.Request.FormValue("code")
    logs.Info("client login code:", code)
    //向微信服务器发起请求
    tr := &http.Transport{
        TLSClientConfig: &tls.Config{InsecureSkipVerify: true},
    }  
 
    appid := "wxd4298cf3aff9db35"
    secret := "XXXXX"  //secret确认过,没有问题
    url := "https://api.weixin.qq.com/sns/jscode2session?appid=" + appid + "&secret=" + secret + "&js_code=" + code + "&grant_type=authorization_code"
    client := &http.Client{Transport: tr}
    resp, err := client.Get(url)
    if err != nil {
        logs.Error(err.Error())
        rets.WriteHttpErrMsgs(ctx.ResponseWriter, 500, err.Error(), err)
        return
    }  
 
    defer resp.Body.Close()
    if resp.StatusCode == 200 {
        body, err := ioutil.ReadAll(resp.Body)
        var data ZtgameLoginRt
        err = json.Unmarshal([]byte(body), &data)
        if err != nil {
            rets.WriteHttpErrMsgs(ctx.ResponseWriter, 500, err.Error(), err)
            return
        }
        logs.Info("errcode:", data.ErrCode, "errMsg:", data.ErrMsg)
        //logs.Info("winxin server login return: ", data.Openid)
        //logs.Info(data.Session_key)
....
}

待会贴代码

真如你所说的这种情况,那实在是不好说问题在哪里了,也许只能请官方协助检查了。

不过,其实张冠李戴的情况是挺容易出现的,有时候就是瞪着眼睛看着也看不出来……

回到顶部