oauth url filter
url 处理
微信授权后,返回的链接带有code 和 state 参数, 而code是一段字符串,而且是一次性的。
如果用户在认证后的页面将链接分享出去, 那么别的用户点击这个链接将会出现认证失败的情况。
对于这个问题,有三种处理方法:
- php 尾处理,认证后queryString,将参数中的code和state去除掉
- php 首处理,首次进入页面, queryString, 处理掉code和state参数
- JS-SDK, 分享链接时,去除掉
php 尾处理
授权成功后,queryString, 将参数code和state过滤,重新拼接字符串1
2
3
4
5
6
7
8
9
10
11
12
13//认证成功,处于登录状态
//todo
$params = explode('&', $_SERVER['QUERY_STRING']);
$urlHost = 'http://'.$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF'].'?';
foreach ( $params as $k => $v ){
if ( empty($v) ) //去掉空白
continue;
if ( preg_match("/^code=|^state/", $v) ) //过滤 code state
continue;
$urlHost .= $v.'&';
}
header('Location: '.$urlHost);
php 首处理
利用SESSION标志用户是否是第一次授权。1
2
3
4
5
6
7if ( $_SESSION['oauthUrl'] ){
// queryString
// todo
$_SESSION[oauthUrl] = false; //处理完毕 置为false
}
// Oauth 过程
JS-SDK 处理
公众号开发者文档 。 JS-SDK的分享接口处理
1 | wx.onMenuShareTimeline({ |
本次的一个示例代码: https://github.com/chendongbupt/blog-example/blob/master/weChatOauth/filterUrl.php