OrderPayController.java 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  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.exception.BusinessException;
  8. import com.izouma.nineth.service.AssetService;
  9. import com.izouma.nineth.service.GiftOrderService;
  10. import com.izouma.nineth.service.OrderService;
  11. import lombok.AllArgsConstructor;
  12. import lombok.extern.slf4j.Slf4j;
  13. import me.chanjar.weixin.common.error.WxErrorException;
  14. import me.chanjar.weixin.mp.api.WxMpService;
  15. import me.chanjar.weixin.mp.bean.result.WxMpOAuth2AccessToken;
  16. import me.chanjar.weixin.mp.bean.result.WxMpUser;
  17. import org.apache.commons.codec.EncoderException;
  18. import org.springframework.stereotype.Controller;
  19. import org.springframework.ui.Model;
  20. import org.springframework.web.bind.annotation.*;
  21. import java.util.Arrays;
  22. import java.util.regex.Pattern;
  23. @Controller
  24. @RequestMapping("/payOrder")
  25. @Slf4j
  26. @AllArgsConstructor
  27. public class OrderPayController {
  28. private final OrderService orderService;
  29. private final AssetService assetService;
  30. private final WxMpService wxMpService;
  31. private final GiftOrderService giftOrderService;
  32. @RequestMapping(value = "/alipay", method = RequestMethod.GET)
  33. public String payOrderAlipay(Long id, Model model, @RequestHeader(value = "User-Agent") String userAgent) {
  34. detectUA(userAgent, model);
  35. orderService.payOrderAlipay(id, model);
  36. return "AlipayHtml";
  37. }
  38. @RequestMapping(value = "/weixin_h5")
  39. public String payOrderWeixinH5(Long id, Model model, @RequestHeader(value = "User-Agent") String userAgent) throws EncoderException, WxPayException {
  40. detectUA(userAgent, model);
  41. model.addAttribute("payUrl", orderService.payOrderWeixin(id, WxPayConstants.TradeType.MWEB, null));
  42. return "WeixinPayHtml";
  43. }
  44. @RequestMapping(value = "/weixin")
  45. @ResponseBody
  46. public Object payOrderWeixin(@RequestParam Long id, @RequestParam String openId) throws WxPayException, EncoderException {
  47. return orderService.payOrderWeixin(id, WxPayConstants.TradeType.JSAPI, openId);
  48. }
  49. @RequestMapping(value = "/weixin_pc")
  50. public String payOrderWeixinPC(@RequestParam Long id, @RequestParam String code, Model model) throws WxPayException, EncoderException, WxErrorException {
  51. WxMpOAuth2AccessToken accessToken = wxMpService.oauth2getAccessToken(code);
  52. WxMpUser user = wxMpService.oauth2getUserInfo(accessToken, null);
  53. WxPayMpOrderResult payParams = (WxPayMpOrderResult) orderService.payOrderWeixin(id, WxPayConstants.TradeType.JSAPI, user.getOpenId());
  54. model.addAttribute("payParams", JSON.toJSONString(payParams));
  55. return "PayOrderPC";
  56. }
  57. @RequestMapping(value = "/gift/alipay", method = RequestMethod.GET)
  58. public String payGiftOrderAlipay(Long id, Model model, @RequestHeader(value = "User-Agent") String userAgent) {
  59. detectUA(userAgent, model);
  60. giftOrderService.payOrderAlipay(id, model);
  61. return "AlipayHtml";
  62. }
  63. @RequestMapping(value = "/gift/weixin_h5")
  64. public String payGiftOrderWeixinH5(Long id, Model model, @RequestHeader(value = "User-Agent") String userAgent) throws EncoderException, WxPayException {
  65. detectUA(userAgent, model);
  66. model.addAttribute("payUrl", giftOrderService.payOrderWeixin(id, WxPayConstants.TradeType.MWEB, null));
  67. return "WeixinPayHtml";
  68. }
  69. @RequestMapping(value = "/gift/weixin_pc")
  70. public String payGiftOrderWeixinPC(@RequestParam Long id, @RequestParam String code, Model model) throws WxPayException, EncoderException, WxErrorException {
  71. WxMpOAuth2AccessToken accessToken = wxMpService.oauth2getAccessToken(code);
  72. WxMpUser user = wxMpService.oauth2getUserInfo(accessToken, null);
  73. WxPayMpOrderResult payParams = (WxPayMpOrderResult) giftOrderService.payOrderWeixin(id, WxPayConstants.TradeType.JSAPI, user.getOpenId());
  74. model.addAttribute("payParams", JSON.toJSONString(payParams));
  75. return "PayOrderPC";
  76. }
  77. @RequestMapping(value = "/gift/weixin")
  78. @ResponseBody
  79. public Object payGiftOrderWeixin(@RequestParam Long id, @RequestParam String openId) throws WxPayException, EncoderException {
  80. return giftOrderService.payOrderWeixin(id, WxPayConstants.TradeType.JSAPI, openId);
  81. }
  82. public void detectUA(String ua, Model model) {
  83. boolean weixin = Pattern.matches(".*(micromessenger).*", ua.toLowerCase());
  84. boolean ios = Pattern.matches(".*(ipad|iphone).*", ua.toLowerCase());
  85. boolean android = Pattern.matches(".*(android).*", ua.toLowerCase());
  86. model.addAttribute("weixin", weixin);
  87. model.addAttribute("ios", ios);
  88. model.addAttribute("android", android);
  89. }
  90. @RequestMapping(value = "/adapay/alipay", method = RequestMethod.GET)
  91. @ResponseBody
  92. public Object payOrderAdapayAlipay(Long id, String channel) throws BaseAdaPayException {
  93. if (!Arrays.asList("alipay", "alipay_qr", "alipay_wap").contains(channel)) {
  94. throw new BusinessException("不支持此渠道");
  95. }
  96. return orderService.payAdapay(id, channel, null);
  97. }
  98. }