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

var loading = require('../plugin/loading'),
    tip = require('../plugin/tip'),
    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: '-4rem'
    };

//隐藏微信分享选项
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 {
                        tip.show('微信支付调取失败');
                    }
                },
                error: function() {
                    tip.show('请刷新本页面,完成微信支付');
                }
            });
    }
}


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

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

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

    $payApps.each(function(idx, app) {
        if ($(app).attr('id') === 'weixin') {
            $(app).parent().css('display', 'none');
            return false;
        }
    });
}

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


function setAppIcon(el, position) {
    $(el).css('background-position-y', position);
}

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

    $boxs.each(function(idx, box) {
        $div = $(box).find('.icon').find('div');
        if ($div.length > 0) {
            appid = $(box).attr('id');
            if (appid !== 'alipay') {
                setAppIcon($div, appIconPosition[appid]);
            }
        }
    });
}

function showPage() {
    var $pageList = $('.payapp-list');

    $pageList.css('visibility', 'visible');
}

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

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

loading.showLoadingMask();

window.onload = main;