xiongzhu há 4 anos atrás
pai
commit
561e16eebe

+ 16 - 0
src/main/java/com/izouma/nineth/web/OrderPayController.java

@@ -1,11 +1,17 @@
 package com.izouma.nineth.web;
 
+import com.alibaba.fastjson.JSON;
+import com.github.binarywang.wxpay.bean.order.WxPayMpOrderResult;
 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 me.chanjar.weixin.common.error.WxErrorException;
+import me.chanjar.weixin.mp.api.WxMpService;
+import me.chanjar.weixin.mp.bean.result.WxMpOAuth2AccessToken;
+import me.chanjar.weixin.mp.bean.result.WxMpUser;
 import org.apache.commons.codec.EncoderException;
 import org.springframework.stereotype.Controller;
 import org.springframework.ui.Model;
@@ -20,6 +26,7 @@ import java.util.regex.Pattern;
 public class OrderPayController {
     private final OrderService orderService;
     private final AssetService assetService;
+    private final WxMpService  wxMpService;
 
     @RequestMapping(value = "/alipay", method = RequestMethod.GET)
     public String payOrderAlipay(Long id, Model model, @RequestHeader(value = "User-Agent") String userAgent) {
@@ -41,6 +48,15 @@ public class OrderPayController {
         return orderService.payOrderWeixin(id, WxPayConstants.TradeType.JSAPI, openId);
     }
 
+    @RequestMapping(value = "/weixin_pc")
+    public String payOrderWeixinPC(@RequestParam Long id, @RequestParam String code, Model model) throws WxPayException, EncoderException, WxErrorException {
+        WxMpOAuth2AccessToken accessToken = wxMpService.oauth2getAccessToken(code);
+        WxMpUser user = wxMpService.oauth2getUserInfo(accessToken, null);
+        WxPayMpOrderResult payParams = (WxPayMpOrderResult) orderService.payOrderWeixin(id, WxPayConstants.TradeType.JSAPI, user.getOpenId());
+        model.addAttribute("payParams", JSON.toJSONString(payParams));
+        return "PayOrderPC";
+    }
+
     @RequestMapping(value = "/gift/alipay", method = RequestMethod.GET)
     public String payGiftOrderAlipay(Long id, Model model, @RequestHeader(value = "User-Agent") String userAgent) {
         detectUA(userAgent, model);

+ 77 - 0
src/main/resources/templates/PayOrderPC.ftlh

@@ -0,0 +1,77 @@
+<!doctype html>
+<html lang="zh-cmn-Hans">
+<head>
+    <meta charset="UTF-8">
+    <meta name="viewport"
+          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
+    <meta http-equiv="X-UA-Compatible" content="ie=edge">
+    <title>支付</title>
+    <link rel="stylesheet" type="text/css" href="https://res.wx.qq.com/open/libs/weui/2.1.4/weui.min.css"/>
+    <script type="text/javascript" src="https://res.wx.qq.com/open/js/jweixin-1.6.0.js"></script>
+    <script src="https://cdn.bootcss.com/vConsole/3.3.4/vconsole.min.js"></script>
+    <script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.min.js"></script>
+</head>
+<body>
+<div id="dialog" style="display: none;">
+    <div class="weui-mask"></div>
+    <div class="weui-dialog">
+        <div class="weui-dialog__hd" id="dialogHeader"><strong class="weui-dialog__title"
+                                                               id="dialogHeaderContent">弹窗标题</strong></div>
+        <div class="weui-dialog__bd" id="dialogBody">弹窗内容,告知当前状态、信息和解决方法,描述文字尽量控制在三行内</div>
+        <div class="weui-dialog__ft" id="dialogFooter">
+            <a href="javascript:;" class="weui-dialog__btn weui-dialog__btn_default" id="dialogCancel">辅助操作</a>
+            <a href="javascript:;" class="weui-dialog__btn weui-dialog__btn_primary" id="dialogConfirm">主操作</a>
+        </div>
+    </div>
+</div>
+<script>
+    var vConsole = new VConsole();
+    var payParams = ${payParams};
+    payParams.package = payParams.packageValue;
+    payParams.timestamp = payParams.timeStamp;
+    payParams.success = function (res) {
+        showDialog({
+            title: '支付成功',
+            confirm: function () {
+                window.close();
+            }
+        });
+    };
+    payParams.fail = function (e) {
+        showDialog({
+            title: '支付取消',
+            confirm: function () {
+                window.close();
+            }
+        });
+    }
+    console.log(payParams);
+    document.onload = function () {
+        wx.chooseWXPay(payParams);
+    }
+
+    function showDialog(options) {
+        $('#dialogHeader').show();
+        $('#dialogHeaderContent').html(options.title || '提示');
+        if (options.showCancel === undefined) {
+            options.showCancel = false;
+        }
+        if (options.showCancel) {
+            $('#dialogCancel').show();
+            $('#dialogCancel').html(options.cancelText || '取消');
+            $('#dialogCancel').on('click', function () {
+                options.cancel ? options.cancel() : hideDialog();
+            })
+        } else {
+            $('#dialogCancel').hide();
+        }
+        $('#dialogConfirm').html(options.cancelText || '确定');
+        $('#dialogConfirm').on('click', function () {
+            options.confirm ? options.confirm() : hideDialog();
+        });
+        $('#dialogBody').html(options.message);
+        $('#dialog').show(200);
+    }
+</script>
+</body>
+</html>