package com.zanxiang.sdk.controller; import com.zanxiang.common.domain.ResultMap; import com.zanxiang.common.enums.HttpStatusEnum; import com.zanxiang.common.enums.PayWayEnum; import com.zanxiang.common.utils.IpUtils; import com.zanxiang.common.utils.StringUtils; import com.zanxiang.sdk.common.annotation.ValidLogin; import com.zanxiang.sdk.domain.bo.PlatformOrderBO; import com.zanxiang.sdk.domain.bo.ProductPayParamBO; import com.zanxiang.sdk.domain.params.ProductPayParam; import com.zanxiang.sdk.domain.params.UserData; import com.zanxiang.sdk.service.Impl.pay.PayService; import com.zanxiang.sdk.service.PlatformOrderService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.jdom.JDOMException; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.math.BigDecimal; import java.util.Objects; /** * 支付公共入口 * * @author xufeng * @date 2022/6/8 14:49 */ @Api(tags = "支付公共入口") @CrossOrigin @RestController @RequestMapping(value = "/pay") @Slf4j public class PayController { @Resource private PayService payService; @Autowired private PlatformOrderService platformOrderService; @ApiOperation(value = "支付参数生成") @PostMapping(value = "/create") public ResultMap create(@Validated @RequestBody ProductPayParam product, @ValidLogin UserData userData, HttpServletRequest request) { String userId = String.valueOf(userData.getUserId()); // String userId = "1"; String cpId = "1"; if (StringUtils.isEmpty(product.getOrderId())) { //虚拟充值情况,直接传金额实时生成订单 if (product.getAmount() == null || Objects.equals(product.getAmount(), BigDecimal.ZERO)) { return ResultMap.error(HttpStatusEnum.ORDER_AMOUNT_IS_NULL.getMsg()); } if (StringUtils.isEmpty(product.getGameId())) { return ResultMap.error(HttpStatusEnum.ORDER_GAME_ID_IS_NULL.getMsg()); } PlatformOrderBO orderBO = new PlatformOrderBO(); orderBO.setAmount(product.getAmount()); orderBO.setProductName(product.getAmount().toString());//"充值" + orderBO.setProductId("ptb_charge"); orderBO.setMgUserId(product.getMgUserId()); orderBO.setUserId(userId); orderBO.setGameId(Long.valueOf(product.getGameId())); orderBO.setCpId(cpId); String orderId = platformOrderService.create(orderBO); product.setOrderId(orderId); } ProductPayParamBO bo = new ProductPayParamBO(); bo.setGameId(product.getGameId()); bo.setUserId(userId); bo.setPayDevice(userData.getDeviceType()); bo.setDeviceSystem(userData.getDeviceSystem()); //todo : 工具类做了修改 bo.setSpbillCreateIp(IpUtils.getRealIp(request)); bo.setOutTradeNo(product.getOrderId()); bo.setPayWay(product.getPayWay()); return payService.payCreate(bo); } @ApiOperation(value = "支付宝支付异步回调(二维码、H5、网站)") @RequestMapping(value = "notify", method = RequestMethod.POST) public String alipayNotify(HttpServletRequest request, HttpServletResponse response) throws IOException, JDOMException { log.info("支付宝支付异步回调 request:{},response:{}", request, response); return payService.notify(request, response, PayWayEnum.ALIPAY.getNum()); } @ApiOperation(value = "微信支付") @RequestMapping(value = "wxPayNotify", method = RequestMethod.POST) public String wxPayNotify(HttpServletRequest request, HttpServletResponse response) throws IOException, JDOMException { log.info("微信支付回调 request:{},response:{}", request, response); return payService.notify(request, response, PayWayEnum.WXPAY.getNum()); } @ApiOperation(value = "支付宝支付同步回调(二维码、H5、网站)") @RequestMapping(value = "alipaySynNotify", method = RequestMethod.GET) public ResultMap synNotify(HttpServletRequest request) { log.info("支付宝回调 request:{}", request); return payService.synNotify(request, PayWayEnum.ALIPAY.getNum()); } }