OrderPayController.java 4.7 KB

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