Java支付宝第三方登陆开发过程
程序员文章站
2024-02-26 12:53:34
...
网站支付宝登录接入流程
一、文档地址
接入文档地址:网站支付宝登录。
注:该接口支持沙箱环境测试。
二、开发前准备
1、签约
网站支付宝登录无需单独签约,在Appid对应的应用上添加获取会员信息功能包即可。
2、创建应用
(1)创建应用。
(2)生成**:参考如何生成RSA2**或者如何生成公钥证书。
(3)如何获取支付宝公钥。
(4)添加功能包:进入开发者中心,根据自己的业务需求,选择“应用类型”,再点击要添加功能的应用,进入应用详情页,然后进行如下操作。
3、服务端sdk地址
三、接口集成代码示例
1、应用授权URL拼接(在页面上加入此链接。这个链接是跳转到支付宝的授权地址)
授权链接拼接示例如下:
https://openauth.alipay.com/oauth2/publicAppAuthorize.htm?app_id=APPID&scope=SCOPE&redirect_uri=UrlEncode(授权回调地址)
授权链接上的各参数说明
app_id:开发者应用的app_id,如何获取可参考获取appid说明。
scope:网站支付宝登录的scope可填写成auth_user或者auth_base,2则区别可参考auth_base和auth_user的参数值说明进行了解。
redirect_uri:授权回调地址,必须以http或者https开头。
state:商户自定义参数,用户授权后,重定向到 redirect_uri 时会原样回传给商户,可不传递。
2、获取 auth_code(授权成功后,跳转到回调地址。进行用户信息获取)
授权商户访问拼接好的应用授权URL拼接链接,点击授权成功跳转至授权回调页面,在授权回调页面会带有auth_code 相关的数据内容,示例如下:
http://example.com/doc/toAuthPage.html?app_id=2014101500013658&source=alipay_wallet&scope=auth_user&auth_code=ca34ea491e7146cc87d25fca24c4cD11
3、实现代码如下(回调地址业务,获取用户信息)
通过auth_code 获取用户信息
返回值如下:
user_id就是我们唯一的用户标识。其实代码并不难。也就是刚入手的话。对于私钥和应用公钥以及支付宝公钥会弄混淆。
顺便把代码贴在这里吧。
/**
* 支付宝第三方登陆
* @param code
* @param appId
* @param request
* @param response
*/
@RequestMapping("/qyStaffAlipay/login")
public void qyStaffAlipay(@RequestParam(value = "auth_code") String code,
@RequestParam(value = "app_id") String appId,
HttpServletRequest request, HttpServletResponse response) throws IOException {
try {
JSONObject json = AlipayClientUtils.getAuthToken(code);
if(json != null){
String unionId = json.getString("user_id");
if(StringUtils.isNotBlank(unionId)){
//登陆业务
}else {
logger.error("登录失败:unionId为空");
}
}
}catch (AuthException e) {
e.printStackTrace();
logger.error("登录失败:" + e.getMessage());
} catch (Exception e) {
e.printStackTrace();
logger.error("登录失败:" + e.getMessage());
}
response.sendRedirect("/r/login");
return;
}
import com.alibaba.fastjson.JSONObject;
import com.alipay.api.AlipayApiException;
import com.alipay.api.AlipayClient;
import com.alipay.api.DefaultAlipayClient;
import com.alipay.api.request.AlipayOpenPublicTemplateMessageIndustryModifyRequest;
import com.alipay.api.request.AlipaySystemOauthTokenRequest;
import com.alipay.api.response.AlipayOpenPublicTemplateMessageIndustryModifyResponse;
import com.alipay.api.response.AlipaySystemOauthTokenResponse;
import com.ditop.modules.gcjsy.basic.constant.AliPayLoginContant;
import static com.alipay.api.AlipayConstants.CHARSET_GBK;
/**
* @author wwz
*/
public class AlipayClientUtils {
/**
* 创建单例
* @return
*/
private static class AlipayClientHolder{
private static final AlipayClient alipayClient = new DefaultAlipayClient(AliPayLoginContant.SERVICE_URL, AliPayLoginContant.APPID, AliPayLoginContant.APP_PRIVATE_KEY, "json", CHARSET_GBK, AliPayLoginContant.ALIPAY_PUBLIC_KEY, "RSA2");
}
/**
* 获取token信息
* @param code
* @return
* @throws AlipayApiException
*/
public static JSONObject getAuthToken(String code) throws AlipayApiException {
AlipayClient alipayClient = AlipayClientHolder.alipayClient;
AlipaySystemOauthTokenRequest request = new AlipaySystemOauthTokenRequest();
request.setCode(code);
request.setGrantType("authorization_code");
AlipaySystemOauthTokenResponse response = alipayClient.execute(request);
if(response.isSuccess()){
String body = response.getBody();
if(!StringUtils.isEmpty(body)){
JSONObject jsonObject = JSONObject.parseObject(body);
JSONObject object = jsonObject.getJSONObject(AliPayLoginContant.ALIPAY_SYSTEM_OAUTH_TOKEN_RESPONSE);
return object;
}
System.out.println("调用成功");
} else {
System.out.println("调用失败");
}
return null;
}
}
/**
* @author wwz
*/
public class AliPayLoginContant {
public final static String BASE_URL = "http://wwz1994.e2.luyouxia.net:22851";
/**
* 网关地址
*/
public final static String SERVICE_URL = "https://openapi.alipay.com/gateway.do";
/**
* appid
*/
public final static String APPID = "XXXXX";
/**
* 回调地址
*/
public final static String REDIRECT_URL = "XXXXX";
/**
* 支付宝公钥(在签名)
*/
public final static String ALIPAY_PUBLIC_KEY = "XXXXX";
/**
* 你自己生成的私钥
*/
public final static String APP_PRIVATE_KEY = "XXXXX";
public static final String ALIPAY_SYSTEM_OAUTH_TOKEN_RESPONSE = "alipay_system_oauth_token_response";
}
上一篇: cpp技巧——数据输入输出
推荐阅读
-
Java支付宝第三方登陆开发过程
-
Java版微信公众号支付开发全过程
-
2020macOS Big Sur配置Java开发环境之jdk安装过程
-
微信开放平台开发第三方授权登陆(五):第三方登陆授权开发(微信小程序)
-
微信开放平台【第三方平台】java开发总结:验证票据(component_verify_ticket)(-)
-
微信开放平台开发第三方授权登陆(四):第三方登陆授权开发(微信公众号)
-
微信开发(4):微信第三方开放平台的搭建(java)
-
Java版微信公众号支付开发全过程
-
Java Web开发过程中登陆模块的验证码的实现方式总结
-
Java Web开发过程中登陆模块的验证码的实现方式总结