版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
SpringBoot接入支付宝支付!支付宝推出了新的转账接口alipay.fund.trans.uni.transfer(升级后安全性更高,功能更加强大),老转账接口alipay.fund.trans.toaccount.transfer将不再维护,新老接口的一个区别就是新接口采用的证书验签方式。使用新接口要将sdk版本升级到最新版本,博主升级时最新版本是4.10.97。接下来看集成步骤。1、将支付宝开放平台里下载的3个证书放在resources下面2、写支付宝支付的配置文件pertiesalipay.appId=你的应用id
alipay.serverUrl=/gateway.do
alipay.privateKey=你的应用私钥
alipay.format=json
alipay.charset=UTF-8
alipay.signType=RSA2
alipay.appCertPath=/cert/appCertPublicKey_2021001164652941.crt
alipay.alipayCertPath=/cert/alipayCertPublicKey_RSA2.crt
alipay.alipayRootCertPath=/cert/alipayRootCert.crt3、引入pom依赖
com.alipay.sdk
alipay-sdk-java
4.10.97.ALL
4、将配置信息注入AliPayBeanimport
lombok.Data;
import
perties.ConfigurationProperties;
import
org.springframework.context.annotation.PropertySource;
import
org.springframework.stereotype.Component;
@Component
@PropertySource("classpath:/production/perties")
@ConfigurationProperties(prefix
=
"alipay")
@Data
public
class
AliPayBean
{
private
String
appId;
private
String
privateKey;
private
String
publicKey;
private
String
serverUrl;
private
String
domain;
private
String
format;
private
String
charset;
private
String
signType;
private
String
appCertPath;
private
String
alipayCertPath;
private
String
alipayRootCertPath;
}5、写配置类import
com.alipay.api.AlipayClient;
import
com.alipay.api.CertAlipayRequest;
import
com.alipay.api.DefaultAlipayClient;
import
org.springframework.beans.factory.annotation.Autowired;
import
org.springframework.beans.factory.annotation.Value;
import
org.springframework.context.annotation.Bean;
import
org.springframework.context.annotation.Configuration;
import
org.springframework.util.FileCopyUtils;
import
java.io.InputStream;
@Configuration
public
class
AliConfig
{
@Value("${xyHost}")
private
String
proxyHost;
@Value("${xyPort}")
private
int
proxyPort;
@Value("${files.active}")
private
String
activeEnv;
@Autowired
private
AliPayBean
aliPayBean;
@Bean(name
=
{"alipayClient"})
public
AlipayClient
alipayClientService()
throws
Exception{
CertAlipayRequest
certAlipayRequest
=
new
CertAlipayRequest();
//设置网关地址
certAlipayRequest.setServerUrl(aliPayBean.getServerUrl());
//设置应用Id
certAlipayRequest.setAppId(aliPayBean.getAppId());
//设置应用私钥
certAlipayRequest.setPrivateKey(aliPayBean.getPrivateKey());
//设置请求格式,固定值json
certAlipayRequest.setFormat(aliPayBean.getFormat());
//设置字符集
certAlipayRequest.setCharset(aliPayBean.getCharset());
//设置签名类型
certAlipayRequest.setSignType(aliPayBean.getSignType());
//如果是生产环境或者预演环境,则使用代理模式
if
("prod".equals(activeEnv)
||
"stage".equals(activeEnv)
||
"test".equals(activeEnv))
{
//设置应用公钥证书路径
certAlipayRequest.setCertContent(getCertContentByPath(aliPayBean.getAppCertPath()));
//设置支付宝公钥证书路径
certAlipayRequest.setAlipayPublicCertContent(getCertContentByPath(aliPayBean.getAlipayCertPath()));
//设置支付宝根证书路径
certAlipayRequest.setRootCertContent(getCertContentByPath(aliPayBean.getAlipayRootCertPath()));
certAlipayRequest.setProxyHost(proxyHost);
certAlipayRequest.setProxyPort(proxyPort);
}else
{
//local
String
serverPath
=
this.getClass().getResource("/").getPath();
//设置应用公钥证书路径
certAlipayRequest.setCertPath(serverPath+aliPayBean.getAppCertPath());
//设置支付宝公钥证书路径
certAlipayRequest.setAlipayPublicCertPath(serverPath+aliPayBean.getAlipayCertPath());
//设置支付宝根证书路径
certAlipayRequest.setRootCertPath(serverPath+aliPayBean.getAlipayRootCertPath());
}
return
new
DefaultAlipayClient(certAlipayRequest);
}
public
String
getCertContentByPath(String
name){
InputStream
inputStream
=
null;
String
content
=
null;
try{
inputStream
=
this.getClass().getClassLoader().getResourceAsStream(name);
content
=
new
String(FileCopyUtils.copyToByteArray(inputStream));
}catch
(Exception
e){
e.printStackTrace();
}
return
content;
}
}6、写支付工具类import
com.alipay.api.AlipayApiException;
import
com.alipay.api.AlipayClient;
import
com.alipay.api.domain.AlipayTradeAppPayModel;
import
com.alipay.api.domain.AlipayTradeQueryModel;
import
com.alipay.api.request.AlipayTradeAppPayRequest;
import
com.alipay.api.request.AlipayTradeQueryRequest;
import
com.alipay.api.response.AlipayTradeAppPayResponse;
import
com.alipay.api.response.AlipayTradeQueryResponse;
import
lombok.extern.slf4j.Slf4j;
import
org.springframework.beans.factory.annotation.Autowired;
import
org.springframework.beans.factory.annotation.Qualifier;
import
org.springframework.stereotype.Service;
/**
*
@description:支付宝工具类
*
@Date:2020-08-26
*/
@Slf4j
@Service
public
class
AliPayUtils
{
@Autowired
@Qualifier("alipayClient")
private
AlipayClient
alipayClient;
/**
*
交易查询接口
*
@param
request
*
@return
*
@throws
Exception
*/
public
boolean
isTradeQuery(AlipayTradeQueryModel
model)
throws
AlipayApiException
{
AlipayTradeQueryRequest
request
=
new
AlipayTradeQueryRequest();
request.setBizModel(model);
AlipayTradeQueryResponse
alipayTradeQueryResponse
=
alipayClient.certificateExecute(request);
if(alipayTradeQueryResponse.isSuccess()){
return
true;
}
else
{
return
false;
}
}
/**
*
app支付
*
@param
model
*
@param
notifyUrl
*
@return
*
@throws
AlipayApiException
*/
public
String
startAppPay(AlipayTradeAppPayModel
model,
String
notifyUrl)
throws
AlipayApiException
{
AlipayTradeAppPayRequest
aliPayRequest
=
new
AlipayTradeAppPayRequest();
model.setProductCode("QUICK_MSECURITY_PAY");
aliPayRequest.setNotifyUrl(notifyUrl);
aliPayRequest.setBizModel(model);
//
这里和普通的接口调用不同,使用的是sdkExecute
AlipayTradeAppPayResponse
aliResponse
=
alipayClient.sdkExecute(aliPayRequest);
return
aliResponse.getBody();
}
/**
*
转账接口
*
*
@param
transferParams
*
@return
AlipayFundTransToaccountTransferResponse
*/
public
AlipayFundTransUniTransferResponse
doTransferNew(TransferParams
transferParams)
throws
Exception
{
String
title
=
(StringUtils.isNotBlank(transferParams.getRemark())
?
transferParams
.getRemark()
:
"转账");
//转账请求入参
AlipayFundTransUniTransferRequest
request
=
new
AlipayFundTransUniTransferRequest();
//转账参数
BizContentForUniTransfer
bizContent
=
new
BizContentForUniTransfer();
bizContent.setOut_biz_no(transferParams.getOutBizNo());
bizContent.setTrans_amount(MathUtil.changeF2Y(Math.abs(Integer.parseInt(transferParams.getAmount()))));
bizContent.setProduct_code("TRANS_ACCOUNT_NO_PWD");
bizContent.setBiz_scene("DIRECT_TRANSFER");
bizContent.setOrder_title(title);
Participant
participant
=
new
Participant();
participant.setIdentity(transferParams.getPayeeAccount());
participant.setIdentity_type(transferParams.getPayeeType());
participant.setName((StringUtils.isNotBlank(transferParams.getPayeeRealName())
?
transferParams
.getPayeeRealName()
:
StringUtils.EMPTY));
bizContent.setPayee_info(participant);
bizContent.setRemark(title);
request.setBizContent(JSON.toJSONString(bizContent));
//转账请求返回
AlipayFundTransUniTransferResponse
response
=
null;
try
{
response
=
alipayClient.certificateExecute(request);
}
catch
(Exception
e)
{
("doTransferexception,异常信息:{}",
e.toString());
("doTransferexception,支付宝返回信息:{}",
JSONObject.toJSONString(response));
}
("doTransfer,AlipayFundTransUniTransferResponse:{}",
JSONObject.toJSONString(response));
return
response;
}
}Tips:转账用到的类搜索公众号后端架构师后台回复“架构整洁”,获取一份惊喜礼包。@Data
public
class
TransferParams
{
/**
*
应用编号
*/
private
Long
appId;
/**
*
创建人id
*/
private
Long
createdBy;
/**
*
转账业务订单号
*/
private
String
outBizNo;
/**
*
收款方识别方式
*/
private
String
payeeType;
/**
*
收款方账号,可以是支付宝userId或者支付宝loginId
*/
private
String
payeeAccount;
/**
*
转账金额,单位分
*/
private
String
amount;
/**
*
付款方名称
*/
private
String
payerShowName;
/**
*
收款方名称
*/
private
String
payeeRealName;
/**
*
备注
*/
private
String
remark;
/**
*
支付宝转账流水号
*/
private
String
orderId;
}import
lombok.Data;
import
java.math.BigDecimal;
/**
*
支付宝转账参数
*/
@Data
public
class
BizContentForUniTransfer
{
/**
*
业务订单号
*/
private
String
out_biz_no;
/**
*
订单总金额,单位为元,精确到小数点后两位,
*/
private
BigDecimal
trans_amount;
/**
*
业务产品码,
*
单笔无密转账到支付宝账户固定为:TRANS_ACCOUNT_NO_PWD;
*
单笔无密转账到银行卡固定为:TRANS_BANKCARD_NO_PWD;
*
收发现金红包固定为:STD_RED_PACKET;
*/
private
String
product_code;
/**
*
描述特定的业务场景,可传的参数如下:
*DIRECT_TRANSFER:单笔无密转账到支付宝/银行卡,B2C现金红包;
*PERSONAL_COLLECTION:C2C现金红包-领红包
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 七年级地理下册 第四章 第二节 土地资源与农业教学设计3 中图版
- 护理不良事件的系统分析与改进
- 机械工程测试技术基础(第三版)段富海-第二章 测试装置的基本特性1
- 2026年建筑施工特种作业人员资格考试试卷及答案(五)
- 2026年行政执法人员执法资格考试全真模拟试卷及答案(四)
- 人教版 (新课标)必修2 政治生活2 民主决策:做出最佳选择教案及反思
- 护理科普:康复技巧
- 实践3 中国民歌教学设计初中信息技术沪科版八年级下册-沪科版
- 2026年人教版初一历史第二学期期末考试卷及答案(共九套)
- 参考活动3 关爱老人传递温暖教学设计初中综合实践活动苏少版八年级下册-苏少版
- (2026春新版)北师大版二年级数学下册全册教学设计
- 燃气爆炸案例分析
- 湖北省圆创高中名校联盟2026届高三2月第三次联合测评语文试卷(含答案解析)
- 医院空调安装施工方案
- 2026黔晟国有资产经营公司校招面笔试题及答案
- 桥梁下部结构桩基施工方案
- 2025年版《中国药典》试题及答案
- 花艺培训鲜花培训课件
- 2025年公务员考试公安面试真题及参考答案
- 单招语文字音课件
- 剧院运营模式研究-洞察及研究
评论
0/150
提交评论