微信小程序登录需要前端调用wx.login,返回的code交给后台调用code2Session,才能返回给前台一个openid(用户唯一标识)。
后台:node.js
报错:
原因:
错误代码将https.get的url和参数分开写了,以为httpsReq.write(data);
是传参。实际就是应该把url和传参拼接在一起。而且get请求本来就只能把参数写url里,不能像post一样写成data再传。
错误代码:
let https=require('https');
app.get('/code2Session',function(req,res){
console.log('code2Session',req.query);
let data={
appid:"你的appid",
secret:'你的appsecret',
js_code:req.query.code,
grant_type:'authorization_code'
};
let body='';
let httpsReq=https.get(‘https://api.weixin.qq.com/sns/jscode2session’,(res)=>{
console.log('状态码',res.statusCode);
console.log("请求头",res.headers);
res.on('data',(data)=>{
body+=data;
}).on('end',()=>{
console.log(body);
});
}).on('error',(e)=>{
console.log('error:'+e.message);
});
httpsReq.write(data);
httpsReq.end();
})
正确代码:
let https=require('https');
app.get('/code2Session',function(req,res){
console.log('code2Session',req.query);
let data={
appid:"你的appid",
secret:'你的appsecret',
js_code:req.query.code,
grant_type:'authorization_code'
};
let url='https://api.weixin.qq.com/sns/jscode2session?appid='+data.appid+'&secret='+data.secret
+'&js_code='+data.js_code+'&grant_type=authorization_code'
let body='';
https.get(url,(res)=>{
console.log('状态码',res.statusCode);
console.log("请求头",res.headers);
res.on('data',(data)=>{
process.stdout.write(data);
}).on('end',()=>{
console.log(body);
});
}).on('error',(e)=>{
console.log('error:'+e.message);
});
})