1、业务背景及问题描述:
<时间>:公元2017年11月20日
<地点>:地心程序开发研究中心1024室
<人物>:步浪、a.bulang123.cn、b.bulang123.cn、策码扬编微信公众号
<事件>:步浪同志在a.bulang123.cn上面写了一套投票的系统供天下人使用,可是闲不住的他又在b.bulang123.cn上写了一套聊天系统,这两套系统都需要获取客户的微信相关信息,但是微信却只允许绑定一个域名进行授权(龙哥的这种思维特别值得我们学习)。平地一声雷两个平台的尖锐矛盾就此爆发,世界开始动乱、民不聊生、哀鸿遍野、一片狼藉。这时不远的天际闪出一道光闪瞎了我的天眼,只见一位帅气逼人、霸气侧漏的少侠以气吞山河之势,坐落人间解决的这场矛盾。
2、解决办法:(重点不闲扯)
写一个代理服务,把这个代理服务的域名绑定到微信公众号,用来专门负责授权获取微信返回来的用户信息,再通过代理服务器分发给各个站点。这个代理服务就相当于我们的外交官,接收别国发来的信息,再广播给国内各个机构,让各个机构各取所需,工作有序进行。
3、图形解析:
4、代码展示
<1>、业务域名代码:
<?php /*业务域名下获取用户信息*/ namespace Home\Controller; use Think\Controller; class IndexController extends Controller { public function index(){ //实例化数据库用户列表(修改) $db_userlist = M("userlist","bl_"); //判断是否已经授权 if (!empty($_SESSION['uid'])) { $uid = $_SESSION["uid"]; } else { //代理服务的主域名(修改) $proxyUrl = C('PROXY_URL'); //微信公众号的appid(修改) $appid = C('appid'); $redirectUrl = "http://".$_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"]; $redirect_uri = urlencode($redirectUrl); $options = array( $proxyUrl, '?appid='.$appid, '&redirect_uri='.$redirect_uri, '&response_type=code', '&scope=snsapi_userinfo', '&device=mobile' ); //没有登录跳转授权页面 $code = $_GET["code"]; if (empty($code)) { header('Location: ' . implode('', $options)); } else { /*获取用户的基础信息(使用的第三方sdk库,自行替换获取方法) *该第三方库下载地址:https://github.com/zoujingli/wechat-php-sdk.git *用这个sdk开发微信相当的快捷方便 */ $oauth = & load_wechat('Oauth'); $result = $oauth->getOauthAccessToken(); $openid = $result['openid']; //判断是否获取到openid if (empty($openid)) { header('Location: ' . implode('', $options)); } else { $whereUser['u_openid'] = array("eq",$openid); $uState = $db_userlist->where($whereUser)->find(); //通过openid判断该用户是否已经存储过数据库 if (!empty($uState)) { $uid = $uState["u_id"]; //已存,uid存入session session("uid",$uid); } else { //没有存储 $userInfo = $oauth->getOauthUserinfo($result['access_token'],$result['openid']); //用户基本信息存库,并把uid存入session /*$data['u_nick'] = $userInfo["nickname"]; $data['u_openid'] = $userInfo["openid"]; $data['u_headpic'] = $userInfo["headimgurl"]; $data['u_addtime'] = time(); */ $uid = $db_userlist->add($data); session("uid",$uid); } } } } } }
<2>、代理服务代码:
下载地址:https://gitee.com/bulang/tp_wechat_proxy.git
5、完整源码获取:
<1>、扫描右边二维码;
<2>、回复“代理”;
<3>、使用中有问题可以加QQ群讨论:459450213;