Spring Boot 接入支付宝支付_第1页
Spring Boot 接入支付宝支付_第2页
Spring Boot 接入支付宝支付_第3页
Spring Boot 接入支付宝支付_第4页
Spring Boot 接入支付宝支付_第5页
已阅读5页,还剩6页未读 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论