appid:wxd4298cf3aff9db35
获取openid返回的错误;
errcode: 40029 errMsg: invalid code, hints: [ req_id: 9r2gBa0398ns84 ]
网友回复:
你是怎么调用接口的?能否确认使用的 code 的确是 wx.login 得到的那个 code?
开发工具端调用wx.login(); 根据返回的res.code; 传递到自己服务器后端,然后服务器后端拿这code到微信服务器端获取openid和session id
res.code确认过了;是一致的;在开发工具端console.log(res.code)与自己服务器后端log对比,传递没有问题;
ps:appid和secret也是没有问题的,确认多次了
真如你所说的这种情况,那实在是不好说问题在哪里了,也许只能请官方协助检查了。
不过,其实张冠李戴的情况是挺容易出现的,有时候就是瞪着眼睛看着也看不出来……
确实是如此,弱弱问一下,如何请求官方协助啊;
常做善事,常存善念……人品够了,就会有一个昵称里带着蓝色【官】字的官技进到这个帖子里来……
这..........
https://mp.weixin.qq.com/debug/wxadoc/dev/api/api-login.html#wxloginobject
或者贴下你的代码
待会贴代码
//获取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) .... } |