Last active
February 13, 2022 23:08
-
-
Save shelling/76d05e5f7ac5d1ff5fbe1b3c08ef6696 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| var Func = function(e) { | |
| "use strict"; | |
| var a, t = $("#ECPayPayment"), | |
| n = e.sdkVersion, | |
| c = e.token, | |
| i = e.language, | |
| d = e.cliPriKey, | |
| r = e.serPubKey, | |
| s = e.keyID, | |
| p = e.uuid, | |
| l = !1; | |
| function o(e) { | |
| var a = $(".ecpay-cc-card", e), | |
| t = a.parent("dd").find(".ecpay-card-status-line > .ecpay-red"); | |
| l ? t.css("visibility", "hidden") : e.hasClass("ecpay-edit-box") ? t.css("visibility", "hidden") : e.hasClass("ecpay-add-box") && ("" == a.val().trim() ? t.text($(".ecpay-CardInputCardNumber").text()).css("visibility", "visible") : t.text($(".ecpay-CardEnterAgain").text()).css("visibility", "visible")); | |
| var n = $(".ecpay-date", e), | |
| c = n.parent("dd").find(".ecpay-card-status-line > .ecpay-red"), | |
| i = n.val().replace(/\s*/g, ""); | |
| if (/^(0[1-9]|1[0-2])(\/)(\d{2})$/g.test(i)) { | |
| var d = parseInt(i.split("/")[1]), | |
| r = parseInt(i.split("/")[0]), | |
| s = new Date, | |
| p = parseInt(s.getFullYear().toString().substr(2, 2)), | |
| o = s.getMonth() + 1; | |
| d > p || d == p && r >= o ? c.hide() : c.show() | |
| } else c.show(); | |
| var y = $(".ecpay-cc-cvc", e), | |
| f = y.parent("dd").find(".ecpay-card-status-line > .ecpay-red"); | |
| return (4 == y.attr("maxlength") ? /^\d{4}$/ : /^\d{3}$/).test(y.val()) ? f.hide() : f.show(), "visible" != t.css("visibility") && "block" != c.css("display") && "block" != f.css("display") | |
| } | |
| function y(e) { | |
| var a = r.encrypt(e); | |
| return forge.util.encode64(a) | |
| } | |
| function f(e) { | |
| var a = forge.md.sha256.create(); | |
| return a.update(e, "utf8"), forge.util.encode64(d.sign(a)) | |
| } | |
| function u(e, a, t) { | |
| var n = forge.cipher.createCipher("AES-CBC", a); | |
| return n.start({ | |
| iv: t | |
| }), n.update(forge.util.createBuffer(e)), n.finish(), forge.util.encode64(n.output.data) | |
| } | |
| function g(e, t, c, l, o) { | |
| $.ajax({ | |
| url: a + e, | |
| type: "post", | |
| beforeSend: function(e) { | |
| e.setRequestHeader("Language", i), e.setRequestHeader("UUID", p), e.setRequestHeader("AppName", location.host), e.setRequestHeader("AppInfo", function() { | |
| var e = navigator.userAgent, | |
| a = "", | |
| t = { | |
| ios: !!e.match(/\(i[^;] ;( U;)? CPU. Mac OS X/) || e.indexOf("iPhone") > -1 || e.indexOf("Mac") > -1 || e.indexOf("iPad") > -1, | |
| android: e.indexOf("Android") > -1 || e.indexOf("Adr") > -1 | |
| }; | |
| a = e.indexOf("Mac OS X") > -1 ? (e.match(/OS X [\d._]*/gi) + "").replace(/[^0-9|_.]/gi, "").replace(/_/gi, ".") : e.indexOf("Android") > -1 || e.indexOf("Linux") > -1 ? e.substr(e.indexOf("Android") + 8, e.indexOf(";", e.indexOf("Android")) - e.indexOf("Android") - 8) : "Unknown"; | |
| var c = { | |
| DeviceInfo: e, | |
| IsSimulator: 0, | |
| OS: t.ios ? 1 : t.android ? 2 : 0, | |
| OSVersion: "" == a ? "Unknown" : a, | |
| Vers: n | |
| }; | |
| return JSON.stringify(c) | |
| }()), e.setRequestHeader("KeyInfo", c), e.setRequestHeader("Signature", l), e.setRequestHeader("KeyID", s) | |
| }, | |
| cache: !1, | |
| contentType: "application/json", | |
| data: JSON.stringify(t), | |
| dataType: "json", | |
| success: function(e, a, t) { | |
| var n = t.getResponseHeader("KeyInfo"), | |
| c = t.getResponseHeader("Signature"); | |
| if (null != c) | |
| if (function(e, a) { | |
| var t = forge.md.sha256.create(); | |
| return t.update(e, "utf8"), r.verify(t.digest().getBytes(), forge.util.decode64(a)) | |
| }(JSON.stringify(e), c)) | |
| if (1 == e.TransCode) | |
| if (null != n) { | |
| var i, s, p, l = (i = n, s = d.decrypt(forge.util.decode64(i)), p = forge.util.decodeUtf8(s), JSON.parse(p)); | |
| if (null != l) { | |
| var y = function(e, a, t) { | |
| var n = forge.cipher.createDecipher("AES-CBC", forge.util.encodeUtf8(a)); | |
| n.start({ | |
| iv: forge.util.encodeUtf8(t) | |
| }), n.update(forge.util.createBuffer(forge.util.decode64(e))), n.finish(); | |
| var c = n.output.data; | |
| return JSON.parse(decodeURIComponent(c)) | |
| }(e.Data, l.key, l.iv); | |
| null != y ? o(y, null) : o(null, "The parameter [Data] cannot be empty") | |
| } else o(null, "The parameter [KeyInfo] decrypt fail") | |
| } else o(null, "The parameter [KeyInfo] cannot be empty"); | |
| else o(null, e.TransMsg); | |
| else o(null, "Signature verify error"); | |
| else o(null, "The parameter [Signature] cannot be empty") | |
| }, | |
| error: function(e, a, t) { | |
| o(null, e.statusText) | |
| } | |
| }) | |
| } | |
| function v(e, n) { | |
| var d = a + "/Payment/BindResult?type=" + e + "&token=" + c + "&lang=" + i; | |
| d = d + (null == n || 1 != n.RtnCode ? "&status=fail" : "&status=success") + "&rtnMsg=" + encodeURIComponent(n.RtnMsg), t.load(d) | |
| } | |
| this.Init = function(e) { | |
| var n; | |
| a = e, $(".ecpay-card-list > .ecpay-c-l-features > .ecpay-icon-ic_edit", t).bind("click", function() { | |
| $(".ecpay-edit-box", t).hide(), $(".ecpay-add-box", t).find(".ecpay-card-info-tab,.ecpay-btn-box").hide().end().find(".ecpay-btnline").show(), $(".ecpay-card-list", t).removeClass("ecpay-dissable"); | |
| var e = $(this).closest(".ecpay-card-list").next(".ecpay-edit-box"); | |
| e.prev("ul").addClass("ecpay-dissable"), e.find(".ecpay-card-status-line > .ecpay-red").hide(), e.find(".ecpay-cc-card").parent("dd").find(".ecpay-card-status-line > .ecpay-red").css("display", ""); | |
| var a = e.find(".ecpay-cc-card").val().replace(/\s*/g, ""), | |
| n = "", | |
| c = 3; | |
| 15 == a.length ? (n = a.replace(/^(\d{4})(\d{2}\*{4})(\*\d{4})$/g, "$1 $2 $3").trim(), c = 4) : n = a.length >= 16 ? a.replace(/^(\d{4})(\d{2}\*{2})(\*{4})(\d{4})$/g, "$1 $2 $3 $4").trim() : a.replace(/^(\d{6})(\*{3,9}\d{4})$/g, "$1 $2").trim(), e.find(".ecpay-cc-card").val(n), e.find(".ecpay-date").val(e.find(".ecpay-date").prev("span").text()), e.find(".ecpay-cc-cvc").val(""), e.find(".ecpay-cc-cvc").attr("maxlength", c).attr("pattern", "^\\d{" + c + "}$"), e.show(), t.find(".ecpay-edit-box:visible .ecpay-cc-card").trigger("keyup") | |
| }), $(".ecpay-card-list > .ecpay-c-l-features > .ecpay-icon-ic_del", t).bind("click", function() { | |
| var e = $(this).closest(".ecpay-card-list"); | |
| if (!confirm($(".ecpay-UnbindConfirm").text())) return !1; | |
| var a = e.next(".ecpay-edit-box").find(".ecpay-cc-card").prev("span").text(), | |
| t = { | |
| PayToken: a | |
| }, | |
| n = forge.util.encode64(forge.random.getBytesSync(32)).substr(0, 32), | |
| c = forge.util.encode64(forge.random.getBytesSync(16)).substr(0, 16), | |
| i = { | |
| Data: u(JSON.stringify(t), n, c) | |
| }, | |
| d = y(JSON.stringify({ | |
| key: n, | |
| iv: c | |
| })), | |
| r = f(JSON.stringify(i)); | |
| ! function(e, a, t, n) { | |
| g("/Payment/DeleteBindCard", e, a, t, n) | |
| }(i, d, r, function(a, t) { | |
| null != a && 1 == a.RtnCode || v("del", a), e.next(".ecpay-edit-box").remove().end().remove() | |
| }) | |
| }), $(".ecpay-edit-box > .ecpay-btn-box > .ecpay-Cancel", t).bind("click", function() { | |
| var e = $(this).closest(".ecpay-edit-box"); | |
| e.hide(), e.prev("ul").removeClass("ecpay-dissable") | |
| }), $(".ecpay-edit-box > .ecpay-btn-box > .ecpay-Modified", t).bind("click", function() { | |
| var e = $(this).closest(".ecpay-edit-box"); | |
| if (!o(e)) return !1; | |
| var a = e.find(".ecpay-cc-card").prev("span").text(), | |
| t = e.find(".ecpay-date").val().replace(/\s*/g, "").split("/"), | |
| n = e.find(".ecpay-cc-cvc").val(), | |
| c = { | |
| CardInfo: { | |
| PayToken: a, | |
| CardValidYY: t[1], | |
| CardValidMM: t[0], | |
| CardCVV2: n | |
| } | |
| }, | |
| i = forge.util.encode64(forge.random.getBytesSync(32)).substr(0, 32), | |
| d = forge.util.encode64(forge.random.getBytesSync(16)).substr(0, 16), | |
| r = { | |
| Data: u(JSON.stringify(c), i, d) | |
| }, | |
| s = y(JSON.stringify({ | |
| key: i, | |
| iv: d | |
| })), | |
| p = f(JSON.stringify(r)); | |
| ! function(e, a, t, n) { | |
| g("/Payment/EditBindCard", e, a, t, n) | |
| }(r, s, p, function(e, a) { | |
| v("edit", e) | |
| }) | |
| }), $(".ecpay-add-box > .ecpay-btnline > .ecpay-icon-ic_add_card", t).bind("click", function() { | |
| $(".ecpay-edit-box", t).hide(), $(".ecpay-card-list", t).removeClass("ecpay-dissable"); | |
| var e = $(this).closest(".ecpay-add-box"); | |
| e.find(".ecpay-btnline").hide(), e.find(".ecpay-card-status-line > .ecpay-red").hide(), e.find(".ecpay-cc-card").parent("dd").find(".ecpay-card-status-line > .ecpay-red").css("display", "").css("visibility", "hidden"), e.find(".ecpay-cc-card").parent("dd").find(".ecpay-card-status-line > .ecpay-card-detail").html("").append("<i></i>"), e.find(".ecpay-cc-card,.ecpay-date,.ecpay-cc-cvc").val(""), e.find(".ecpay-card-info-tab,.ecpay-btn-box").show() | |
| }), $(".ecpay-add-box > .ecpay-btn-box > .ecpay-Cancel", t).bind("click", function() { | |
| var e = $(this).closest(".ecpay-add-box"); | |
| e.find(".ecpay-card-info-tab,.ecpay-btn-box").hide(), e.find(".ecpay-btnline").show() | |
| }), $(".ecpay-add-box > .ecpay-btn-box > .ecpay-Add", t).bind("click", function() { | |
| var e = $(this).closest(".ecpay-add-box"); | |
| if (void 0 === c) return !1; | |
| if (!o(e)) return !1; | |
| var a = e.find(".ecpay-cc-card").val().replace(/\s*/g, ""), | |
| t = e.find(".ecpay-date").val().replace(/\s*/g, "").split("/"), | |
| n = e.find(".ecpay-cc-cvc").val(), | |
| i = { | |
| Token: c, | |
| CardInfo: { | |
| CardNumber: a, | |
| CardValidYY: t[1], | |
| CardValidMM: t[0], | |
| CardCVV2: n, | |
| BindingCard: 1 | |
| } | |
| }, | |
| d = forge.util.encode64(forge.random.getBytesSync(32)).substr(0, 32), | |
| r = forge.util.encode64(forge.random.getBytesSync(16)).substr(0, 16), | |
| s = { | |
| Data: u(JSON.stringify(i), d, r) | |
| }, | |
| p = y(JSON.stringify({ | |
| key: d, | |
| iv: r | |
| })), | |
| l = f(JSON.stringify(s)); | |
| ! function(e, a, t, n) { | |
| g("/Payment/BindCard", e, a, t, n) | |
| }(s, p, l, function(e, a) { | |
| v("add", e) | |
| }) | |
| }), n = "", $(".ecpay-cc-card", t).bind("keyup keydown blur", function() { | |
| var e = $(this), | |
| c = e.closest(".ecpay-card-info-tab"), | |
| i = e.val().replace(/\s*/g, "").replace(/\-*/g, ""); | |
| if (i != n) { | |
| n = i, e.parent("dd").find(".ecpay-card-status-line > .ecpay-red").css("display", "").css("visibility", "hidden"); | |
| var d = 15, | |
| r = ""; | |
| if (RegExp(/^\d*$/).test(i)) { | |
| i.length >= 4 && (RegExp(/^4\d{3}$/).test(i.substr(0, 4)) ? (d = 16, r = "visa", i = i.substr(0, d), e.attr("maxlength", d + 3), e.val(i.replace(/(\d{4})(?=\d)/g, "$1 ").trim()), c.find(".ecpay-cc-cvc").attr("maxlength", 3).attr("pattern", "^\\d{3}$")) : RegExp(/^((5[1-5]\d{2})|(2(22[1-9]|[3-6]\d{2}|7[01]\d|720)))$/).test(i.substr(0, 4)) ? (d = 16, r = "master", i = i.substr(0, d), e.attr("maxlength", d + 3), e.val(i.replace(/(\d{4})(?=\d)/g, "$1 ").trim()), c.find(".ecpay-cc-cvc").attr("maxlength", 3).attr("pattern", "^\\d{3}$")) : RegExp(/^((35(2[89]|[3-8]\d))|1800|2131)$/).test(i.substr(0, 4)) ? (d = 16, r = "jcb", i = i.substr(0, d), e.attr("maxlength", d + 3), e.val(i.replace(/(\d{4})(?=\d)/g, "$1 ").trim()), c.find(".ecpay-cc-cvc").attr("maxlength", 3).attr("pattern", "^\\d{3}$")) : RegExp(/^(3[47])\d{2}$/).test(i.substr(0, 4)) ? (d = 15, r = "aecard", i = i.substr(0, d), e.attr("maxlength", d + 2), e.val(i.replace(/^(\d{4})(\d{0,6})(\d{0,5})$/g, "$1 $2 $3").trim()), c.find(".ecpay-cc-cvc").attr("maxlength", 4).attr("pattern", "^\\d{4}$")) : RegExp(/^62\d{2}$/).test(i.substr(0, 4)) ? (d = 19, r = "upay", i = i.substr(0, d), e.attr("maxlength", d + 4), e.val(i.replace(/(\d{4})(?=\d)/g, "$1 ").trim()), c.find(".ecpay-cc-cvc").attr("maxlength", 3).attr("pattern", "^\\d{3}$")) : (d = 16, i = i.substr(0, d), e.attr("maxlength", d + 3), e.val(i.replace(/(\d{4})(?=\d)/g, "$1 ").trim()), c.find(".ecpay-cc-cvc").attr("maxlength", 3).attr("pattern", "^\\d{3}$"))); | |
| var s = e.parent("dd").find(".ecpay-card-status-line > .ecpay-card-detail"), | |
| p = c.find(".ecpay-pl-icon-type span"); | |
| "upay" != r && i.length < d || "upay" == r && i.length < 16 ? (s.empty(), l = !1) : t.find(".ecpay-pl-icon-type span").length > 0 && (19 == d ? i.length >= 16 : i.length == d) ? (function(e, t) { | |
| $.ajax({ | |
| url: a + "/Payment/GetCardKind", | |
| data: { | |
| CardNo: e.replace(/\s*/g, "") | |
| }, | |
| type: "post", | |
| dataType: "json", | |
| success: function(e, a, n) { | |
| t(e, null) | |
| }, | |
| error: function(e, a, n) { | |
| t(null, e.statusText) | |
| } | |
| }) | |
| }(i, function(e, a) { | |
| if (null != e) { | |
| l = !1; | |
| var n = e.BINCodeInfo; | |
| null != n ? (s.empty().append("<i></i>").children("i").addClass("ecpay-" + n.CardType), "" != n.IssuingBank && (s.children("i").after(n.IssuingBank), l = !0)) : "0" == t.find(".ecpay-ForeignCard").text() ? (s.empty().append("<i></i>").children("i").addClass("ecpay-" + r), s.children("i").after(c.find(".ecpay-CardNoAcceptMsg").text()), l = !1) : "1" == t.find(".ecpay-ForeignCard").text() && p.hasClass("ecpay-" + r) ? (s.empty().append("<i></i>").children("i").addClass("ecpay-" + r), l = !0) : (s.empty().append("<i></i>").children("i").addClass("ecpay-" + r), s.children("i").after(c.find(".ecpay-CardNoSupportMsg").text()), l = !1) | |
| } else s.children("i").after(a) | |
| }), c.find(".ecpay-cc-cvc").val("")) : (s.empty().append("<i></i>"), s.children("i").after(c.find(".ecpay-CardNoSupportMsg").text()), l = !1) | |
| } | |
| } | |
| }), $(".ecpay-date", t).bind("keyup keydown blur", function() { | |
| var e = $(this); | |
| e.parent("dd").find(".ecpay-card-status-line > .ecpay-red").hide(), e.val(e.val().replace(/^(0[1-9]|1[0-2])(\/)(\d{2})$/g, "$1 $2 $3")) | |
| }), $(".ecpay-cc-cvc", t).bind("keyup keydown blur", function() { | |
| $(this).parent("dd").find(".ecpay-card-status-line > .ecpay-red").hide() | |
| }) | |
| } | |
| }; |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| var Func = function() { | |
| "use strict"; | |
| var e, a = $("#ECPayPayment"), | |
| t = !1; | |
| this.Init = function(a) { | |
| e = a, n(), i(), c(), d() | |
| }, this.ChkPayData = function() { | |
| var e = !0, | |
| n = $(".ecpay-pl-act", a), | |
| i = n.attr("id"); | |
| if (void 0 === i) e = !1; | |
| else if ($.inArray(i, ["CreditCard", "CreditInstallment", "Period", "Travel", "FlexibleInstallment"]) >= 0) { | |
| var c = $(".ecpay-cc-card", n).parent("dd").find(".ecpay-card-status-line > .ecpay-red"); | |
| t ? c.css("visibility", "hidden") : c.css("visibility", "visible"); | |
| var d = $(".ecpay-date", n), | |
| r = d.parent("dd").find(".ecpay-card-status-line > .ecpay-red"), | |
| l = /^(0[1-9]|1[0-2])(\/)(\d{2})$/g, | |
| s = d.val().replace(/\s*/g, ""); | |
| if (l.test(s)) { | |
| var p = parseInt(s.split("/")[1]), | |
| y = parseInt(s.split("/")[0]), | |
| f = new Date, | |
| o = parseInt(f.getFullYear().toString().substr(2, 2)), | |
| u = f.getMonth() + 1; | |
| p > o || p == o && y >= u ? r.hide() : r.show() | |
| } else r.show(); | |
| var h = $(".ecpay-cc-cvc", n), | |
| v = h.parent("dd").find(".ecpay-card-status-line > .ecpay-red"); | |
| (l = 4 == h.attr("maxlength") ? /^\d{4}$/ : /^\d{3}$/).test(h.val()) ? v.hide() : v.show(), 0 == n.find(".ecpay-CardList option:selected").val() && "visible" == c.css("visibility") ? e = !1 : n.find(".ecpay-cit-item-box .ecpay-cit-item:visible .ecpay-card-status-line > .ecpay-red:visible").each(function() { | |
| return e = !1, !1 | |
| }) | |
| } else if ("ATM" == i) { | |
| var g = n.find(".ecpay-card-status-line > .ecpay-red"); | |
| 0 == n.find(".ecpay-ATMBank :selected").val() ? (g.show(), e = !1) : g.hide() | |
| } | |
| return e | |
| }, this.CreatePayData = function(e) { | |
| var t, n, i = $(".ecpay-pl-act", a), | |
| c = i.attr("id"); | |
| return $.inArray(c, ["CreditCard", "CreditInstallment", "Period", "Travel", "FlexibleInstallment"]) >= 0 ? n = 0 == (t = i.find(".ecpay-CardList option:selected").val().split(",")[0]) ? r(e) : l(t) : (t = i.find(".ecpay-payToken").text(), n = l(t)), { | |
| PayType: c, | |
| PayToken: t, | |
| Data: JSON.stringify(n) | |
| } | |
| }; | |
| var n = function() { | |
| var e = ""; | |
| $(".ecpay-CardList", a).bind("change", function() { | |
| var t = $(".ecpay-pl-act", a), | |
| n = $(this); | |
| t.find(".ecpay-card-status-line > .ecpay-red").hide(), t.find(".ecpay-cc-card").parent("dd").find(".ecpay-card-status-line > .ecpay-red").css("display", "").css("visibility", "hidden"), t.find(".ecpay-cc-card").parent("dd").find(".ecpay-card-status-line > .ecpay-card-detail").empty().append("<i></i>"), 0 == $(" > option:selected", n).val() ? (t.find(".ecpay-cc-card").parent().show(), t.find(".ecpay-date").val("").closest("dl").show(), t.find(".ecpay-cc-cvc").val("").closest("dl").css("width", ""), t.find(".ecpay-cc-cvc").attr("maxlength", 3).attr("pattern", "^\\d{3}$"), t.find(".ecpay-pay-check").show()) : (t.find(".ecpay-cc-card").parent().hide(), t.find(".ecpay-date").val("").closest("dl").hide(), t.find(".ecpay-cc-cvc").val("").closest("dl").css("width", "100%"), "975" == $(" > option:selected", n).val().split(",")[1] ? t.find(".ecpay-cc-cvc").attr("maxlength", 4).attr("pattern", "^\\d{4}$") : t.find(".ecpay-cc-cvc").attr("maxlength", 3).attr("pattern", "^\\d{3}$"), t.find(".ecpay-pay-check").hide()), t.find(".ecpay-cc-cvc").trigger("keyup"), e = "" | |
| }), $(".ecpay-cc-card", a).bind("keyup keydown blur", function() { | |
| var n = $(this), | |
| i = $(".ecpay-pl-act", a), | |
| c = n.val().replace(/\s*/g, "").replace(/\-*/g, ""); | |
| if (c != e) { | |
| e = c, n.parent("dd").find(".ecpay-card-status-line > .ecpay-red").css("visibility", "hidden"); | |
| var d = 16, | |
| r = ""; | |
| if (RegExp(/^\d*$/).test(c)) { | |
| c.length > 4 && (RegExp(/^4\d{3}$/).test(c.substr(0, 4)) ? (d = 16, r = "visa", c = c.substr(0, d), n.attr("maxlength", d + 3), n.val(c.replace(/(\d{4})(?=\d)/g, "$1 ").trim()), i.find(".ecpay-cc-cvc").attr("maxlength", 3).attr("pattern", "^\\d{3}$")) : RegExp(/^((5[1-5]\d{2})|(2(22[1-9]|[3-6]\d{2}|7[01]\d|720)))$/).test(c.substr(0, 4)) ? (d = 16, r = "master", c = c.substr(0, d), n.attr("maxlength", d + 3), n.val(c.replace(/(\d{4})(?=\d)/g, "$1 ").trim()), i.find(".ecpay-cc-cvc").attr("maxlength", 3).attr("pattern", "^\\d{3}$")) : RegExp(/^((35(2[89]|[3-8]\d))|1800|2131)$/).test(c.substr(0, 4)) ? (d = 16, r = "jcb", c = c.substr(0, d), n.attr("maxlength", d + 3), n.val(c.replace(/(\d{4})(?=\d)/g, "$1 ").trim()), i.find(".ecpay-cc-cvc").attr("maxlength", 3).attr("pattern", "^\\d{3}$")) : RegExp(/^(3[47])\d{2}$/).test(c.substr(0, 4)) ? (d = 15, r = "aecard", c = c.substr(0, d), n.attr("maxlength", d + 2), n.val(c.replace(/^(\d{4})(\d{0,6})(\d{0,5})$/g, "$1 $2 $3").trim()), i.find(".ecpay-cc-cvc").attr("maxlength", 4).attr("pattern", "^\\d{4}$")) : RegExp(/^62\d{2}$/).test(c.substr(0, 4)) ? (d = 19, r = "upay", c = c.substr(0, d), n.attr("maxlength", d + 4), n.val(c.replace(/(\d{4})(?=\d)/g, "$1 ").trim()), i.find(".ecpay-cc-cvc").attr("maxlength", 3).attr("pattern", "^\\d{3}$")) : (d = 16, c = c.substr(0, d), n.attr("maxlength", d + 3), n.val(c.replace(/(\d{4})(?=\d)/g, "$1 ").trim()), i.find(".ecpay-cc-cvc").attr("maxlength", 3).attr("pattern", "^\\d{3}$"))); | |
| var l = i.find(".ecpay-pl-icon-type span"); | |
| (l.length > 0 && 19 == d ? c.length >= 16 : c.length == d) ? (s(c, function(e, c) { | |
| var d = n.parent("dd").find(".ecpay-card-status-line > .ecpay-card-detail"); | |
| if (null != e) { | |
| t = !1; | |
| var s = e.BINCodeInfo; | |
| null != s ? (d.empty().append("<i></i>").children("i").addClass("ecpay-" + s.CardType), "" != s.IssuingBank && (d.children("i").after(s.IssuingBank), t = !0)) : "0" == a.find(".ecpay-ForeignCard").text() ? (d.empty().append("<i></i>").children("i").addClass("ecpay-" + r), d.children("i").after(i.find(".ecpay-CardNoAcceptMsg").text()), t = !0) : "1" == a.find(".ecpay-ForeignCard").text() && l.hasClass("ecpay-" + r) ? (d.empty().append("<i></i>").children("i").addClass("ecpay-" + r), t = !0) : (d.empty().append("<i></i>").children("i").addClass("ecpay-" + r), d.children("i").after(i.find(".ecpay-CardNoSupportMsg").text()), t = !0) | |
| } else d.children("i").after(c) | |
| }), i.find(".ecpay-cc-cvc").val("")) : t = !1 | |
| } | |
| } | |
| }), $(".ecpay-date", a).bind("keyup keydown blur", function() { | |
| var e = $(this); | |
| e.parent("dd").find(".ecpay-card-status-line > .ecpay-red").hide(), e.val(e.val().replace(/^(0[1-9]|1[0-2])(\/)(\d{2})$/g, "$1 $2 $3")) | |
| }), $(".ecpay-cc-cvc", a).bind("keyup keydown blur", function() { | |
| $(this).parent("dd").find(".ecpay-card-status-line > .ecpay-red").hide() | |
| }), $(".ecpay-Installment", a).bind("change", function() { | |
| var e = $(".ecpay-pl-act", a), | |
| t = $(this).find("option:selected"), | |
| n = JSON.parse(e.find(".ecpay-SupportList").text()); | |
| if (null !== n) { | |
| var i = n.filter(function(e) { | |
| return e.Number == t.val() | |
| }).map(function(e) { | |
| return e.BankList | |
| })[0]; | |
| t.closest("dl").find(".ecpay-card-info .ecpay-tp-txt").text(i.map(function(e) { | |
| return e.Name | |
| }).join("/")); | |
| var c = $(".ecpay-CardList", e); | |
| c.find("option").filter(function() { | |
| return "0" != $(this).val() | |
| }).each(function() { | |
| var e = $(this); | |
| i.map(function(e) { | |
| return e.Code | |
| }).filter(function(a) { | |
| return 0 != e.length && a == e.val().split(",")[1] | |
| }).length > 0 ? (e.show(), y() && e.parent().is("span") && e.unwrap()) : (e.hide(), y() && (e.parent().is("span") || e.wrap("<span>").parent().hide())) | |
| }); | |
| var d = $(" > option", c).filter(function() { | |
| return "block" == $(this).css("display") || "inline" == $(this).css("display") | |
| }); | |
| d.first().attr("selected", !0), 1 == d.length && "0" == d.val() ? c.parent().parent().hide() : "0" != d.val() && e.find(".ecpay-cc-card").parent().hide() | |
| } | |
| }) | |
| }, | |
| i = function() { | |
| $(".ecpay-ATMBank", a).bind("change", function() { | |
| $(this).parent().parent().next().find(".ecpay-card-status-line > .ecpay-red").hide() | |
| }) | |
| }, | |
| c = function() { | |
| if (1 == a.find(".ecpay-pay-list").length) $(".ecpay-pl-intro", a).on("click", function() { | |
| var e = $(this).parent("li"); | |
| if (e.hasClass("ecpay-pl-act") || e.addClass("ecpay-pl-act").siblings("li").removeClass("ecpay-pl-act"), !$(this).parent("li").hasClass("ecpay-pl-act")) return !1; | |
| var t = $(".ecpay-pl-act", a), | |
| n = t.attr("id"); | |
| t.find(".ecpay-card-status-line > .ecpay-red").hide(); | |
| var i = $(".ecpay-CardList", t); | |
| "CreditInstallment" == n ? t.find(".ecpay-Installment").trigger("change") : (i.find("option:selected").is(":hidden") && i.find("option").attr("selected", !1).filter(function() { | |
| return "block" == $(this).css("display") || "inline" == $(this).css("display") | |
| }).first().attr("selected", !0), 1 == i.find("option").length && "0" == i.find(":selected").val() && i.parent().parent().hide()), i.trigger("change") | |
| }); | |
| else { | |
| var e = $(".ecpay-CardList", a); | |
| e.find("option:selected").is(":hidden") && e.find("option").attr("selected", !1).filter(function() { | |
| return "block" == $(this).css("display") || "inline" == $(this).css("display") | |
| }).first().attr("selected", !0), 1 == e.find("option").length && "0" == e.find(":selected").val() && e.parent().parent().hide(), e.trigger("change") | |
| } | |
| }, | |
| d = function() { | |
| a.find(".ecpay-pl-intro").trigger("click"), a.find(".ecpay-pay-list > li").length > 1 && ($(".ecpay-pay-list > li").first().addClass("ecpay-pl-act"), $(".ecpay-pay-list > li").last().removeClass("ecpay-pl-act")) | |
| }, | |
| r = function(e) { | |
| var t = $(".ecpay-pl-act", a), | |
| n = t.find(".ecpay-cc-card").val().replace(/\s/g, ""), | |
| i = t.find(".ecpay-date").val().replace(/\s/g, "").split("/"), | |
| c = t.find(".ecpay-cc-cvc").val(), | |
| d = t.attr("id"); | |
| if ("FlexibleInstallment" == d) var r = 0, | |
| l = t.find(".ecpay-FlexibleInstallment option:selected").val(); | |
| if ("CreditInstallment" == d) r = t.find(".ecpay-Installment option:selected").val(), l = 0; | |
| var s = "true" == t.find(".ecpay-pay-check :checked").val() ? 1 : 0; | |
| return { | |
| Token: e, | |
| CardInfo: { | |
| CardNumber: n, | |
| CardValidYY: i[1], | |
| CardValidMM: i[0], | |
| CardCVV2: c, | |
| BindingCard: s | |
| }, | |
| CreditInstallment: r, | |
| FlexibleInstallment: l | |
| } | |
| }, | |
| l = function(e) { | |
| var t = $(".ecpay-pl-act", a), | |
| n = t.attr("id"), | |
| i = 0, | |
| c = 0; | |
| return "FlexibleInstallment" == n && (c = t.find(".ecpay-FlexibleInstallment option:selected").val()), "CreditInstallment" == n && (i = t.find(".ecpay-Installment option:selected").val()), { | |
| PayToken: e, | |
| CreditInstallment: i, | |
| ATMBankCode: t.find(".ecpay-ATMBank option:selected").val(), | |
| CardCVV2: t.find(".ecpay-cc-cvc").val(), | |
| FlexibleInstallment: c | |
| } | |
| }, | |
| s = function(a, t) { | |
| p(e + "/Payment/GetCardKind", { | |
| CardNo: a | |
| }, function(e, a, n) { | |
| t(e, null) | |
| }, function(e, a, n) { | |
| t(null, "System error") | |
| }) | |
| }, | |
| p = function(e, a, t, n) { | |
| $.ajax({ | |
| url: e, | |
| data: a, | |
| type: "post", | |
| dataType: "json", | |
| success: t, | |
| error: n | |
| }) | |
| }, | |
| y = function() { | |
| return navigator.userAgent.indexOf("MSIE") > 0 || navigator.userAgent.indexOf("Trident") > 0 | |
| } | |
| }, | |
| Pay = new Func; |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| if ("undefined" == typeof jQuery) throw new Error("ECPG sdk's JavaScript requires jQuery"); | |
| ! function(e) { | |
| "use strict"; | |
| var n = jQuery.fn.jquery.split(" ")[0].split("."); | |
| if (n[0] < 3 && n[1] < 4 || 3 == n[0] && 4 == n[1] && n[2] < 1) throw new Error("ECPG sdk's JavaScript requires jQuery version 3.4.1 or higher") | |
| }(); | |
| var ECP = function() { | |
| "use strict"; | |
| var e, n, t, r, a, i = "1.0.0", | |
| o = $("#ECPayPayment"), | |
| u = "zh-TW", | |
| f = "", | |
| s = "", | |
| l = 1, | |
| c = "https://ecpg-stage.ecpay.com.tw", | |
| y = "https://ecpg.ecpay.com.tw"; | |
| function p(e) { | |
| var t = n.encrypt(e); | |
| return forge.util.encode64(t) | |
| } | |
| function d(n) { | |
| var t = e.decrypt(forge.util.decode64(n)), | |
| r = forge.util.decodeUtf8(t); | |
| return JSON.parse(r) | |
| } | |
| function g(n) { | |
| var t = forge.md.sha256.create(); | |
| return t.update(n, "utf8"), forge.util.encode64(e.sign(t)) | |
| } | |
| function S(e, n, t) { | |
| var r = forge.cipher.createCipher("AES-CBC", n); | |
| return r.start({ | |
| iv: t | |
| }), r.update(forge.util.createBuffer(e)), r.finish(), forge.util.encode64(r.output.data) | |
| } | |
| function v(e, n, t) { | |
| var r = forge.cipher.createDecipher("AES-CBC", forge.util.encodeUtf8(n)); | |
| r.start({ | |
| iv: forge.util.encodeUtf8(t) | |
| }), r.update(forge.util.createBuffer(forge.util.decode64(e))), r.finish(); | |
| var a = r.output.data; | |
| return JSON.parse(decodeURIComponent(a)) | |
| } | |
| function h(e, n, t, r, i) { | |
| $.ajax({ | |
| url: a + e, | |
| type: "post", | |
| beforeSend: t, | |
| cache: !1, | |
| contentType: "application/json", | |
| data: JSON.stringify(n), | |
| dataType: "json", | |
| success: r, | |
| error: i | |
| }) | |
| } | |
| function P(e) { | |
| return e.split("-----")[2] | |
| } | |
| function r() { | |
| var e = Date.now(); | |
| return "undefined" != typeof performance && "function" == typeof performance.now && (e += performance.now()), "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, function(n) { | |
| var t = (e + 16 * Math.random()) % 16 | 0; | |
| return e = Math.floor(e / 16), ("x" === n ? t : 3 & t | 8).toString(16) | |
| }) | |
| } | |
| function m() { | |
| var e = navigator.userAgent, | |
| n = ""; | |
| n = e.indexOf("Mac OS X") > -1 ? (e.match(/OS X [\d._]*/gi) + "").replace(/[^0-9|_.]/gi, "").replace(/_/gi, ".") : e.indexOf("Android") > -1 || e.indexOf("Linux") > -1 ? e.substr(e.indexOf("Android") + 8, e.indexOf(";", e.indexOf("Android")) - e.indexOf("Android") - 8) : "Unknown"; | |
| var t = { | |
| DeviceInfo: e, | |
| IsSimulator: 0, | |
| OS: 0, | |
| OSVersion: "" == n ? "Unknown" : n, | |
| Vers: i | |
| }; | |
| return JSON.stringify(t) | |
| } | |
| function x(e, n, i, o) { | |
| e.setRequestHeader("Language", o), e.setRequestHeader("UUID", r), e.setRequestHeader("AppName", a), e.setRequestHeader("AppInfo", m()), e.setRequestHeader("KeyInfo", n), e.setRequestHeader("Signature", i), e.setRequestHeader("KeyID", t) | |
| } | |
| function T(e, t, r) { | |
| if (1 == e.TransCode) { | |
| var a = t.getResponseHeader("Signature"); | |
| if (null != a) | |
| if (function(e, t) { | |
| var r = forge.md.sha256.create(); | |
| return r.update(e, "utf8"), n.verify(r.digest().getBytes(), forge.util.decode64(t)) | |
| }(JSON.stringify(e), a)) { | |
| var i = t.getResponseHeader("KeyInfo"); | |
| if (null != i) { | |
| var o = d(i); | |
| if (null != o) { | |
| var u = v(e.Data, o.key, o.iv); | |
| null != u ? r(u, null) : r(null, "The parameter [Data] decrypt fail") | |
| } else r(null, "The parameter [KeyInfo] decrypt fail") | |
| } else r(null, "The parameter [KeyInfo] cannot be empty") | |
| } else r(null, "Signature verify error"); | |
| else r(null, "The parameter [Signature] cannot be empty") | |
| } else r(null, e.TransMsg) | |
| } | |
| function C(e, n, t, r) { | |
| r(null, e.statusText) | |
| } | |
| function I(i) { | |
| r = r(); | |
| var o = forge.pki.rsa.generateKeyPair({ | |
| bits: 1024, | |
| e: 65537 | |
| }); | |
| e = o.privateKey, | |
| function(e, n) { | |
| h("/Gateway/ExchangeKey", { | |
| clientPublicKey: P(e) | |
| }, function(e) { | |
| e.setRequestHeader("UUID", r), e.setRequestHeader("AppName", a), e.setRequestHeader("AppInfo", m()) | |
| }, function(e, t, r) { | |
| if (1 == e.TransCode) { | |
| var a = r.getResponseHeader("KeyInfo"); | |
| if (null != a) { | |
| var i = d(a); | |
| if (null != i) { | |
| var o = v(e.Data, i.key, i.iv); | |
| if (null != o) | |
| if (1 == o.RtnCode) { | |
| var u = { | |
| ServerPublicKey: forge.pki.publicKeyFromPem("-----BEGIN PUBLIC KEY-----" + o.ServerPublicKey + "-----END PUBLIC KEY-----"), | |
| KeyID: o.KeyID | |
| }; | |
| n(u, null) | |
| } else n(null, o.RtnMsg); | |
| else n(null, "The parameter [Data] decrypt fail") | |
| } else n(null, "The parameter [KeyInfo] decrypt fail") | |
| } else n(null, "The parameter [KeyInfo] cannot be empty") | |
| } else n(null, e.TransMsg) | |
| }, function(e, t, r) { | |
| C(e, 0, 0, n) | |
| }) | |
| }(forge.pki.publicKeyToPem(o.publicKey).replace(/\r\n/g, ""), function(e, r) { | |
| void 0 === i || null === r ? (n = e.ServerPublicKey, t = e.KeyID, void 0 !== i && i(r)) : i(r) | |
| }) | |
| } | |
| this.ServerType = { | |
| Stage: "STAGE", | |
| Prod: "PROD" | |
| }, this.Language = { | |
| zhTW: "zh-TW", | |
| enUS: "en-US" | |
| }, this.initialize = function(e, n, t) { | |
| if (void 0 === e) throw "ServerType Error: ServerType is not defined"; | |
| switch (f = e.toUpperCase()) { | |
| case this.ServerType.Stage: | |
| a = c; | |
| break; | |
| default: | |
| a = y | |
| } | |
| if (void 0 !== n && "" !== n && null !== n || (n = l), 1 == (l = n) && $.ajax({ | |
| type: "GET", | |
| url: a + "/Payment/Loading", | |
| success: function(e) { | |
| $("#ECPayPayment").html(e) | |
| } | |
| }), "undefined" == typeof forge) { | |
| var r = a + "/Scripts/forge-0.10.0.min.js"; | |
| $.getScript(r).done(function() { | |
| I(t) | |
| }).fail(function() { | |
| throw new Error("Forge load failed!!") | |
| }) | |
| } else I(t) | |
| }, this.createPayment = function(c, y, d) { | |
| if ("" === f) throw "Initialize Error: Initialize is not setup"; | |
| if (void 0 === y) throw "Language Error: Language is not defined"; | |
| if (!new RegExp(/^[0-9a-z]{32}$/).test(c)) throw "Initialize Error: Invalid Token Format"; | |
| u = y; | |
| var v = { | |
| Token: s = c | |
| }, | |
| P = forge.util.encode64(forge.random.getBytesSync(32)).substr(0, 32), | |
| m = forge.util.encode64(forge.random.getBytesSync(16)).substr(0, 16), | |
| I = { | |
| Data: S(JSON.stringify(v), P, m) | |
| }; | |
| ! function(e, n, t, r, a) { | |
| h("/Gateway/GetUIInfo", e, function(e) { | |
| x(e, n, t, a) | |
| }, function(e, n, t) { | |
| T(e, t, r) | |
| }, function(e, n, t) { | |
| C(e, n, t, r) | |
| }) | |
| }(I, p(JSON.stringify({ | |
| key: P, | |
| iv: m | |
| })), g(JSON.stringify(I)), function(f, c) { | |
| null != f ? 1 == f.RtnCode ? function(f, l, c, y) { | |
| $.ajax({ | |
| url: a + "/Payment/UIProcess", | |
| type: "post", | |
| beforeSend: function(e) { | |
| e.setRequestHeader("Language", y) | |
| }, | |
| cache: !1, | |
| contentType: "application/json", | |
| data: JSON.stringify(f) | |
| }).done(function(f) { | |
| if (1 == c && $("#ecpay-loading").hide(), o.html(f), "pay" == $(".ecpay-JsType").text()); | |
| else if ("cardinfo" == $(".ecpay-JsType").text()) { | |
| var y = document.createElement("script"); | |
| y.type = "text/javascript", y.src = a + "/Scripts/Payment/actions." + $(".ecpay-JsType").text() + ".min.js?v=" + (new Date).getMonth().toString() + (new Date).getDate().toString() + (new Date).getHours().toString(), $("head")[0].appendChild(y), y.addEventListener("load", function() { | |
| var o = new Func({ | |
| sdkVersion: i, | |
| token: s, | |
| language: u, | |
| cliPriKey: e, | |
| serPubKey: n, | |
| keyID: t, | |
| uuid: r | |
| }); | |
| o.Init(a) | |
| }) | |
| } | |
| l(null) | |
| }) | |
| }(f, d, l, y) : d(f.RtnMsg) : d(c) | |
| }, y) | |
| }, this.getPayToken = function(e) { | |
| if ("" === f) throw "Initialize Error: Initialize is not setup"; | |
| if (Pay.ChkPayData()) { | |
| var n = Pay.CreatePayData(s), | |
| t = forge.util.encode64(forge.random.getBytesSync(32)).substr(0, 32), | |
| r = forge.util.encode64(forge.random.getBytesSync(16)).substr(0, 16), | |
| a = { | |
| Data: S(n.Data, t, r) | |
| }, | |
| i = p(JSON.stringify({ | |
| key: t, | |
| iv: r | |
| })), | |
| o = g(JSON.stringify(a)), | |
| l = { | |
| PayToken: null, | |
| PaymentType: n.PayType | |
| }; | |
| 0 == n.PayToken ? function(e, n, t, r) { | |
| h("/Gateway/GetPayToken", e, function(e) { | |
| x(e, n, t, u) | |
| }, function(e, n, t) { | |
| T(e, t, r) | |
| }, function(e, n, t) { | |
| C(e, n, t, r) | |
| }) | |
| }(a, i, o, function(n, t) { | |
| null != n ? 1 == n.RtnCode ? (l.PayToken = n.PayToken, e(l, null)) : e(l, n.RtnMsg) : e(l, t) | |
| }) : $.inArray(n.PayType, ["CreditCard", "CreditInstallment", "Period", "Travel", "ATM"]) >= 0 ? function(e, n, t, r) { | |
| h("/Gateway/BindPaymentInfo", e, function(e) { | |
| x(e, n, t, u) | |
| }, function(e, n, t) { | |
| T(e, t, r) | |
| }, function(e, n, t) { | |
| C(e, n, t, r) | |
| }) | |
| }(a, i, o, function(t, r) { | |
| null != t ? 1 == t.RtnCode ? (l.PayToken = n.PayToken, e(l, null)) : e(l, t.RtnMsg) : e(l, r) | |
| }) : (l.PayToken = n.PayToken, e(l, null)) | |
| } else e(null, null) | |
| }, this.getLanguage = function() { | |
| return u | |
| }, this.CreateApplePayment = function(e) { | |
| return function(e) { | |
| try { | |
| var n = forge.util.encode64(forge.random.getBytesSync(32)).substr(0, 32), | |
| t = forge.util.encode64(forge.random.getBytesSync(16)).substr(0, 16), | |
| r = ECApplePay.ObjAppleSession(), | |
| a = new ApplePaySession(2, r); | |
| a.onvalidatemerchant = function(e) { | |
| var r, i, o, f = { | |
| Data: S(ECApplePay.CreateMAuthData(e.validationURL), n, t) | |
| }, | |
| s = p(JSON.stringify({ | |
| key: n, | |
| iv: t | |
| })), | |
| l = g(JSON.stringify(f)); | |
| r = s, i = l, o = function(e, n) { | |
| null != e && 1 == e.RtnCode ? a.completeMerchantValidation(e.AppleSession) : a.completeMerchantValidation("") | |
| }, h("/Gateway/ApplePayValidate", f, function(e) { | |
| x(e, r, i, u) | |
| }, function(e, n, t) { | |
| T(e, t, o) | |
| }, function(e, n, t) { | |
| C(e, 0, 0, o) | |
| }) | |
| }, a.onpaymentauthorized = function(r) { | |
| var i = { | |
| Data: S(ECApplePay.CreatePayAuthData(JSON.stringify(r.payment)), n, t) | |
| }, | |
| o = p(JSON.stringify({ | |
| key: n, | |
| iv: t | |
| })), | |
| f = g(JSON.stringify(i)); | |
| ! function(e, n, t, r) { | |
| h("/Gateway/ApplePayPayment", e, function(e) { | |
| x(e, n, t, u) | |
| }, function(e, n, t) { | |
| T(e, t, r) | |
| }, function(e, n, t) { | |
| C(e, 0, 0, r) | |
| }) | |
| }(i, o, f, function(n, t) { | |
| if (null != n && 1 == n.RtnCode) a.completePayment(ApplePaySession.STATUS_SUCCESS); | |
| else if (a.completePayment(ApplePaySession.STATUS_FAILURE), null == n) return e(null, t), !1; | |
| e(n, null) | |
| }) | |
| }, a.oncancel = function(n) { | |
| a = null, e(null, "Cancel") | |
| }, a.begin() | |
| } catch (e) {} | |
| }(e), !1 | |
| } | |
| }, | |
| ECPay = new ECP; | |
| ECP.prototype = function() { | |
| return this.Language | |
| }, ECP.prototype = function() { | |
| return this.ServerType | |
| }; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment