支付宝开发平台之第三方授权登录与获取用户信息

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_29956725/article/details/86609795

对于第三方登录,我们常见了,很多应用可以进行第三方登录,我常用的有:QQ、微信、新浪、支付宝等等,今天我们就一起来简单学习一下支付宝第三方授权登录。

  打开支付宝开发平台,注册成为开发者,点击开发者中心,在我的应用中创建一个应用: 

  打开支付宝开发平台,注册成为开发者,点击开发者中心,在我的应用中创建一个应用: 

点击功能信息,添加我们需要的功能: 

 

到这我们还不能进行接口调试,因为我们的应用没有上线,APPID是无效的,这里阿里给了我们一个解决方案,就是通过沙箱模式进行接口调试,下面我们来配一下我们的沙箱模式: 

记得给支付宝沙箱应用中设置支付宝本地生成的公钥

 

这个为本地生成的,代码中应该用的公钥为支付宝公钥,记住本地生成的叫应用公钥和应用秘钥;我们代码中应该用支付宝生成的支付宝公钥,负责会报错

配置过RAS2就可以不用配置RAS1了,公钥和私钥的生成规则,查看支付宝文档,我这里是使用支付宝提供的秘钥生成工具生成的,创建完成后,我们下载的文件夹下会生成三个文件:rsa_private_key.pem(秘钥)、rsa_private_key_pkcs8.pem(java专用秘钥)、rsa_public_key.pem(公钥),我们把生成的公钥上传到沙箱环境下RAS2下,点击查看支付宝公钥,将公钥保存,接下来开发使用。应用网关和授权回调地址,这里因为是本地调试,暂时写为图上内容即可。

扫描二维码关注公众号,回复: 5107272 查看本文章

  做好这些准备工作我们就可以开始进行我们的具体功能实现了,首先我打开支付宝开发平台开发文档,点击基础能力->第三方应用授权,阅读一遍内容,我回到文档的第三步: 

<a href="https://openauth.alipaydev.com/oauth2/appToAppAuth.htm?app_id=2016092200572111&redirect_uri=http://localhost:7081/alipay/auth" >
支付宝第三方登录</a>
<br/>

</body>

package spring.controller;

import java.io.UnsupportedEncodingException;

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;

import com.alipay.api.*;
import com.alipay.api.request.*;
import com.alipay.api.response.*;

@RequestMapping("/alipay")
@Controller
public class AliPayController {

    @RequestMapping(value = "/index", method = RequestMethod.GET)
    public String index() {
        return "alipay/index";
    }

    @RequestMapping(value = "/auth", method = RequestMethod.GET)
    @ResponseBody
    public Object auth(HttpServletRequest request, HttpServletResponse response)
            throws UnsupportedEncodingException, AlipayApiException {
        // 获取支付宝GET过来反馈信息
        Map<String, String> params = new HashMap<String, String>();
        Map requestParams = request.getParameterMap();
        for (Iterator iter = requestParams.keySet().iterator(); iter.hasNext();) {
            String name = (String) iter.next();
            String[] values = (String[]) requestParams.get(name);
            String valueStr = "";
            for (int i = 0; i < values.length; i++) {
                valueStr = (i == values.length - 1) ? valueStr + values[i] : valueStr + values[i] + ",";
            }
            // 乱码解决,这段代码在出现乱码时使用。如果mysign和sign不相等也可以使用这段代码转化
            valueStr = new String(valueStr.getBytes("ISO-8859-1"), "utf-8");
            params.put(name, valueStr);

            // 获取支付宝的通知返回参数,可参考技术文档中页面跳转同步通知参数列表(以下仅供参考)//
            // 支付宝用户号
            String app_id = new String(request.getParameter("app_id").getBytes("ISO-8859-1"), "UTF-8");
            System.out.println("app_id:" + app_id + "\n");

            // 获取第三方登录授权
            String alipay_app_auth = new String(request.getParameter("source").getBytes("ISO-8859-1"), "UTF-8");
            System.out.println("alipay_app_auth:" + alipay_app_auth + "\n");

            // 第三方授权code
            String app_auth_code = new String(request.getParameter("app_auth_code").getBytes("ISO-8859-1"), "UTF-8");// 获的第三方登录用户授权app_auth_code
            System.out.println("app_auth_code:" + app_auth_code + "\n");

            String privateKey = "MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQCvujc5u/gT4SbGeauZiNm76oOXxue/nHzx2Ti3rNrshbd/0c/ZKZbkQKL0fo6yZGuHag1XkNfE+uP63Vyu3W3SDCEPdzMrnAr7Pivee2t22uSvw3Z7FrVS+CoDHeUdvHKZeXHMYa2G6+Y2qU0nHHI88697BaDQrDni+j/MedAPkUKce72/3N6oaaCWPnhB96Hv8MsiOlLRNJUrZFl74VTgL4noqfSinIJ47KUUlpX9P6yfHBD0bUpzYp4w5BpHJg0lCv2UUj5hdxpZQy/87fxbXeO6wZyZwAr26+XlWBoHjwmFrDg/sDh3o6DWaOmGie96pgJH/ZLAkDR1jRmQ8+4HAgMBAAECggEAPl+chpOfpH7AYqaBMEgQ8NB20QK685o6ByYRKbDjLBzyWx4/5lcKxg3jSWE6iTt3p2MPRUuWKsba8QptgWv7NRk1CuZGdW43v6H7tEaeiFt93J1Gir4usjp/vwd3cayYCL3AlMj+7OsCldhWGFHSgqwEV2hSAn9/NH+a8ZszLLLL6HkSua9Q/X52MTUU0RyBx+nYtyIxufmy4kcVwPl3TRfPm57AR0HQq7C/GXPloFK1jGEqjoWjOEDGs+2G0hGqcdz4f6xbrjfXZ5ZeBL5mEC1VvYX8qUv3u0Hu9mMpt/0CvKM9TeWLOvBStUkdTf3tIMukOGJQmXTusVFEKj/P0QKBgQD7rzgInKE1RkOU/tdeqBkhqHWOMm5cc6/z6Nbb3WPykXRhj84yNpajsPZLxwriMrJI45fCJu6VWm+5NZVLVScX5KPlI0X/4/mwWfyrzAoIO6KitsmQJ2WMAdxH4iPNNtEf8HWV4yKCBteMtOKWe4InAhQD2n5mwTVK80d68v1/DQKBgQCyvZRn1GRqwW/CvdGEz3MEBv7q9culDtaQcclsid/25FJhsJZApmoxeol6XCZEhwsijGhBsCc974w6hwDzRDhxXzktpvw6Uu1zKOCMNmNtcAJTXM4NHWjQLuhIXhUy1KxzTeD4rD4zGcvGPcmlnOwPW5MPqVB/4XLQQq9iUIf8YwKBgA1DuNJLXvutzlYF8FfeyCRL+pYZ9lMNDdLvDJPd4Syhmd6ic52V3u6VnwVzYhF11ouc4xyqbJyWfZjnSA0GWd8af8DN0RyhaUFwHK75O/YfHn0w4QKl8OYmGvP26SghoXfrdmcF54Wu0qFpzx9bNwrTQzbIxyynNiXTGItUTyPpAoGAGJ00z6uW/ICQ5G+BZ9mtjBNujWq11ZAaih+xTkoaVoSQt7U6q8J/AztNrVT9TBiQtvxA6zLX5JaVaAXpYpa1cx9a32eMenerDV3GtmhS/uIa3+H62iF/qpObF0QlhS92ZBaIcZY+pojZ3/3oQ+89Lsw8jz6QwFuKlRVp048leuMCgYBp6/+cluwOwWh1sjADIvMfPOhRnT6c8SkUXVv6h/IipZYpfVfFRJcI/9+87tBRg2qz93S+NRdSAh3RaEmg+nWZPJ1Rpq12gM7LOT5YyZ6oCi7pvgHpIBxHEyB/o5jY/ptCIIwbj/L7OZOljZXXmLnHJMt1WKd0EMh06LBje+LHgw==";

            // 支付宝的公钥,不是自己本地生成的公钥
            String publicKey = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqN6m0toFQnBhmQ1vavBRhA/LgzP/A0p1QpcS5yOqcrYOYc5L0HNh4qkEPwNw1zV+e1s5B1vxrEeWOi2Ps43Sdr3uQUrp32Cv7ELEWHrgnI8lBTr6jXE09U1RhJbqbR6CGZ4uMwQnukK1Ay8LjLrNi09COUtQPgUcE9t+MDtLHbY+au5bdZTHTkkZ+lIf4yPD7emrbwh3Ey/oIrIZrL5HbVuqGRPnHGvG0VxT5FBeN7AH/VgofIKnYgWmqvWffKtxLtWR2z9fday91sbWcjuFj300dV4cwLvuHmJvJCdpFuUcDTSO6TdvMy3DkFriHho5djm+PotDeKu0mZiUGt8gEQIDAQAB";

            // 使用auth_code换取接口access_token及用户userId
            // AlipayClient alipayClient = new
            // DefaultAlipayClient("https://openapi.alipay.com/gateway.do","应用APPID",privateKey,"json","UTF-8",publicKey,"RSA2");//正常环境下的网关
            AlipayClient alipayClient = new DefaultAlipayClient("https://openapi.alipaydev.com/gateway.do",
                    "2016092200572111", privateKey, "json", "UTF-8", publicKey, "RSA2");// 沙箱下的网关

            AlipayOpenAuthTokenAppRequest requestLogin1 = new AlipayOpenAuthTokenAppRequest();
            requestLogin1.setBizContent(
                    "{" + "\"grant_type\":\"authorization_code\"," + "\"code\":\"" + app_auth_code + "\"" + "}");

            // 第三方授权
            AlipayOpenAuthTokenAppResponse responseToken = alipayClient.execute(requestLogin1);
            if (responseToken.isSuccess()) {
                System.out.println("<br/>调用成功" + "\n");

                System.out.println(responseToken.getAuthAppId() + "\n");
                System.out.println(responseToken.getAppAuthToken() + "\n");
                System.out.println(responseToken.getUserId() + "\n");
                return "<br/>调用成功" + "\n";

            } else {
                System.out.println("调用失败" + "\n");
                return "调用失败" + "\n";
            }
        }
        return "调用失败";
    }
}

测试登陆的时候,不能用自己的支付宝账号登陆,测试,只能用沙箱账号进行测试,支付宝给我们默认提供了沙箱账号

猜你喜欢

转载自blog.csdn.net/qq_29956725/article/details/86609795