1. 程式人生 > >ThinkPHP5 公眾號獲取使用者資訊

ThinkPHP5 公眾號獲取使用者資訊

<?php
namespace app\wechatuserinfo\controller;
use think\Controller;
use think\Db;
use think\Cookie;

//公眾號appID
define("APPID", "APPID");
//公眾號appsecret
define('SECRET', "SECRET");
//跳轉回調頁面用於接收code
define('REDIRECT_URL',"REDIRECT_URL/*回撥頁面*/");

/**
 * Class Wechatuserinfo
 * @package app\wechatuserinfo\controller
 *
 * 當前控制器的主要目的是獲取微信使用者資訊
 *
 */
class Wechatuserinfo extends Controller
{
    public function index()
    {
        echo "獲取使用者資訊。。。。";
    }

    /**
     * 開啟微信登入授權頁面
     */
    public function getUser()
    {
        $appid=APPID;
        $secret=SECRET;
        $redirect_uri = REDIRECT_URL;
        //傳送獲取code連線
        $url="https://open.weixin.qq.com/connect/oauth2/authorize?appid=$appid&redirect_uri=$redirect_uri&response_type=code&scope=snsapi_userinfo&state=1#wechat_redirect";
        //傳送GET請求
        header("Location: ".$url);
        exit();//必要
    }

    /**
     * 獲取使用者基本資訊
     */
    public function oauth2()
    {
        $APPID=APPID;
        $APPSECRET=SECRET;
        $redirect_uri = REDIRECT_URL;
        //獲取code
        $code="";
        //使用code換取access_token
        $AccessToken="";
        if (isset($_GET['code']))
        {
            $code = $_GET['code'];
            $GetAPPSECRET = 'https://api.weixin.qq.com/sns/oauth2/access_token?appid='.$APPID.'&secret='.$APPSECRET.'&code='.$code.'&grant_type=authorization_code';
            //使用code換取access_token
            $AccessToken = file_get_contents('https://api.weixin.qq.com/sns/oauth2/access_token?appid='.$APPID.'&secret='.$APPSECRET.'&code='.$code.'&grant_type=authorization_code');
            //解析code換取的JSON資料
            $objJson = json_decode($AccessToken);
            $RT = $objJson->refresh_token;
            //重新整理access_token
            $ShuaXinAT = 'https://api.weixin.qq.com/sns/oauth2/refresh_token?appid='.$APPID.'&grant_type=refresh_token&refresh_token='.$RT;
            $RFAccessToken = file_get_contents($ShuaXinAT);
            //解析重新整理access_token的JSON資料
            $rft = json_decode($RFAccessToken);
            $access_token = $rft->access_token;
            $openid = $rft->openid;
            //使用access_token獲取使用者資訊
            $GetUserInfo = 'https://api.weixin.qq.com/sns/userinfo?access_token='.$access_token.'&openid='.$openid.'&lang=zh_CN"';
            $UserInfo = file_get_contents($GetUserInfo);
            //dump($UserInfo);
            //記錄使用者資訊
            $this->recordUserInfo($UserInfo);
        }else{
            echo "沒有取到Code";
        }
    }

    /**
     * 檢測使用者是否存在
     * 如果存在就按邏輯跳轉
     * 否則先儲存使用者資訊 再邏輯跳轉
     */
    public function recordUserInfo($UserInfo)
    {
        //解析使用者資訊
        $UserJson = json_decode($UserInfo);
        $openid = $UserJson->openid;//使用者唯一標識
        $nickname = $UserJson->nickname;//暱稱
        $sex = $UserJson->sex;//性別 1=男
        $language = $UserJson->language;//語言
        $city = $UserJson->city;//城市
        $province = $UserJson->province;//省份
        $country = $UserJson->country;//國籍
        $headimgurl = $UserJson->headimgurl;//頭像地址
    }
}