支付寶轉賬(公鑰證書模式)


前言

很久都沒有寫博客了,一來是感覺工作中沒有接觸什么新東西,二來也是自己變懶了,業余時間都耗費在了休閑上面,主動學習的次數越來越少了。今天項目里需要對接到支付寶轉賬給個人賬戶,正好以前沒有弄過,把對接步驟在此總結一下。

 

配置

支付寶對接官方文檔 : https://opendocs.alipay.com/apis/02byum

首先需要在支付寶開放平台中創建好應用,整理對接時需要的參數。

1.appId

2.私鑰

3.應用公鑰證書

4.支付寶公鑰證書

5.支付寶根證書

 

 

 

 

 代碼

1.首先需要引入支付寶的SDK,jar包下載或者maven引入都可以。

 

2.把三個證書放入到項目中

 

3.封裝配置參數,其中支付寶網關是固定的,正式環境是 https://openapi.alipay.com/gateway.do ,沙箱環境是 https://openapi.alipaydev.com/gateway.do ,其他的appId、應用私鑰在配置文件中配好

@Component
@Data
public class AliPayConfig {

    // 支付寶網關
    @Value("${aliPay.serverUrl}")
    private String serverUrl;

    //appId
    @Value("${aliPay.appId}")
    private String appId;

    //私鑰
    @Value("${aliPay.privateKey}")
    private String privateKey;

    //參數返回格式,只支持 JSON(固定)。
    public static String FORMAT = "json";

    //商戶生成簽名字符串所使用的簽名算法類型,目前支持 RSA2 和 RSA,推薦使用 RSA2。
    public static String SIGN_TYPE = "RSA2";

    // 字符編碼格式
    public static String CHARSET = "UTF-8";

    //轉賬成功狀態碼
    public static String SUCCESS_CODE = "10000";

    //收款方標識類型 ALIPAY_USER_ID:支付寶會員的用戶 ID,可通過 獲取會員信息 能力獲取。ALIPAY_LOGON_ID:支付寶登錄號,支持郵箱和手機號格式。
    public static String IDENTITY_TYPE = "ALIPAY_LOGONID";

    //應用證書路徑
    public static String APP_CERT_PATH = ClassLoader.getSystemResource("aliPay/appCertPublicKey.crt").getPath();

    //公鑰證書路徑
    public static String PUBLIC_CERT_PATH = ClassLoader.getSystemResource("aliPay/alipayCertPublicKey_RSA2.crt").getPath();

    //支付寶根證書路徑
    public static String ROOT_CERT_PATH = ClassLoader.getSystemResource("aliPay/alipayRootCert.crt").getPath();

 

 

 

4. 發送轉賬請求

/**
 * 功能描述: 支付寶轉賬接口-公鑰證書模式
 *
 * @param aliPayConfig 支付寶配置
 * @param orderNo      系統訂單號
 * @param account      收款方帳號
 * @param userName     收款方姓名
 * @param amount       轉賬金額
 * @創建人: Tang
 * @創建時間: 2022年03月03日 17:36:30
 * @return: boolean
 **/
public static boolean transfer(AliPayConfig aliPayConfig, String orderNo, String account, String userName, String amount) throws AlipayApiException {
    log.info("支付寶轉賬開始,訂單號 = {}", orderNo);
    //構造client
    CertAlipayRequest certAlipayRequest = new CertAlipayRequest();
    //設置網關地址
    certAlipayRequest.setServerUrl(aliPayConfig.getServerUrl());
    //設置應用Id
    certAlipayRequest.setAppId(aliPayConfig.getAppId());
    //設置應用私鑰
    certAlipayRequest.setPrivateKey(aliPayConfig.getPrivateKey());
    //設置請求格式,固定值json
    certAlipayRequest.setFormat(AliPayConfig.FORMAT);
    //設置字符集
    certAlipayRequest.setCharset(AliPayConfig.CHARSET);
    //設置簽名類型
    certAlipayRequest.setSignType(AliPayConfig.SIGN_TYPE);
    //設置應用公鑰證書路徑
    certAlipayRequest.setCertPath(AliPayConfig.APP_CERT_PATH);
    //設置支付寶公鑰證書路徑
    certAlipayRequest.setAlipayPublicCertPath(AliPayConfig.PUBLIC_CERT_PATH);
    //設置支付寶根證書路徑
    certAlipayRequest.setRootCertPath(AliPayConfig.ROOT_CERT_PATH);
    //構造client
    AlipayClient alipayClient = new DefaultAlipayClient(certAlipayRequest);

    AlipayFundTransToaccountTransferRequest request = new AlipayFundTransToaccountTransferRequest();
    AlipayFundTransToaccountTransferModel transferModel = new AlipayFundTransToaccountTransferModel();
    //自身系統訂單號,
    transferModel.setOutBizNo(orderNo);
    transferModel.setPayeeType(AliPayConfig.IDENTITY_TYPE);
    transferModel.setPayeeAccount(account);
    transferModel.setAmount(amount);
    transferModel.setPayeeRealName(userName);
    transferModel.setRemark("提款");
    request.setBizModel(transferModel);
    log.info("支付寶轉賬請求參數 = {}", JSONObject.toJSON(transferModel));
    try {
        AlipayFundTransToaccountTransferResponse response = alipayClient.certificateExecute(request);
        if (AliPayConfig.SUCCESS_CODE.equals(response.getCode())) {
            log.info("轉賬成功,返回信息{}", JSONObject.toJSON(response));
            return true;
        } else {
            log.error("轉賬失敗,錯誤信息 = {}", JSONObject.toJSON(response));
            return false;
        }
    } catch (AlipayApiException e) {
        log.error("轉賬異常,異常信息 = {}", e.getMessage());
        return false;
    }
}

 

至此完成 ,如果有哪說得不對的地方,歡迎指出。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM