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

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


相关推荐

  • Android Studio 提示 Unable to access Android SDK add-on list解决方法

    Android Studio 提示 Unable to access Android SDK add-on list解决方法

    2021年10月1日
    129
  • phpspreadsheet中文手册_php读取文件内容

    phpspreadsheet中文手册_php读取文件内容由于phpexcel已经不再维护,phpspreadsheet是phpexcel的下一个版本。phpspreadsheet是一个用纯php编写的库,并引入了命名空间,psr规范等。这里简单介绍下phpspreadsheet的导入导出功能。1、安装使用composer安装:composerrequirephpoffice/phpspreadsheetgithub下载:2、excel文件导出/**…

    2025年12月13日
    5
  • Activiti教程(六)activiti的流程设计_未完待续

    Activiti教程(六)activiti的流程设计_未完待续一.idea配置activiti插件二.流程设计使用idea设计各种流程图并讲解流程空间的各自属性 

    2022年7月21日
    16
  • 深入理解 HashMap

    深入理解 HashMap什么是HashMap?​ HashMap是基于哈希表的Map接口是实现的。此实现提供所有可选操作,并允许使用null做为值(key)和键(value)。HashMap不保证映射的顺序,特别是它不保证该顺序恒久不变。此实现假定哈希函数将元素适当的分布在各个桶之间,可作为基本操作(get和put)提供稳定的性能。在jdk1.7中的HashMap是基于数组+链表实现的,在jdk1….

    2025年10月19日
    7
  • AFL 源码分析

    AFL 源码分析AFL 作为 C C 白盒 fuzzer 的鼻祖 为后来许多优秀的 fuzzer 提供了技术支持 衍生了很多 fuzzer 工具 本文只是站在巨人的肩膀上 参考了大量的博客 重新审计了部分源码 很多细节并没有深究 但对理解 AFL 的思想还是有一定作用的

    2025年11月14日
    3
  • kubernetes CKA题库(附答案)

    kubernetes CKA题库(附答案)第一题RBAC授权问题权重:4%设置配置环境:[student@node-1]$kubectlconfiguse-contextk8sContext为部署管道创建一个新的ClusterRole并将其绑定到范围为特定的namespace的特定ServiceAccount.Task创建一个名为deployment-clusterrole且仅允许创建以下资源类型的新ClusterRole:DeploymentStatefulSetDaemonSet在现有的name

    2022年6月9日
    144

发表回复

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

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