php如何获取微信用户基本信息(代码)

本篇文章给大家带来的内容是关于php如何获取微信用户基本信息(代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。

 

<?php

error_reporting(1);

header('Content-type:text/html; Charset=utf-8');

/* 配置开始 */

$appid = ''//微信公众平台->开发->基本配置->AppID

$appKey = '';   //微信公众平台->开发->基本配置->AppSecret

/* 配置结束 */

//①、获取用户openid

$wxPay = new WxService($appid,$appKey);

$data = $wxPay->GetOpenid();      //获取openid

if(!$data['openid']) exit('获取openid失败');

//②、获取用户信息

$user = $wxPay->getUserInfo($data['openid'],$data['access_token']);

?>

<!DOCTYPE html>

<html>

<head>

    <meta charset="UTF-8">

    <meta name="renderer" content="webkit" />

    <meta http-equiv="X-UA-Compatible" content="IE=edge,Chrome=1" />

    <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0" />

    <title>微信获取用户信息demo</title>

    <link href="https://cdn.bootcss.com/bootstrap/3.3.0/css/bootstrap.min.css" rel="stylesheet">

    <script src="https://cdn.bootcss.com/jquery/2.1.0/jquery.min.js"></script>

</head>

<body>

<div>

    <div>

        <h1>你的基本信息如下:</h1>

        <table class="table table-bordered">

            <tr>

                <td>openid</td>

                <td><?=$user['openid']?></td>

            </tr>

            <tr>

                <td>unionid</td>

                <td><?=$user['unionid']?></td>

            </tr>

            <tr>

                <td>昵称</td>

                <td><?=$user['nickname']?></td>

            </tr>

            <tr>

                <td>头像</td>

                <td><img src="<?=$user['headimgurl']?>" style="width: 100px;" alt=""></td>

            </tr>              

            <tr>

                <td>性别</td>

                <td><?php

                    switch (strtoupper($user['sex'])){

                        case 1:

                            echo '男性';

                            break;

                        case 2:

                            echo '女性';

                            break;

                        default:

                            echo '未知';

                            break;

                    }

                    ?></td>

            </tr>

            <tr>

                <td>省份 / 城市</td>

                <td><?=$user['province'].' / '.$user['city']?></td>

            </tr>

            <tr>

                <td>language</td>

                <td><?=$user['language']?></td>

            </tr>

        </table>

    </div>

</div>

</body>

</html>

<?php

class WxService

{

    protected $appid;

    protected $appKey;

    public $data = null;

    public function __construct($appid, $appKey)

    {

        $this->appid = $appid; //微信支付申请对应的公众号的APPID

        $this->appKey = $appKey; //微信支付申请对应的公众号的APP Key

    }

    /**

     * 通过跳转获取用户的openid,跳转流程如下:

     * 1、设置自己需要调回的url及其其他参数,跳转到微信服务器https://open.weixin.qq.com/connect/oauth2/authorize

     * 2、微信服务处理完成之后会跳转回用户redirect_uri地址,此时会带上一些参数,如:code

     *

     * @return 用户的openid

     */

    public function GetOpenid()

    {

        //通过code获得openid

        if (!isset($_GET['code'])){

            //触发微信返回code码

            $baseUrl = $this->getCurrentUrl();

            $url = $this->__CreateOauthUrlForCode($baseUrl);

            Header("Location: $url");

            exit();

        } else {

            //获取code码,以获取openid

            $code = $_GET['code'];

            $openid = $this->getOpenidFromMp($code);

            return $openid;

        }

    }

    public function getCurrentUrl()

    {

        $scheme = $_SERVER['HTTPS']=='on' ? 'https://' : 'http://';

        $uri = $_SERVER['PHP_SELF'].$_SERVER['QUERY_STRING'];

        if($_SERVER['REQUEST_URI']) $uri = $_SERVER['REQUEST_URI'];

        $baseUrl = urlencode($scheme.$_SERVER['HTTP_HOST'].$uri);

        return $baseUrl;

    }

    /**

     * 通过code从工作平台获取openid机器access_token

     * @param string $code 微信跳转回来带上的code

     * @return openid

     */

    public function GetOpenidFromMp($code)

    {

        $url = $this->__CreateOauthUrlForOpenid($code);       

        $res = self::curlGet($url);

        $data = json_decode($res,true);

        $this->data = $data;

        return $data;

    }

    /**

     * 构造获取open和access_toke的url地址

     * @param string $code,微信跳转带回的code

     * @return 请求的url

     */

    private function __CreateOauthUrlForOpenid($code)

    {

        $urlObj["appid"] = $this->appid;

        $urlObj["secret"] = $this->appKey;

        $urlObj["code"] = $code;

        $urlObj["grant_type"] = "authorization_code";

        $bizString = $this->ToUrlParams($urlObj);

        return "https://api.weixin.qq.com/sns/oauth2/access_token?".$bizString;

    }

    /**

     * 构造获取code的url连接

     * @param string $redirectUrl 微信服务器回跳的url,需要url编码

     * @return 返回构造好的url

     */

    private function __CreateOauthUrlForCode($redirectUrl)

    {

        $urlObj["appid"] = $this->appid;

        $urlObj["redirect_uri"] = "$redirectUrl";

        $urlObj["response_type"] = "code";

        $urlObj["scope"] = "snsapi_userinfo";

        $urlObj["state"] = "STATE";

        $bizString = $this->ToUrlParams($urlObj);

        return "https://open.weixin.qq.com/connect/oauth2/authorize?".$bizString;

    }

    /**

     * 拼接签名字符串

     * @param array $urlObj

     * @return 返回已经拼接好的字符串

     */

    private function ToUrlParams($urlObj)

    {

        $buff = "";

        foreach ($urlObj as $k => $v)

        {

            if($k != "sign") $buff .= $k . "=" . $v . "&";

        }

        $buff = trim($buff, "&");

        return $buff;

    }

    /**

     * 获取用户信息

     * @param string $openid 调用【网页授权获取用户信息】接口获取到用户在该公众号下的Openid

     * @return string

     */

    public function getUserInfo($openid,$access_token)

    {

        $response = self::curlGet('https://api.weixin.qq.com/sns/userinfo?access_token='.$access_token.'&openid='.$openid.'&lang=zh_CN');

        return json_decode($response,true);

        

    }

    public static function curlGet($url = '', $options = array())

    {

        $ch = curl_init($url);

        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

        curl_setopt($ch, CURLOPT_TIMEOUT, 30);

        if (!empty($options)) {

            curl_setopt_array($ch, $options);

        }

        //https请求 不验证证书和host

        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);

        $data = curl_exec($ch);

        curl_close($ch);

        return $data;

    }

    public static function curlPost($url = '', $postData = '', $options = array())

    {

        if (is_array($postData)) {

            $postData = http_build_query($postData);

        }

        $ch = curl_init();

        curl_setopt($ch, CURLOPT_URL, $url);

        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

        curl_setopt($ch, CURLOPT_POST, 1);

        curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);

        curl_setopt($ch, CURLOPT_TIMEOUT, 30); //设置cURL允许执行的最长秒数

        if (!empty($options)) {

            curl_setopt_array($ch, $options);

        }

        //https请求 不验证证书和host

        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);

        $data = curl_exec($ch);

        curl_close($ch);

        return $data;

    }

}

评论0

请先

免费资源、资源下载、织梦模板、微擎模块、免费软件、免费教程、小程序源码这里应有尽有,给所有web开发者节省学习时间成本!
登入/注册
没有账号? 忘记密码?