PHP 微信三方平台代公众号发起网页授权 获取用户信息

1、获取code

2、通过授权回调地址的code获取用户access_token和open_id

3、通过access_token和open_id 获取用户基本信息

class wx_user
{
    public static function getUserAccessToken($code, $app_id )
    {
        $component_appid = \Yii::$app->params['app_id'];
        $component_access_token = wx_auth::getComponentAccessToken();
        $url = 'https://api.weixin.qq.com/sns/oauth2/component/access_token?appid='.$app_id.'&code='.$code.'&grant_type=authorization_code&component_appid='.$component_appid.'&component_access_token='.$component_access_token;
        return  wx_tools::getCurl($url);

    }
    // 刷新account_token

    // 通过网页授权access_token获取用户基本信息

    public static function getUserInfo($access_token, $openid)
    {

        $url = 'https://api.weixin.qq.com/sns/userinfo?access_token='.$access_token.'&openid='.$openid.'&lang=zh_CN';
        return wx_tools::getCurl($url);
    }
}

action请求

 /**
     *用户授权
     * @return \yii\web\Response
     */
    public function actionAuthUser()
    {
        $request = \Yii::$app->request;
        $app_id =\Yii::$app->params['hywx_test']['app_id'];
        $redirect_uri = \Yii::$app->request->hostInfo . \Yii::$app->request->scriptUrl . '/wx-auth/user-redirect';
        $component_appid = \Yii::$app->params['app_id'];
        $url = 'https://open.weixin.qq.com/connect/oauth2/authorize?appid=' . $app_id . '&redirect_uri=' . $redirect_uri . '&response_type=code&scope=snsapi_base&state=STATE&component_appid=' . $component_appid . '#wechat_redirect';
        return $this->redirect($url);
    }

    /**
     * 用户授权回调地址
     */
    public function actionUserRedirect()
    {
        $request = \Yii::$app->request;
        $code = $request->get('code');
        $state = explode(',', $request->get('state'));
        $league_id = $state[0];
        $type = $state[1];
        $app_id = $request->get('appid');
        $res = json_decode(wx_user::getUserAccessToken($code, $app_id));
        $userInfo = wx_user::getUserInfo($res->access_token, $res->openid);
        $item = json_decode($userInfo);
    }
public function actionAuthUser()
{
$request = \Yii::$app->request;
$app_id =\Yii::$app->params['hywx_test']['app_id'];
$redirect_uri = \Yii::$app->request->hostInfo . \Yii::$app->request->scriptUrl . '/wx-auth/user-redirect';
$component_appid = \Yii::$app->params['app_id'];
$url = 'https://open.weixin.qq.com/connect/oauth2/authorize?appid=' . $app_id . '&redirect_uri=' . $redirect_uri . '&response_type=code&scope=snsapi_base&state=STATE&component_appid=' . $component_appid . '#wechat_redirect';
return $this->redirect($url);
}

/**
* 用户授权回调地址
*/
public function actionUserRedirect()
{
$request = \Yii::$app->request;
$code = $request->get('code');
$state = explode(',', $request->get('state'));
$league_id = $state[0];
$type = $state[1];
$app_id = $request->get('appid');
$res = json_decode(wx_user::getUserAccessToken($code, $app_id));
$userInfo = wx_user::getUserInfo($res->access_token, $res->openid);
$item = json_decode($userInfo);
var_dump($item);exit;
$data = ['open_id' => $item->openid, 'nickname' => json_encode($item->nickname), 'sex' => $item->sex, 'language' => $item->language, 'city' => $item->city, 'province' => $item->province, 'country' => $item->country, 'headimgurl' => $item->headimgurl, 'privilege' => 11, 'union_id' => isset($item->unionid) ? $item->unionid : '', 'app_id' => $app_id, 'league_id' => $league_id];
WxUser::saveWxUserInfo($data);

$timestamp = time();
$verify = Tools::getRandomString(8);
$array = ['open_id' => $item->openid, 'league_id' => $league_id, 'timestamp' => $timestamp, 'verify' => $verify, 'token' => \Yii::$app->params['wx_login_token']];

$sign = Tools::LoginMakeSign($array);

if ($type == 1) {
$url = \Yii::$app->params['erp_mall_site'] . 'employee/login?open_id=' . $item->openid . '&league_id=' . $league_id . '&timestamp=' . $timestamp . '&verify=' . $verify . '&sign=' . $sign;
} else {
$url = \Yii::$app->params['erp_mall_site'] . 'm-mall/login?open_id=' . $item->openid . '&league_id=' . $league_id . '&timestamp=' . $timestamp . '&verify=' . $verify . '&sign=' . $sign;
}

header("Location:" . $url);
die;
}

猜你喜欢

转载自www.cnblogs.com/lt-com/p/12915442.html