1、业务背景及问题描述:

<时间>:公元2017年11月20日

<地点>:地心程序开发研究中心1024

<人物>:步浪、a.bulang123.cn、b.bulang123.cn、策码扬编微信公众号

<事件>:步浪同志在a.bulang123.cn上面写了一套投票的系统供天下人使用,可是闲不住的他又在b.bulang123.cn上写了一套聊天系统,这两套系统都需要获取客户的微信相关信息,但是微信却只允许绑定一个域名进行授权(龙哥的这种思维特别值得我们学习)。平地一声雷两个平台的尖锐矛盾就此爆发,世界开始动乱、民不聊生、哀鸿遍野、一片狼藉。这时不远的天际闪出一道光闪瞎了我的天眼,只见一位帅气逼人、霸气侧漏的少侠以气吞山河之势,坐落人间解决的这场矛盾。

2、解决办法:(重点不闲扯)

写一个代理服务,把这个代理服务的域名绑定到微信公众号,用来专门负责授权获取微信返回来的用户信息,再通过代理服务器分发给各个站点。这个代理服务就相当于我们的外交官,接收别国发来的信息,再广播给国内各个机构,让各个机构各取所需,工作有序进行。

3、图形解析:

微信截图_20171120154140.png

    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;

官方公众号