package com.ruoyi.payment.controller;
|
|
import com.alipay.api.response.AlipayTradeQueryResponse;
|
import com.ruoyi.common.core.domain.R;
|
import com.ruoyi.order.api.feignClient.ChargingOrderClient;
|
import com.ruoyi.payment.ali.v2.AppPayUtil;
|
import com.ruoyi.payment.ali.v2.H5PayUtil;
|
import com.ruoyi.payment.api.model.RefundReq;
|
import com.ruoyi.payment.api.model.RefundResp;
|
import com.ruoyi.payment.api.vo.AliPaymentReq;
|
import com.ruoyi.payment.api.vo.AliQueryOrder;
|
import org.springframework.beans.BeanUtils;
|
import org.springframework.web.bind.annotation.*;
|
|
import javax.annotation.Resource;
|
import javax.servlet.http.HttpServletRequest;
|
import javax.servlet.http.HttpServletResponse;
|
import java.io.PrintWriter;
|
import java.util.Map;
|
|
/**
|
* @author zhibing.pu
|
* @Date 2024/8/24 14:29
|
*/
|
@RestController
|
@RequestMapping("/aliH5")
|
public class H5AliPayController {
|
|
@Resource
|
private H5PayUtil h5PayUtil;
|
@Resource
|
private ChargingOrderClient chargingOrderClient;
|
|
/**
|
* 调起支付宝小程序支付
|
* @param req
|
* @return
|
*/
|
@ResponseBody
|
@PostMapping("/payment")
|
public R<String> payment(@RequestBody AliPaymentReq req){
|
String alipay = h5PayUtil.alipay(req.getBody(), req.getSubject(), req.getPassbackParams(), req.getOutTradeNo(), req.getTotalAmount(), req.getNotifyUrl(),req.getReturnUrl());
|
return R.ok(alipay);
|
}
|
|
/**
|
* 查询订单
|
* @param outTradeNo
|
* @return
|
*/
|
@ResponseBody
|
@PostMapping("/query")
|
public R<AliQueryOrder> query(@RequestParam("outTradeNo") String outTradeNo){
|
AlipayTradeQueryResponse alipayTradeQueryResponse = h5PayUtil.queryAliOrder(outTradeNo);
|
if(null != alipayTradeQueryResponse){
|
AliQueryOrder aliQueryOrder = new AliQueryOrder();
|
BeanUtils.copyProperties(alipayTradeQueryResponse, aliQueryOrder);
|
return R.ok(aliQueryOrder);
|
}
|
return R.ok();
|
}
|
|
/**
|
* 关闭订单
|
* @param outTradeNo
|
*/
|
@ResponseBody
|
@PostMapping("/close")
|
public void close(@RequestParam("outTradeNo") String outTradeNo){
|
boolean close = h5PayUtil.close(outTradeNo);
|
if(!close){
|
throw new RuntimeException("关闭支付宝订单失败");
|
}
|
}
|
/**
|
* 后台退款 远程调用
|
*/
|
@PostMapping("/refund")
|
public R<RefundResp> refund(@RequestBody RefundReq dto){
|
Map<String, String> map = h5PayUtil.aliRefund(dto.getOutTradeNo(), dto.getRefundAmount());
|
RefundResp refundResp = new RefundResp();
|
refundResp.setCode(map.get("code"));
|
refundResp.setMsg(map.get("msg"));
|
refundResp.setTradeNo(map.get("trade_no"));
|
refundResp.setOutTradeNo(map.get("out_trade_no"));
|
refundResp.setRefundFee(new Double(map.get("refund_fee")));
|
return R.ok(refundResp);
|
}
|
|
@ResponseBody
|
@PostMapping(value = "/callBack")
|
public void chargingOrderALICallback(HttpServletRequest request, HttpServletResponse response) {
|
try {
|
Map<String, String> callback = h5PayUtil.alipayCallback(request);
|
if(null != callback){
|
String out_trade_no = callback.get("out_trade_no");
|
String attach = callback.get("subject");
|
String total_amount = callback.get("total_amount");
|
String transaction_id = callback.get("trade_no");
|
String substring = out_trade_no.substring(0, 2);
|
switch (substring){
|
case "CD":
|
chargingOrderClient.chargingOrderALIH5Callback(out_trade_no, transaction_id, attach);
|
System.err.println("----充电支付回调");
|
break;
|
}
|
PrintWriter writer = response.getWriter();
|
writer.println("success");
|
writer.flush();
|
writer.close();
|
}
|
} catch (Exception e) {
|
e.printStackTrace();
|
}
|
}
|
|
}
|