前提需要去支付宝开发者平台申请私钥 公钥,APPID等,这些就不一一细说了。
1 . 集成支付宝开发所需的SDK maven地址
https://search.maven.org/search?q=g:com.alipay.sdk%20AND%20a:alipay-sdk-java&core=gav
2. 登陆需要接收一个autoCode ,即授权码,这个授权码是客户端用户请求来的,然后我们只需要向前端人员获取即可。
3.获取到授权码之后,我们就需要调用Alipay支付接口
服务端接口文档URL
https://docs.open.alipay.com/api_1
示例代码
AlipayClient alipayClient = new DefaultAlipayClient(LoginUrl, appId, privateKey, "json", "GBK", alipayPublicKey, "RSA2");
AlipaySystemOauthTokenRequest request = new AlipaySystemOauthTokenRequest();
request.setGrantType("authorization_code");
request.setCode(authCode);
// request.setRefreshToken("201208134b203fe6c11548bcabd8da5bb087a83b");
AlipaySystemOauthTokenResponse response = alipayClient.execute(request);
String accessToken = response.getAccessToken();
if (response.isSuccess()) {
System.out.println("调用成功");
System.out.println("支付宝用户唯一id:" + response.getUserId());
System.out.println("token令牌:" + response.getAccessToken()); //访问令牌。通过该令牌调用需要授权类接口
这里我只设置了
grant_type 和 code 可根据自己需求来 |
这是官方文档,说的很详细
当请求成功之后,我们就可以获取token,和用户的ID了。我们拿着token可以请求另外一个接口,然后获取到用户信息。
获取用户信息API文档
当请求成功之后我们可以获取到用户的头像,用户的昵称,和用户ID。这个用户ID也就是我们的支付宝账号在阿里巴巴那边存储的一个唯一标识。
4 .当我们取到这些用户信息后,还需要进一步操作,因为第一次登陆的时候,数据库中肯定是没有信息的,所以当用户登录成功之后,如果数据库中有用户的信息,那么我们需要将用户的信息做一次更新,因为我们取的信息都是从支付宝中取到的,并不是用户和我们直接交互。
打个比方:比如说用户更改了他的支付宝用户名或者头像,那我们如果不做更新的话,可想而知,根本没有同步信息。
所以数据库中有用户信息就更新一下 ,若没有用户信息,我们就把取到的用户信息插入到数据库中。用户第一次登陆的时候我们需要先根据用户ID到数据库中查询一遍。
5. 最后给前端返回 用户昵称,用会ID,和头像。这个也根据自己的业务需求。
具体逻辑如下
AlipayClient alipayClient = new DefaultAlipayClient(LoginUrl, appId, privateKey, "json", "GBK", alipayPublicKey, "RSA2");
AlipaySystemOauthTokenRequest request = new AlipaySystemOauthTokenRequest();
request.setGrantType("authorization_code");
request.setCode(authCode);
// request.setRefreshToken("201208134b203fe6c11548bcabd8da5bb087a83b");
AlipaySystemOauthTokenResponse response = alipayClient.execute(request);
String accessToken = response.getAccessToken();
if (response.isSuccess()) {
System.out.println("调用成功");
System.out.println("支付宝用户唯一id:" + response.getUserId());
System.out.println("token令牌:" + response.getAccessToken()); //访问令牌。通过该令牌调用需要授权类接口
//根据token调用支付宝API取出用户列表信息
AlipayClient alipayClient2 = new DefaultAlipayClient(getUserMesUrl,appId,privateKey,"json","GBK",alipayPublicKey,"RSA2");
AlipayUserInfoShareRequest request2 = new AlipayUserInfoShareRequest();
AlipayUserInfoShareResponse response2 = alipayClient2.execute(request2,accessToken);
if(response.isSuccess()){
System.out.println("调用成功");
System.out.println("头像地址:"+response2.getAvatar());
System.out.println("用户昵称:"+response2.getNickName());
System.out.println("用户ID:"+response2.getUserId());
//支付宝唯一用户ID
String userId = response2.getUserId();
UserExample example = new UserExample();
example.createCriteria().andAlipayUserIdEqualTo(userId);
List<User> userList = userMapper.selectByExample(example);
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
if (userList.size()>0 && userList != null){
//如果存在用户信息,则更新用户信息,如果用户在支付宝中更改了信息,可以达到同步。
User user = userList.get(0);
user.setImgUrl(response2.getAvatar());
user.setUname(response2.getNickName());
user.setLastLoginTime(format.format(new Date()));
userMapper.updateByPrimaryKey(user);
}else{
//如果没有用户信息,则新插入
User user = new User();
user.setUname(response2.getNickName());
user.setImgUrl(response2.getAvatar());
user.setAlipayUserId(response2.getUserId());
user.setLastLoginTime(format.format(new Date()));
// user.setPhone(response2.getPhone());
user.setToken(accessToken);
userMapper.insert(user);
}
//返回信息
UserVo userVo = new UserVo();
userVo.setImgUrl(response2.getAvatar());
userVo.setUname(response2.getNickName());
userVo.setAlipayUserId(response2.getUserId());
return ReturnResult.build(200,"success",userVo);
} else {
System.out.println("调用失败,没有用户信息");
}
return ReturnResult.build(200, "success", ParamEnum.lOGIN_SUCCES.getMsg());
} else {
System.out.println("调用失败");
return ReturnResult.build(200, "fail", ParamEnum.lOGIN_FAIL.getMsg());
}
看完的话,帮忙点个赞呗