日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術(shù)文章
文章詳情頁

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

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

支付寶今年推出了新的轉(zhuǎn)賬接口alipay.fund.trans.uni.transfer(升級后安全性更高,功能更加強大) ,老轉(zhuǎn)賬接口alipay.fund.trans.toaccount.transfer將不再維護,新老接口的一個區(qū)別就是新接口采用的證書驗簽方式。使用新接口要將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(); //設(shè)置網(wǎng)關(guān)地址 certAlipayRequest.setServerUrl(aliPayBean.getServerUrl()); //設(shè)置應用Id certAlipayRequest.setAppId(aliPayBean.getAppId()); //設(shè)置應用私鑰 certAlipayRequest.setPrivateKey(aliPayBean.getPrivateKey()); //設(shè)置請求格式,固定值json certAlipayRequest.setFormat(aliPayBean.getFormat()); //設(shè)置字符集 certAlipayRequest.setCharset(aliPayBean.getCharset()); //設(shè)置簽名類型 certAlipayRequest.setSignType(aliPayBean.getSignType()); //如果是生產(chǎn)環(huán)境或者預演環(huán)境,則使用代理模式 if ('prod'.equals(activeEnv) || 'stage'.equals(activeEnv) || 'test'.equals(activeEnv)) { //設(shè)置應用公鑰證書路徑 certAlipayRequest.setCertContent(getCertContentByPath(aliPayBean.getAppCertPath())); //設(shè)置支付寶公鑰證書路徑 certAlipayRequest.setAlipayPublicCertContent(getCertContentByPath(aliPayBean.getAlipayCertPath())); //設(shè)置支付寶根證書路徑 certAlipayRequest.setRootCertContent(getCertContentByPath(aliPayBean.getAlipayRootCertPath())); certAlipayRequest.setProxyHost(proxyHost); certAlipayRequest.setProxyPort(proxyPort); }else { //local String serverPath = this.getClass().getResource('/').getPath(); //設(shè)置應用公鑰證書路徑 certAlipayRequest.setCertPath(serverPath+aliPayBean.getAppCertPath()); //設(shè)置支付寶公鑰證書路徑 certAlipayRequest.setAlipayPublicCertPath(serverPath+aliPayBean.getAlipayCertPath()); //設(shè)置支付寶根證書路徑 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); // 這里和普通的接口調(diào)用不同,使用的是sdkExecute AlipayTradeAppPayResponse aliResponse = alipayClient.sdkExecute(aliPayRequest); return aliResponse.getBody(); } /** * 轉(zhuǎn)賬接口 * * @param transferParams * @return AlipayFundTransToaccountTransferResponse */ public AlipayFundTransUniTransferResponse doTransferNew(TransferParams transferParams) throws Exception { String title = (StringUtils.isNotBlank(transferParams.getRemark()) ? transferParams .getRemark() : '轉(zhuǎn)賬'); //轉(zhuǎn)賬請求入?yún)? AlipayFundTransUniTransferRequest request = new AlipayFundTransUniTransferRequest(); //轉(zhuǎn)賬參數(shù) 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)); //轉(zhuǎn)賬請求返回 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:轉(zhuǎn)賬用到的類

@Datapublic class TransferParams { /** * 應用編號 */ private Long appId; /** * 創(chuàng)建人id */ private Long createdBy; /** * 轉(zhuǎn)賬業(yè)務訂單號 */ private String outBizNo; /** * 收款方識別方式 */ private String payeeType; /** * 收款方賬號,可以是支付寶userId或者支付寶loginId */ private String payeeAccount; /** * 轉(zhuǎn)賬金額,單位分 */ private String amount; /** * 付款方名稱 */ private String payerShowName; /** * 收款方名稱 */ private String payeeRealName; /** * 備注 */ private String remark; /** * 支付寶轉(zhuǎn)賬流水號 */ private String orderId;}

import lombok.Data; import java.math.BigDecimal; /** * 支付寶轉(zhuǎn)賬參數(shù) */@Datapublic class BizContentForUniTransfer { /** * 業(yè)務訂單號 */ private String out_biz_no; /** * 訂單總金額,單位為元,精確到小數(shù)點后兩位, */ private BigDecimal trans_amount; /** * 業(yè)務產(chǎn)品碼, * 單筆無密轉(zhuǎn)賬到支付寶賬戶固定為:TRANS_ACCOUNT_NO_PWD; * 單筆無密轉(zhuǎn)賬到銀行卡固定為:TRANS_BANKCARD_NO_PWD; * 收發(fā)現(xiàn)金紅包固定為:STD_RED_PACKET; */ private String product_code; /** * 描述特定的業(yè)務場景,可傳的參數(shù)如下: * DIRECT_TRANSFER:單筆無密轉(zhuǎn)賬到支付寶/銀行卡, B2C現(xiàn)金紅包; * PERSONAL_COLLECTION:C2C現(xiàn)金紅包-領(lǐng)紅包 */ private String biz_scene; /** * 轉(zhuǎn)賬業(yè)務的標題,用于在支付寶用戶的賬單里顯示 */ private String order_title; /** * 原支付寶業(yè)務單號。C2C現(xiàn)金紅包-紅包領(lǐng)取時,傳紅包支付時返回的支付寶單號; * B2C現(xiàn)金紅包、單筆無密轉(zhuǎn)賬到支付寶/銀行卡不需要該參數(shù)。 */ private String original_order_id; /** * 業(yè)務備注 */ private String remark; /** * 轉(zhuǎn)賬業(yè)務請求的擴展參數(shù),支持傳入的擴展參數(shù)如下: * 1、sub_biz_scene 子業(yè)務場景,紅包業(yè)務必傳,取值REDPACKET,C2C現(xiàn)金紅包、B2C現(xiàn)金紅包均需傳入; * 2、withdraw_timeliness為轉(zhuǎn)賬到銀行卡的預期到賬時間,可選(不傳入則默認為T1), * 取值T0表示預期T+0到賬,取值T1表示預期T+1到賬,因到賬時效受銀行機構(gòu)處理影響,支付寶無法保證一定是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;}

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

標簽: 支付寶
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
不卡视频在线| 免费人成精品欧美精品| 欧美日韩午夜| 日韩国产欧美三级| 日韩高清电影一区| 亚洲精品裸体| 日韩精品福利一区二区三区| 奇米狠狠一区二区三区| 日韩精品欧美精品| 日韩国产欧美一区二区三区| 91亚洲无吗| 国产精品99久久久久久董美香| 国产极品一区| 日韩成人精品一区| 日本精品不卡| 亚洲一区网站| 日韩美女精品| 国产亚洲欧美日韩精品一区二区三区 | 99香蕉国产精品偷在线观看 | 欧美日韩尤物久久| 婷婷综合激情| 视频一区在线视频| 欧美一级二级三级视频| 国产精品久久久久毛片大屁完整版 | 日韩高清一区在线| 国产精品视频一区视频二区| 麻豆91在线播放| 欧洲av不卡| 亚洲一区二区三区四区五区午夜| 日韩精品91亚洲二区在线观看| 久久中文在线| 亚洲国产不卡| 国产日韩欧美中文在线| 日韩电影二区| 亚洲一区二区三区四区五区午夜| 18国产精品| 国产精品xx| 最新日韩欧美| 国产欧美日韩在线观看视频| 麻豆理论在线观看| 老司机精品久久| 久久精品色播| aa亚洲婷婷| 麻豆91在线播放| 日韩午夜高潮| 麻豆精品在线播放| 欧美va天堂在线| 91精品美女| 深夜视频一区二区| 免费不卡在线视频| 国产不卡精品| 亚洲色图国产| 日韩精品网站| 日韩精品一级| 日本韩国欧美超级黄在线观看| 亚洲精品乱码久久久久久蜜桃麻豆| 韩国女主播一区二区三区| 性色av一区二区怡红| 精品亚洲精品| 亚洲欧美网站| 97人人精品| 日本不卡视频在线观看| 日韩精品看片| 国产美女久久| 欧美日韩国产免费观看视频| 欧美日本一区| 婷婷综合网站| 精品丝袜久久| 日韩一二三区在线观看| 日韩欧美1区| 国产欧美日韩在线一区二区| 性欧美69xoxoxoxo| 国产精品成人a在线观看| 亚洲美女91| 蜜桃成人av| 国产精品xx| 国产欧美日韩精品一区二区三区| 免费视频亚洲| 福利精品一区| 日韩一区二区三区精品视频第3页| 亚洲va在线| 高清av一区| 国产精品17p| 日韩中文av| 国产亚洲激情| 欧美一区二区三区高清视频| 日韩1区2区| 国产精品第一国产精品| 少妇精品久久久一区二区| 亚州av乱码久久精品蜜桃| 中文字幕在线视频网站| 久久99久久人婷婷精品综合| 日韩av二区在线播放| 午夜一级久久| 999国产精品| 综合日韩av| 久久久久97| 久久的色偷偷| 国产欧美日韩精品一区二区免费| 中文字幕av一区二区三区四区| 日韩一级精品| 欧美午夜精品一区二区三区电影| 极品av在线| 成人在线丰满少妇av| 国产精品蜜月aⅴ在线| 日韩精品一区二区三区中文在线 | 伊人久久大香伊蕉在人线观看热v| 亚洲电影有码| 国产伦久视频在线观看| 久久香蕉网站| 麻豆成人av在线| 乱一区二区av| 精品久久久久中文字幕小说| 欧美黄色精品| 久久精品一区| 国产成人精品三级高清久久91| 牛牛精品成人免费视频| 国产日产精品_国产精品毛片 | 天堂av在线| 高清av不卡| 九九精品调教| 欧美日韩精品一区二区视频| 欧美日韩尤物久久| 91精品国产福利在线观看麻豆| 日韩在线观看一区| 日本精品影院| 婷婷中文字幕一区| 久久国产成人| 日韩三级一区| 欧美欧美黄在线二区| 欧美日韩一区自拍| 国产精品一区二区三区www| 国产精品玖玖玖在线资源| 精品一区视频| 日韩欧美在线中字| 亚洲精品123区| 四虎在线精品| 国产日产一区| 97精品国产一区二区三区| 日韩精品一卡| 国产一区二区高清| 日本一区二区三区中文字幕| 国产精品久久久久久av公交车| 国精品产品一区| 日韩三区免费| 亚洲免费在线| 日韩av网站在线观看| 精品视频高潮| 亚洲国产综合在线看不卡| 日韩在线一区二区| 国产伦精品一区二区三区千人斩 | 亚洲天堂免费| 国产精品美女久久久久久不卡| 日本久久精品| 亚洲综合日本| 国产精品久久久久久久久久齐齐 | 亚洲专区欧美专区| 欧美日韩一区二区高清| 国产一区二区色噜噜| 久久久久久久久久久妇女| 丝袜美腿亚洲一区二区图片| 91精品视频一区二区| 色黄视频在线观看| 亚洲专区一区| 麻豆精品在线观看| 亚洲网站视频| 日韩av电影一区| 国产福利电影在线播放| 99在线观看免费视频精品观看| 亚洲精品乱码日韩| 高清日韩中文字幕| 美女精品在线| 国产精品99久久免费| 国户精品久久久久久久久久久不卡| 少妇精品在线| 日韩电影免费网站| 综合亚洲视频| 日韩欧美一区二区三区在线观看 | 精品视频91| 亚洲深夜福利| 久久精品伊人| 伊人久久亚洲热| 日韩av字幕| 激情欧美亚洲| 久久福利在线| 蜜臀av国产精品久久久久| 成人精品视频| 偷拍亚洲精品| 精品国模一区二区三区| 日韩综合小视频| 久久国产成人午夜av影院宅| 欧美日韩在线精品一区二区三区激情综合 | 日韩精品五月天| 99久久久久| 国产精品.xx视频.xxtv| 久久成人一区| 99久久夜色精品国产亚洲1000部 | 日本欧美韩国一区三区| 久久精品123| 国产精品美女久久久久久不卡|