Bladeren bron

支付流程注释

洪海涛 8 jaren geleden
bovenliggende
commit
ccd9aedfc6

+ 18 - 4
www/webapp/common/js/native.js

@@ -205,6 +205,7 @@ define(function (require) {
                     var param_str = JSON.stringify(param);
                     window.jsapi.pay(param_str);
                 },
+                // ios 的可以无视了,本项目暂时用不到
                 ios: function () {
                     NativeDataAdapter.charge = JSON.stringify(params.charge);
                     param['charge'] = 'NativeDataAdapter.charge';
@@ -212,6 +213,7 @@ define(function (require) {
                     window.location.href = 'http://callclient?method=pay&param=' + encodeURIComponent(param_str) + '&callback=' + _callback;
                 },
                 wx: function () {
+                  // 这个我就不知道说什么好了,判断当前环境为test的话,走ping++模拟支付
                     if (config.test) {
                         pingpp.createPayment(params.charge, function (result, err) {
                             if (result == "success") {
@@ -229,10 +231,23 @@ define(function (require) {
                             }
                         });
                     }else {
-                        var option = params['charge'].credential.wx_pub;
+                      // 当前为正式环境,通过url传值到微信支付授权的url,然后在该url下面进行微信支付
+                      /*
+                      * 参数说明:带 * 号的为微信支付用到的
+                      * appId:* 公众号名称,由商户传入
+                      * nonceStr:* 随机串
+                      * prepay:预付款ID
+                      * signType:* 微信签名方式:
+                      * timeStamp:* 时间戳,自1970年以来的秒数
+                      * paySign:* 微信签名
+                      * amount:实付金额
+                      * created:建立
+                      * body:订单名字
+                      * bookingTime:预约时间
+                      * */
+                        var option = params['charge'].credential.wx_pub; // 支付凭据
                         var prepay = option["package"].replace('prepay_id=', '');
                         var bookingTime = params.orderInfo.booking_time_str;
-                        var isSpecial = params['isSpecial']
                         location.href = '/webapp/o2o/module/pay/index.html?appId='
                             + option.appId + '&nonceStr=' + option.nonceStr
                             + '&package=' + prepay + '&signType='
@@ -240,8 +255,7 @@ define(function (require) {
                             + option.timeStamp + '&paySign='
                             + option.paySign + '&amount=' + params['charge'].amount
                             + '&created=' + params['charge'].created + '&body='
-                            + params['charge'].body + '&bookingTime=' + bookingTime
-                            + '&isSpecial=' + isSpecial;
+                            + params['charge'].body + '&bookingTime=' + bookingTime;
                     }
                 }
             });

File diff suppressed because it is too large
+ 201 - 203
www/webapp/moonclub/module/pay/index.html


+ 8 - 6
www/webapp/o2o/js/model/order.js

@@ -65,19 +65,21 @@ define(['base', '$', 'native', 'product', 'api'], function (base, $, native, pro
     //channel-渠道
     Order.prototype.addOrder = function (userID, channel, callback) {
         var that = this;
-
-        var productParam = [{//产品参数
-            product_id: this.productID,
-            count: this.productCount//产品数
+        // 产品参数
+        var productParam = [{
+            product_id: this.productID, // 产品ID
+            count: this.productCount // 产品数
         }];
-
-        var coupons = [];//优惠券
+       // 优惠券
+        var coupons = [];
         if (this.couponID != '') {
             coupons.push(this.couponID);
         }
 
+        // 添加额外的商品
         var extraJson = '';
         if (this.appendID) {
+          // 商品id && 商品价格
             extraJson = JSON.stringify([{type: this.appendID, price: this.price}]);
         }
 

+ 173 - 175
www/webapp/o2o/js/page/pay.js

@@ -1,182 +1,180 @@
 define(['$', 'template', 'api', 'native', 'config', 'user'], function ($, template, api, native, config, user) {
 
-    var backHash; // 回退页面
-    var orderID; // 订单ID
-    var orderType; // 订单类型
-    var orderCoupon = 0; // 使用代金券支付的金额
-    var orderBalance = 0; // 使用余额支付的金额
-    var orderPayValue = 0; // 使用微信支付的金额
-    var isRecharge = false; // 是否是充值
-    function back() {
-        $(document).trigger('spa:navigate', {
-            hash: backHash,
-            pushData: {
-                dontNeedReload: true,
-                animate: 'slideOutDown' //强制设置动画为落下
-            }
-        });
-    }
-    return {
-        title: '壹管家上门服务',
-        body: '',
-        init: function (pageData, dtd) {
-            var $view = this;
-            var $doc = $(document);
-            // 充值的回调
-            function payResult(res) {
-	            console.log(res.message);
-                $doc.trigger('spa:closeloader');
-                if (res.success) {
-                    var orderInfo = user.getOrderInfo(orderID);
-                    var params = {
-                        orderInfo: orderInfo,
-                        charge: res.data,
-                        isSpecial: res.data.body == "活动产品"
-                    };
-                    native.pay(params, function (resA) {
-                        if (resA.success) {
-                            if (res.data.body == "活动产品"){
-                                /*$doc.trigger('spa:openpanel', ['simpleAlert', {
-                                    message: "活动产品支付成功了"
-                                }]);*/
-                                $doc.trigger('spa:navigate', {
-                                    hash: 'bargain'
-                                });
-                            }else {
-                                $doc.trigger('spa:navigate', {
-                                    hash: 'paySuccess'
-                                });
-                            }
-                        } else {
-                            $doc.trigger('spa:openpanel', ['simpleAlert', {
-                                message: resA.message
-                            }]);
-                        }
-                    });
-                } else {
-                    $doc.trigger('spa:openpanel', ['simpleAlert', {
-                        message: res.message
-                    }]);
-                }
-            }
-            $.newTouch('.pay-option', function (event) {
-                event.preventDefault();
-                var payChannel = $(this).data('value');
-                $('.btn-pay', $view).attr('data-pay-channel', payChannel);
-                $(this).addClass('checked').parent().siblings().find('a').removeClass('checked');
-            }, $view);
-            $.newTouch('.btn-pay', function (event) {
-                event.preventDefault();
-                var payChannel = $(this).attr('data-pay-channel');
-                if (config.isWX) {
-                    payChannel = 'wx_pub';
-                }
-                if (!payChannel) return;
-                $doc.trigger('spa:openloader');
-                var params = {
-                    user_id: user.id,
-                    order_id: orderID,
-                    pay_channel: payChannel
-                };
-                if (isRecharge){
-                    api.payRecharge(params, function (res) {
-                        payResult(res)
-                    });
-                }else {
-                    api.getPayCharge(params, function (res) {
-                        payResult(res)
-                    });
-                }
-            }, $view);
-            //返回
-            $.newTouch('.cancel-button', function (event) {
-                event.preventDefault();
-                back.call(this, event);
-            }, $view);
-            $view.on('tapBackButton', function (event) {
-                event.preventDefault();
-                back.call(this, event);
-            });
-            /*$view.on('swipeRight', function (event) {
-                event.preventDefault();
-                back.call(this, event);
-            });*/
-            dtd.resolve();
-        },
-        beforeopen: function (pageData, dtd) {
-            var $view = this;
-            var pushData = pageData.pushData;
-            orderID = pushData.orderID;
-            backHash = pushData.backHash ? pushData.backHash : '';
-            isRecharge = pushData.isRecharge;
-            // 在用户的所有订单中找出这个订单
-            var orders = user.orders[1].data;
-            for (var i = 0, len = orders.length; i < len; i++) {
-                if (orders[i].id == orderID) {
-                    var selectOrder = orders[i];
-                    orderType = selectOrder.products[0].product.name;
-                    if (selectOrder.coupons && selectOrder.coupons.length){
-                        for (i in selectOrder.coupons){
-                            orderCoupon += parseInt(selectOrder.coupons[i].coupon.value);
-                        }
-                    }
-                    if (selectOrder.pay_price && selectOrder.pay_price != 0){
-                        orderBalance = selectOrder.final_price - selectOrder.pay_price;
-                    }
-                    if (selectOrder.pay_price && selectOrder.pay_price != 0){
-                        orderPayValue = selectOrder.pay_price;
-                    }else {
-                        orderPayValue = selectOrder.final_price;
-                    }
-                }
+  var backHash; // 回退页面
+  var orderID; // 订单ID
+  var orderType; // 订单类型
+  var orderCoupon = 0; // 使用代金券支付的金额
+  var orderBalance = 0; // 使用余额支付的金额
+  var orderPayValue = 0; // 使用微信支付的金额
+  var isRecharge = false; // 是否是充值
+  function back() {
+    $(document).trigger('spa:navigate', {
+      hash: backHash,
+      pushData: {
+        dontNeedReload: true,
+        animate: 'slideOutDown' //强制设置动画为落下
+      }
+    });
+  }
+
+  return {
+    title: '壹管家上门服务',
+    body: '',
+    init: function (pageData, dtd) {
+      var $view = this;
+      var $doc = $(document);
+      // 充值的回调
+      function payResult(res) {
+        $doc.trigger('spa:closeloader');
+        if (res.success) {
+          var orderInfo = user.getOrderInfo(orderID);
+          var params = {
+            orderInfo: orderInfo,
+            charge: res.data
+          };
+          // 调用native中pay方法,传值orderInfo,charge并做回调,返回充值结果
+          native.pay(params, function (resA) {
+            if (resA.success) {
+              $doc.trigger('spa:navigate', {
+                hash: 'paySuccess'
+              });
+            } else {
+              $doc.trigger('spa:openpanel', ['simpleAlert', {
+                message: resA.message
+              }]);
             }
-            if(orderType=='充值1元'){
-              orderType="其他数额";
+          });
+        } else {
+          $doc.trigger('spa:openpanel', ['simpleAlert', {
+            message: res.message
+          }]);
+        }
+      }
+
+      $.newTouch('.pay-option', function (event) {
+        event.preventDefault();
+        var payChannel = $(this).data('value');
+        $('.btn-pay', $view).attr('data-pay-channel', payChannel);
+        $(this).addClass('checked').parent().siblings().find('a').removeClass('checked');
+      }, $view);
+      // 真正的微信支付开始
+      $.newTouch('.btn-pay', function (event) {
+        event.preventDefault();
+        // 获取自定义的data-pay-channel的值,即支付方式
+        var payChannel = $(this).attr('data-pay-channel');
+        // 判断当前客户端是否为微信公众号
+        if (config.isWX) {
+          payChannel = 'wx_pub';
+        }
+        if (!payChannel) return;
+        // 显示加载动画
+        $doc.trigger('spa:openloader');
+        // 定义params对象,内置 用户id,订单id,支付方式
+        var params = {
+          user_id: user.id,
+          order_id: orderID,
+          pay_channel: payChannel
+        };
+        // 判断是否是充值    PS:其实没啥用,都是走同一个支付入口的
+        if (isRecharge) {
+          api.payRecharge(params, function (res) {
+            payResult(res)
+          });
+        } else {
+          api.getPayCharge(params, function (res) {
+            payResult(res)
+          });
+        }
+      }, $view);
+      //返回
+      $.newTouch('.cancel-button', function (event) {
+        event.preventDefault();
+        back.call(this, event);
+      }, $view);
+      $view.on('tapBackButton', function (event) {
+        event.preventDefault();
+        back.call(this, event);
+      });
+      /*$view.on('swipeRight', function (event) {
+       event.preventDefault();
+       back.call(this, event);
+       });*/
+      dtd.resolve();
+    },
+    beforeopen: function (pageData, dtd) {
+      var $view = this;
+      var pushData = pageData.pushData;
+      orderID = pushData.orderID;
+      backHash = pushData.backHash ? pushData.backHash : '';
+      isRecharge = pushData.isRecharge;
+      // 在用户的所有订单中找出这个订单
+      var orders = user.orders[1].data;
+      for (var i = 0, len = orders.length; i < len; i++) {
+        if (orders[i].id == orderID) {
+          var selectOrder = orders[i];
+          orderType = selectOrder.products[0].product.name;
+          if (selectOrder.coupons && selectOrder.coupons.length) {
+            for (i in selectOrder.coupons) {
+              orderCoupon += parseInt(selectOrder.coupons[i].coupon.value);
             }
-            var tpl = template('pay/index', {
-                showNavBar: !config.isWX && !config.isChubao,
-                wxPub: true,
-                orderType: orderType,
-                isRecharge: isRecharge,
-                isShow: !isRecharge,
-                orderCoupon: orderCoupon,
-                orderBalance: orderBalance,
-                orderPayValue: orderPayValue
-            });
-            $('.spa-page-body', $view).html(tpl);
-            dtd.resolve();
-            // if (config.isAndroid || config.isIOS) {
-            //   native.isWxAppInstalled(function(res){
-            //     var showWX = true;
-            //     if (res.success && !res.isInstalled) {
-            //       showWX = false;
-            //     }
-            //     if (config.appVersion < '2.2') {
-            //       //微信支付2.2版本以下有问题 隐藏按钮
-            //       showWX = false;
-            //     }
-            //     var tpl = template('pay/index', {
-            //       showWX: showWX,
-            //       showNavBar: !config.isWX && !config.isChubao,
-            //       orderType: orderType,
-            //       orderprice: orderprice
-            //     });
-            //     $('.spa-page-body', $view).html(tpl);
-            //
-            //     dtd.resolve();
-            //   })
-            // } else if (config.isChubao) {
-            //   var tpl = template('pay/index', {
-            //     showNavBar: !config.isWX && !config.isChubao,
-            //     orderType: orderType,
-            //     orderprice: orderprice,
-            //     chubao: true
-            //   });
-            //   $('.spa-page-body', $view).html(tpl);
-            //   dtd.resolve();
-            // } else {
-            //
-            // }
+          }
+          if (selectOrder.pay_price && selectOrder.pay_price != 0) {
+            orderBalance = selectOrder.final_price - selectOrder.pay_price;
+          }
+          if (selectOrder.pay_price && selectOrder.pay_price != 0) {
+            orderPayValue = selectOrder.pay_price;
+          } else {
+            orderPayValue = selectOrder.final_price;
+          }
         }
+      }
+      if (orderType == '充值1元') {
+        orderType = "其他数额";
+      }
+      var tpl = template('pay/index', {
+        showNavBar: !config.isWX && !config.isChubao,
+        wxPub: true,
+        orderType: orderType,
+        isRecharge: isRecharge,
+        isShow: !isRecharge,
+        orderCoupon: orderCoupon,
+        orderBalance: orderBalance,
+        orderPayValue: orderPayValue
+      });
+      $('.spa-page-body', $view).html(tpl);
+      dtd.resolve();
+      // if (config.isAndroid || config.isIOS) {
+      //   native.isWxAppInstalled(function(res){
+      //     var showWX = true;
+      //     if (res.success && !res.isInstalled) {
+      //       showWX = false;
+      //     }
+      //     if (config.appVersion < '2.2') {
+      //       //微信支付2.2版本以下有问题 隐藏按钮
+      //       showWX = false;
+      //     }
+      //     var tpl = template('pay/index', {
+      //       showWX: showWX,
+      //       showNavBar: !config.isWX && !config.isChubao,
+      //       orderType: orderType,
+      //       orderprice: orderprice
+      //     });
+      //     $('.spa-page-body', $view).html(tpl);
+      //
+      //     dtd.resolve();
+      //   })
+      // } else if (config.isChubao) {
+      //   var tpl = template('pay/index', {
+      //     showNavBar: !config.isWX && !config.isChubao,
+      //     orderType: orderType,
+      //     orderprice: orderprice,
+      //     chubao: true
+      //   });
+      //   $('.spa-page-body', $view).html(tpl);
+      //   dtd.resolve();
+      // } else {
+      //
+      // }
     }
+  }
 })

+ 5 - 0
www/webapp/o2o/js/page/placeOrder.js

@@ -811,13 +811,16 @@ define(['$', 'template', 'order', 'native', 'helper', 'user', 'api', 'config', '
 
         /* 向服务器下订单 */
         $doc.trigger('spa:openloader');
+        // 判断用户余额大于等于订单金额,满足条件走余额支付
         if (user.balance >= order.payValue) {
           order.balance = order.payValue;
           order.payValue = 0;
         } else {
+          // 不满足条件走混合支付
           order.balance = user.balance;
           order.payValue = order.payValue - order.balance;
         }
+        // 在系统后台添加新增订单
         order.addOrder(user.id, payChannel, function (res) {
           $doc.trigger('spa:closeloader');
           if (res.success) {
@@ -837,11 +840,13 @@ define(['$', 'template', 'order', 'native', 'helper', 'user', 'api', 'config', '
             var orderID = order.id;
             order.reset(); //清空order内的值
             $('.booking-time', $view).html('请选择');
+            // status = 1 表示新增订单添加成功
             if (res.data.status == 1) {
               $doc.trigger('spa:navigate', {
                 hash: 'paySuccess'
               });
             } else {
+              // 跳转到pay调用微信支付
               $doc.trigger('spa:navigate', {
                 hash: 'pay',
                 pushData: {

File diff suppressed because it is too large
+ 201 - 203
www/webapp/o2o/module/pay/index.html


Some files were not shown because too many files changed in this diff