OrderPayController.java 7.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149
  1. package com.izouma.nineth.web;
  2. import com.alibaba.fastjson.JSON;
  3. import com.github.binarywang.wxpay.bean.order.WxPayMpOrderResult;
  4. import com.github.binarywang.wxpay.constant.WxPayConstants;
  5. import com.github.binarywang.wxpay.exception.WxPayException;
  6. import com.huifu.adapay.core.exception.BaseAdaPayException;
  7. import com.izouma.nineth.domain.Order;
  8. import com.izouma.nineth.enums.OrderStatus;
  9. import com.izouma.nineth.exception.BusinessException;
  10. import com.izouma.nineth.repo.OrderRepo;
  11. import com.izouma.nineth.service.AssetService;
  12. import com.izouma.nineth.service.GiftOrderService;
  13. import com.izouma.nineth.service.OrderService;
  14. import lombok.AllArgsConstructor;
  15. import lombok.extern.slf4j.Slf4j;
  16. import me.chanjar.weixin.common.error.WxErrorException;
  17. import me.chanjar.weixin.mp.api.WxMpService;
  18. import me.chanjar.weixin.mp.bean.result.WxMpOAuth2AccessToken;
  19. import me.chanjar.weixin.mp.bean.result.WxMpUser;
  20. import org.apache.commons.codec.EncoderException;
  21. import org.springframework.stereotype.Controller;
  22. import org.springframework.ui.Model;
  23. import org.springframework.web.bind.annotation.*;
  24. import java.util.regex.Pattern;
  25. @Controller
  26. @RequestMapping("/payOrder")
  27. @Slf4j
  28. @AllArgsConstructor
  29. public class OrderPayController {
  30. private final OrderService orderService;
  31. private final AssetService assetService;
  32. private final WxMpService wxMpService;
  33. private final GiftOrderService giftOrderService;
  34. private final OrderRepo orderRepo;
  35. @RequestMapping(value = "/alipay_h5", method = RequestMethod.GET)
  36. @ResponseBody
  37. public String payOrderAlipayH5(Long id, Model model) throws BaseAdaPayException {
  38. return (String) orderService.payAdapay(id, "alipay_wap", null);
  39. }
  40. @RequestMapping(value = "/alipay_wx", method = RequestMethod.GET)
  41. public String payOrderAlipayWx(Long id, Model model) throws BaseAdaPayException {
  42. Order order = orderRepo.findById(id).orElseThrow(new BusinessException("订单不存在"));
  43. if (order.getStatus() == OrderStatus.FINISH || order.getStatus() == OrderStatus.PROCESSING) {
  44. return "redirect:/9th/orderDetail?id=" + id;
  45. } else if (order.getStatus() == OrderStatus.CANCELLED) {
  46. return "redirect:/9th/store";
  47. }
  48. String payUrl = (String) orderService.payAdapay(id, "alipay_wap", null);
  49. model.addAttribute("payUrl", payUrl);
  50. model.addAttribute("orderId", id);
  51. return "AlipayHtml";
  52. }
  53. @RequestMapping(value = "/alipay_qr", method = RequestMethod.GET)
  54. @ResponseBody
  55. public String payOrderAlipayQR(Long id, Model model) throws BaseAdaPayException {
  56. return (String) orderService.payAdapay(id, "alipay_qr", null);
  57. }
  58. @RequestMapping(value = "/alipay_app", method = RequestMethod.GET)
  59. @ResponseBody
  60. public String payOrderAlipayApp(Long id, Model model) throws BaseAdaPayException {
  61. return (String) orderService.payAdapay(id, "alipay", null);
  62. }
  63. @RequestMapping(value = "/weixin_h5")
  64. public String payOrderWeixinH5(Long id, Model model, @RequestHeader(value = "User-Agent") String userAgent) throws EncoderException, WxPayException {
  65. detectUA(userAgent, model);
  66. model.addAttribute("payUrl", orderService.payOrderWeixin(id, WxPayConstants.TradeType.MWEB, null));
  67. return "WeixinPayHtml";
  68. }
  69. @RequestMapping(value = "/weixin")
  70. @ResponseBody
  71. public Object payOrderWeixin(@RequestParam Long id, @RequestParam(defaultValue = "wx_lite") String channel, @RequestParam(required = false) String openId) throws BaseAdaPayException {
  72. return orderService.payAdapay(id, channel, openId);
  73. }
  74. @RequestMapping(value = "/weixin_pc")
  75. public String payOrderWeixinPC(@RequestParam Long id, @RequestParam String code, Model model) throws WxPayException, EncoderException, WxErrorException {
  76. WxMpOAuth2AccessToken accessToken = wxMpService.oauth2getAccessToken(code);
  77. WxMpUser user = wxMpService.oauth2getUserInfo(accessToken, null);
  78. WxPayMpOrderResult payParams = (WxPayMpOrderResult) orderService.payOrderWeixin(id, WxPayConstants.TradeType.JSAPI, user.getOpenId());
  79. model.addAttribute("payParams", JSON.toJSONString(payParams));
  80. return "PayOrderPC";
  81. }
  82. @RequestMapping(value = "/gift/alipay_h5", method = RequestMethod.GET)
  83. @ResponseBody
  84. public String payGiftOrderAlipayH5(Long id, Model model) throws BaseAdaPayException {
  85. return (String) giftOrderService.payAdapay(id, "alipay_wap", null);
  86. }
  87. @RequestMapping(value = "/gift/alipay_wx", method = RequestMethod.GET)
  88. public String payGiftOrderAlipayWx(Long id, Model model) throws BaseAdaPayException {
  89. String payUrl = (String) giftOrderService.payAdapay(id, "alipay_wap", null);
  90. model.addAttribute("payUrl", payUrl);
  91. model.addAttribute("orderId", id);
  92. return "AlipayHtml";
  93. }
  94. @RequestMapping(value = "/gift/alipay_qr", method = RequestMethod.GET)
  95. @ResponseBody
  96. public String payGiftOrderAlipayQR(Long id, Model model) throws BaseAdaPayException {
  97. return (String) giftOrderService.payAdapay(id, "alipay_qr", null);
  98. }
  99. @RequestMapping(value = "/gift/alipay_app", method = RequestMethod.GET)
  100. @ResponseBody
  101. public String payGiftOrderAlipayApp(Long id, Model model) throws BaseAdaPayException {
  102. return (String) giftOrderService.payAdapay(id, "alipay", null);
  103. }
  104. @RequestMapping(value = "/gift/weixin_h5")
  105. public String payGiftOrderWeixinH5(Long id, Model model, @RequestHeader(value = "User-Agent") String userAgent) throws EncoderException, WxPayException {
  106. detectUA(userAgent, model);
  107. model.addAttribute("payUrl", giftOrderService.payOrderWeixin(id, WxPayConstants.TradeType.MWEB, null));
  108. return "WeixinPayHtml";
  109. }
  110. @RequestMapping(value = "/gift/weixin")
  111. @ResponseBody
  112. public Object payGiftOrderWeixin(@RequestParam Long id, @RequestParam(defaultValue = "wx_lite") String channel, @RequestParam(required = false) String openId) throws BaseAdaPayException {
  113. return giftOrderService.payAdapay(id, channel, openId);
  114. }
  115. @RequestMapping(value = "/gift/weixin_pc")
  116. public String payGiftOrderWeixinPC(@RequestParam Long id, @RequestParam String code, Model model) throws WxPayException, EncoderException, WxErrorException {
  117. WxMpOAuth2AccessToken accessToken = wxMpService.oauth2getAccessToken(code);
  118. WxMpUser user = wxMpService.oauth2getUserInfo(accessToken, null);
  119. WxPayMpOrderResult payParams = (WxPayMpOrderResult) giftOrderService.payOrderWeixin(id, WxPayConstants.TradeType.JSAPI, user.getOpenId());
  120. model.addAttribute("payParams", JSON.toJSONString(payParams));
  121. return "PayOrderPC";
  122. }
  123. public void detectUA(String ua, Model model) {
  124. boolean weixin = Pattern.matches(".*(micromessenger).*", ua.toLowerCase());
  125. boolean ios = Pattern.matches(".*(ipad|iphone).*", ua.toLowerCase());
  126. boolean android = Pattern.matches(".*(android).*", ua.toLowerCase());
  127. model.addAttribute("weixin", weixin);
  128. model.addAttribute("ios", ios);
  129. model.addAttribute("android", android);
  130. }
  131. }