• 集成第三方开放平台



     
    目前国内常见的第三方开放平台有:
    • QQ开放平台
    • 微信开放平台
    • 蚂蚁金服开放平台
    • 新浪微博开放平台
     
    我们可以通过集成这些第三方平台来实现:
    • 第三方登录
    • 第三方支付
    • 内容分享到第三方平台
    • 获取第三方平台用户资源
    • ......
     
     
    下面以新浪微博开放平台的第三方登录为例看下Java系统具体的集成步骤,QQ和微信类似,只需少许修改(具体请参考源码中示例)
     
    一、注册平台账号,创建应用,填写认证回调地址(例如:http://127.0.0.1:8080/weibo/callback)
     
    二、通过OAuth2认证
     
    1.重定向请求,请求授权码code
    /**
         * Step 1: 重定向到sina微博登录,请求授权码CODE
         * https://api.weibo.com/oauth2/authorize?client_id=123050457758183&redirect_uri=http://www.example.com/response&response_type=code
         *
         * @param resp
         * @throws Exception
         */
        @RequestMapping("/weibo/login")
        public void weiboLogin(HttpServletResponse resp) throws Exception {
            String authorizeUrl = baseAuthorizeUrl + "?client_id=" + appKey + "&redirect_uri=" + redirectUri + "&response_type=code";
            resp.sendRedirect(authorizeUrl);
        }
    client_id为 平台应用对应的appKey
     
    2.登录回调,获取授权码code
    /**
     * Step 2: 登录回调,获取Code
     *
     * @param req
     * @throws Exception
     */
    @RequestMapping("/weibo/callback")
    public String qqCallback(HttpServletRequest req) throws Exception {
        String code = req.getParameter("code");
        //获取Access Token,并返回给页面
        return getAccessToken(code);
    }

    3.通过 授权code获取access_token

    /**
     * Step 3: 通过code获取access_token
     *
     * @param resp
     * @param code 认证码
     * @return
     * @throws Exception
     */
    private String getAccessToken(String code) throws Exception {
        //拼接请求URL
        String tokenUrl = baseTokenUrl + "?client_id=" + appKey + "&client_secret=" + appSecret + "&grant_type=authorization_code&code=" + code + "&redirect_uri=" + redirectUri;
    
        //发送post请求,获取响应字符串
        String resp = RestHttpClient.sendHttpPostRequest(tokenUrl);
    
        return resp;
    }

    baseTokenUrl为 https://api.weibo.com/oauth2/access_token

    4.通过token和uid调用微博api,例如查询微博用户信息

    /**
     * Step 4: 根据Token和用户ID获取用户信息
     * access_token:2.00AZrTrB5jlucE809b31fc07I9H_XC, uid:1706396054
     *
     * @param access_token
     * @param uid
     * @return
     * @throws Exception
     */
    @RequestMapping("/weibo/userInfo")
    public String getUserInfo(String access_token, String uid) throws Exception {
        //拼接请求URL
        String userInfoUrl = baseUserInfoUrl + "?access_token=" + access_token + "&uid=" + uid;
        System.out.println(userInfoUrl);
    
        //发送请求,获取响应字符串
        String resp = RestHttpClient.sendHttpGetRequest(userInfoUrl);
    
        //返回响应字符串
        return resp;
    }

    baseUserInfoUrl为 https://api.weibo.com/2/users/show.json

    源码地址:https://github.com/13babybear/bounter-openapi

  • 相关阅读:
    MapReduce运行原理和过程
    为什么均方差(MSE)不适合分类问题?交叉熵(cross-entropy)不适合回归问题?
    207. 课程表
    131. 分割回文串
    152. 乘积最大子数组
    pandas内存优化函数
    395. 至少有K个重复字符的最长子串
    HTML入门
    递归与链表
    Spring--001
  • 原文地址:https://www.cnblogs.com/gdufs/p/7203252.html
Copyright © 2020-2023  润新知