亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

您的位置:首頁技術文章
文章詳情頁

SpringBoot接入支付寶支付的方法步驟

瀏覽:91日期:2022-06-16 14:18:11

支付寶今年推出了新的轉賬接口alipay.fund.trans.uni.transfer(升級后安全性更高,功能更加強大) ,老轉賬接口alipay.fund.trans.toaccount.transfer將不再維護,新老接口的一個區別就是新接口采用的證書驗簽方式。使用新接口要將sdk版本升級到最新版本,博主升級時最新版本是4.10.97。接下來看集成步驟

1.將支付寶開放平臺里下載的3個證書放在resources下面

SpringBoot接入支付寶支付的方法步驟

2.寫支付寶支付的配置文件

alipay.properties

alipay.appId=你的應用idalipay.serverUrl=https://openapi.alipay.com/gateway.doalipay.privateKey=你的應用私鑰alipay.format=jsonalipay.charset=UTF-8alipay.signType=RSA2alipay.appCertPath=/cert/appCertPublicKey_2021001164652941.crtalipay.alipayCertPath=/cert/alipayCertPublicKey_RSA2.crtalipay.alipayRootCertPath=/cert/alipayRootCert.crt3.引入pom依賴

<dependency> <groupId>com.alipay.sdk</groupId> <artifactId>alipay-sdk-java</artifactId> <version>4.10.97.ALL</version></dependency>4.將配置信息注入AliPayBean

import lombok.Data;import org.springframework.boot.context.properties.ConfigurationProperties;import org.springframework.context.annotation.PropertySource;import org.springframework.stereotype.Component; @Component@PropertySource('classpath:/production/alipay.properties')@ConfigurationProperties(prefix = 'alipay')@Datapublic 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; @Configurationpublic class AliConfig { @Value('${custom.http.proxyHost}') private String proxyHost; @Value('${custom.http.proxyPort}') private int proxyPort; @Value('${spring.profiles.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@Servicepublic 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) { log.info('doTransfer exception,異常信息:{}', e.toString()); log.info('doTransfer exception,支付寶返回信息:{}', JSONObject.toJSONString(response)); } log.info('doTransfer,AlipayFundTransUniTransferResponse:{}', JSONObject.toJSONString(response)); return response; }}Tips:轉賬用到的類

@Datapublic 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; /** * 支付寶轉賬參數 */@Datapublic 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現金紅包-領紅包 */ private String biz_scene; /** * 轉賬業務的標題,用于在支付寶用戶的賬單里顯示 */ private String order_title; /** * 原支付寶業務單號。C2C現金紅包-紅包領取時,傳紅包支付時返回的支付寶單號; * B2C現金紅包、單筆無密轉賬到支付寶/銀行卡不需要該參數。 */ private String original_order_id; /** * 業務備注 */ private String remark; /** * 轉賬業務請求的擴展參數,支持傳入的擴展參數如下: * 1、sub_biz_scene 子業務場景,紅包業務必傳,取值REDPACKET,C2C現金紅包、B2C現金紅包均需傳入; * 2、withdraw_timeliness為轉賬到銀行卡的預期到賬時間,可選(不傳入則默認為T1), * 取值T0表示預期T+0到賬,取值T1表示預期T+1到賬,因到賬時效受銀行機構處理影響,支付寶無法保證一定是T0或者T1到賬; */ private String business_params; /** * 支付收款對象 */ private Participant payee_info;}

@Datapublic class Participant { /** * 參與方的唯一標識 */ private String identity; /** * 參與方的標識類型,目前支持如下類型: * 1、ALIPAY_USER_ID 支付寶的會員ID * 2、ALIPAY_LOGON_ID:支付寶登錄號,支持郵箱和手機號格式 */ private String identity_type; /** * 參與方真實姓名,如果非空,將校驗收款支付寶賬號姓名一致性。 * 當identity_type=ALIPAY_LOGON_ID時,本字段必填。 */ private String name;}

到此這篇關于SpringBoot接入支付寶支付的方法步驟的文章就介紹到這了,更多相關SpringBoot 支付寶支付內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: 支付寶
相關文章:
主站蜘蛛池模板: 国产黄色一级毛片 | 国产二区视频在线观看 | 毛片免费观看网址 | 精品国产一区二区三区久久 | 亚洲欧美日韩另类在线 | 在线国产视频观看 | 特黄特黄 | 国产小视频在线高清播放 | 亚洲国产日韩在线成人蜜芽 | 中文字幕一区在线观看 | a级欧美| 欧美黄色性生活视频 | 国产v国产v片大片线观看网站 | 国产精品手机网站 | 久久久久免费精品国产小说 | 亚洲码欧美码一区二区三区 | 成人性生活免费视频 | 亚洲国产成人影院播放 | 成人午夜在线播放 | 国产在线视欧美亚综合 | 9i9精品国产免费久久 | 日日摸夜夜添夜夜添破第一 | 色婷婷综合久久久 | 成年黄色网 | 精品国产亚一区二区三区 | 国产美女在线一区二区三区 | 色花五月色婷婷 | 婷婷丁香综合 | 在线观看高清视频bbixx | 亚洲天堂精品视频 | 亚洲精品在线第一页 | 精品亚洲成a人片在线观看 精品亚洲成a人在线播放 | 米奇精品一区二区三区在线观看 | 黄网站色在线视频免费观看 | 国产精品不卡无毒在线观看 | 国产精品免费综合一区视频 | 九九99国产精品视频 | 免费黄网大全 | 国产剧情一区二区 | 欧美日韩无线在码不卡一区二区三区 | 好属妞这里只有精品久久 |