package com.izouma.nineth.web; import com.github.binarywang.wxpay.constant.WxPayConstants; import com.github.binarywang.wxpay.exception.WxPayException; import com.izouma.nineth.service.AssetService; import com.izouma.nineth.service.OrderService; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.commons.codec.EncoderException; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.*; import java.util.regex.Pattern; @Controller @RequestMapping("/payOrder") @Slf4j @AllArgsConstructor public class OrderPayController { private final OrderService orderService; private final AssetService assetService; @RequestMapping(value = "/alipay", method = RequestMethod.GET) public String payOrderAlipay(Long id, Model model, @RequestHeader(value = "User-Agent") String userAgent) { detectUA(userAgent, model); orderService.payOrderAlipay(id, model); return "AlipayHtml"; } @RequestMapping(value = "/weixin_h5") public String payOrderWeixinH5(Long id, Model model, @RequestHeader(value = "User-Agent") String userAgent) throws EncoderException, WxPayException { detectUA(userAgent, model); model.addAttribute("payUrl", orderService.payOrderWeixin(id, WxPayConstants.TradeType.JSAPI, null)); return "WeixinPayHtml"; } @RequestMapping(value = "/weixin") @ResponseBody public Object payOrderWeixin(@RequestParam Long id, @RequestParam String openId) throws WxPayException, EncoderException { return orderService.payOrderWeixin(id, WxPayConstants.TradeType.JSAPI, openId); } @RequestMapping(value = "/gift/alipay", method = RequestMethod.GET) public String payGiftOrderAlipay(Long id, Model model, @RequestHeader(value = "User-Agent") String userAgent) { detectUA(userAgent, model); orderService.payOrderAlipay(id, model); return "AlipayHtml"; } @RequestMapping(value = "/gift/weixin_h5") public String payGiftOrderWeixinH5(Long id, Model model, @RequestHeader(value = "User-Agent") String userAgent) throws EncoderException, WxPayException { detectUA(userAgent, model); model.addAttribute("payUrl", assetService.payOrderWeixin(id, WxPayConstants.TradeType.JSAPI, null)); return "WeixinPayHtml"; } public void detectUA(String ua, Model model) { boolean weixin = Pattern.matches(".*(micromessenger).*", ua.toLowerCase()); boolean ios = Pattern.matches(".*(ipad|iphone).*", ua.toLowerCase()); boolean android = Pattern.matches(".*(android).*", ua.toLowerCase()); model.addAttribute("weixin", weixin); model.addAttribute("ios", ios); model.addAttribute("android", android); } @RequestMapping(value = "/gift/weixin") @ResponseBody public Object payGiftOrderWeixin(@RequestParam Long id, @RequestParam String openId) throws WxPayException, EncoderException { return assetService.payOrderWeixin(id, WxPayConstants.TradeType.JSAPI, openId); } }