文档出处:
https://leancloud.cn/docs/weapp.html#一键登录
期望:
除了userinfo之外的openid,减少重复请求wx.login,方便后续微信支付
核心代码:
AV.User.loginWithWeapp().then(user => {});
其user数据如下:
{
"authData": {
"lc_weapp": {
"code": "041FGoL31xBEtM1wQ6K316OcL31FGoLF"
}
},
"city": "Wenzhou",
"username": "2wqockee8bzh460gwhwl9xrxs",
"emailVerified": false,
"nickName": "黄秀杰",
"language": "zh_CN",
"gender": 1,
"province": "Zhejiang",
"avatarUrl": "http://wx.qlogo.cn/mmopen/vi_32/DYAIOgq83eqSucF9v6bKPfUPSTuQjpqmr8jAZEOgsFjFCHc73UIlUAgnI2nz6aFdnkRWAxxy1uZGfC82Yp7fMg/0",
"country": "CN",
"mobilePhoneVerified": false,
"objectId": "58a6b40d128fe1006478a086",
"createdAt": "2017-02-17T08:27:57.203Z",
"updatedAt": "2017-02-17T08:31:31.643Z"
}
没能找到openid,有code,但是传给微信端是过期的,提示has be used
目前的解决方案:
小程序端js代码
App({
onLaunch: function () {
// auto login via SDK
var that = this;
// 向LeanCloud请求登录
AV.User.loginWithWeapp().then(user => {
// 登录或生成用户成功,返回结果中已经含有过期的code(code has be used)
wx.getUserInfo({
success: ({userInfo}) => {
// 更新当前用户的信息,昵称头像等
user.set(userInfo).save();
}
});
}).catch(console.error);
// 授权微信登录以获取openid
wx.login({
success: function(res) {
if (res.code) {
that.code = res.code;
// 获取openId并缓存
wx.request({
url: 'https://***.leanapp.cn/index.php/WXPay/getOpenId',
data: {
code: res.code,
},
method: 'POST',
header: {
'content-type': 'application/x-www-form-urlencoded'
},
success: function (response) {
console.log(response);
that.openid = response.data.openid;
}
});
} else {
console.log('获取用户登录态失败!' + res.errMsg)
}
}
});
}
})
php后端代码
public function getOpenId() {
$code = $this->input->post('code');
$json = 'https://api.weixin.qq.com/sns/jscode2session?appid='.WxPayConfig::APPID.'&secret='.WxPayConfig::APPSECRET.'&js_code='.$code.'&grant_type=authorization_code';
header("Content-Type: application/json");
echo file_get_contents($json);
}
疑惑:
LeanCloud后台的社交组件既然已经持有了小程序的app id, app secret,是不是返回用户的openId更合理些,这样就不需要重复调用小程序wx.login接口了,也不需要的后端代码中配置app id, app secret了。
谢谢
-
创建时间
17年2月17日
-
最后回复
17年9月27日
- 10
回复
- 881
浏览
- 5
用户
- 4
赞
- 7
链接

