支付寶單筆轉賬到賬戶(支付寶賬號or銀行賬號)實現

package com.pay.utils;

import java.util.HashMap;
import java.util.UUID;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.alipay.api.AlipayApiException;
import com.alipay.api.CertAlipayRequest;
import com.alipay.api.DefaultAlipayClient;
import com.alipay.api.request.AlipayFundTransUniTransferRequest;
import com.alipay.api.response.AlipayFundTransUniTransferResponse;
import com.bendian.pay.config.Configs;

public class TransferUtil2 {
	
	/**
	 * 引入日誌,注意都是"org.slf4j"包下
	 */
	private final static Logger logger = LoggerFactory.getLogger(TransferUtil2.class);
	
	
    /**
     * 帶公鑰證書驗證(方式)
     * @param oid 業務單號,唯一
     * @param amount 金額
     * @param identity 支付寶賬號(手機號或者郵箱)
     * @param name 姓名
     * @param businessType 業務類型
     * @return 返回處理結果
     * @throws Exception
     */
    @SuppressWarnings("rawtypes")
	public static HashMap  transferWithCert(String oid, int amount,String identity,String name,String businessType) throws Exception{
    	//訂單號
//    	String uUid = getUUid();
    	//返回信息
    	boolean result = false;
    	HashMap<String, String> map = new HashMap<>();
		//構造client
    	CertAlipayRequest certAlipayRequest = new CertAlipayRequest();
    	certAlipayRequest.setServerUrl(Configs.gatewayUrl);
    	certAlipayRequest.setAppId(Configs.app_id);
    	certAlipayRequest.setPrivateKey(Configs.merchant_private_key);
    	certAlipayRequest.setFormat(Configs.format);
    	certAlipayRequest.setCharset(Configs.charset);
    	certAlipayRequest.setSignType(Configs.sign_type);
    	certAlipayRequest.setCertPath(Configs.path + Configs.app_cert_path);
    	certAlipayRequest.setAlipayPublicCertPath(Configs.path+ Configs.alipay_cert_path);
    	certAlipayRequest.setRootCertPath(Configs.path+Configs.alipay_root_cert_path);
    	try {
			DefaultAlipayClient alipayClient = new DefaultAlipayClient(certAlipayRequest);
			//發送API請求
			AlipayFundTransUniTransferRequest request = new AlipayFundTransUniTransferRequest(); 
			request.setBizContent("{" + "\"out_biz_no\":\""+ oid+ "\"," + "\"trans_amount\":\""+ amount +"\"," + "\"product_code\":\"TRANS_ACCOUNT_NO_PWD\"," + "\"biz_scene\":\"DIRECT_TRANSFER\"," + "\"order_title\":\"" + businessType + "\"," +
										"\"payee_info\":{" 
												+ "\"identity\":\"" + identity +"\"," 
												+ "\"identity_type\":\"ALIPAY_LOGON_ID\"," 
												+ "\"name\":\"" + name + "\"" 
												+ "}," 
												+ "\"remark\":\"共享收益\"" + "}"); 
			
				AlipayFundTransUniTransferResponse response =  alipayClient.certificateExecute(request);
				result = response.isSuccess();
				String code = response.getCode();
				String msg = response.getSubMsg();
				map.put("code", code);
				map.put("msg", msg);
				if(response.isSuccess()){
					logger.info("調用成功!"  + " 業務類型:"+ businessType + ",支付信息:"+ oid +","+ amount+","+identity+","+name);				
				} else {
					logger.error("調用失敗!錯誤信息提示:"+ msg + "; 業務類型:"+ businessType + ",支付信息:"+ oid +","+ amount+","+identity+","+name);
				}
				return map;
		} catch (AlipayApiException e) {
			logger.error("未知異常,調用失敗!" + " 業務類型:"+ businessType + ",支付信息:"+ oid +","+ amount+","+identity+","+name);
			e.printStackTrace();
			map.put("code", "5000");
			map.put("msg", "調用失敗,未知異常!(自定義)");
		}
		return map;
    }
	
    /**
     * 獲取不重複的訂單id
     * 
     * @return
     */
    public  String getUUid(){
    	//生成唯一id
        String id= UUID.randomUUID().toString();
        //替換uuid中的"-"
        id=id.replace("-", "");
        System.out.println("訂單id :" + id);
		return id;
    }
}

注意事項:
1.證書路徑,必須填寫絕對路徑;必須簽約單筆轉賬支付;

2.訂單號必須唯一;

3.測試環境請放在main 方法中進行;

4.設置白名單,固定ip才能調用轉賬接口;

5.官方接口參考文檔:https://docs.open.alipay.com/api_28/alipay.fund.trans.uni.transfer/
API錯誤提示:https://docs.open.alipay.com/common/105806

發佈了19 篇原創文章 · 獲贊 18 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章