1.登录蚂蚁金服,创建应用,并且添加第三方授权,获取会员信息
添加应用后,需要设置密钥,按支付宝提供的工具生成 支付宝公钥和商家私钥。将支付宝公钥填入rsa2密钥中即可。
1.调用支付宝进行网站登录。
前提
登录按钮:
<a href="https://openauth.alipay.com/oauth2/publicAppAuthorize.htm?app_id=你的appid&scope=auth_user&redirect_uri=你的验证成功后的回调地址" >支付宝登录</a>
2.登录成功回调服务(可以获得支付宝用户信息)
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="java.util.*"%>
<%@ page import="java.util.Map"%>
<%@ page import="com.alipay.api.*"%>
<%@ page import="com.alipay.api.request.*"%>
<%@ page import="com.alipay.api.response.*"%>
<%@ page import="com.sj.utils.AlipayConfig"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
//获取支付宝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");
out.write(app_id + "\n");
//获取用户信息授权
String auth_user = new String(request.getParameter("scope").getBytes("ISO-8859-1"),"UTF-8");
out.write(auth_user + "\n");
//获的第三方登录用户授权auth_code
String auth_code = new String(request.getParameter("auth_code").getBytes("ISO-8859-1"),"UTF-8");
out.write(auth_code + "\n");
String privateKey = "商家私钥";
String publicKey = "支付宝公钥";
String aapid= "你的appid";
//使用auth_code换取接口access_token及用户userId
//AlipayClient alipayClient = new DefaultAlipayClient("https://openapi.alipay.com/gateway.do",aapid,privateKey,"json","UTF-8",publicKey,"RSA2");//正常环境下的网关
AlipayClient alipayClient = new DefaultAlipayClient("https://openapi.alipay.com/gateway.do",appid,privateKey,"json","UTF-8",publicKey,"RSA2");//沙箱下的网关
//获取用户信息授权
AlipaySystemOauthTokenRequest requestLogin2 = new AlipaySystemOauthTokenRequest();
requestLogin2.setCode(auth_code);
requestLogin2.setGrantType("authorization_code");
try {
AlipaySystemOauthTokenResponse oauthTokenResponse = alipayClient.execute(requestLogin2);
out.write("<br/>AccessToken:"+oauthTokenResponse.getAccessToken() + "\n");
//调用接口获取用户信息
AlipayClient alipayClientUser = new DefaultAlipayClient("https://openapi.alipay.com/gateway.do",appid, privateKey, "json", "UTF-8", publicKey, "RSA2");
AlipayUserInfoShareRequest requestUser = new AlipayUserInfoShareRequest();
try {
AlipayUserInfoShareResponse userinfoShareResponse = alipayClient.execute(requestUser, oauthTokenResponse.getAccessToken());
out.write("<br/>UserId:" + userinfoShareResponse.getUserId() + "\n");//用户支付宝ID
out.write("UserType:" + userinfoShareResponse.getUserType() + "\n");//用户类型
out.write("UserStatus:" + userinfoShareResponse.getUserStatus() + "\n");//用户账户动态
out.write("Email:" + userinfoShareResponse.getEmail() + "\n");//用户Email地址
out.write("IsCertified:" + userinfoShareResponse.getIsCertified() + "\n");//用户是否进行身份认证
out.write("IsStudentCertified:" + userinfoShareResponse.getIsStudentCertified() + "\n");//用户是否进行学生认证
out.write("my:" + userinfoShareResponse.getNickName()+userinfoShareResponse.getAddress() +userinfoShareResponse.getArea() +userinfoShareResponse.getPersonPictures()+userinfoShareResponse.getBody()+"\n");
} catch (AlipayApiException e) {
//处理异常
e.printStackTrace();
}
} catch (AlipayApiException e) {
//处理异常
e.printStackTrace();
}
%>
</body>
</html>