一个公众号的域名授权数量是有限的,如果一个公众号需要绑定多个域名时怎么解决呢?这时候就需要用到域名中转
本地环境也可调用微信授权登录
- 实现微信授权域名中转实例
- 微信授权回调域名(中转域名):www.test.com
- 需要授权回调域名1:www.test1.com
- 需要授权回调域名2:www.test2.com
在中转域名网站 根目录下新建 wxLogin.php中编写发起授权代码
<?php
// +----------------------------------------------------------------------
// | 作者 hankin [ http://www.hankin.cn ]
// +----------------------------------------------------------------------
// | 版权所有 2024-06-27 13:06 hankin
// +----------------------------------------------------------------------
// | 官方网站: http://www.hankin.cn
// +----------------------------------------------------------------------
?>
<?php
$gzh_app_id = "公众号appid";//公众号appid
$gzh_app_secret = "公众号appsecret";//公众号appsecret
?>
<?php if(isset($_GET['redirectUrl']) && !empty($_GET['redirectUrl'])):?>
<!-- 获取跳转url地址 -->
<script type="text/javascript">localStorage.setItem('redirectUrl','<?= $_GET['redirectUrl'];?>')</script>
<?php endif;?>
<?php if(isset($_GET['type']) && !empty($_GET['type'])):
//发起授权
$redirectUrl = $_SERVER['REQUEST_SCHEME'] . '://'. $_SERVER['SERVER_NAME'] . '/' . $_GET['type'] . '.php';
//获取公众号授权拿到code
$codeUrl = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=".$gzh_app_id."&redirect_uri=".urlencode($redirectUrl)."&response_type=code&scope=snsapi_userinfo&forcePopup=true&forceSnapShot=true&state=STATE#wechat_redirect";
//header("location: ".$codeUrl);
?>
<script type="text/javascript">
//跳转code页面地址
setTimeout(function(){
window.location.href = '<?= $codeUrl;?>'
},500)
</script>
<?php endif;?>
<?php if(isset($_GET['code']) && !empty($_GET['code'])):
//根据code获取微信用户信息
$data = getSimpleUserInfo($_GET['code'], $gzh_app_id, $gzh_app_secret);
?>
<?php
//微信用户信息解析
$ret['userinfo']['openid'] = $data['openid'] ?? '';//微信用户唯一标识 openid
$ret['userinfo']['unionid'] = $data['unionid'] ?? '';//微信用户唯一标识 unionid
$ret['userinfo']['nickname'] = $data['nickname']?? '';//微信用户昵称
$ret['userinfo']['avatar'] = $data['headimgurl']?? '';//微信用户头像
?>
<script type="text/javascript">
//跳转回调地址
window.location.href = localStorage.getItem('redirectUrl')+'?data=<?= urlencode(json_encode($ret));?>'
//JSON.parse(decodeURIComponent(window.location.href.split('?data=')[1]))
</script>
<?php endif;?>
<?php
function getSimpleUserInfo($code, $WECHAT_APPID, $WECHAT_APPSECRET)
{
if (empty($code)) return array();
//通过code换取网页授权access_token
$access_token_url = 'https://api.weixin.qq.com/sns/oauth2/access_token?appid=' . $WECHAT_APPID . '&secret=' . $WECHAT_APPSECRET . '&code=' . $code . '&grant_type=authorization_code';
$access_token_json = https_request($access_token_url);
$access_token_array = json_decode($access_token_json, true);
$openid = isset($access_token_array['openid']) ? $access_token_array['openid'] : '';
$access_token = isset($access_token_array['access_token']) ? $access_token_array['access_token'] : '';
$userinfo_url = 'https://api.weixin.qq.com/sns/userinfo?access_token=' . $access_token . '&openid=' . $openid . '&lang=zh_CN';
$userinfo_json = https_request($userinfo_url);
$userinfo_array = json_decode($userinfo_json, true);
return $userinfo_array;
}
//请求接口
function https_request($url)
{
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
$data = curl_exec($curl);
if (curl_errno($curl)) {
return 'ERROR ' . curl_error($curl);
}
curl_close($curl);
return $data;
}
/**
* 生成AJAX结果
* @param $resultCode
* @param null $message
* @param null $data
* @return array
*/
function generateAjaxResult($resultCode, $message = NULL, $data = NULL)
{
exit(json_encode([
'code' => $resultCode,
'msg' => $message,
'result' => $data,
]));
}
/**
* AJAX成功返回数据
* @param null $data
* @return array
*/
function ajaxSuccess($data = NULL,$message = NULL)
{
$result = generateAjaxResult(
200,
$message,
$data
);
return $result;
}
/**
* AJAX错误返回数据
* @param null $message
* @param int $resultCode
* @param null $data
* @return array
*/
function ajaxError($message = NULL, $resultCode = 1000, $data = NULL)
{
$result = generateAjaxResult(
$resultCode,
$message,
$data
);
return $result;
}
?>
- 根据如上方式就可以实现微信授权域名中转
- 访问 www.test1.com 站点时只需访问 https://www.test.com/wxLogin.php?type=wxLogin&redirectUrl=当前前端页面地址
- 访问 www.test2.com 站点时只需访问 https://www.test.com/wxLogin.php?type=wxLogin&redirectUrl=当前前端页面地址