| | |
| | | |
| | | import com.alipay.api.AlipayApiException; |
| | | import com.alipay.api.response.AlipayTradeQueryResponse; |
| | | import com.ks.vip.exception.OrderPayException; |
| | | import com.ks.vip.exception.VipOrderException; |
| | | import com.ks.vip.mapper.VipOrderMapper; |
| | | import com.ks.vip.pojo.DO.VipCombo; |
| | |
| | | |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public PayWayInfoDTO addOrderByBuy(VipOrderDTO t) throws VipOrderException { |
| | | public PayWayInfoDTO addOrderWithPay(VipOrderDTO t, String notifyUrl, String returnUrl) throws VipOrderException { |
| | | if (t.getComboId() == null || t.getComboId() <= 0) { |
| | | throw new VipOrderException(1, "套餐ID不能为空"); |
| | | } |
| | |
| | | vipOrderMapper.insertSelective(newOrder); |
| | | |
| | | // 支付方式 |
| | | return payOrder(newOrder); |
| | | try { |
| | | return payOrder(newOrder, notifyUrl, returnUrl); |
| | | } catch (OrderPayException e) { |
| | | e.printStackTrace(); |
| | | throw new VipOrderException(VipOrderException.CODE_CREATE_PAY_ORDER_FAIL, e.getMsg()); |
| | | } |
| | | } |
| | | |
| | | |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public PayWayInfoDTO payOrder(VipOrder order) { |
| | | public PayWayInfoDTO payOrder(VipOrder order, String notifyUrl, String returnUrl) throws OrderPayException { |
| | | if (order.getState() == VipOrder.STATE_PAY) { |
| | | throw new OrderPayException(OrderPayException.CODE_ALREADY_PAY, "已经完成支付"); |
| | | } |
| | | String goodsTitle = Constant.ORDER_PAY_TITLE; |
| | | String orderId = order.getId() + ""; |
| | | switch (order.getPayWay()) { |
| | | case "alipay": //生成支付宝支付订单 |
| | | if (order.getState() == VipOrder.STATE_PAY) { |
| | | return new PayWayInfoDTO(PayWayEnum.alipay.getWay(), PayUtil.getPaySuccessUrl(orderId)); |
| | | //生成支付宝支付订单 |
| | | case "alipay": |
| | | String form = PayUtil.getVipChargeAlipayForm(orderId, goodsTitle, orderId, order.getPayMoney(), notifyUrl, returnUrl); |
| | | if (StringUtil.isNullOrEmpty(form)) { |
| | | throw new OrderPayException(OrderPayException.CODE_CREATE_PAY_ORDER_FAIL, "创建支付宝支付订单失败"); |
| | | } |
| | | String form = PayUtil.getVipChargeAlipayForm(orderId, goodsTitle, orderId, order.getPayMoney()); |
| | | //暂存2分钟 |
| | | String id = StringUtil.Md5(UUID.randomUUID().toString() + "#" + System.currentTimeMillis()); |
| | | redisManager.cacheCommonString(id, form, 120); |
| | | String payUrl = Constant.HOST + "/BuWan/alipay/printPayForm?formId=" + id; |
| | | return new PayWayInfoDTO(PayWayEnum.alipay.getWay(), payUrl); |
| | | return new PayWayInfoDTO(PayWayEnum.alipay.getWay(), null, id); |
| | | case "weChat": |
| | | try { |
| | | if (order.getState() == VipOrder.STATE_PAY) { |
| | | return new PayWayInfoDTO(PayWayEnum.weChat.getWay(), PayUtil.getPaySuccessUrl(orderId)); |
| | | } |
| | | |
| | | String formWX = PayUtil.createWXOrder(orderId, null, orderId, order.getPayMoney(), goodsTitle); |
| | | //暂存2分钟 |
| | | String idWX = StringUtil.Md5(UUID.randomUUID().toString() + "#" + System.currentTimeMillis()); |
| | | redisManager.cacheCommonString(formWX, formWX, 120); |
| | | String payUrlWX = Constant.HOST + "/BuWan/alipay/printPayForm?formId=" + idWX; |
| | | return new PayWayInfoDTO(PayWayEnum.weChat.getWay(), payUrlWX); |
| | | String payUrl = PayUtil.createWXOrder(null, orderId, order.getPayMoney(), goodsTitle, notifyUrl, returnUrl); |
| | | return new PayWayInfoDTO(PayWayEnum.weChat.getWay(), payUrl, null); |
| | | } catch (Exception e) { |
| | | |
| | | throw new OrderPayException(OrderPayException.CODE_CREATE_PAY_ORDER_FAIL, e.getMessage()); |
| | | } |
| | | } |
| | | return null; |
| | | } |
| | | |
| | | @Override |
| | | public String getAlipayForm(String formId) { |
| | | return redisManager.getCommonString(formId); |
| | | } |
| | | |
| | | |
| | |
| | | return order; |
| | | } |
| | | switch (order.getPayWay()) { |
| | | case "alipay": //支付宝 |
| | | //支付宝 |
| | | case "alipay": |
| | | AlipayTradeQueryResponse res = null; |
| | | try { |
| | | res = AlipayH5PayUtil.queryOrder(PayUtil.getAlipayApp(), id + "", null); |
| | |
| | | } catch (AlipayApiException e) { |
| | | e.printStackTrace(); |
| | | } |
| | | case "weChat": //微信 |
| | | //微信 |
| | | case "weChat": |
| | | try { |
| | | WXPayOrderInfoV3 info = WXPayV3Util.getPayOrderInfo(id + "", PayUtil.getWXAPP()); |
| | | if (info != null && info.getTrade_state().equalsIgnoreCase("SUCCESS")) { |