OrderPayController.java 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233
  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.config.GeneralProperties;
  8. import com.izouma.nineth.domain.Order;
  9. import com.izouma.nineth.enums.OrderStatus;
  10. import com.izouma.nineth.exception.BusinessException;
  11. import com.izouma.nineth.repo.OrderRepo;
  12. import com.izouma.nineth.service.*;
  13. import io.swagger.annotations.ApiOperation;
  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 WxMpService wxMpService;
  32. private final GiftOrderService giftOrderService;
  33. private final OrderRepo orderRepo;
  34. private final MintOrderService mintOrderService;
  35. private final SandPayService sandPayService;
  36. private final OrderPayService orderPayService;
  37. private final GeneralProperties generalProperties;
  38. @RequestMapping(value = "/alipay_h5", method = RequestMethod.GET)
  39. @ResponseBody
  40. public String payOrderAlipayH5(Long id, Model model) throws BaseAdaPayException {
  41. // return (String) orderService.payAdapay(id, "alipay_wap", null);
  42. return orderPayService.payOrder(id);
  43. }
  44. @RequestMapping(value = "/alipay_wx", method = RequestMethod.GET)
  45. public String payOrderAlipayWx(Long id, Model model) throws BaseAdaPayException {
  46. // Order order = orderRepo.findById(id).orElseThrow(new BusinessException("订单不存在"));
  47. // if (order.getStatus() != OrderStatus.NOT_PAID) {
  48. // return "redirect:/9th/store";
  49. // }
  50. // String payUrl = (String) orderService.payAdapay(id, "alipay_wap", null);
  51. // model.addAttribute("payUrl", payUrl);
  52. // model.addAttribute("orderId", id);
  53. // return "AlipayHtml";
  54. Order order = orderRepo.findById(id).orElseThrow(new BusinessException("订单不存在"));
  55. if (order.getStatus() != OrderStatus.NOT_PAID) {
  56. return "redirect:/" + generalProperties.resolveFrontUrl(order.getCompanyId(), "/store");
  57. }
  58. String payUrl = orderPayService.payOrder(id);
  59. model.addAttribute("payUrl", payUrl);
  60. model.addAttribute("orderId", id);
  61. return "AlipayHtml";
  62. }
  63. @RequestMapping(value = "/alipay_qr", method = RequestMethod.GET)
  64. @ResponseBody
  65. public String payOrderAlipayQR(Long id, Model model) throws BaseAdaPayException {
  66. return (String) orderService.payAdapay(id, "alipay_qr", null);
  67. }
  68. @RequestMapping(value = "/alipay_app", method = RequestMethod.GET)
  69. @ResponseBody
  70. public String payOrderAlipayApp(Long id, Model model) throws BaseAdaPayException {
  71. return orderPayService.payOrder(id);
  72. }
  73. @RequestMapping(value = "/weixin_h5")
  74. public String payOrderWeixinH5(Long id, Model model, @RequestHeader(value = "User-Agent") String userAgent) throws EncoderException, WxPayException {
  75. detectUA(userAgent, model);
  76. model.addAttribute("payUrl", orderService.payOrderWeixin(id, WxPayConstants.TradeType.MWEB, null));
  77. return "WeixinPayHtml";
  78. }
  79. @RequestMapping(value = "/weixin")
  80. @ResponseBody
  81. public Object payOrderWeixin(@RequestParam Long id, @RequestParam(defaultValue = "wx_lite") String channel, @RequestParam(required = false) String openId) throws BaseAdaPayException {
  82. return orderService.payAdapay(id, channel, openId);
  83. }
  84. @RequestMapping(value = "/weixin_pc")
  85. public String payOrderWeixinPC(@RequestParam Long id, @RequestParam String code, Model model) throws WxPayException, EncoderException, WxErrorException {
  86. WxMpOAuth2AccessToken accessToken = wxMpService.oauth2getAccessToken(code);
  87. WxMpUser user = wxMpService.oauth2getUserInfo(accessToken, null);
  88. WxPayMpOrderResult payParams = (WxPayMpOrderResult) orderService
  89. .payOrderWeixin(id, WxPayConstants.TradeType.JSAPI, user.getOpenId());
  90. model.addAttribute("payParams", JSON.toJSONString(payParams));
  91. return "PayOrderPC";
  92. }
  93. @ApiOperation("衫德h5快捷")
  94. @RequestMapping(value = "/sandQuick", method = RequestMethod.GET, produces = "text/html")
  95. @ResponseBody
  96. public String sandQuick(@RequestParam Long id, Model model) throws BaseAdaPayException {
  97. // return (String) orderService.payAdapay(id, "alipay_wap", null);
  98. return orderPayService.payOrderQuick(id);
  99. }
  100. @ApiOperation("衫德h5快捷")
  101. @RequestMapping(value = "/agreementPay", method = RequestMethod.GET, produces = "text/html")
  102. @ResponseBody
  103. public String agreementPay(@RequestParam Long id) {
  104. // return (String) orderService.payAdapay(id, "alipay_wap", null);
  105. return orderPayService.payOrderQuick(id);
  106. }
  107. @RequestMapping(value = "/gift/alipay_h5", method = RequestMethod.GET)
  108. @ResponseBody
  109. public String payGiftOrderAlipayH5(Long id, Model model) throws BaseAdaPayException {
  110. // return (String) giftOrderService.payAdapay(id, "alipay_wap", null);
  111. return orderPayService.payGiftOrder(id);
  112. }
  113. @RequestMapping(value = "/gift/alipay_wx", method = RequestMethod.GET)
  114. public String payGiftOrderAlipayWx(Long id, Model model) throws BaseAdaPayException {
  115. // String payUrl = (String) giftOrderService.payAdapay(id, "alipay_wap", null);
  116. String payUrl = orderPayService.payGiftOrder(id);
  117. model.addAttribute("payUrl", payUrl);
  118. model.addAttribute("orderId", id);
  119. return "AlipayHtml";
  120. }
  121. @RequestMapping(value = "/gift/alipay_qr", method = RequestMethod.GET)
  122. @ResponseBody
  123. public String payGiftOrderAlipayQR(Long id, Model model) throws BaseAdaPayException {
  124. return orderPayService.payGiftOrder(id);
  125. }
  126. @RequestMapping(value = "/gift/alipay_app", method = RequestMethod.GET)
  127. @ResponseBody
  128. public String payGiftOrderAlipayApp(Long id, Model model) throws BaseAdaPayException {
  129. return orderPayService.payGiftOrder(id);
  130. }
  131. @RequestMapping(value = "/gift/weixin_h5")
  132. public String payGiftOrderWeixinH5(Long id, Model model, @RequestHeader(value = "User-Agent") String userAgent) throws EncoderException, WxPayException {
  133. detectUA(userAgent, model);
  134. model.addAttribute("payUrl", giftOrderService.payOrderWeixin(id, WxPayConstants.TradeType.MWEB, null));
  135. return "WeixinPayHtml";
  136. }
  137. @RequestMapping(value = "/gift/weixin")
  138. @ResponseBody
  139. public Object payGiftOrderWeixin(@RequestParam Long id, @RequestParam(defaultValue = "wx_lite") String channel, @RequestParam(required = false) String openId) throws BaseAdaPayException {
  140. return giftOrderService.payAdapay(id, channel, openId);
  141. }
  142. @RequestMapping(value = "/gift/weixin_pc")
  143. public String payGiftOrderWeixinPC(@RequestParam Long id, @RequestParam String code, Model model) throws WxPayException, EncoderException, WxErrorException {
  144. WxMpOAuth2AccessToken accessToken = wxMpService.oauth2getAccessToken(code);
  145. WxMpUser user = wxMpService.oauth2getUserInfo(accessToken, null);
  146. WxPayMpOrderResult payParams = (WxPayMpOrderResult) giftOrderService
  147. .payOrderWeixin(id, WxPayConstants.TradeType.JSAPI, user.getOpenId());
  148. model.addAttribute("payParams", JSON.toJSONString(payParams));
  149. return "PayOrderPC";
  150. }
  151. @RequestMapping(value = "/mint/alipay_h5", method = RequestMethod.GET)
  152. @ResponseBody
  153. public String payMintOrderAlipayH5(Long id, Model model) throws BaseAdaPayException {
  154. // return (String) mintOrderService.payAdapay(id, "alipay_wap", null);
  155. return orderPayService.payMintOrder(id);
  156. }
  157. @RequestMapping(value = "/mint/alipay_wx", method = RequestMethod.GET)
  158. public String payMintOrderAlipayWx(Long id, Model model) throws BaseAdaPayException {
  159. // String payUrl = (String) mintOrderService.payAdapay(id, "alipay_wap", null);
  160. String payUrl = orderPayService.payMintOrder(id);
  161. model.addAttribute("payUrl", payUrl);
  162. model.addAttribute("orderId", id);
  163. return "AlipayHtml2";
  164. }
  165. @RequestMapping(value = "/mint/alipay_qr", method = RequestMethod.GET)
  166. @ResponseBody
  167. public String payMintOrderAlipayQR(Long id, Model model) throws BaseAdaPayException {
  168. return (String) mintOrderService.payAdapay(id, "alipay_qr", null);
  169. }
  170. @RequestMapping(value = "/mint/alipay_app", method = RequestMethod.GET)
  171. @ResponseBody
  172. public String payMintOrderAlipayApp(Long id, Model model) throws BaseAdaPayException {
  173. // return (String) mintOrderService.payAdapay(id, "alipay", null);
  174. return orderPayService.payMintOrder(id);
  175. }
  176. @RequestMapping(value = "/mint/weixin_h5")
  177. public String payMintOrderWeixinH5(Long id, Model model, @RequestHeader(value = "User-Agent") String userAgent) throws EncoderException, WxPayException {
  178. detectUA(userAgent, model);
  179. model.addAttribute("payUrl", mintOrderService.payOrderWeixin(id, WxPayConstants.TradeType.MWEB, null));
  180. return "WeixinPayHtml";
  181. }
  182. @RequestMapping(value = "/mint/weixin")
  183. @ResponseBody
  184. public Object payMintOrderWeixin(@RequestParam Long id, @RequestParam(defaultValue = "wx_lite") String channel, @RequestParam(required = false) String openId) throws BaseAdaPayException {
  185. return mintOrderService.payAdapay(id, channel, openId);
  186. }
  187. @RequestMapping(value = "/mint/weixin_pc")
  188. public String payMintOrderWeixinPC(@RequestParam Long id, @RequestParam String code, Model model) throws WxPayException, EncoderException, WxErrorException {
  189. WxMpOAuth2AccessToken accessToken = wxMpService.oauth2getAccessToken(code);
  190. WxMpUser user = wxMpService.oauth2getUserInfo(accessToken, null);
  191. WxPayMpOrderResult payParams = (WxPayMpOrderResult) mintOrderService
  192. .payOrderWeixin(id, WxPayConstants.TradeType.JSAPI, user.getOpenId());
  193. model.addAttribute("payParams", JSON.toJSONString(payParams));
  194. return "PayOrderPC";
  195. }
  196. public void detectUA(String ua, Model model) {
  197. boolean weixin = Pattern.matches(".*(micromessenger).*", ua.toLowerCase());
  198. boolean ios = Pattern.matches(".*(ipad|iphone).*", ua.toLowerCase());
  199. boolean android = Pattern.matches(".*(android).*", ua.toLowerCase());
  200. model.addAttribute("weixin", weixin);
  201. model.addAttribute("ios", ios);
  202. model.addAttribute("android", android);
  203. }
  204. }