OrderPayController.java 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  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.NOT_PAID) {
  44. return "redirect:/9th/store";
  45. }
  46. String payUrl = (String) orderService.payAdapay(id, "alipay_wap", null);
  47. model.addAttribute("payUrl", payUrl);
  48. model.addAttribute("orderId", id);
  49. return "AlipayHtml";
  50. }
  51. @RequestMapping(value = "/alipay_qr", method = RequestMethod.GET)
  52. @ResponseBody
  53. public String payOrderAlipayQR(Long id, Model model) throws BaseAdaPayException {
  54. return (String) orderService.payAdapay(id, "alipay_qr", null);
  55. }
  56. @RequestMapping(value = "/alipay_app", method = RequestMethod.GET)
  57. @ResponseBody
  58. public String payOrderAlipayApp(Long id, Model model) throws BaseAdaPayException {
  59. return (String) orderService.payAdapay(id, "alipay", null);
  60. }
  61. @RequestMapping(value = "/weixin_h5")
  62. public String payOrderWeixinH5(Long id, Model model, @RequestHeader(value = "User-Agent") String userAgent) throws EncoderException, WxPayException {
  63. detectUA(userAgent, model);
  64. model.addAttribute("payUrl", orderService.payOrderWeixin(id, WxPayConstants.TradeType.MWEB, null));
  65. return "WeixinPayHtml";
  66. }
  67. @RequestMapping(value = "/weixin")
  68. @ResponseBody
  69. public Object payOrderWeixin(@RequestParam Long id, @RequestParam(defaultValue = "wx_lite") String channel, @RequestParam(required = false) String openId) throws BaseAdaPayException {
  70. return orderService.payAdapay(id, channel, openId);
  71. }
  72. @RequestMapping(value = "/weixin_pc")
  73. public String payOrderWeixinPC(@RequestParam Long id, @RequestParam String code, Model model) throws WxPayException, EncoderException, WxErrorException {
  74. WxMpOAuth2AccessToken accessToken = wxMpService.oauth2getAccessToken(code);
  75. WxMpUser user = wxMpService.oauth2getUserInfo(accessToken, null);
  76. WxPayMpOrderResult payParams = (WxPayMpOrderResult) orderService.payOrderWeixin(id, WxPayConstants.TradeType.JSAPI, user.getOpenId());
  77. model.addAttribute("payParams", JSON.toJSONString(payParams));
  78. return "PayOrderPC";
  79. }
  80. @RequestMapping(value = "/gift/alipay", method = RequestMethod.GET)
  81. public String payGiftOrderAlipay(Long id, Model model, @RequestHeader(value = "User-Agent") String userAgent) {
  82. detectUA(userAgent, model);
  83. giftOrderService.payOrderAlipay(id, model);
  84. return "AlipayHtml1";
  85. }
  86. @RequestMapping(value = "/gift/weixin_h5")
  87. public String payGiftOrderWeixinH5(Long id, Model model, @RequestHeader(value = "User-Agent") String userAgent) throws EncoderException, WxPayException {
  88. detectUA(userAgent, model);
  89. model.addAttribute("payUrl", giftOrderService.payOrderWeixin(id, WxPayConstants.TradeType.MWEB, null));
  90. return "WeixinPayHtml";
  91. }
  92. @RequestMapping(value = "/gift/weixin_pc")
  93. public String payGiftOrderWeixinPC(@RequestParam Long id, @RequestParam String code, Model model) throws WxPayException, EncoderException, WxErrorException {
  94. WxMpOAuth2AccessToken accessToken = wxMpService.oauth2getAccessToken(code);
  95. WxMpUser user = wxMpService.oauth2getUserInfo(accessToken, null);
  96. WxPayMpOrderResult payParams = (WxPayMpOrderResult) giftOrderService.payOrderWeixin(id, WxPayConstants.TradeType.JSAPI, user.getOpenId());
  97. model.addAttribute("payParams", JSON.toJSONString(payParams));
  98. return "PayOrderPC";
  99. }
  100. @RequestMapping(value = "/gift/weixin")
  101. @ResponseBody
  102. public Object payGiftOrderWeixin(@RequestParam Long id, @RequestParam String openId) throws WxPayException, EncoderException {
  103. return giftOrderService.payOrderWeixin(id, WxPayConstants.TradeType.JSAPI, openId);
  104. }
  105. public void detectUA(String ua, Model model) {
  106. boolean weixin = Pattern.matches(".*(micromessenger).*", ua.toLowerCase());
  107. boolean ios = Pattern.matches(".*(ipad|iphone).*", ua.toLowerCase());
  108. boolean android = Pattern.matches(".*(android).*", ua.toLowerCase());
  109. model.addAttribute("weixin", weixin);
  110. model.addAttribute("ios", ios);
  111. model.addAttribute("android", android);
  112. }
  113. }