微信开放平台网站应用扫码登录

微信开放平台网站应用扫码登录<?phpnamespaceapp\common\wechat;/***微信开放平台*Date:2020/9/080015*Time:上午10:03*/classWXOpenPlatform{privatestatic$appId=’xxxxxxxxxxxxxxxxxxxxxxxxx’;privatestatic$appSecret=’xxxxxxxxxxxxxxxxxxxxxxxxx’;privatestati.

大家好,又见面了,我是你们的朋友全栈君。

<?php
namespace app\common\wechat;
/**
 * 微信开放平台
 * Date: 2020/9/08 0015
 * Time: 上午 10:03
 */
class WXOpenPlatform{
    private static $appId = 'xxxxxxxxxxxxxxxxxxxxxxxxx';
    private static $appSecret = 'xxxxxxxxxxxxxxxxxxxxxxxxx';
    private static $scope = 'snsapi_login';

    /**
     * curl请求
     * @param $url
     * @return mixed
     */
    public static function https_request($url, $data = null) {
        $curl = curl_init();
        curl_setopt($curl, CURLOPT_URL, $url);
        curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
        curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);
        if (!empty($data)) {
            curl_setopt($curl, CURLOPT_POST, 1);
            curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
        }
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
        $output = curl_exec($curl);
        curl_close($curl);
        return $output;
    }

    /**
     * 第一步:用户同意授权,获取code
     * @param $redirect_uri
     * @param int $state
     * @return string
     */
    public static function getCode($redirect_uri, $state = 1){
        $redirect_uri = urlencode($redirect_uri);     //用urlEncode对链接进行处理
        $code_url = 'https://open.weixin.qq.com/connect/qrconnect?appid='.self::$appId.'&redirect_uri='.$redirect_uri.'&response_type=code&scope='.self::$scope.'&state='.$state.'#wechat_redirect';
        return $code_url;
    }

    /**
     * 第二步:通过code换取网页授权access_token
     * 正常结果:return { "access_token":"ACCESS_TOKEN",
     *          "expires_in":7200,
     *          "refresh_token":"REFRESH_TOKEN",
     *          "openid":"OPENID",
     *          "scope":"SCOPE" }
     * 错误是的结构:{"errcode":40029,"errmsg":"invalid code"}
     */
    public static function getAccessToken($code){
        //从微信接口获取
        $accessTokenApi = 'https://api.weixin.qq.com/sns/oauth2/access_token?appid='.self::$appId.'&secret='.self::$appSecret.'&code='.$code.'&grant_type=authorization_code';
        $res = self::https_request($accessTokenApi);
        $result = json_decode($res, true);
        return $result;
    }


    /**
     * 第三步:刷新access_token(如果需要)
     * 正常结果:return { "access_token":"ACCESS_TOKEN",
     *          "expires_in":7200,
     *          "refresh_token":"REFRESH_TOKEN",
     *          "openid":"OPENID",
     *          "scope":"SCOPE" }
     * 错误是返回结果:{"errcode":40029,"errmsg":"invalid code"}
     */
    public static function refreshAccessToken($refreshToken){
        $refreshAccessTokenApi = 'https://api.weixin.qq.com/sns/oauth2/refresh_token?appid='.self::$appId.'&grant_type=refresh_token&refresh_token='.$refreshToken;
        $res = self::https_request($refreshAccessTokenApi);
        $result = json_decode($res, true);
        return $result;
    }
    /**
     * 第四步:拉取用户信息
     * 正常返回结果:{"openid":" OPENID",
     *               "nickname": NICKNAME,
     *               "sex":"1",
     *               "province":"PROVINCE"
 *                   "city":"CITY",
     *               "country":"COUNTRY",
     *               "headimgurl":"http://wx.qlogo.cn/mmopen/g3MonUZtNHkdmzicIlibx6iaFqAc56vxLSUfpb6n5WKSYVY0ChQKkiaJSgQ1dZuTOgvLLrhJbERQQ
     *                              4eMsv84eavHiaiceqxibJxCfHe/46",
     *               "privilege":[ "PRIVILEGE1" "PRIVILEGE2"     ],
     *               "unionid": "o6_bmasdasdsad6_2sgVt7hMZOPfL"
     *              }
     * 错误时返回结果:{"errcode":40003,"errmsg":" invalid openid "}
     */
    public static function getUserInfo($openId,$accessToken){
        $userInfoApi = 'https://api.weixin.qq.com/sns/userinfo?access_token='.$accessToken.'&openid='.$openId.'&lang=zh_CN';
        $res = self::https_request($userInfoApi);
        $result = json_decode($res, true);
        return $result;
    }
    /**
     * 附:检验授权凭证(access_token)是否有效
     * 正确的JSON返回结果:
     * { "errcode":0,"errmsg":"ok"}
     * 错误时的JSON返回示例:
     * { "errcode":40003,"errmsg":"invalid openid"}
     */
    public static function checkAccessToken($openId,$accessToken){
        $checkAccessTokenUrl = 'https://api.weixin.qq.com/sns/auth?access_token='.$accessToken.'&openid='.$openId;
        $res = self::https_request($checkAccessTokenUrl);
        $result = json_decode($res, true);
        return $result;
    }
}

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/141030.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • java抽象类和抽象方法[通俗易懂]

    java抽象类和抽象方法[通俗易懂]1.抽象的概念2.抽象类和抽象方法的使用1//抽象方法和抽象类的格式:2/*抽象方法:就是加上abstract关键字,然后去掉大括号,直接分号结束;3抽象类:抽象方法所在的类,必须是抽象

    2022年7月3日
    26
  • stm32f103+FFT+OLED的音乐频谱制作(只需三步即可)「建议收藏」

    stm32f103+FFT+OLED的音乐频谱制作(只需三步即可)「建议收藏」效果演示:https://www.bilibili.com/video/av29366031/制作过程:1.准备材料:stm32f103核心板1块OLED12864显示屏1块(SPI接口)声音检测传感器1块(咪头+放大电路可以网上买现成的模块,也可根据后文提供的原理图自己做)2.硬件连接:(1)OLED连接:OLED_SCLK————PB7OL…

    2022年10月21日
    0
  • burpsuite简单抓包教程[通俗易懂]

    burpsuite简单抓包教程[通俗易懂]一.配置浏览器(以火狐为例)1.打开菜单,找到选项,点击翻到最下面点击设置,将配置的代理服务器改为手动代理配置,HTTP代理设为127.0.0.1,端口设置为8080(为了burpsuite能截到浏览器发送出来的请求),点击确定。二.burpsuite的设置点击proxy选择Options观察图中的IP地址及端口,如果不是127.0.0.1:8080,则点击add,添加端口和IP地…

    2022年6月14日
    122
  • codeblocks中文编码问题

    codeblocks中文编码问题其实这是老调重弹的问题了,在windows下面出现中文乱码大多都是编码格式的问题不一致的问题,最简单的就是uft-8和gbk冲突的问题。如果一个文件本来是以utf-8存的,但是以gbk打开,当然会出现乱码了。方法一:用utf-8打开文件linux中中文常用的格式是utf-8,minGW是gcc的编译器,默认是utf-8格式,但是我们打开Setting/Editor/EncodingSetting

    2022年7月26日
    2
  • 淘宝最新钓鱼网站源码及教程_挖鱼源码网

    淘宝最新钓鱼网站源码及教程_挖鱼源码网大家好,我是陈文生,今天教大家一下如何搭建一个精仿QQ空间的钓鱼网站(PHP)有什么不会直接联系我(QQ:2771628927)先看一下效果文生QQ:2771628927我们看一下后台文生QQ:2771628927活不多说了,直接源码吧…

    2022年8月24日
    10
  • shell sort排序是从小到大_shell sort

    shell sort排序是从小到大_shell sortsort参数:-n:按数字排序,而不是字符-M:用三字符月份名按月份排序-b:排序时忽略起始的空白-c:不排序,如果数据无序也不要报告-d:仅考虑空白和字母,不考虑特殊字符-f:默认情况下,会将大写字母排在前面,这个参数会忽略大小写-g:按通用数据来排序(跟-n不同,把值当浮点数来排序,支持科学计数法表示的值)-i:在排序时忽略不可打印字符-k:排序从POS1位置开始,如果指定了POS2的话,到POS2位置结束-m:将两个已排序数据文件合并-o:将排序结果写出到指定文件中-R:按

    2022年8月12日
    9

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号