xiongzhu 4 лет назад
Родитель
Сommit
8178e5f72c

+ 5 - 5
src/main/java/com/izouma/nineth/service/OrderService.java

@@ -309,13 +309,13 @@ public class OrderService {
 
         Map<String, Object> response = Payment.create(paymentParams);
         AdapayService.checkSuccess(response);
-        if (aliChannels.contains(payChannel)) {
-            return MapUtils.getMap(response, "expend");
-        }
 
-        switch (payChannel){
+        switch (payChannel) {
+            case "alipay_wap":
             case "alipay":
-                MapUtils.getString(MapUtils.getMap(response,"expend"),"pay_info");
+                MapUtils.getString(MapUtils.getMap(response, "expend"), "pay_info");
+            case "alipay_qr":
+                MapUtils.getString(MapUtils.getMap(response, "expend"), "qrcode_url");
         }
         return response;
     }

+ 22 - 4
src/main/java/com/izouma/nineth/web/OrderPayController.java

@@ -4,6 +4,7 @@ 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.huifu.adapay.core.exception.BaseAdaPayException;
 import com.izouma.nineth.service.AssetService;
 import com.izouma.nineth.service.GiftOrderService;
 import com.izouma.nineth.service.OrderService;
@@ -30,13 +31,30 @@ public class OrderPayController {
     private final WxMpService      wxMpService;
     private final GiftOrderService giftOrderService;
 
-    @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);
+    @RequestMapping(value = "/alipay_h5", method = RequestMethod.GET)
+    public String payOrderAlipayH5(Long id, Model model) throws BaseAdaPayException {
+        return (String) orderService.payAdapay(id, "alipay_wap", null);
+    }
+
+    @RequestMapping(value = "/alipay_wx", method = RequestMethod.GET)
+    public String payOrderAlipayWx(Long id, Model model) throws BaseAdaPayException {
+        String payUrl = (String) orderService.payAdapay(id, "alipay_wap", null);
+        model.addAttribute("payUrl", payUrl);
         return "AlipayHtml";
     }
 
+    @RequestMapping(value = "/alipay_qr", method = RequestMethod.GET)
+    @ResponseBody
+    public String payOrderAlipayQR(Long id, Model model) throws BaseAdaPayException {
+        return (String) orderService.payAdapay(id, "alipay_qr", null);
+    }
+
+    @RequestMapping(value = "/alipay_app", method = RequestMethod.GET)
+    @ResponseBody
+    public String payOrderAlipayApp(Long id, Model model) throws BaseAdaPayException {
+        return (String) orderService.payAdapay(id, "alipay", null);
+    }
+
     @RequestMapping(value = "/weixin_h5")
     public String payOrderWeixinH5(Long id, Model model, @RequestHeader(value = "User-Agent") String userAgent) throws EncoderException, WxPayException {
         detectUA(userAgent, model);

+ 52 - 10
src/main/resources/static/AlipayHtml.html

@@ -62,7 +62,7 @@
         }
 
         #btn-zfb {
-            width: 80%;
+            width: 100%;
             margin: auto;
             background: #ffffff;
             line-height: 52px;
@@ -72,14 +72,49 @@
             font-size: 18px;
             letter-spacing: 3px;
             font-weight: 400;
-            border: 1px solid transparent;
             border-radius: 8px;
+            border: none;
+        }
+
+        #btn-zfb:active {
+            background: rgba(240, 240, 240, 1);
+        }
+
+        #btn-finish:active {
+            background: rgba(0, 0, 0, 0.03);
+        }
+
+        #btn-finish {
+            width: 100%;
+            line-height: 50px;
+            height: 52px;
+            outline: none;
+            font-size: 18px;
+            letter-spacing: 3px;
+            font-weight: 400;
+            border-radius: 8px;
+            margin: 20px auto 0 auto;
+            border: 2px solid #ffffff;
+            color: #ffffff;
+            background: none;
+        }
+
+        .btns {
+            width: 80%;
+            display: flex;
+            align-items: center;
+            justify-content: center;
             position: absolute;
-            top: 0;
-            bottom: 0;
             left: 0;
             right: 0;
-            display: none;
+            top: 0;
+            bottom: 0;
+            margin: auto;
+            flex-direction: column;
+        }
+
+        .btns a {
+            width: 100%;
         }
     </style>
 </head>
@@ -92,9 +127,16 @@
     <div class="overlay-text2">注:由于微信限制,需要在浏览器中打开才可以完成支付宝支付</div>
 </div>
 
-<a id="link">
-    <button id="btn-zfb">打开支付宝</button>
-</a>
+<div class="btn-wrapper" style="display: none">
+    <div class="btns">
+        <a id="link">
+            <button id="btn-zfb">打开支付宝</button>
+        </a>
+        <a id="">
+            <button id="btn-finish">我已完成支付</button>
+        </a>
+    </div>
+</div>
 <script>
     function GetQueryString(name) {
         var after = window.location.href.split("?")[1];
@@ -112,9 +154,9 @@
     window.onload = function () {
         console.log('onload');
         if (/micromessenger/i.test(navigator.userAgent)) {
-            $('#overlay').fadeIn();
+            $('.overlay').fadeIn();
         } else {
-            $('#btn-zfb').fadeIn();
+            $('.btn-wrapper').fadeIn();
         }
     }
 </script>

+ 133 - 66
src/main/resources/templates/AlipayHtml.ftlh

@@ -6,67 +6,138 @@
     <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">
+    <script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.min.js"></script>
+    <style>
+        html {
+            width: 100%;
+            height: 100%;
+            padding: 0;
+            margin: 0;
+            font-family: -apple-system, SF UI Text, Arial, PingFang SC, Hiragino Sans GB, Microsoft YaHei, WenQuanYi Micro Hei, sans-serif;
+            font-size: 14px;
+            font-weight: 400;
+            line-height: 1.6;
+        }
+
+        body {
+            width: 100%;
+            height: 100%;
+            padding: 0;
+            margin: 0;
+            background: #1677ff url(/static/img/zfb.png) no-repeat top;
+            background-size: 100%;
+        }
+
+        .overlay .overlay-img {
+            width: 186px;
+            height: 210px;
+            margin-right: 15px;
+        }
+
+        .overlay .overlay-text1 {
+            width: 272px;
+            font-size: 16px;
+            font-weight: bold;
+            color: rgba(255, 255, 255, 1);
+            line-height: 22px;
+            margin: 15px auto 0;
+        }
+
+        .overlay .overlay-text2 {
+            width: 272px;
+            font-size: 13px;
+            color: rgba(255, 255, 255, 1);
+            line-height: 18px;
+            margin: 15px auto 0;
+        }
+
+        .overlay {
+            position: fixed;
+            top: 0;
+            right: 0;
+            bottom: 0;
+            left: 0;
+            background: rgba(0, 0, 0, 0.7);
+            display: none;
+        }
+
+        #btn-zfb {
+            width: 100%;
+            margin: auto;
+            background: #ffffff;
+            line-height: 52px;
+            height: 52px;
+            outline: none;
+            color: #1677ff;
+            font-size: 18px;
+            letter-spacing: 3px;
+            font-weight: 400;
+            border-radius: 8px;
+            border: none;
+        }
+
+        #btn-zfb:active {
+            background: rgba(240, 240, 240, 1);
+        }
+
+        #btn-finish:active {
+            background: rgba(0, 0, 0, 0.03);
+        }
+
+        #btn-finish {
+            width: 100%;
+            line-height: 50px;
+            height: 52px;
+            outline: none;
+            font-size: 18px;
+            letter-spacing: 3px;
+            font-weight: 400;
+            border-radius: 8px;
+            margin: 20px auto 0 auto;
+            border: 2px solid #ffffff;
+            color: #ffffff;
+            background: none;
+        }
+
+        .btns {
+            width: 80%;
+            display: flex;
+            align-items: center;
+            justify-content: center;
+            position: absolute;
+            left: 0;
+            right: 0;
+            top: 0;
+            bottom: 0;
+            margin: auto;
+            flex-direction: column;
+        }
+
+        .btns a {
+            width: 100%;
+        }
+    </style>
 </head>
 
 <body>
-<#if errMsg??>
-    <div id="app" class="err">
-        <div class="err-msg"> ${errMsg}</div>
-        <div class="err-back" @click="onClickLeft">返回</div>
+<div class="overlay" id="overlay">
+    <div style="text-align: right"><img class="overlay-img" src="/static/img/zhifu_img_liulanqi_ios.png" alt=""/>
     </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>
-                <div style="text-align: right">
-                    <#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>
-                </div>
-                <#if ios>
-                    <div class="overlay-text1">请点击右上角,选择“在Safari中打开”然后继续完成支付</div>
-                <#else>
-                    <div class="overlay-text1">请点击右上角,选择“在浏览器中打开”然后继续完成支付</div>
-                </#if>
-                <div class="overlay-text2">注:由于微信限制,需要在浏览器中打开才可以完成支付宝支付</div>
-            </van-overlay>
-        </#if>
-    </div>
-</#if>
-<#if !weixin && form??>
-    ${form?no_esc}
-</#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>
+    <div class="overlay-text1">请点击右上角,选择在默认浏览器中打开然后继续完成支付</div>
+    <div class="overlay-text2">注:由于微信限制,需要在浏览器中打开才可以完成支付宝支付</div>
+</div>
 
+<div class="btn-wrapper" style="display: none">
+    <div class="btns">
+        <a id="link" href="alipays://platformapi/startapp?saId=10000007&qrcode=${payUrl?no_esc}">
+            <button id="btn-zfb">打开支付宝</button>
+        </a>
+        <a id="">
+            <button id="btn-finish">我已完成支付</button>
+        </a>
+    </div>
+</div>
 <script>
-    // 在 #app 标签下渲染一个按钮组件
-
     function GetQueryString(name) {
         var after = window.location.href.split("?")[1];
         if (after) {
@@ -80,18 +151,14 @@
         }
     }
 
-    new Vue({
-        el: '#app',
-        data: {},
-        mounted() {
-            document.getElementById('app').style.display = 'flex';
-        },
-        methods: {
-            onClickLeft: function () {
-                history.back();
-            }
+    window.onload = function () {
+        console.log('onload');
+        if (/micromessenger/i.test(navigator.userAgent)) {
+            $('.overlay').fadeIn();
+        } else {
+            $('.btn-wrapper').fadeIn();
         }
-    });
+    }
 </script>
 </body>
 

+ 98 - 0
src/main/resources/templates/AlipayHtmlBak.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>
+                <div style="text-align: right">
+                    <#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>
+                </div>
+                <#if ios>
+                    <div class="overlay-text1">请点击右上角,选择“在Safari中打开”然后继续完成支付</div>
+                <#else>
+                    <div class="overlay-text1">请点击右上角,选择“在浏览器中打开”然后继续完成支付</div>
+                </#if>
+                <div class="overlay-text2">注:由于微信限制,需要在浏览器中打开才可以完成支付宝支付</div>
+            </van-overlay>
+        </#if>
+    </div>
+</#if>
+<#if !weixin && form??>
+    ${form?no_esc}
+</#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>