OrderPayController.java 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221
  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.*;
  12. import io.swagger.annotations.ApiOperation;
  13. import lombok.AllArgsConstructor;
  14. import lombok.extern.slf4j.Slf4j;
  15. import me.chanjar.weixin.common.error.WxErrorException;
  16. import me.chanjar.weixin.mp.api.WxMpService;
  17. import me.chanjar.weixin.mp.bean.result.WxMpOAuth2AccessToken;
  18. import me.chanjar.weixin.mp.bean.result.WxMpUser;
  19. import org.apache.commons.codec.EncoderException;
  20. import org.springframework.stereotype.Controller;
  21. import org.springframework.ui.Model;
  22. import org.springframework.web.bind.annotation.*;
  23. import java.util.regex.Pattern;
  24. @Controller
  25. @RequestMapping("/payOrder")
  26. @Slf4j
  27. @AllArgsConstructor
  28. public class OrderPayController {
  29. private final OrderService orderService;
  30. private final AssetService assetService;
  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. @RequestMapping(value = "/alipay_h5", method = RequestMethod.GET)
  37. @ResponseBody
  38. public String payOrderAlipayH5(Long id, Model model) throws BaseAdaPayException {
  39. // return (String) orderService.payAdapay(id, "alipay_wap", null);
  40. return sandPayService.payOrder(id);
  41. }
  42. @RequestMapping(value = "/alipay_wx", method = RequestMethod.GET)
  43. public String payOrderAlipayWx(Long id, Model model) throws BaseAdaPayException {
  44. // Order order = orderRepo.findById(id).orElseThrow(new BusinessException("订单不存在"));
  45. // if (order.getStatus() != OrderStatus.NOT_PAID) {
  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. Order order = orderRepo.findById(id).orElseThrow(new BusinessException("订单不存在"));
  53. if (order.getStatus() != OrderStatus.NOT_PAID) {
  54. return "redirect:/9th/store";
  55. }
  56. String payUrl = sandPayService.payOrder(id);
  57. model.addAttribute("payUrl", payUrl);
  58. model.addAttribute("orderId", id);
  59. return "AlipayHtml";
  60. }
  61. @RequestMapping(value = "/alipay_qr", method = RequestMethod.GET)
  62. @ResponseBody
  63. public String payOrderAlipayQR(Long id, Model model) throws BaseAdaPayException {
  64. return (String) orderService.payAdapay(id, "alipay_qr", null);
  65. }
  66. @RequestMapping(value = "/alipay_app", method = RequestMethod.GET)
  67. @ResponseBody
  68. public String payOrderAlipayApp(Long id, Model model) throws BaseAdaPayException {
  69. return sandPayService.payOrder(id);
  70. }
  71. @ApiOperation("衫德h5快捷")
  72. @RequestMapping(value = "/sandQuick", method = RequestMethod.GET, produces = "text/html")
  73. @ResponseBody
  74. public String sandQuick(@RequestParam Long id, Model model) throws BaseAdaPayException {
  75. // return (String) orderService.payAdapay(id, "alipay_wap", null);
  76. return sandPayService.payOrderQuick(id);
  77. }
  78. @RequestMapping(value = "/weixin_h5")
  79. public String payOrderWeixinH5(Long id, Model model, @RequestHeader(value = "User-Agent") String userAgent) throws EncoderException, WxPayException {
  80. detectUA(userAgent, model);
  81. model.addAttribute("payUrl", orderService.payOrderWeixin(id, WxPayConstants.TradeType.MWEB, null));
  82. return "WeixinPayHtml";
  83. }
  84. @RequestMapping(value = "/weixin")
  85. @ResponseBody
  86. public Object payOrderWeixin(@RequestParam Long id, @RequestParam(defaultValue = "wx_lite") String channel, @RequestParam(required = false) String openId) throws BaseAdaPayException {
  87. return orderService.payAdapay(id, channel, openId);
  88. }
  89. @RequestMapping(value = "/weixin_pc")
  90. public String payOrderWeixinPC(@RequestParam Long id, @RequestParam String code, Model model) throws WxPayException, EncoderException, WxErrorException {
  91. WxMpOAuth2AccessToken accessToken = wxMpService.oauth2getAccessToken(code);
  92. WxMpUser user = wxMpService.oauth2getUserInfo(accessToken, null);
  93. WxPayMpOrderResult payParams = (WxPayMpOrderResult) orderService
  94. .payOrderWeixin(id, WxPayConstants.TradeType.JSAPI, user.getOpenId());
  95. model.addAttribute("payParams", JSON.toJSONString(payParams));
  96. return "PayOrderPC";
  97. }
  98. @RequestMapping(value = "/gift/alipay_h5", method = RequestMethod.GET)
  99. @ResponseBody
  100. public String payGiftOrderAlipayH5(Long id, Model model) throws BaseAdaPayException {
  101. // return (String) giftOrderService.payAdapay(id, "alipay_wap", null);
  102. return sandPayService.payGiftOrder(id);
  103. }
  104. @RequestMapping(value = "/gift/alipay_wx", method = RequestMethod.GET)
  105. public String payGiftOrderAlipayWx(Long id, Model model) throws BaseAdaPayException {
  106. // String payUrl = (String) giftOrderService.payAdapay(id, "alipay_wap", null);
  107. String payUrl = sandPayService.payGiftOrder(id);
  108. model.addAttribute("payUrl", payUrl);
  109. model.addAttribute("orderId", id);
  110. return "AlipayHtml";
  111. }
  112. @RequestMapping(value = "/gift/alipay_qr", method = RequestMethod.GET)
  113. @ResponseBody
  114. public String payGiftOrderAlipayQR(Long id, Model model) throws BaseAdaPayException {
  115. return sandPayService.payGiftOrder(id);
  116. }
  117. @RequestMapping(value = "/gift/alipay_app", method = RequestMethod.GET)
  118. @ResponseBody
  119. public String payGiftOrderAlipayApp(Long id, Model model) throws BaseAdaPayException {
  120. return sandPayService.payGiftOrder(id);
  121. }
  122. @RequestMapping(value = "/gift/weixin_h5")
  123. public String payGiftOrderWeixinH5(Long id, Model model, @RequestHeader(value = "User-Agent") String userAgent) throws EncoderException, WxPayException {
  124. detectUA(userAgent, model);
  125. model.addAttribute("payUrl", giftOrderService.payOrderWeixin(id, WxPayConstants.TradeType.MWEB, null));
  126. return "WeixinPayHtml";
  127. }
  128. @RequestMapping(value = "/gift/weixin")
  129. @ResponseBody
  130. public Object payGiftOrderWeixin(@RequestParam Long id, @RequestParam(defaultValue = "wx_lite") String channel, @RequestParam(required = false) String openId) throws BaseAdaPayException {
  131. return giftOrderService.payAdapay(id, channel, openId);
  132. }
  133. @RequestMapping(value = "/gift/weixin_pc")
  134. public String payGiftOrderWeixinPC(@RequestParam Long id, @RequestParam String code, Model model) throws WxPayException, EncoderException, WxErrorException {
  135. WxMpOAuth2AccessToken accessToken = wxMpService.oauth2getAccessToken(code);
  136. WxMpUser user = wxMpService.oauth2getUserInfo(accessToken, null);
  137. WxPayMpOrderResult payParams = (WxPayMpOrderResult) giftOrderService
  138. .payOrderWeixin(id, WxPayConstants.TradeType.JSAPI, user.getOpenId());
  139. model.addAttribute("payParams", JSON.toJSONString(payParams));
  140. return "PayOrderPC";
  141. }
  142. @RequestMapping(value = "/mint/alipay_h5", method = RequestMethod.GET)
  143. @ResponseBody
  144. public String payMintOrderAlipayH5(Long id, Model model) throws BaseAdaPayException {
  145. return (String) mintOrderService.payAdapay(id, "alipay_wap", null);
  146. }
  147. @RequestMapping(value = "/mint/alipay_wx", method = RequestMethod.GET)
  148. public String payMintOrderAlipayWx(Long id, Model model) throws BaseAdaPayException {
  149. String payUrl = (String) mintOrderService.payAdapay(id, "alipay_wap", null);
  150. model.addAttribute("payUrl", payUrl);
  151. model.addAttribute("orderId", id);
  152. return "AlipayHtml2";
  153. }
  154. @RequestMapping(value = "/mint/alipay_qr", method = RequestMethod.GET)
  155. @ResponseBody
  156. public String payMintOrderAlipayQR(Long id, Model model) throws BaseAdaPayException {
  157. return (String) mintOrderService.payAdapay(id, "alipay_qr", null);
  158. }
  159. @RequestMapping(value = "/mint/alipay_app", method = RequestMethod.GET)
  160. @ResponseBody
  161. public String payMintOrderAlipayApp(Long id, Model model) throws BaseAdaPayException {
  162. return (String) mintOrderService.payAdapay(id, "alipay", null);
  163. }
  164. @RequestMapping(value = "/mint/weixin_h5")
  165. public String payMintOrderWeixinH5(Long id, Model model, @RequestHeader(value = "User-Agent") String userAgent) throws EncoderException, WxPayException {
  166. detectUA(userAgent, model);
  167. model.addAttribute("payUrl", mintOrderService.payOrderWeixin(id, WxPayConstants.TradeType.MWEB, null));
  168. return "WeixinPayHtml";
  169. }
  170. @RequestMapping(value = "/mint/weixin")
  171. @ResponseBody
  172. public Object payMintOrderWeixin(@RequestParam Long id, @RequestParam(defaultValue = "wx_lite") String channel, @RequestParam(required = false) String openId) throws BaseAdaPayException {
  173. return mintOrderService.payAdapay(id, channel, openId);
  174. }
  175. @RequestMapping(value = "/mint/weixin_pc")
  176. public String payMintOrderWeixinPC(@RequestParam Long id, @RequestParam String code, Model model) throws WxPayException, EncoderException, WxErrorException {
  177. WxMpOAuth2AccessToken accessToken = wxMpService.oauth2getAccessToken(code);
  178. WxMpUser user = wxMpService.oauth2getUserInfo(accessToken, null);
  179. WxPayMpOrderResult payParams = (WxPayMpOrderResult) mintOrderService
  180. .payOrderWeixin(id, WxPayConstants.TradeType.JSAPI, user.getOpenId());
  181. model.addAttribute("payParams", JSON.toJSONString(payParams));
  182. return "PayOrderPC";
  183. }
  184. public void detectUA(String ua, Model model) {
  185. boolean weixin = Pattern.matches(".*(micromessenger).*", ua.toLowerCase());
  186. boolean ios = Pattern.matches(".*(ipad|iphone).*", ua.toLowerCase());
  187. boolean android = Pattern.matches(".*(android).*", ua.toLowerCase());
  188. model.addAttribute("weixin", weixin);
  189. model.addAttribute("ios", ios);
  190. model.addAttribute("android", android);
  191. }
  192. }