资讯专栏INFORMATION COLUMN

微信公众号授权

tuomao / 924人阅读

摘要:重新整理做过的功能,以及过程遇到问题,温故而知新官方文档一准备工作接入配置修改添加业务域名网页授权域名授权回调域名不加协议头绑定时微信要求将文件上传根目录,需要将文件添加到我项目许可中确保文件可被访问,否则绑定不通过公众平台参数二授权登录简

重新整理做过的功能,以及过程遇到问题,温故而知新
官方文档
一 准备工作 (a.接入 b.配置)

a) 修改/添加 业务域名、网页授权域名; 授权回调域名 不加 http:// 协议头

绑定时微信要求将 *.txt文件上传根目录,需要将文件 添加到我项目.htaccess许可中 确保文件可被访问,否则绑定不通过

b) 公众平台 参数

appid
secret

二 授权登录

简单画一个流程图

网上很多人说微信浏览器 session 失效的问题,我测试并不存在; 不太懂为什么session会失效;暂时get不到

忽略了refresh_token 刷新access_token步骤

ci框架

    function __construct()    {
        parent::__construct();
        $this->load->library("session");
    }

    public function index() {
        if (!isset($_SESSION["wx_user_data"])) {
            // 1. 获取缓存token: 如果token过期则通过 refresh_token获取,都过期或首次请求则获取code
            $code = $this->input->get("code");
            if (!$code) {
                //获取现有token
                $access_token = $this->get_wx_access_token();
            }

            // 2. get access token
            $this->load->library("mycurl");
            $wx_get_token = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=".WX_APP_ID."&secret=".WX_SECRET."&code=".$code."&grant_type=authorization_code";
            list($returnCode, $returnContent) = $this->mycurl->curl_post_json_to_java($wx_get_token);
            $returnContent = json_decode($returnContent, true);

            if ($returnCode ===200 && !isset($returnContent["access_token"])) {
                die("error-page-todo-later".$returnContent["errcode"]);
            }

            $access_token  = $returnContent["access_token"];
            $refresh_token = $returnContent["refresh_token"];
            $expires_date  = time()+7100;
            $openid        = $returnContent["openid"];

            // 3. 刷新 access token
            // 4. 拉取用户信息
            $wx_get_userinfo = "https://api.weixin.qq.com/sns/userinfo?access_token=".$access_token."&openid=".$openid."&lang=zh_CN";
            list($returnCode, $returnContent) = $this->mycurl->curl_post_json_to_java($wx_get_userinfo);
            $returnContent = json_decode($returnContent, true);

            if ($returnCode ===200 && isset($returnContent["errcode"])) {
                die("error-page-todo-later".$returnContent["errcode"]);
            }

            $userData = array();
            $userData["openid"]     = $returnContent["openid"];
            $userData["unionid"]    = $returnContent["unionid"];
            $userData["nickname"]   = $returnContent["nickname"];
            $userData["sex"]        = $returnContent["sex"];
            $userData["province"]   = $returnContent["province"];
            $userData["city"]       = $returnContent["city"];
            $userData["country"]    = $returnContent["country"];
            $userData["headimgurl"] = $returnContent["headimgurl"];
            $userData["privilege"]  = $returnContent["privilege"];

            // 5. session 存储userData 缓存做不到每次从入口进来实时刷新用户信息
            $this->session->set_userdata("wx_user_data", $userData);
        }

        // 6. 项目主逻辑
        $templateData["userData"] = $_SESSION["wx_user_data"];
        $this->load->view("union_m/index.html", $templateData);
    }

    /**
     * 跳转至授权页面,公众号入口 scope user-info 同样静默
     * @return [type] [description]
     */
    public function redirect_wx_url() {
        $wx_get_code  = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=".WX_APP_ID."&redirect_uri=".urlencode(UNION_INDEX)."&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect";
        $this->load->helper("url");
        redirect($wx_get_code);
    }

    // access token 维护
    public function get_wx_access_token() {
        // 1. 是否有未过期 token 直接return
        // 2. 是否有未过期 refresh_token 则获取 token, 刷新access_token (忽略)
        // 3. 都不存在 首次授权 或 全部过期的情况 跳转授权页面
        $this->redirect_wx_url();
    }
结合项目最后实现地址

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/30767.html

相关文章

  • 浅析微信支付:开发前的准备

    摘要:本文是浅析微信支付系列文章的第三篇,主要会讲一下在开发前的一些注意事项。浅析微信支付系列已经更新两篇了哟,没有看过的朋友们可以看一下。开通微信支付需要注册登陆微信商户平台,微信支付相关的信息都需要在这个平台上进行操作。 本文是【浅析微信支付】系列文章的第三篇,主要会讲一下在开发前的一些注意事项。 浅析微信支付系列已经更新两篇了哟~,没有看过的朋友们可以看一下。 浅析微信支付:前篇大纲...

    yanest 评论0 收藏0
  • 浅析微信支付:微信公众网页授权

    摘要:浅析微信支付微信公众号网页授权本文是浅析微信支付系列文章的第四篇,主要讲解微信支付前如何获取获取网页授权及用户信息获取。浅析微信支付系列已经更新三篇了哟,没有看过的朋友们可以看一下哦。 浅析微信支付:微信公众号网页授权 本文是【浅析微信支付】系列文章的第四篇,主要讲解微信支付前如何获取获取网页授权及用户信息获取。 浅析微信支付系列已经更新三篇了哟~,没有看过的朋友们可以看一下哦。 浅...

    tinyq 评论0 收藏0
  • 小程序登录、微信网页授权(Java版)

    摘要:小程序登录微信网页授权版首先呢,登录授权授权登录,是一样的意思,不用纠结。写小程序授权登录的代码前,需要了解清楚与的区别,这里再简单介绍一下腾讯有个微信开放平台,只有企业才能注册账号,可理解为微信体系里,最顶级的账号。 小程序登录、微信网页授权(Java版) 首先呢,登录、授权、授权登录,是一样的意思,不用纠结。 写小程序授权登录的代码前,需要了解清楚openid与unionid的区别...

    joywek 评论0 收藏0
  • VueJs单页应用实现微信网页授权微信分享功能

    摘要:在实际开发中,无论是做端端还是微信公众号等类型的项目的时候,或多或少都会涉及到微信相关的开发,最近公司项目要求实现微信网页授权,并获取微信用户基本信息的功能及微信分享的功能,现在总算完成了,但开发过程中遇到好几个坑。 在实际开发中,无论是做PC端、WebApp端还是微信公众号等类型的项目的时候,或多或少都会涉及到微信相关的开发,最近公司项目要求实现微信网页授权,并获取微信用户基本信息的...

    doodlewind 评论0 收藏0
  • VueJs单页应用实现微信网页授权微信分享功能

    摘要:在实际开发中,无论是做端端还是微信公众号等类型的项目的时候,或多或少都会涉及到微信相关的开发,最近公司项目要求实现微信网页授权,并获取微信用户基本信息的功能及微信分享的功能,现在总算完成了,但开发过程中遇到好几个坑。 在实际开发中,无论是做PC端、WebApp端还是微信公众号等类型的项目的时候,或多或少都会涉及到微信相关的开发,最近公司项目要求实现微信网页授权,并获取微信用户基本信息的...

    BicycleWarrior 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<