pay.js 3.96 KB
/**
 * 支付页面
 * @author: 赵彪<bill.zhao@yoho.cn>
 * @date: 2015/12/03
 */
var $ = require('jquery');

var loading = require('../plugin/loading'),
    Hammer = require('yoho.hammer');

var theOrderCode = document.getElementById('ordercode').value;

var wxPayEl = document.getElementById('weixin'),
    wxHammer = wxPayEl && new Hammer(wxPayEl);

var appIconPosition = {
        baidu: '-2.7rem',
        weixin: '-1.2rem',
        QQ: '-5.4rem',
        bank: '-4'
    };

//隐藏微信分享选项
if (window.wx) {
    wx.hideOptionMenu();
}

function onBridgeReady() {
    document.addEventListener('WeixinJSBridgeReady', function() {
        window.WeixinJSBridge && window.WeixinJSBridge.call('hideOptionMenu');
    });
}

if (typeof WeixinJSBridge === undefined) {
    if (document.addEventListener) {
        document.addEventListener('WeixinJSBridgeReady', onBridgeReady, false);
    } else if (document.attachEvent) {
        document.attachEvent('WeixinJSBridgeReady', onBridgeReady);
        document.attachEvent('onWeixinJSBridgeReady', onBridgeReady);
    }
    onBridgeReady();
} else {
    onBridgeReady();
}

//调用微信JS api 支付
function jsApiCall(orderCode, jsApiParameters) {

    //防止重复操作弹框
    window.WeixinJSBridge && window.WeixinJSBridge.invoke(
       'getBrandWCPayRequest',
       jsApiParameters,
       function(res) {
           window.location.href = '/home/orders/detail?order_code=' + orderCode;
       }
    );
}

//微信支付
function callpay(orderCode) {
    var jsApiParameters;

    if (typeof WeixinJSBridge === undefined) {
        if (document.addEventListener) {
            document.addEventListener('WeixinJSBridgeReady', jsApiCall, false);
        } else if (document.attachEvent) {
            document.attachEvent('WeixinJSBridgeReady', jsApiCall);
            document.attachEvent('onWeixinJSBridgeReady', jsApiCall);
        }
    } else {
        $.ajax({
                type: 'GET',
                url: '/shopping/pay/wechatwapapi?order_code=' + orderCode,
                dataType: 'json',
                success: function(res) {
                    if (res.code === 200) {
                        jsApiParameters = res.data.jsApiParameters;
                        jsApiCall(orderCode, jsApiParameters);
                    } else {
                        alert('微信支付调取失败');
                    }
                },
                error: function() {
                    alert('请刷新本页面,完成微信支付');
                }
            });
    }
}


function isWXOpen() {
    var ua = navigator.userAgent.toLowerCase();

    if (ua.match(/MicroMessenger/i) === 'micromessenger') {
        return true;
    } else {
        return false;
    }
}

function hideWeChatPay() {
    var payApps = document.getElementsByClassName('app');

    [].forEach.call(payApps, function(app, index) {
        if (app.innerHTML.indexOf('微信') !== -1) {
            app.parentNode.style.display = 'none';
            return false;
        }
    });
}

function handleForWX() {
    if (!isWXOpen()) {
        hideWeChatPay();
    }
}


function setAppIcon(el, position) {
    el.style.backgroundPositionY = position;
}

function loadIcon() {
    var boxs = document.getElementsByClassName('box');
    var div = null;
    var appid = null;

    [].forEach.call(boxs, function(box, index) {
        div = box.getElementsByClassName('icon')[0].getElementsByTagName('div')[0];
        if (div) {
            appid = box.getAttribute('id');
            if (appid !== 'alipay') {
                setAppIcon(div, appIconPosition[appid]);
            }
        }
    });
}

function showPage() {
    var pageList = document.getElementsByClassName('payapp-list')[0];

    pageList.style.visibility = 'visible';
}

if (wxHammer) {
    wxHammer.on('tap', function() {
        callpay(theOrderCode);
    });
}

function main() {
    handleForWX();
    loading.hideLoadingMask();
    showPage();
    loadIcon();
}

loading.showLoadingMask();

window.onload = main;