1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > 支付宝第三方登录接口调用

支付宝第三方登录接口调用

时间:2022-06-29 14:54:51

相关推荐

支付宝第三方登录接口调用

支付宝第三方登录接口调用

这个参考的是支付宝开放平台, 跟着文档一步步做, 可以做出来, 但是有个问题, 就是对新手来说文档不太容易读懂。我是调用过一次支付宝的支付接口,所以上手比较快。这里再做个记录,也给暂时不会的人铺个路。

首先调用支付宝第三方接口, 你得在支付宝开发平台上注册一个账号, 这个地方略过。然后,你还得创建一个应用,来获得一个APP_ID, 这个APP_ID啊, 以后写代码时候需要的一个参数而已。

弄到这里差不多等几个小时就通过了, app_id要审核通过才能用, 也就是只有当审核通过时,第三方接口才能正常调用, 如果你等不及, 可以使用沙箱环境进行开发测试。登录的接口我没有用过沙箱, 不保证说的正确,我这里就不作介绍了。

审核通过后,根据文档开发,我们从第二步开始。

要选择一个功能, 登录嘛, 当然是获取会员信息咯

然后

这些地方要填, 接口加密的话, 点进去会叫你下载一个支付宝开发平台助手的软件

点击生成密钥, 然后把两个公钥粘贴到网页上对应的空格里, 这里接口非对称加密哦, 以后代码里也会用到这些密钥。支付宝网关一定是那个以及回调地址一定要填, 回调地址需要是一个公网ip”的地址, 我推荐用小花生, 或者你自己用什么办法, 能达到目的就行。

对了,查看接口加密方式时候, 一定要把支付宝公钥记下来, 代码里用到。

准备完这些, 可以开始快乐编码了, 首先你需要一个javaweb项目, 然后把第三方登录功能引入,

自己创建或者已经有的, 都可以, 现在先导入sdk

<dependency> <groupId>com.alipay.sdk</groupId> <artifactId>alipay-sdk-java</artifactId> <version>4.9.28.ALL</version> </dependency>

贴代码图片(最后会有代码贴出)

这张太多了。。 代码直接贴出

··

@Controller

@Slf4j

public class ThreeLoginController {

private static final String MODEL = "/cms/aliLogin";@Value("${ali.URL}")private String URL;@Value("${ali.APP_ID}")private String APP_ID;@Value("${ali.APP_PRIVATE_KEY}")private String APP_PRIVATE_KEY;@Value("${ali.FORMAT}")private String FORMAT;@Value("${ali.CHARSET}")private String CHARSET;@Value("${ali.ALIPAY_PUBLIC_KEY}")private String ALIPAY_PUBLIC_KEY;@Value("${ali.SIGN_TYPE}")private String SIGN_TYPE;@Autowiredprivate CoreUserService userService;@Autowiredprivate CorePlatformService platformService;@Autowiredprivate AlipayClient alipayClient;@GetMapping(MODEL + "/login.do")public ModelAndView aliLogin() {ModelAndView view = new ModelAndView("/threeLogin.html") ;// /oauth2/publicAppAuthorize.htm?app_id=商户的APPID&scope=auth_user&redirect_uri=ENCODED_URLString aliStr="/oauth2/publicAppAuthorize.htm?app_id="+APP_ID+"&scope=auth_user&redirect_uri="+"http%3a%2f%2fb2944625b9.zicp.vip%2fcms%2faliLogin%2freturnAddress.do";view.addObject("aliStr",aliStr);return view;}@GetMapping(MODEL + "/returnAddress.do")public String returnAddress(@RequestParam(name = "auth_code")String authCode, @RequestParam(name = "app_id")String appId, @RequestParam(name = "scope")String scope) {log.info("回调成功!");// 模拟admin登录UserLoginInfo info = userService.login("admin", "123456");if (info == null) {throw new PlatformException("用户名密码错");}CoreUser user = info.getUser();CoreOrg currentOrg = info.getOrgs().get(0);for (CoreOrg org : info.getOrgs()) {if (org.getId() == user.getOrgId()) {currentOrg = org;break;}}info.setCurrentOrg(currentOrg);// 记录登录信息到sessionthis.platformService.setLoginUser(info.getUser(), info.getCurrentOrg(), info.getOrgs());// 测试 auth_code获取用户的user_id和access_tokenString accessToken = getAccessToken(authCode);if(accessToken != null) {AlipayUser aUser = getUserInfoByToken(accessToken);log.info("AlipayUser message: {}", aUser);}return "redirect:/index.do";}/*** 根据auth_code获取用户的user_id和access_token* @param authCode* @return*/public String getAccessToken(String authCode) {AlipaySystemOauthTokenRequest request = new AlipaySystemOauthTokenRequest();request.setCode(authCode);request.setGrantType("authorization_code");try {AlipaySystemOauthTokenResponse oauthTokenResponse = alipayClient.execute(request);return oauthTokenResponse.getAccessToken();} catch (Exception e) {log.error("使用authCode获取信息失败!", e);return null;}}/*** 根据access_token获取用户信息* @param token* @return*/public AlipayUser getUserInfoByToken(String token) {AlipayUserInfoShareRequest request = new AlipayUserInfoShareRequest ();try {AlipayUserInfoShareResponse response = alipayClient.execute(request, token);if (response.isSuccess()) {//打印响应信息

// System.out.println(ReflectionToStringBuilder.toString(response));

//封装支付宝对象信息

AlipayUser alipayUser = new AlipayUser();

alipayUser.setAddress(response.getAddress());

alipayUser.setCertNo(response.getCertNo());

alipayUser.setCity(response.getCity());

alipayUser.setCollegeName(response.getCollegeName());

alipayUser.setDegree(response.getDegree());

alipayUser.setMobile(response.getMobile());

alipayUser.setPhone(response.getPhone());

alipayUser.setProvince(response.getProvince());

alipayUser.setUserName(response.getUserName());

alipayUser.setNickName(response.getNickName());

return alipayUser;

}

log.error(“根据 access_token获取用户信息失败!”);

return null;

} catch (Exception e) {log.error("根据 access_token获取用户信息抛出异常!", e);return null;}}

}

··

这里我要说明一下,扫码登录的页面, 是自己点击或者其他事件进行跳转到的

/oauth2/publicAppAuthorize.htm?app_id=APPID&scope=SCOPE&redirect_uri=ENCODED_URL

把参数填上去就行了,就能到达这个页面

扫码后, 支付宝那边的服务器会返回回调地址, 就是redirect_uri这个,要是外网的环境,

@GetMapping(MODEL + “/returnAddress.do”)就能找到这个, 里面这三个参数是返回的

auth_code, app_id,scope ,之后要用到,抓个包看一下

还有些看文档, 比如参数的解释, 上面说的比较详细

用auth_code可以换access_token, 这个access_token相当于令牌, 想怎么玩就怎么玩,

怎么换取代码已经贴出来了。

之后该干啥干啥

如果遇到支付宝页面的报错, 可以按快捷键ctrl + a, 页面会显示问题所在, 现在把剩下的代码贴出来

``

@Configuration

@Slf4j

@ConfigurationProperties(prefix = “ali”)

@Data

public class AliLoginConf {

private String URL;private String APP_ID;private String APP_PRIVATE_KEY;private String FORMAT;private String CHARSET;private String ALIPAY_PUBLIC_KEY;private String SIGN_TYPE;@Beanpublic AlipayClient getAlipayClient() throws Exception {AlipayClient alipayClient = new DefaultAlipayClient(URL, APP_ID, APP_PRIVATE_KEY, FORMAT, CHARSET, ALIPAY_PUBLIC_KEY, SIGN_TYPE);log.info("注入支付宝客户端成功");return alipayClient;}

}

ali.URL=/gateway.do

ali.APP_ID=你自己的

ali.APP_PRIVATE_KEY=你自己的

ali.FORMAT=json

ali.CHARSET=UTF-8

ali.ALIPAY_PUBLIC_KEY=你自己的

ali.SIGN_TYPE=RSA2

@Data

public class AlipayUser {

private String userId;private String code;private String msg;/*** 用户头像*/private String avatar;private String province;private String city;private String nickName;private String gender;private String address;private String certNo;private String collegeName;private String degree;private String mobile;private String phone;private String userName;

}

``

不知道为啥排版变成这样了。。 丑点能用就行…

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。