New file |
| | |
| | | package org.yeshi.utils.alipay; |
| | | |
| | | import com.alipay.api.AlipayApiException; |
| | | import com.alipay.api.AlipayClient; |
| | | import com.alipay.api.DefaultAlipayClient; |
| | | import com.alipay.api.request.*; |
| | | import com.alipay.api.response.AlipayDataDataserviceBillDownloadurlQueryResponse; |
| | | import com.alipay.api.response.AlipayTradeCancelResponse; |
| | | import com.alipay.api.response.AlipayTradeQueryResponse; |
| | | import com.alipay.api.response.AlipayTradeRefundResponse; |
| | | import net.sf.json.JSONObject; |
| | | import org.yeshi.utils.StringUtil; |
| | | import org.yeshi.utils.TimeUtil; |
| | | import org.yeshi.utils.entity.alipay.AlipayAppInfo; |
| | | |
| | | import java.math.BigDecimal; |
| | | import java.util.Date; |
| | | |
| | | /** |
| | | * 支付宝H5支付 |
| | | */ |
| | | public class AlipayH5PayUtil { |
| | | |
| | | private static AlipayClient getAlipayClient(AlipayAppInfo app) { |
| | | AlipayClient alipayClient = new DefaultAlipayClient("https://openapi.alipay.com/gateway.do", app.getAppId(), app.getPrivateKey(), "json", "GBK", app.getAlipayPublicKey(), "RSA2"); //获得初始化的AlipayClient |
| | | return alipayClient; |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 创建订单(支付宝API为https://opendocs.alipay.com/apis/api_1/alipay.trade.wap.pay) |
| | | * |
| | | * @param app |
| | | * @param orderNo |
| | | * @param money |
| | | * @param goodsTitle |
| | | * @param returnUrl |
| | | * @param notifyUrl |
| | | * @return |
| | | */ |
| | | |
| | | public static String createOrderForm(AlipayAppInfo app, String orderNo, BigDecimal money, String goodsTitle, String returnUrl, String notifyUrl) throws AlipayApiException { |
| | | AlipayClient alipayClient = getAlipayClient(app); |
| | | AlipayTradeWapPayRequest alipayRequest = new AlipayTradeWapPayRequest();//创建API对应的request |
| | | alipayRequest.setReturnUrl(returnUrl); |
| | | alipayRequest.setNotifyUrl(notifyUrl);//在公共参数中设置回跳和通知地址 |
| | | JSONObject bizContent = new JSONObject(); |
| | | bizContent.put("out_trade_no", orderNo); |
| | | bizContent.put("total_amount", money); |
| | | bizContent.put("subject", goodsTitle); |
| | | bizContent.put("product_code", "QUICK_WAP_PAY"); |
| | | alipayRequest.setBizContent(bizContent.toString());//填充业务参数 |
| | | String form = alipayClient.pageExecute(alipayRequest).getBody(); //调用SDK生成表单 |
| | | |
| | | |
| | | return form; |
| | | } |
| | | |
| | | /** |
| | | * 订单查询 |
| | | * |
| | | * @param app |
| | | * @param outTradeNo |
| | | * @param alipayTradeNo |
| | | * @return |
| | | * @throws AlipayApiException |
| | | */ |
| | | public static AlipayTradeQueryResponse queryOrder(AlipayAppInfo app, String outTradeNo, String alipayTradeNo) throws AlipayApiException { |
| | | AlipayClient alipayClient = getAlipayClient(app); |
| | | AlipayTradeQueryRequest request = new AlipayTradeQueryRequest(); //创建API对应的request类 |
| | | JSONObject content = new JSONObject(); |
| | | if (!StringUtil.isNullOrEmpty(outTradeNo)) { |
| | | content.put("out_trade_no", outTradeNo); |
| | | } |
| | | if (!StringUtil.isNullOrEmpty(alipayTradeNo)) { |
| | | content.put("trade_no", alipayTradeNo); |
| | | } |
| | | request.setBizContent(content.toString()); |
| | | AlipayTradeQueryResponse response = alipayClient.execute(request); //通过alipayClient调用API,获得对应的response类 |
| | | return response; |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 取消订单 |
| | | * 如果此订单用户支付失败,支付宝将关闭此订单。 |
| | | * 如果此订单用户支付成功,支付宝将退还订单资金给用户。 |
| | | * |
| | | * @param app |
| | | * @param outTradeNo |
| | | * @param alipayTradeNo |
| | | * @return |
| | | * @throws AlipayApiException |
| | | */ |
| | | public static AlipayTradeCancelResponse cancelOrder(AlipayAppInfo app, String outTradeNo, String alipayTradeNo) throws AlipayApiException { |
| | | AlipayClient alipayClient = getAlipayClient(app); |
| | | AlipayTradeCancelRequest request = new AlipayTradeCancelRequest(); //创建API对应的request类 |
| | | JSONObject content = new JSONObject(); |
| | | if (!StringUtil.isNullOrEmpty(outTradeNo)) { |
| | | content.put("out_trade_no", outTradeNo); |
| | | } |
| | | if (!StringUtil.isNullOrEmpty(alipayTradeNo)) { |
| | | content.put("trade_no", alipayTradeNo); |
| | | } |
| | | request.setBizContent(content.toString()); //设置业务参数 |
| | | AlipayTradeCancelResponse response = alipayClient.execute(request); //通过alipayClient调用API,获得对应的response类 |
| | | return response; |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 退款 |
| | | * |
| | | * @param app |
| | | * @param outTradeNo |
| | | * @param alipayTradeNo |
| | | * @param refundAmount 本次退款金额 |
| | | * @param outRequestNo 本次退款请求流水号,部分退款时必传。 |
| | | * @return |
| | | * @throws AlipayApiException |
| | | */ |
| | | public static AlipayTradeRefundResponse refund(AlipayAppInfo app, String outTradeNo, String alipayTradeNo, BigDecimal refundAmount, String outRequestNo) throws AlipayApiException { |
| | | AlipayClient alipayClient = getAlipayClient(app); |
| | | AlipayTradeRefundRequest request = new AlipayTradeRefundRequest();//创建API对应的request类 |
| | | JSONObject content = new JSONObject(); |
| | | if (!StringUtil.isNullOrEmpty(outTradeNo)) { |
| | | content.put("out_trade_no", outTradeNo); |
| | | } |
| | | if (!StringUtil.isNullOrEmpty(alipayTradeNo)) { |
| | | content.put("trade_no", alipayTradeNo); |
| | | } |
| | | |
| | | if (!StringUtil.isNullOrEmpty(outRequestNo)) { |
| | | content.put("out_request_no", outRequestNo); |
| | | } |
| | | |
| | | content.put("refund_amount", refundAmount); |
| | | |
| | | request.setBizContent(content.toString()); //设置业务参数 |
| | | AlipayTradeRefundResponse response = alipayClient.execute(request);//通过alipayClient调用API,获得对应的response类 |
| | | return response; |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 获取账单的链接 |
| | | * |
| | | * @param app |
| | | * @param date 需要下载的账单日期,最晚是当期日期的前一天。 |
| | | * @return |
| | | * @throws AlipayApiException |
| | | */ |
| | | public static String getBillLink(AlipayAppInfo app, Date date) throws AlipayApiException { |
| | | AlipayClient alipayClient = getAlipayClient(app); |
| | | AlipayDataDataserviceBillDownloadurlQueryRequest request = new AlipayDataDataserviceBillDownloadurlQueryRequest();//创建API对应的request类 |
| | | JSONObject content = new JSONObject(); |
| | | content.put("bill_type", "trade"); |
| | | content.put("bill_date", TimeUtil.getGernalTime(date.getTime(), "yyyy-MM-dd")); |
| | | AlipayDataDataserviceBillDownloadurlQueryResponse response = alipayClient.execute(request);//通过alipayClient调用API,获得对应的response类 |
| | | return response.getBillDownloadUrl(); |
| | | } |
| | | |
| | | } |