微信服务号登录
POST
/plugin-account/api.wechat/oauth修改时间: 2 个月前
新版本中,由服务器返回 js
脚本写入 SessionStorage
以记录会话标识,后续跳转授权需要根据该标识来共享数据,微信 Oauth
授权完成后会回到当前页面location.href
,同时本地会生成专属 WeChat
授权 Token
。
PS. 为什么这里要用 eval
执行 SessionStorage
来写 Token
?因为大多数情况下,前端与后端部署在不同的域名上面 ,如果直接调用后台链接的 js
来写内容,可能会出现跨域问题,无法在前端域名下读取到 WeChat
专属 Token
值,从而导出授权成功前端拿不到用户信息。
// #ifdef H5
// 微信环境检查并实现自动登录,默认使用静默授权
if (/MicroMessenger/i.test(navigator.userAgent)) {
window.withWeChatLogin = function (mode) {
let src = encodeURIComponent(document.location.href)
let ssi = sessionStorage.getItem('wechat.session') || ''
let url = `%APP_HTTP%/plugin-account/api.wechat/oauth?ssid=${ssi}&mode=${mode}&source=${src}`
let xhr = new XMLHttpRequest()
xhr.withCredentials = true
xhr.open('GET', url, false)
xhr.onreadystatechange = function () {
if (xhr.readyState === 4 && xhr.status === 200) {
eval(xhr.responseText)
}
}
xhr.send()
}
withWeChatLogin(0)
}
// #endif
注意: 微信授权有两种模式,分别是静默授权和完整授权。
可以根据自己实际情况调用 withWeChatLogin()
方法,参数传 0
或 1
即可。目前微信对于完整授权有诸多限制,也拿不到真实用户资料(昵称,头像等),所以大多数情况下只需要使用静默授权即可。
请求参数
Query 参数
mode
string
必需
授权模式 ( 1 完整授权, 0 静默授权 )
示例值:
1
示例代码
返回响应
成功(200)
HTTP 状态码: 200
内容格式: Rawtext/plain
示例
sessionStorage.setItem('wechat.session','4cec1d30704f32cff9a6a69de44ce40b');
location.replace('https://open.weixin.qq.com/connect/oauth2/authorize?appid=wxbbc5782d4d77a43b&redirect_uri=https%3A%2F%2Fopen.cuci.cc%2Fplugin-wechat-service%2Fapi.push%2Foauth%3Fmode%3D1%26sessid%3D4cec1d30704f32cff9a6a69de44ce40b%26enurl%3DaHR0cHM6Ly9kZXYudjYudGhpbmthZG1pbi50b3AvcGx1Z2luLWFjY291bnQvYXBpLndlY2hhdC9vYXV0aD9tb2RlPTE&response_type=code&scope=snsapi_userinfo&state=wxbbc5782d4d77a43b&component_appid=wx293c3c5969430de0#wechat_redirect');
修改于 2 个月前