xiongzhu 4 anni fa
parent
commit
44283e8996

+ 10 - 2
src/main/java/com/izouma/nineth/web/OrderPayController.java

@@ -32,8 +32,16 @@ public class OrderPayController {
     }
 
     @RequestMapping(value = "/weixin_h5")
-    public String payOrderWeixinH5(@RequestParam Long id) throws WxPayException, EncoderException {
-        return orderService.payOrderWeixinH5(id);
+    public String payOrderWeixinH5(Long id, Model model, @RequestHeader(value = "User-Agent") String userAgent) throws EncoderException, WxPayException {
+
+        boolean weixin = Pattern.matches(".*(micromessenger).*", userAgent.toLowerCase());
+        boolean ios = Pattern.matches(".*(ipad|iphone).*", userAgent.toLowerCase());
+        boolean android = Pattern.matches(".*(android).*", userAgent.toLowerCase());
+        model.addAttribute("weixin", weixin);
+        model.addAttribute("ios", ios);
+        model.addAttribute("android", android);
+        model.addAttribute("payUrl", orderService.payOrderWeixinH5(id));
+        return "WeixinPayHtml";
     }
 
     @RequestMapping(value = "/weixin")

+ 98 - 0
src/main/resources/templates/WeixinPayHtml.ftlh

@@ -0,0 +1,98 @@
+<!DOCTYPE html>
+<html lang="zh-CN">
+
+<head>
+    <meta charset="utf-8">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge">
+    <meta name="viewport" content="width=device-width,initial-scale=1.0">
+    <title>支付</title>
+    <!-- 引入样式文件 -->
+    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/vant@2.4/lib/index.css">
+    <link rel="stylesheet" href="/static/aliAuthorize.css">
+</head>
+
+<body>
+<#if errMsg??>
+    <div id="app" class="err">
+        <div class="err-msg"> ${errMsg}</div>
+        <div class="err-back" @click="onClickLeft">返回</div>
+    </div>
+<#else>
+    <div id="app">
+
+        <#if weixin>
+            <van-nav-bar title="收银台" @click-left="onClickLeft" style="min-height: 46px">
+                <img class="back" src="/static/img/nav_icon_return.png" slot="left" alt/>
+            </van-nav-bar>
+        </#if>
+
+
+        <div class="container">
+            <img src="/static/img/icon_shouquan.png" alt="" class="icon">
+            <div class="text">正在跳转到微信支付</div>
+
+            <#--        <div class="btn">-->
+            <#--            <van-button type="default" block>点击跳转到微信支付</van-button>-->
+            <#--        </div>-->
+        </div>
+
+        <#if weixin>
+            <van-overlay class="overlay" show>
+                <#if android>
+                    <img class="overlay-img" src="/static/img/zhifu_img_liulanqi_and.png" alt=""/>
+                <#elseif ios>
+                    <img class="overlay-img" src="/static/img/zhifu_img_liulanqi_ios.png" alt=""/>
+                <#else>
+                    <img class="overlay-img" src="/static/img/zhifu_img_liulanqi_and.png" alt=""/>
+                </#if>
+                <#if ios>
+                    <div class="overlay-text1">请点击右上角,选择“在Safari中打开”然后继续完成支付</div>
+                <#else>
+                    <div class="overlay-text1">请点击右上角,选择“在浏览器中打开”然后继续完成支付</div>
+                </#if>
+                <div class="overlay-text2">注:由于微信限制,需要在浏览器中打开才可以完成微信H5支付</div>
+            </van-overlay>
+        </#if>
+    </div>
+</#if>
+<#if !weixin && form??>
+    <script>
+        window.location = "${payUrl?no_esc}";
+    </script>
+</#if>
+<!-- 引入 Vue 和 Vant 的 JS 文件 -->
+<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.min.js"></script>
+<script src="https://cdn.jsdelivr.net/npm/vant@2.4/lib/vant.min.js"></script>
+
+<script>
+    // 在 #app 标签下渲染一个按钮组件
+
+    function GetQueryString(name) {
+        var after = window.location.href.split("?")[1];
+        if (after) {
+            var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)");
+            var r = after.match(reg);
+            if (r != null) {
+                return decodeURIComponent(r[2]);
+            } else {
+                return null;
+            }
+        }
+    }
+
+    new Vue({
+        el: '#app',
+        data: {},
+        mounted() {
+            document.getElementById('app').style.display = 'flex';
+        },
+        methods: {
+            onClickLeft: function () {
+                history.back();
+            }
+        }
+    });
+</script>
+</body>
+
+</html>