项目中涉及到使用支付宝提现,涉及到的相关流程有支付宝授权,授权后获取到用户信息,使用用户信息进行转账。以下是demo测试代码。
public String pay(String code) throws AlipayApiException {
//构造client
CertAlipayRequest certAlipayRequest = new CertAlipayRequest();
//设置网关地址
certAlipayRequest.setServerUrl(serverUrl);
//设置应用Id
certAlipayRequest.setAppId(appId);
//设置应用私钥
certAlipayRequest.setPrivateKey(privateKey);
//设置请求格式,固定值json
certAlipayRequest.setFormat(format);
//设置字符集
certAlipayRequest.setCharset(charset);
//设置签名类型
certAlipayRequest.setSignType(signType);
//设置应用公钥证书路径
certAlipayRequest.setCertPath("应用公钥证书绝对路径");
//设置支付宝公钥证书路径
certAlipayRequest.setAlipayPublicCertPath("支付宝证书绝对路径");
//设置支付宝根证书路径
certAlipayRequest.setRootCertPath("支付宝根证书绝对路径");
//构造client
AlipayClient alipayClient = new DefaultAlipayClient(certAlipayRequest);
// 创建获取token的request
AlipaySystemOauthTokenRequest tokenRequest = new AlipaySystemOauthTokenRequest();
tokenRequest.setCode(code);
tokenRequest.setGrantType("authorization_code");
AlipaySystemOauthTokenResponse tokenResponse = alipayClient.certificateExecute(tokenRequest);
String accessToken = tokenResponse.getAccessToken();
// 获取用户信息
AlipayUserInfoShareRequest userinfoRequest = new AlipayUserInfoShareRequest();
AlipayUserInfoShareResponse userInfoResponse = alipayClient.certificateExecute(userinfoRequest,accessToken);
String userId = userInfoResponse.getUserId();
// 开始转账
AlipayFundTransUniTransferRequest request = new AlipayFundTransUniTransferRequest();
request.setBizContent ( "{" +
"\"out_biz_no\":\"test20201201002\"," + // 单号唯一,需要保证每次转账时的唯一性
"\"trans_amount\":0.1," +
"\"product_code\":\"TRANS_ACCOUNT_NO_PWD\"," +
"\"biz_scene\":\"DIRECT_TRANSFER\"," +
"\"order_title\":\"使用用户ID转账测试\"," +
"\"payee_info\":{" +
"\"identity\":\""+userId+"\"," +
"\"identity_type\":\"ALIPAY_USER_ID\"," + // ALIPAY_USER_ID ALIPAY_LOGON_ID两种转账方式
" }," +
"\"remark\":\"使用用户ID转账\"," +
"\"business_params\":\"{\\\"payer_show_name\\\":\\\"测试\\\"}\"," +
" }" );
AlipayFundTransUniTransferResponse response = alipayClient.certificateExecute(request);
if (response.isSuccess()){
System.out.println ( "调用成功" );
return "success";
} else {
System.out.println ( "调用失败" );
return "failure";
}
以上只是示例代码,主要目的是明确在证书模式下使用的相关api,分别为使用CertAlipayRequest 构造AlipayClient,AlipayClient只需要程序构建一次;
AlipaySystemOauthTokenRequest,该request是用来使用前端获取到的授权码获取access_token;其对应的返回值为AlipaySystemOauthTokenResponse,其封装了相应token返回值;
AlipayUserInfoShareRequest,该request是使用AlipaySystemOauthTokenResponse获取到的access_token获取用户信息;对应返回值为AlipayUserInfoShareResponse,包含了用户相关信息;
AlipayFundTransUniTransferRequest ,该request用来向指定用户转账,可通过ALIPAY_USER_ID(用户id)或者ALIPAY_LOGON_ID(登录id,一般为电话);相应返回值为AlipayFundTransUniTransferResponse,该返回值包含了转账结果。
ps: 以上代码只明确证书模式下使用api,真正绑定转账流程以自己实际业务为主。
网友评论