支付寶支付前提
需開通支付寶支付服務
官網地址
檔案地址
專案匯入支付寶maven依賴
<dependency>
<groupId>com.alipay.sdk</groupId>
<artifactId>alipay-sdk-java</artifactId>
<version>4.8.10.ALL</version>
</dependency>
相關組態檔, 讀取組態檔
// 組態檔,在專案resources目錄下
#ali
alipay.public.key =
alipay.private.key =
alipay.app.public.key =
alipay.app.pay.notify.url =
alipay.app.id =
gateway_url = https://openapi.alipaydev.com/gateway.do
// 讀取組態檔類
@Component
public class SysConfig
{
public static final String ENCODING = "UTF-8";
// 組態檔類名稱
public static final String CONFIG_PATH = "";
private Properties props = null;
/**
* 獲取全域唯一的SysConfig 物件
*
* @return
*/
public static SysConfig getInstance()
{
SysConfig config = ConfigHolder.INSTANCE.getConf();
config.init();
return config;
}
/**
* 初始化
*/
private void init()
{
props = new Properties();
loadConfigProps();
}
/**
* 加載組態檔
*/
public void loadConfigProps()
{
InputStream is = null;
try
{
is = getClass().getResourceAsStream(CONFIG_PATH);
props.load(is);
}
catch (IOException e)
{
e.printStackTrace();
}
finally
{
if (is != null)
{
try
{
is.close();
is = null;
}
catch (Exception e)
{
e.printStackTrace();
}
}
}
}
public String getProperty(String key)
{
String tmp = props.getProperty(key);
if (StringUtils.isNotEmpty(tmp))
{
return tmp.trim();
}
return tmp;
}
enum ConfigHolder
{
INSTANCE;
SysConfig conf;
ConfigHolder()
{
conf = new SysConfig();
}
public SysConfig getConf()
{
return conf;
}
}
}
初始化AlipayClient
/**
* 獲得初始化的AlipayClient
*
* @return AlipayClient
*/
private AlipayClient getAlipayClient() {
// 獲得初始化的AlipayClient
return new DefaultAlipayClient(
//支付寶網關
SysConfig.getInstance().getProperty(EnumAlipayKey.gateway_url.getKey()),
//appid
SysConfig.getInstance().getProperty(EnumAlipayKey.app_id.getKey()),
//商戶私鑰
SysConfig.getInstance().getProperty(EnumAlipayKey.alipay_private_key.getKey()),
AlipayConstants.FORMAT_JSON,
//字符編碼格式
AlipayConstants.CHARSET_UTF8,
//支付寶公鑰
SysConfig.getInstance().getProperty(EnumAlipayKey.alipay_public_key.getKey()),
//簽名方式
AlipayConstants.SIGN_TYPE_RSA2
);
}
呼叫支付的request
` // 獲得初始化的AlipayClient
AlipayClient alipayClient = getAlipayClient();
// 設定請求引數
AlipayTradeAppPayRequest alipayRequest = new AlipayTradeAppPayRequest();
// 服務器異步通知,支付寶會回呼該路徑,必須外網且不能有請求引數,獲取回呼引數校驗后 處理自己業務邏輯(修改訂單狀態等等)
alipayRequest.setNotifyUrl(SysConfig.getInstance().getProperty(EnumAlipayKey.app_pay_notify_url.getKey()));
// 封裝引數
AlipayTradeAppPayModel model = new AlipayTradeAppPayModel();
model.setOutTradeNo(orderSn);
model.setTotalAmount(orderInfo.getPayPrice());
model.setSubject(orderInfo.getCourseName());
model.setBody("");
model.setProductCode("FAST_INSTANT_TRADE_PAY");
model.setTimeoutExpress("15m");
alipayRequest.setBizModel(model);
// 請求支付寶進行支付,獲取支付結果
String result = alipayClient.sdkExecute(alipayRequest).getBody();
log.info("支付結果:{}", result);
呼叫查詢訂單request
// 獲得初始化的AlipayClient
AlipayClient alipayClient = getAlipayClient();
AlipayTradeQueryRequest queryRequest = new AlipayTradeQueryRequest();
AlipayTradeQueryModel queryModel = new AlipayTradeQueryModel();
queryModel.setOutTradeNo(orderSn);
queryRequest.setBizModel(queryModel);
// 呼叫查詢
AlipayTradeQueryResponse execute = alipayClient.execute(queryRequest);
log.info("回傳結果:{}", execute.getBody()));
退款,退款查詢等等類似
好啦, 就到這了,如有不足和疑問請留言
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/249054.html
標籤:其他
