1. 程式人生 > 實用技巧 >Java 呼叫支付寶介面

Java 呼叫支付寶介面

1.註冊開發者中心應用 登入點選沙箱服務

https://open.alipay.com/platform/developerIndex.htm

2.建立沙箱應用獲取APPID和支付寶閘道器地址(建立設定金鑰這裡就不說明了),將公共金鑰和私密儲存到本地。

3.建立專案結構,設定配置檔案

1.下載支付寶SDK檔案jar包,講jar包匯入到專案內

2.編寫配置資訊和Java檔案

/********************************************************************************************************************************************************************************************/

* 應用啟動載入檔案*/
@Component
public class AlipayConfig implements ApplicationListener {
//儲存載入配置引數
private static Map<String, String> aliPropertiesMap = new HashMap<String, String>();

/*獲取配置引數值*/
public static String getKey(String key) {
return aliPropertiesMap.get(key);
}

/*監聽啟動完成,執行配置載入到aliPropertiesMap*/

public void onApplicationEvent(ApplicationEvent event) {
if (event instanceof ApplicationReadyEvent) {
this.init(aliPropertiesMap);//應用啟動載入
}
}

/*初始化載入aliPropertiesMap*/
public void init(Map<String, String> map) {
// 獲得PathMatchingResourcePatternResolver物件

PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
try {
//載入resource檔案(也可以載入resources)
Resource resources = resolver.getResource("classpath:/alipay.properties");
PropertiesFactoryBean config = new PropertiesFactoryBean();
config.setLocation(resources);
config.afterPropertiesSet();
Properties prop = config.getObject();
//迴圈遍歷所有得鍵值對並且存入集合
for (String key : prop.stringPropertyNames()) {
map.put(key, (String) prop.get(key));
}
} catch (Exception e) {
new Exception("配置檔案載入失敗");
}
}
}

/********************************************************************************************************************************************************************************************/

4.建立支付工具類


public class PayUtil {


/**
* @param outTradeNo 商戶訂單號,商戶網站訂單系統中唯一訂單號,必填 對應繳費記錄的orderNo
* @param totalAmount 付款金額,必填
* @param subject 主題
* @param body 商品描述,可空
* @return
*/
public static String alipay(AlipayBean alipayBean) {

//1、獲得初始化的AlipayClient
AlipayClient alipayClient = new DefaultAlipayClient(
AlipayConfig.getKey("gatewayUrl"),//支付寶閘道器
AlipayConfig.getKey("app_id"),//appid
AlipayConfig.getKey("merchant_private_key"),//商戶私鑰
"json",
AlipayConfig.getKey("charset"),//字元編碼格式
AlipayConfig.getKey("alipay_public_key"),//支付寶公鑰
AlipayConfig.getKey("sign_type")//簽名方式
);


//設定請求引數
AlipayTradePagePayRequest alipayRequest = new AlipayTradePagePayRequest();
alipayRequest.setReturnUrl(AlipayConfig.getKey("return_url"));
alipayRequest.setNotifyUrl(AlipayConfig.getKey("notify_url"));
try {
alipayRequest.setBizContent(JSON.toJSONString(alipayBean));

//請求
String result = alipayClient.pageExecute(alipayRequest).getBody();
System.out.println("*********************\n返回結果為:" + result);
return result;
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
return null;
}
}

/**
* 支付寶退款介面
*
* @param outTradeNo
* @param tradeNo
* @param refundAmount
* @param refundReason
* @param out_request_no 標識一次退款請求,同一筆交易多次退款需要保證唯一,如需部分退款,則此引數必傳
* @return
*/
public static String aliRefund(AlipayBean alipayBean) {

//1、獲得初始化的AlipayClient
AlipayClient alipayClient = new DefaultAlipayClient(
AlipayConfig.getKey("gatewayUrl"),//支付寶閘道器
AlipayConfig.getKey("app_id"),//appid
AlipayConfig.getKey("merchant_private_key"),//商戶私鑰
"json",
AlipayConfig.getKey("charset"),//字元編碼格式
AlipayConfig.getKey("alipay_public_key"),//支付寶公鑰
AlipayConfig.getKey("sign_type")//簽名方式
);

//設定請求引數
AlipayTradeRefundRequest alipayRequest = new AlipayTradeRefundRequest();
alipayRequest.setReturnUrl(AlipayConfig.getKey("return_url"));
alipayRequest.setNotifyUrl(AlipayConfig.getKey("notify_url"));
try {
alipayRequest.setBizContent(JSON.toJSONString(alipayBean));

//請求
String result= alipayClient.execute(alipayRequest).getBody();
System.out.println("*********************\n返回結果為:" + result);
return result;
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
return null;
}
}

/**
* 支付寶的驗籤方法
*
* @param req
* @return
*/
public static boolean checkSign(HttpServletRequest req) {
Map<String, String[]> requestMap = req.getParameterMap();
Map<String, String> paramsMap = new HashMap<>();
requestMap.forEach((key, values) -> {
String strs = "";
for (String value : values) {
strs = strs + value;
}
System.out.println(("key值為" + key + "value為:" + strs));
paramsMap.put(key, strs);
});

//呼叫SDK驗證簽名
try {
return AlipaySignature.rsaCheckV1(paramsMap, AlipayConfig.getKey("alipay_public_key"), AlipayConfig.getKey("charset"), AlipayConfig.getKey("sign_type"));
} catch (AlipayApiException e) {
// TODO Auto-generated catch block
e.printStackTrace();
System.out.println("*********************驗籤失敗********************");
return false;
}
}

5.建立Controller,dao和service

6.建立測試html,執行專案訪問測試。

over......