pay.js 10.3 KB
/*
@songcxa
@2018-12-14
@移动支付
*/
var webAppParams = null;
var $btnObj = null;
var $btnLoad = null;
//var $btnLoad = document.getElementById("loading");
window.onload = function () {
    //var root = document.getElementById("root");
    $btnObj = document.getElementById("btnPayOK");
    $btnLoad = document.getElementById("loading");
    $linkPayDetail = getObjectByID("linkPayDetail");
    $linkPayDetail.onclick = webAppClass.linkPayDetailClick;
    var webRoot = window.location.href;
    //当前客户端浏览器模式[微信、支付宝、其他]
    webAppClass.clientBrowser();
    //绑定事件
    var ali = document.getElementById("rowAliPay");
    var wx = document.getElementById("rowWxPay");
    ali.onclick = webAppClass.aliClick;
    wx.onclick = webAppClass.wxClick;
    $btnObj.onclick = webAppClass.okClick;
    document.getElementById("payTip").innerHTML = "";
    //参数
    webAppParams = getQueryString(window.location);
    if (webAppParams!=null) {
        //设置UI参数
        webAppClass.setUI(webAppParams);
    } else {
        alertMsg("暂无订单信息");
    }
}
/**/
var webAppClass = {
    //OK
    okClick: function (ev) {
        document.getElementById("payTip").innerHTML = "";
        if (webAppParams == null) {
            alertMsg("暂无订单信息");return;
        }
        //先校验停车费用后缴费提交
        webAppClass.checkParkCost();
    },
    //校验该订单当前支付时的费用(排除扫描订单后不支付时长)
    checkParkCost: function () {
        $btnObj.style.display = "none";
        $btnLoad.style.display = "block";
        if (typeof (webAppParams.queryOrderInfo) == "undefined") {//没有queryOrderInfo返回第一页
            window.history.back(-1);
        }
        var tmpParams = JSON.parse(webAppParams.queryOrderInfo);
        var url = webAppRoot + window.webAppH5.comServer;
        postRequest(url, tmpParams, function (res) {
            //btnObj.style.display = "block"; //$btnLoad.style.display = "none";
            //$btnObj.style.display = "block";
            if (res.code == 0) {//进场
                var tmpObj = res.data;
                if (tmpObj) {
                    webAppClass.setUI(tmpObj);
                    webAppParams = tmpObj;//重新赋值
                    webAppClass.okPay(tmpObj);//唤醒支付
                } else {
                    alertMsg("没有找到相应订单");
                }
            } else {//其他情况如【该卡号场内已存在】
                $btnLoad.style.display = "none";
                $btnObj.style.display = "block";
                console.log(res.message); alertMsg(res.message);
            }
        }, function (err) {
            console.log("网络服务超时..." + url);
            alertMsg("网络服务超时");
            $btnLoad.style.display = "none";
            $btnObj.style.display = "block";
            //$btnLoad.style.display = "none";
        });
    },

    //确定支付
    okPay: function (params) {
        var orderID = params.orderId;//订单号
        //var moneyID = document.getElementById("sumMoney").innerHTML = webAppParams.orderId;//订单号
        var root = webAppRoot;
        //默认支付宝
        if (document.getElementById("aliPay").checked) {
            console.log("aliPay");
            //订单号
            var obj = {};
            //this.payAjax(url, { orderId: "11111", price: 0.01 });
            var aliPay = webAppH5.aliPayServer;
            var aliParams = webAppH5.comParams;
            aliParams.orderId = orderID;
            aliParams.payType = 1;// 1:支付宝 2:微信 3:银联 10:H5   4微信公众号
            aliParams.terminalSource = 7;//请求端来源 1: 任你停 2:pda 3:微信公共号 7:H5扫码 10页面支付
            aliParams.paySrcType = 101;//101停车支付
            webAppClass.payAliAjax(root + aliPay, aliParams);
        } else {//微信
            var url = " https://wx.tenpay.com/cgi-bin/mmpayweb-bin/checkmweb?prepay_id=wx20161110163838f231619da20804912345&package=1037687096";
            //window.location.href = url;
            var wxPay = webAppH5.wxPayServer;
            var wxParams = webAppH5.comParams;
            wxParams.orderId = orderID;
            wxParams.payType = 4;// 1:支付宝 2:微信 3:银联 10:H5   4微信公众号
            wxParams.terminalSource = 7;//请求端来源 1: 任你停 2:pda 3:微信公共号 7:H5扫码 10页面支付
            webAppClass.payAjax(root + wxPay, wxParams);
            console.log("wxPay");
        }
    },

    //Ali
    aliClick: function (ev) {
        console.log("AliClick");
        document.getElementById("aliPay").checked = true;
        ev.preventDefault();
    },
    //Wx
    wxClick: function (ev) {
        console.log("wxClick");
        document.getElementById("wxPay").checked = true;
        ev.preventDefault();
    },
    //浏览器
    clientBrowser: function () {
        if (/MicroMessenger/.test(window.navigator.userAgent)) {
            console.log("微信客户端");
            this.switchShow("wxPay");
        } else if (/AlipayClient/.test(window.navigator.userAgent)) {
            console.log("支付宝客户端");
            this.switchShow("aliPay");
        } else {
            console.log("其他浏览器");
            this.switchShow("other");
        }
    },
    //根据浏览器显示内容[aliPay、wxPay、other]
    switchShow: function (type) {
        var aliObj = document.getElementById("rowAliPay");
        var wxObj = document.getElementById("rowWxPay");
        var lineObj = document.getElementById("splitLine");
        switch (type) {
            case "aliPay":
                lineObj.style.display = "none";
                wxObj.style.display = "none";
                document.getElementById("aliPay").checked = true;
                break;
            case "wxPay":
                lineObj.style.display = "none";
                aliObj.style.display = "none";
                document.getElementById("wxPay").checked = true;
                break;
            default://其他浏览器
                break;
        }
    },

    //异步请求-微信
    payAjax: function (url, params) {
        var btnOBj = $btnObj;
        postRequest(url, params, function (res) {
            btnOBj.style.display = "block";
            $btnLoad.style.display = "none";
            //debugger;
            if (res.code == 0) {//进场
                //alertMsg("出场成功");
                if (res.data) {
                    var tmpObj = res.data;
                    if (typeof (tmpObj.mwebUrl)!="undefined") {
                        window.location.href = tmpObj.mwebUrl + "&redirect_url=" + webAppPayResult;
                    } else {
                        alertMsg("没有返回支付地址mwebUrl");
                    }
                    console.log(JSON.stringify(tmpObj));
                } else {
                    alertMsg("没有找到返回值");
                }
            } else {//其他情况如【该卡号场内已存在】
                console.log(res.message);
                alertMsg(res.message);
            }
        }, function (err) {
            console.log("网络地址出错...");
            alertMsg("网络地址出错...");
            btnOBj.style.display = "block";
        });
    },

    //异步请求-支付宝
    payAliAjax: function (url, params) {
        var btnOBj = $btnObj;
        postRequest(url, params, function (res) {
            btnOBj.style.display = "block";
            $btnLoad.style.display = "none";
            if (res.code == 0) {//进场
                document.write(res.data);//打开支付表单
            } else {//其他情况如【该卡号场内已存在】
                console.log(res.message);
                alertMsg(res.message);
            }
        }, function (err) {
            console.log("网络地址出错...");alertMsg("网络地址出错...");
            $btnLoad.style.display = "none";
            btnOBj.style.display = "block";
        });
    },

    //设置UI
    setUI: function (params) {
        var $carNum = getObjectByID("carNum"),//车牌号
            $orderNum = getObjectByID("orderNum"),//订单号
            $sumMoney = getObjectByID("sumMoney"),//实际应付金额
            $outtime = getObjectByID("outtime"),//实际出场时间
            $payTip = getObjectByID("payTip"),//支付提示

            $parkName = getObjectByID("parkName"),//车场名称
            $inparktime = getObjectByID("inparktime"),//进场时间
            $staytime = getObjectByID("staytime"),//停车时长
            $due = getObjectByID("due"),//停车总费用

            $paid = getObjectByID("paid"),//已支付金额
            $discountDesc = getObjectByID("discountDesc"),//8折优惠折扣费用
            $discountFee = getObjectByID("discountFee");//优惠金额

        if (params != null && params!="") {
            var price = keepTwoDecimalFull((params.orderFee / 100));//(params.orderFee / 100);
            $carNum.innerHTML = params.plateno;//手机号
            $orderNum.innerHTML = params.orderId;//订单号
            $sumMoney.innerHTML = price;///params.orderFee//缴费金额
            $outtime.innerHTML = params.outtime;//实际出场时间
            //.appOrderTimeout
            $payTip.innerHTML = "注意: " + params.appOrderTimeout;//请在支付完成10分钟内出场,如超时未出场,会继续计费。

            $parkName.innerHTML = params.parkName;
            $inparktime.innerHTML = params.inparktime;
            $staytime.innerHTML = formatSeconds(params.staytime);
            
            $due.innerHTML = keepTwoDecimalFull((params.due / 100));//停车总费用
            $paid.innerHTML = params.paid;
            $discountFee.innerHTML = keepTwoDecimalFull((params.discountFee / 100));//优惠金额
            $discountDesc.innerHTML = params.discountDesc;
        } else {
            console.log("没有接受到参数");
        }
    },

    //查看详情
    linkPayDetailClick: function (ev) {
        var $payDetail = getObjectByID("payDetail");
        var $linkPayDetail = getObjectByID("linkPayDetail");
        if ($linkPayDetail.innerHTML == "详情+") {
            $linkPayDetail.innerHTML = "详情-";
            $payDetail.style.height = "195px";
        } else {
            $linkPayDetail.innerHTML = "详情+";
            $payDetail.style.height = "55px";
        }
    }
}