package cn.lili.modules.payment.kit.plugin.alipay;
import com.alipay.api.AlipayApiException;
import com.alipay.api.AlipayRequest;
import com.alipay.api.AlipayResponse;
import com.alipay.api.domain.AlipayTradeAppPayModel;
import com.alipay.api.domain.AlipayTradePagePayModel;
import com.alipay.api.domain.AlipayTradePrecreateModel;
import com.alipay.api.domain.AlipayTradeWapPayModel;
import com.alipay.api.request.AlipayTradeAppPayRequest;
import com.alipay.api.request.AlipayTradePagePayRequest;
import com.alipay.api.request.AlipayTradePrecreateRequest;
import com.alipay.api.request.AlipayTradeWapPayRequest;
import com.alipay.api.response.AlipayTradeAppPayResponse;
import com.alipay.api.response.AlipayTradePrecreateResponse;
import lombok.extern.slf4j.Slf4j;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
/**
* 支付宝支付
*
* @author Chopper
* @since 2020/12/15 19:26
*/
@Slf4j
public class AliPayRequest {
/**
* WAP支付
*
* @param response {@link HttpServletResponse}
* @param model {@link AlipayTradeWapPayModel}
* @param returnUrl 异步通知URL
* @param notifyUrl 同步通知URL
* @throws AlipayApiException 支付宝 Api 异常
* @throws IOException IO 异常
*/
public static void wapPay(HttpServletResponse response, AlipayTradeWapPayModel model, String returnUrl, String notifyUrl) throws AlipayApiException, IOException {
String form = wapPayStr(model, returnUrl, notifyUrl);
response.setContentType("text/html;charset=UTF-8");
log.info("支付表单{}", form);
PrintWriter out = response.getWriter();
out.write(form);
out.flush();
out.close();
}
/**
* APP支付
*
* @param model {@link AlipayTradeAppPayModel}
* @param notifyUrl 异步通知 URL
* @return {@link AlipayTradeAppPayResponse}
* @throws AlipayApiException 支付宝 Api 异常
*/
public static AlipayTradeAppPayResponse appPayToResponse(AlipayTradeAppPayModel model, String notifyUrl) throws AlipayApiException {
AlipayTradeAppPayRequest request = new AlipayTradeAppPayRequest();
request.setBizModel(model);
request.setNotifyUrl(notifyUrl);
return sdkExecute(request);
}
/**
* 电脑网站支付(PC支付)
*
* @param response {@link HttpServletResponse}
* @param model {@link AlipayTradePagePayModel}
* @param notifyUrl 异步通知URL
* @param returnUrl 同步通知URL
* @throws AlipayApiException 支付宝 Api 异常
* @throws IOException IO 异常
*/
public static void tradePage(HttpServletResponse response, AlipayTradePagePayModel model, String notifyUrl, String returnUrl) throws AlipayApiException, IOException {
AlipayTradePagePayRequest request = new AlipayTradePagePayRequest();
request.setBizModel(model);
request.setNotifyUrl(notifyUrl);
request.setReturnUrl(returnUrl);
String form = pageExecute(request).getBody();
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
out.write(form);
out.flush();
out.close();
}
/**
* 统一收单线下交易预创建
* 适用于:扫码支付等
*
* @param model {@link AlipayTradePrecreateModel}
* @param notifyUrl 异步通知URL
* @return {@link AlipayTradePrecreateResponse}
* @throws AlipayApiException 支付宝 Api 异常
*/
public static AlipayTradePrecreateResponse tradePrecreatePayToResponse(AlipayTradePrecreateModel model, String notifyUrl) throws AlipayApiException {
AlipayTradePrecreateRequest request = new AlipayTradePrecreateRequest();
request.setBizModel(model);
request.setNotifyUrl(notifyUrl);
return doExecute(request);
}
/**
* WAP支付
*
* @param model {@link AlipayTradeWapPayModel}
* @param returnUrl 异步通知URL
* @param notifyUrl 同步通知URL
* @return {String}
* @throws AlipayApiException 支付宝 Api 异常
*/
public static String wapPayStr(AlipayTradeWapPayModel model, String returnUrl, String notifyUrl) throws AlipayApiException {
AlipayTradeWapPayRequest aliPayRequest = new AlipayTradeWapPayRequest();
aliPayRequest.setReturnUrl(returnUrl);
aliPayRequest.setNotifyUrl(notifyUrl);
aliPayRequest.setBizModel(model);
return pageExecute(aliPayRequest).getBody();
}
public static T doExecute(AlipayRequest request) throws AlipayApiException {
return certificateExecute(request);
}
public static T certificateExecute(AlipayRequest request) throws AlipayApiException {
return AliPayApiConfigKit.getAliPayApiConfig().certificateExecute(request);
}
public static T pageExecute(AlipayRequest request) throws AlipayApiException {
return AliPayApiConfigKit.getAliPayApiConfig().pageExecute(request);
}
public static T sdkExecute(AlipayRequest request) throws AlipayApiException {
return AliPayApiConfigKit.getAliPayApiConfig().sdkExecute(request);
}
}