最近搞几个小H5项目涉及多个应用同时使用微信公众号登录,然鹅服务号只有一个,需要突破服务好回调2个域名的限制,百度搜索一番发现一款可公众号登录授权的多域名回调系统,记录一下公众号授权登录及多域名的使用方法:
公众号授权登录,看文档《公众号登录网页授权》有两种授权方式静默获取snsapi_base和snsapi_userinfo,如果只需要获取用户openid直接用第一种方式,其它用第二种方式,如果使用多域回调系统则需要替换第一步的获取code的url其它和官方一致。下面是静默获取的示例代码
<?php // 公众号的id和secret $appid = '服务号appid'; $appsecret = '服务号秘钥'; $url = urlencode("http://".$_SERVER['HTTP_HOST']."/实际业务路径"); //第一步获取code,这里需要主要多域名系统需要替换https://open.weixin.qq.com/connect/oauth2/authorize,其它接口不变 if(!isset($_GET@['code'])){ $tourl = 'https://open.weixin.qq.com/connect/oauth2/authorize?appid='.$appid.'&redirect_uri='.$url.'&response_type=code&scope=snsapi_base&state=1#wechat_redirect'; header('Location:'.$tourl); }else{ //第二步获取access_token及静默方式时(snsapi_base)用户openid ,https://api.weixin.qq.com/sns/oauth2/access_token $url="https://api.weixin.qq.com/sns/oauth2/access_token?appid=".$appid."&secret=".$appsecret."&code=".$_GET@['code']."&grant_type=authorization_code"; $curl = curl_init(); curl_setopt($curl, CURLOPT_URL, $url); curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE); curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE); if (!empty($data)){ curl_setopt($curl, CURLOPT_POST, 1); curl_setopt($curl, CURLOPT_POSTFIELDS, $data); } curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); $output = curl_exec($curl); curl_close($curl); $res=json_decode($output, true); echo $res['openid']; } ?>
多域名系统只需要修改获取code的方式其它按照官方即可,微信官方只是在获取code的回调域上做了限制其他没有做限制。
snsapi_userinfo方式是在这个基础上多一步通过access_token拉取用信息,不管是官方还是多系统回调都按官方文档及接口获取,看业务需求是是否需要用到access_token刷新如果需要请保存access_token不需要则不需要保存。另外要强调的是这个access_token和多域名系统获取的access_token没关系、没关系、没关系,切记。
如无特别说明,文章均为本站原创。转载请注明出处:http://www.pddo.cn/phper/394.html
评论列表