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

微信开放平台网站应用扫码登录<?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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 虚拟机VMware安装苹果系统macOS,超级详细教程,附文件下载,真教程!!

    虚拟机VMware安装苹果系统macOS,超级详细教程,附文件下载,真教程!!1.准备工作1、虚拟机VMware®Workstation15Pro,小编使用的版本是15pro2、Unlocker或MK-Unlocker3、一个MacOS镜像2.资源下载…

    2022年9月25日
    0
  • XXE修复方案参考

    XXE修复方案参考XXE不同的库修复代码,略有差别,但都是通过:1、禁止加载外部实体;2、不允许XML中含有任何自己声明的DTD。可以解决

    2022年5月23日
    43
  • lucene 4.3 通过TokenStream显示分词代码演示「建议收藏」

    lucene 4.3 通过TokenStream显示分词代码演示「建议收藏」核心代码:publicclassAnalyzerUtils{   publicstaticvoiddisplayToken(Stringstr,Analyzera){       try{           TokenStreamstream=a.tokenStream(“content”,newStringReader(str));

    2022年7月22日
    5
  • java对象的上转型对象_0基础前端和后端哪个难学

    java对象的上转型对象_0基础前端和后端哪个难学JSON(JavaScriptObjectNotation,JS对象简谱)是一种轻量级的数据交换格式。简洁和清晰的层次结构使得JSON成为理想的数据交换语言。易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。JSON语法规则在JS语言中,一切都是对象。因此,任何支持的类型都可以通过JSON来表示,例如字符串、数字、对象、数组等。但是对象和数…

    2022年9月18日
    0
  • c语言中的双周期指令,时钟周期 机器周期 指令周期的概念[通俗易懂]

    c语言中的双周期指令,时钟周期 机器周期 指令周期的概念[通俗易懂]时钟周期:时钟周期也称为振荡周期,定义为时钟脉冲的倒数(可以这样来理解,时钟周期就是单片机外接晶振的倒数,例如12M的晶振,它的时间周期就是1/12us),是计算机中最基本的、最小的时间单位。在一个时钟周期内,CPU仅完成一个最基本的动作。对于某种单片机,若采用了1MHZ的时钟频率,则时钟周期为1us;若采用4MHZ的时钟频率,则时钟周期为250us。由于时钟脉冲是计算机的基本工作脉冲,它控制…

    2022年10月13日
    0
  • 哥伦比亚大学留学申请_哥伦比亚大学巴纳德学院怎么样

    哥伦比亚大学留学申请_哥伦比亚大学巴纳德学院怎么样【转载原因】这是一篇讲述出国申请的文章。虽然我不准备出国,但还是被那朴实而激扬的文字所感染了。这确实是一篇励志的好文。其实不论在哪里,做什么,我们都需要朝着自己的目标去奋斗。真的,只有不懈地奋斗,才能活出更加精彩的人生。文章的作者确实很聪明,而且很坚强。我从心底里佩服她。每个人都有各自不同的路,就像文中提到的某些人,虽然一开始也不满现状,信心满满,但是最终还是向现实妥协了。每每看到一篇像这样…

    2022年10月26日
    0

发表回复

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

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