Ver Fonte

h5支付逻辑调整

huangct há 8 anos atrás
pai
commit
22908624c5

+ 17 - 8
donate-service/src/main/java/com/uas/service/donate/controller/WxpayController.java

@@ -93,7 +93,7 @@ public class WxpayController {
         }
 
         WxPayUnifiedOrderRequest wxPayUnifiedOrderRequest = createWxPayUnifiedOrderRequest(request, projectRecode, WxPayConstants.TradeType.NATIVE);
-        Map map = unifiedOrder(wxPayUnifiedOrderRequest);
+        Map map = unifiedOrder(wxPayUnifiedOrderRequest, null);
         if ("FAIL".equals(map.get("status"))) {
             modelMap.put("error", map.get("message"));
         } else {
@@ -101,7 +101,6 @@ public class WxpayController {
             modelMap.put("outTradeNo", projectRecode.getId());
         }
 
-
         return modelMap;
     }
 
@@ -157,7 +156,7 @@ public class WxpayController {
             wxPayUnifiedOrderRequest.setSubOpenid(openId);//否是 trade_type=JSAPI,此参数必传,用户在子商户appid下的唯一标识。openid和sub_openid可以选传其中之一,如果选择传sub_openid,则必须传sub_appid。
         }
 
-        Map map = unifiedOrder(wxPayUnifiedOrderRequest);
+        Map map = unifiedOrder(wxPayUnifiedOrderRequest, null);
 
         if ("FAIL".equals(map.get("status"))) {
             modelMap.put("error", map.get("message"));
@@ -201,7 +200,7 @@ public class WxpayController {
      */
     @ResponseBody
     @RequestMapping(value = "/wapPay", method = RequestMethod.POST)
-    public ModelMap wapPay(@RequestParam("jsonStr") String jsonStr, HttpServletRequest request, HttpServletResponse response) throws Exception {
+    public ModelMap wapPay(@RequestParam("jsonStr") String jsonStr, @RequestParam("currentUrl") String currentUrl, HttpServletRequest request, HttpServletResponse response) throws Exception {
         ModelMap modelMap = new ModelMap();
         ProjectRecode projectRecode= null;
         try {
@@ -213,7 +212,7 @@ public class WxpayController {
         }
 
         WxPayUnifiedOrderRequest wxPayUnifiedOrderRequest = createWxPayUnifiedOrderRequest(request, projectRecode, WxPayConstants.TradeType.MWEB);
-        Map map = unifiedOrder(wxPayUnifiedOrderRequest);
+        Map map = unifiedOrder(wxPayUnifiedOrderRequest, currentUrl);
         if ("FAIL".equals(map.get("status"))) {
             modelMap.put("error", map.get("message"));
         } else {
@@ -225,7 +224,11 @@ public class WxpayController {
 
 
     //通过统一下单接口发起请求,获得prepay_id(预支付交易会话标识),这个标示是微信提交支付的关键数据
-    public Map unifiedOrder(WxPayUnifiedOrderRequest wxPayUnifiedOrderRequest) throws Exception {
+    public Map unifiedOrder(WxPayUnifiedOrderRequest wxPayUnifiedOrderRequest, String currentUrl) throws Exception {
+        //TODO 服务商模式  线程安全 synchronized
+//        wxPayApi.getConfig().setSubAppId("wxbc1f8607137d3b8a");
+//        wxPayApi.getConfig().setSubMchId("huangchengtianusoftchina1234567
+
         Map map = new HashMap();
         WxPayUnifiedOrderResult wxPayUnifiedOrderResult = null;
         try {
@@ -234,8 +237,14 @@ public class WxpayController {
             //map.put("status", "SUCCESS");
             if (WxPayConstants.TradeType.MWEB.equals(wxPayUnifiedOrderRequest.getTradeType())) {
                 /*H5支付开发步骤:https://pay.weixin.qq.com/wiki/doc/api/H5.php?chapter=15_4*/
-                String mwebUrl = wxPayUnifiedOrderResult.getMwebUrl() + "&redirect_url=" + URLEncoder.encode("http://lj.ubtob.com/project#/donationsOver/" + wxPayUnifiedOrderRequest.getOutTradeNo(),"UTF-8");
-                //String mwebUrl = wxPayUnifiedOrderResult.getMwebUrl();
+                //String mwebUrl = wxPayUnifiedOrderResult.getMwebUrl() + "&redirect_url=" + URLEncoder.encode("http://lj.ubtob.com/project#/donationsOver/" + wxPayUnifiedOrderRequest.getOutTradeNo(),"UTF-8");
+                String mwebUrl = null;
+                if (currentUrl != null) {
+                    logger.error("当前用户所在页面url:{}", currentUrl);
+                    mwebUrl = wxPayUnifiedOrderResult.getMwebUrl() + "&redirect_url=" + URLEncoder.encode(currentUrl + "/" + wxPayUnifiedOrderRequest.getOutTradeNo(),"UTF-8");;
+                } else {
+                    mwebUrl = wxPayUnifiedOrderResult.getMwebUrl();
+                }
                 map.put("mwebUrl", mwebUrl);
             } else if (WxPayConstants.TradeType.NATIVE.equals(wxPayUnifiedOrderRequest.getTradeType())) {
                 //扫码支付

+ 6 - 0
donate-service/src/main/webapp/resources/js/mobile/app.js

@@ -28,6 +28,12 @@ define([ 'angularAMD', 'ngRoute', 'ui.router', 'ui-bootstrap', 'ngLocal', 'ngTab
             templateUrl : 'static/view/mobile/mobile_project_detail.html',
             controller : 'MobileProjectDetailCtrl',
             controllerUrl : 'app/controllers/MobileProjectDetailCtrl'
+        })).state("projectDetailAfterPay", angularAMD.route({
+            url : '/project/detail/:id/:imId/:outTradeNo',
+            title : '项目详情',
+            templateUrl : 'static/view/mobile/mobile_project_detail.html',
+            controller : 'MobileProjectDetailCtrl',
+            controllerUrl : 'app/controllers/MobileProjectDetailCtrl'
         })).state("activityDetail", angularAMD.route({
             url : '/activity/detail/:id/:imId',
             title : '活动详情',

+ 37 - 0
donate-service/src/main/webapp/resources/js/mobile/controllers/MobileProjectDetailCtrl.js

@@ -5,6 +5,7 @@ define([ 'app/app' ], function(app) {
         $rootScope.page = 'project';
         var id = $stateParams.id;
         var imId = $stateParams.imId;
+        $scope.outTradeNo = $stateParams.outTradeNo;
         $scope.uuid = null;
         var init = function () {
 
@@ -109,5 +110,41 @@ define([ 'app/app' ], function(app) {
         $scope.selfProjectToggle = function (status) {
             $scope.projectContentShow = status;
         };
+
+        /**
+         * 刷新页面 回到无订单号参数页
+         */
+        $scope.payAgain = function () {
+            window.location.href = "/mobile#/project/detail/" + id + "/" + imId;
+        }
+
+        /**
+         * 查询订单
+         */
+        $scope.queryTradeStatus = function () {
+            $.ajax({
+                type : "POST",
+                url : "/wxpay/queryProjectRecodeState",
+                dataType : "json",
+                data: {
+                    outTradeNo : $scope.outTradeNo
+                },
+                success : function(res){
+                    if ("SUCCESS" == res) {
+                        window.location.href = "/project#/donationsOver/" + outTradeNo;
+                    } else if ("WAITING" == res) {
+                        //TODO 新弹框 继续支付  取消支付
+                        console.log("微信订单待支付");
+                    } else if ("EXCEPTION" == res) {
+                        console.log("订单异常");
+                    } else if ("ERROR" == res) {
+                        console.log("查询订单失败");
+                    }
+                },
+                error : function () {
+                    console.log("查询支付状态请求失败");
+                }
+            });
+        }
     }]);
 });

+ 2 - 1
donate-service/src/main/webapp/resources/js/pay.js

@@ -88,7 +88,8 @@ var wxPay = function (proId, amount, payWay, imid) {
             async: false,
             //contentType : 'application/json;charset=UTF-8',
             data: {
-                jsonStr : jsonStr
+                jsonStr : jsonStr,
+                currentUrl : window.location.href
             },
             success : function(res){
                 if (isMobile) {

+ 3 - 3
donate-service/src/main/webapp/resources/view/mobile/mobile_project_detail.html

@@ -986,13 +986,13 @@
             </form>
         </div>
         <!--捐款完成弹出框-->
-        <div class="donationOver" style="display: none">
+        <div class="donationOver" ng-show="outTradeNo != null"><!--style="display: none"-->
             <div class="header">
                请确认微信支付是否完成?
             </div>
             <div class="body">
-                <div class="pay-list"><a href="" class="finish">已完成支付</a></div>
-                <div class="pay-list"><a href="" class="return">支付遇到问题,重新支付</a></div>
+                <div class="pay-list"><a ng-click="queryTradeStatus()" class="finish">已完成支付</a></div>
+                <div class="pay-list"><a ng-click="payAgain()" class="return">支付遇到问题,重新支付</a></div>
             </div>
         </div>
     </div>