OrderPayController.java 5.6 KB

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