各种尝试:
回调的url + 携带的参数整体进行urlEncode编码,但是不行。
现象:在微信app中复制链接的时候,可以看到code,但是看不到携带的参数(一个参数都没有)先将携带的参数整体进行urlEncode编码,再将编码后的参数和回调的url再次编码。但是不行
现象:在微信app中复制链接的时候,看不到code,只能看到一堆加密后的url + 参数
先将携带的参数分别进行urlEncode编码,再讲编码后的参数与回调的url整体编码,但是不行
现象:在微信app中复制链接的时候,看不到code,只能看到一堆加密后的url + 参数
如果都不行的话,那就换个思路
像 https://aaa.bbb.com/xxx/xxx/a.1_b.2 => a=1 b=2
还有个思路,利用state参数,请求授权前
以php为例,将我们的参数存在以$state为key的$_SESSION里
session_start()
$state = time().rand(1000, 9999); //时间戳拼接随机4位数
$_SESSION[$state] = ['a'=>1, 'b'=>2];
$redirect_uri = 'https://aaa.bbb.com/xxx/xxx';
$auth_url = 'https://open.weixin.qq.com/connect/qrconnect?appid=APPID&redirect_uri='.urlencode($redirect_uri).'&response_type=code&scope=SCOPE&state='.$state.'#wechat_redirect';
等到回调里获取到返回的state值,在从$_SESSION里取key为state值的参数,进行下一步的业务
如何才能在redirect_url中携带参数???是不是是我携带的参数的方式不正确,导致的?
前端:
1.获取code
<script>
var code = 'code' // 获取window.location.href的code
if (!code) {
window.location.href = 'https://open.weixin.qq.com/connect/oauth2/authorize?appid=' + appId + '&redirect_uri=' + encodeURIComponent(window.location.href) + '&response_type=code&scope=' + scope + '&state=STATE#wechat_redirect'
}
2.获取openID
var openId = 'openId' // 获取window.location.href的openId 或者通过cookie
if (!openId && code) {
window.location.href = window.location.origin + '/api'?redirect=' + encodeURIComponent(window.location.href) + '&code=' + encodeURIComponent(code);
}
</script>
后端:以node为例,
通过 https://api.weixin.qq.com/sns/oauth2/access_token?appid=${appId}&secret=${secret}&code=${code}&grant_type=authorization_code 获取openId,把openId 存在cookie 或者拼到 redirect上
写的比较糙。。。