A Cielo integrou a Wake utilizando o gateway Multiadquirente Cielo (Braspag). Portanto, antes de iniciar a sua integração, valide com seu gestor de contas Cielo qual é a versão da sua integração.
A integração disponibiliza 3 opções de antifraude, sendo elas:
- Antifraude Clearsale: Antifraude nativo Clearsale utilizado dentro do painel Wake
- Antifraude Manual/Personalizado: Permite que os pedidos pagos com cartão de crédito sejam processados em duas etapas: Autorização e Captura.
- Antifraude integrado diretamente na Cielo: É um antifraude integrado direto no conector de pagamentos e deve ser feito a contratação diretamente com o parceiro
A configuração da Cielo é feita no Painel Administrativo da plataforma Wake Commerce) em 3 etapas:
- Formas de Pagamento
- Grupos de Pagamento e Parcelamentos
- Gestor de script para o uso do antifraude Cielo (etapa necessária somente para lojistas que utilizam antifraude Cielo)
1ª Etapa - Configuração do Conector de Pagamento
No painel administrativo da plataforma acesse o menu Pagamentos >> Conectores de pagamento como mostrado abaixo:
Depois acesse o conector em >> Cielo>> "InstalarConfiguração" e preencha as informações:
Descrições dos campos dos métodos de pagamentos disponíveis:
A Cielo conta com duas opções de integração de cartão de crédito, sendo elas:
- Cartão de crédito sem antifraude integrado: Sem utilização de antifraude Cielo, caso não utilize um antifraude ou utilize Clear Sale nativo da plataforma ou antifraude personalizado. Para saber mais sobre as opções de antifraude da plataforma Wake Commerce, clique aqui (link para artigo de antifraude)
- Cartão de crédito com antifraude integrado: antifraude próprio da Cielo
Para saber mais sobre as opções e configurações acesse a documentação da Cielo clicando aqui.
- Cartão de crédito sem antifraude Cielo
Nome da Configuração (campo obrigatório): Identificação interna da configuração. Não será o nome apresentado ao consumidor (cliente final)
Provider (campo obrigatório): Insira o nome do provedor. Veja as possibilidades de provedores.
Integration (campo obrigatório): Por padrão deverá ser preenchido sempre com Gateway
MerchantId (campo obrigatório): Insira o identificador da loja.
MerchantKey (campo obrigatório): Insira a chave de autenticação. A chave é diferente para os ambientes de sandbox e produção, incluindo a chave de produção.
SaveCard: Insira True caso tenha Cartão Protegido.Insira False caso não tenha Cartão Protegido.
SOPClientId (campo obrigatório):Chave disponibilizada pela Cielo
SOPClientSecret (campo obrigatório): Chave disponibilizada pela Cielo
SoftDescriptor (campo opcional): Insira o nome da loja que aparecerá na fatura do cliente.Máximo de 13 caracteres incluindo espaços. Não aceita caracteres especiais.
Antifraud: Campo não necessário de preenchimento para cartões sem antifraude Cielo
AntifraudSequenceCriteria: Campo não necessário de preenchimento para cartões sem antifraude Cielo
AntifraudeProvider: Campo não necessário de preenchimento para cartões sem sem antifraude Cielo
CustomMDDs:Campo não necessário de preenchimento para cartões sem sem antifraude Cielo
UseVerifyCard (campo obrigatório): Configuração de validação de cartão e deve ser preenchida com True or False
AcceptInternationalCard (obrigatório): Configuração para aceitar ou não cartões Pré Pagos e deve ser preenchida com True or False
AcceptPrePaidCard (obrigatório): Configuração para aceitar ou não cartões internacionais e deve ser preenchida com True or False
CustomMDDs: Campo não necessário de preenchimento para cartões sem sem antifraude Cielo
MpiClientId (opcional, utilizado em caso de 3Ds): 3DS Client ID fornecido pela Cielo
MpiClientSecret (opcional, utilizado em caso de 3Ds: 3DS Client Secret fornecido pela Cielo
MpiMerchantName (opcional, utilizado em caso de 3Ds): Nome do Merchant
UseMpi (opcional, utilizado em caso de 3Ds): Campo utilizado para definir se o cliente usará os fluxos de 3DS autenticável ou Data Only. Obrigatório "True" para qualquer um dos fluxos.
MpiEstablishmentCode (opcional, utilizado em caso de 3Ds):Código do estabelecimento para utilização do 3DS, fornecido pela Cielo
MpiMCC (opcional, utilizado em caso de 3Ds): Código da categoria do estabelecimento para utilização do 3DS, fornecido pela Cielo
DataOnly (opcional, utilizado em caso de 3Ds):Campo utilizado para definir se o cliente usará o fluxo do Data Only, sem autenticação de dois fatores e com chargeback pela loja. Se configurado "True" as transações com 3DS, assumindo que o campo anterior também tenha sido configurado com "True", serão enviadas para o provedor para enriquecer os dados da venda, porém não terão autenticação exigida. Se configurado "False", e assumindo que o campo anterior foi configurado como "True", todas as transações exigirão autenticação de dois fatores.
Obs: O campo "UseMPI" deve ser configurado como "True" sempre que o cliente deseje utilizar o 3DS, seja ele autenticável ou DataOnly; Nos casos de "DataOnly" habilitados como "True", as transações não são autenticadas mas são enviadas ao provedor para enriquecimento de dados.
Ponto de atenção:
Confira a grafia dos valores para que não tenha erros na integração.
- Cartão de crédito com antifraude Cielo
Essa opção de antifraude utiliza dois parceiros, Cielo e Cybersource. Nesse caso, os campos Antifraud, AntifraudSequenceCriteria e AntifraudProvider são obrigatórios. Além disso, para cartões com antifraude integrado, é necessário incluir os scripts apropriados dentro da plataforma Wake (próximo passo).
Nome da Configuração (campo obrigatório): Identificação interna da configuração. Não será o nome apresentado ao consumidor (cliente final)
Provider (campo obrigatório): Insira o nome do provedor. Veja as possibilidades de provedores.
Integration (campo obrigatório): Por padrão deverá ser preenchido sempre com Gateway
MerchantId (campo obrigatório): Insira o identificador da loja.
MerchantKey (campo obrigatório): Insira a chave de autenticação. A chave é diferente para os ambientes de sandbox e produção, incluindo a chave de produção.
SaveCard: Insira True caso tenha Cartão Protegido.Insira False caso não tenha Cartão Protegido.
SOPClientId (campo obrigatório):Chave disponibilizada pela Cielo
SOPClientSecret (campo obrigatório): Chave disponibilizada pela Cielo
SoftDescriptor (campo opcional): Insira o nome da loja que aparecerá na fatura do cliente.Máximo de 13 caracteres incluindo espaços. Não aceita caracteres especiais.
Antifraud (campo obrigatório): Se tiver Antifraude integrado, escolha o fluxo de análise de fraude que deseja:
- AuthorizeFirst: a transação passa pela autorização antes de chegar na análise de fraude.
- AnalyseFirst: a transação é analisada pelo Antifraude antes de ser autorizada.
Se não tiver Antifraude integrado, deixe o campo em branco.
AntifraudSequenceCriteria (campo obrigatório): Se tiver Antifraude integrado, escolha a condição para análise de fraude:
- OnSuccess: a transação só será analisada pelo Antifraude se for autorizada.
- Always: a transação será analisada independentemente da autorização.
Se o fluxo escolhido em Antifraud for AnalyseFirst, AntifraudSequenceCriteria sempre será Always.
Se não tiver Antifraude integrado, deixe o campo em branco.
AntifraudeProvider (campo obrigatório):Se tiver Antifraude integrado, escolha o provider da análise de fraude: Cybersource ou Clearsale.
Se não tiver Antifraude integrado, deixe o campo em branco.
UseVerifyCard (campo obrigatório): Configuração de validação de cartão e deve ser preenchida com True or False
AcceptInternationalCard (obrigatório): Configuração para aceitar ou não cartões Pré Pagos e deve ser preenchida com True or False
AcceptPrePaidCard (obrigatório): Configuração para aceitar ou não cartões internacionais e deve ser preenchida com True or False
CustomMDDs (opcional): Possibilidade de envio de dados personalizados à Cybersource para auxiliar na performance. Para preencher corretamente, siga o padrão {número}:{valor}, onde {número} parte de uma lista da própria Cybersource chamada Merchand Defined Data, o campo {valor} deverá ser preenchido com os campos disponíveis na documentação de requisição de payment da Wake podendo ser: id, lja, chave, pedido, frete,desconto, total, primeiroPedidoAssinatura, assinatura/id, assinatura/ tipo.
MpiClientId (opcional, utilizado em caso de 3Ds): 3DS Client ID fornecido pela Cielo
MpiClientSecret (opcional, utilizado em caso de 3Ds: 3DS Client Secret fornecido pela Cielo
MpiMerchantName (opcional, utilizado em caso de 3Ds): Nome do Merchant
UseMpi (opcional, utilizado em caso de 3Ds): Campo utilizado para definir se o cliente usará os fluxos de 3DS autenticável ou Data Only. Obrigatório "True" para qualquer um dos fluxos.
MpiEstablishmentCode (opcional, utilizado em caso de 3Ds):Código do estabelecimento para utilização do 3DS, fornecido pela Cielo
MpiMCC (opcional, utilizado em caso de 3Ds): Código da categoria do estabelecimento para utilização do 3DS, fornecido pela Cielo
DataOnly (opcional, utilizado em caso de 3Ds):Campo utilizado para definir se o cliente usará o fluxo do Data Only, sem autenticação de dois fatores e com chargeback pela loja. Se configurado "True" as transações com 3DS, assumindo que o campo anterior também tenha sido configurado com "True", serão enviadas para o provedor para enriquecer os dados da venda, porém não terão autenticação exigida. Se configurado "False", e assumindo que o campo anterior foi configurado como "True", todas as transações exigirão autenticação de dois fatores.
Observação: O campo "UseMPI" deve ser configurado como "True" sempre que o cliente deseje utilizar o 3DS, seja ele autenticável ou DataOnly; Nos casos de "DataOnly" habilitados como "True", as transações não são autenticadas mas são enviadas ao provedor para enriquecimento de dados.
Lembrando que conector Cielo permite trabalhar com 3 tipos de antifraudes:
Antifraude Clearsale: Nossa plataforma tem integração direta com a Clearsale e permite que seus pedidos pagos com cartão de crédito passem pela análise de fraude. Para configurar, basta inserir o código App e a Chave da Clearsale na plataforma
Antifraude Manual/Personalizado: Funciona como um antifraude manual, permitindo que os pedidos pagos com cartão de crédito sejam processados em duas etapas: Autorização e Captura. Na primeira etapa, o pagamento é apenas autorizado junto à Cielo. Após a aprovação manual do pedido, o pagamento é então capturado.
Com esse antifraude, o pedido será atualizado para o status "Autorizado" na plataforma quando a Clearsale retornar com a autorização. Depois da análise manual, o pedido deve ser alterado via API Pública ou Admin para o status 14, "Pedido Aprovado Análise", para que a captura do pagamento seja finalizada na Cielo.
Lembrete: Você também pode definir um valor mínimo, fazendo com que somente os pedidos acima desse valor passem pelo Two-steps (Autorização e Captura). Pedidos abaixo sejam Capturados automaticamente.
Antifraude Cybersource/Clearsale via Cielo: O lojista possui a opção de ativar o antifraude diretamente com o parceiro através do painel da Cielo, conforme as condições estabelecidas em seu contrato. Caso tenha interesse em contratar o serviço, acesse o gestor comercial da sua conta
2ª Etapa - Grupos de Pagamento e Parcelamentos
Após as primeiras configurações, você deverá clicar em Grupos e Parcelamentos >> Parcelamentos e seguir o passo a passo completo no artigo Grupos e Pagamentos.
3ª Etapa - Gestor de script (Etapa obrigatória apenas para cartões com antifraude integrado Cielo)
Dentro do script caso a sua loja tenha autifraude ou 3Ds, será necessário realizar as seguintes configurações:
- Antifraude
Adicione o Script de fingerprint do provedor de antifraude. Para isso, no menu lateral esquerdo, vá em “Configurações” e em seguida selecione “Gestor de scripts”.
Clique em “+ Adicionar Script” e configure os campos conforme abaixo:
• Nome do script: Se o provedor será Cybersource, insira DeviceFingerprintCybersource.
Se o provedor será Clearsale, insira DeviceFingerprintClearsale.
• Data inicial de exibição do Script: Deixar campo em branco
• Data Final de exibição do Script: Deixar campo em branco
• Status do script: Selecione Script ativo.
• Prioridade do script: 0
• Posição do Script na página: Header – Última Linha
• Páginas que o Script será inserido: Todas
• Identificador de página: Insira * (asterisco).
Em Conteúdo do Script, insira o script correspondente ao provedor:
Tome cuidado para não apagar as aspas no código.
1.Cadastro do script Cybersource:
Se o seu provedor for Cybersource, insira o script e faça as alterações necessárias:
<script>
var sessionId = getCookie('carrinho-device');
if(sessionId == "")
{
sessionId = self.crypto.randomUUID();
}
function addDeviceFingerPrint() {
var ORG_ID = "k8vif92e";
var MERCHANT_ID = "braspag_xxxxxxxxxxxxxx";
var script = document.createElement("script");
document.getElementById('deviceFingerprint').value = sessionId;
script.type = "text/javascript";
script.src = `https://h.online-metrix.net/fp/tags.js?org_id=${ORG_ID}&session_id=${MERCHANT_ID}${sessionId}`;
document.head.appendChild(script);
var noScript = document.createElement("noscript");
noScript.type = "text/javascript";
var iframe = document.createElement("iframe");
iframe.style = "width: 100px; height: 100px; border: 0; position: absolute; top: -5000px;";
iframe.src = `https://h.online-metrix.net/fp/tags?org_id=${ORG_ID}&session_id=${sessionId}`;
noScript.appendChild(iframe);
document.ody.appendChild(noScript);
}
function getCookie(cname) {
let name = cname +"=";
let decodedCookie = decodeURIComponent(document.cookie);
let ca = decodedCookie.split(';');
for(let i = 0; i <ca.length; i++) {
let c = ca[i];
while (c.charAt(0) == ' ') {
c = c.substring(1);
}
if (c.indexOf(name) == 0) {
return c.substring(name.length, c.length);
}
}
return "";
}
</script>
Em seguida, altere o valor do campo MERCHANT_ID (linha 11) para a sua chave Cybersource, que tem formato braspag_nome-da-loja.
Após inserir o script e fazer as alterações, clique em “Adicionar Script”, depois clique em “Salvar”, e por fim clique em “Publicar”, ao final da página.
2.Cadastro do script Clearsale
Para usar o provedor Clearsale, é necessário cadastrar dois scripts, o script function e o script fingerprint.
Para começar, cadastre o script da function:
<script>
(function (a, b, c, d, e, f, g) {
a['CsdpObject'] = e; a[e] = a[e] || function () {
(a[e].q = a[e].q || []).push(arguments)
}, a[e].l = 1 * Date.now(); f = b.createElement(c),
g = b.getElementsByTagName(c)[0]; f.async = 1; f.src = d; g.parentNode.insertBefore(f, g)
})(window, document, 'script', 'https://device.clearsale.com.br/p/fp.js', 'csdp');
csdp('app', APPKEYCLEAR);
csdp('sessionid', sessionId);
</script>
Salve e publique o script.
Script Fingerprint:
Em seguida, repita os passos para cadastrar o script do fingerprint:
<script>
var APPKEYCLEAR = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
var sessionId = getCookie('carrinho-device');
if(sessionId == "")
{
sessionId = self.crypto.randomUUID();
}
function addDeviceFingerPrint() {
document.getElementById('deviceFingerprint').value = sessionId;
var urlCheck = `https://device.clearsale.com.br/p/fp.png?app=${APPKEYCLEAR}`;
checkUrl(urlCheck);
}
function checkUrl(url){
let request = new XMLHttpRequest();
request.open( "GET", url, true );
request.send(null);
request.onerror = (event) => {
request.open("GET", "https://web.fpcs-monitor.com.br/p/fp.png?sid=" + encodeURIComponent(sessionId) + "&app=" + APPKEYCLEAR + "&bl=1", false);
request.send(null);
}
}
function getCookie(cname) {
let name = cname +"=";
let decodedCookie = decodeURIComponent(document.cookie);
let ca = decodedCookie.split(';');
for(let i = 0; i <ca.length; i++) {
let c = ca[i];
while (c.charAt(0) == ' ') {
c = c.substring(1);
}
if (c.indexOf(name) == 0) {
return c.substring(name.length, c.length);
}
}
return "";
}
</script>
Altere o valor do campo APPCLEARKEY (linha 2) para a chave Clearsale fornecida pela Cielo.
Após inserir o script e fazer as alterações, clique em “Adicionar Script”, depois clique em “Salvar”, e por fim clique em “Publicar”, ao final da página:
Script 3Ds
Adicione o Script de 3Ds caso sua loja utilize a feature. Para isso, no menu lateral esquerdo, vá em “Configurações” e em seguida selecione “Gestor de scripts”.
Clique em “+ Adicionar Script” e configure os campos conforme abaixo:
• Nome do script: 3Ds Cielo
• Data inicial de exibição do Script: Deixar campo em branco
• Data Final de exibição do Script: Deixar campo em branco
• Status do script: Selecione Script ativo.
• Prioridade do script: 0
• Posição do Script na página: Header – Última Linha
• Páginas que o Script será inserido: Todas
• Identificador de página: *Fechamento
Conteúdo do Script:
<script>
console.log("3DS Ativado!");
var dict = {
bpmpi_auth: "true", // fixo
bpmpi_accesstoken: "", //buscar na api
bpmpi_ordernumber: "0", // pegar na tela
bpmpi_currency: "986", // fixo
bpmpi_totalamount: "", //total da compra na tela
bpmpi_installments: "", //fixo pois é uma parcela só
bpmpi_paymentmethod: "", // fixo
bpmpi_cardnumber: "", // pegar na tela
bpmpi_cardexpirationmonth: "", // pegar na tela
bpmpi_cardexpirationyear: "",// pegar na tela
bpmpi_billto_name: "",// pegar na tela
bpmpi_billto_phonenumber: "",// pegar na tela
bpmpi_billto_email: "",// pegar na tela
bpmpi_billto_street1: "",// pegar na tela
bpmpi_billto_street2: "",// pegar na tela
bpmpi_billto_city: "",// pegar na tela
bpmpi_billto_state: "",// pegar na tela
bpmpi_billto_country: "BR",// pegar na tela
bpmpi_billto_zipcode: "",// pegar na tela
bpmpi_shipto_name: "", // pegar na tela
bpmpi_merchant_url: "", // url da loja
bpmpi_order_productcode: "PHY" // fixo
}
function bpmpi_authenticate() {
BP.Mpi.authenticate()
}
function bpmpi_load() {
BP.Mpi.load()
}
var BP = function() {
function e(e) {
return dict[e] !== undefined && dict[e] !== null
}
function n(n) {
return e(n) ? dict[n] : null
}
function r(n, r) {
return e(n) ? dict[n] : r
}
function i(e) {
return e.replace("bpmpi_", "").replace(/\_/g, "")
}
function t(e) {
return /\#/.test(e)
}
function o(e, n) {
return e.replace(/\#/, n)
}
function a(e) {
var n = i(e),
r = n.split("#");
return {
enumerable: r[0],
field: r[1]
}
}
function s() {
const e = window && window.screen ? window.screen.width : "",
n = window && window.screen ? window.screen.height : "",
r = window && window.screen ? window.screen.colorDepth : "",
i = window && window.navigator ? window.navigator.userAgent : "",
t = window && window.navigator && window.navigator.javaEnabled() ? "Y" : "N";
var o = "";
window && window.navigator && (o = window.navigator.language ? window.navigator.language : window.navigator.browserLanguage);
const a = (new Date).getTimezoneOffset(),
s = {
userAgent: i,
screenWidth: e,
screenHeight: n,
colorDepth: r,
timeZoneOffset: a,
language: o,
javaEnabled: t,
javascriptEnabled: "Y"
};
return s
}
function p() {
for (var r = { }, p = 0; p < N.length; p++) {
var c = N[p];
if (t(c) === !1) {
var d = i(c),
u = n(c);
u && (r[d] = n(c))
} else
for (var l = 1, m = o(c, l); e(m);) {
var _ = a(c);
r[_.enumerable] || (r[_.enumerable] = []), u = n(m), r[_.enumerable][l - 1] || (r[_.enumerable][l - 1] = { }), r[_.enumerable][l - 1][_.field] = u, l++, m = o(c, l)
}
}
return r.browserInfo = s(), r
}
function c() {
return "undefined" != typeof bpmpi_config ? bpmpi_config() : {
Debug: !0,
Environment: "PRD"
}
}
function d() {
return D.Environment || "PRD"
}
function u() {
var e = d(),
n = {
TST: "https://songbirdstag.cardinalcommerce.com/edge/v1/songbird.js",
SDB: "https://songbirdstag.cardinalcommerce.com/edge/v1/songbird.js",
PRD: "https://songbird.cardinalcommerce.com/edge/v1/songbird.js"
};
return n[e]
}
function l() {
return {
orderNumber: n("bpmpi_ordernumber"),
currency: n("bpmpi_currency"),
amount: n("bpmpi_totalamount")
}
}
function m(e) {
var n = d(),
r = {
TST: "https://localhost:44351",
SDB: "https://mpisandbox.braspag.com.br",
PRD: "https://mpi.braspag.com.br"
};
return r[n] + e
}
function _(e, n) {
var r = document.getElementsByTagName("head")[0],
i = document.createElement("script");
i.type = "text/javascript", i.src = e, i.onreadystatechange = n, i.onload = n, r.appendChild(i)
}
function b() {
return "undefined" !== D.Debug ? D.Debug : !1
}
function g() {
b() && console.log.apply(null, arguments)
}
function h() {
return b() ? "verbose" : "off"
}
function f(e, n) {
T = n, g("[MPI]", "Initializing..."), g("[MPI]", "Token =", e), g("[MPI]", "ReferenceId =", T), Cardinal.configure({
timeout: "8000",
maxRequestRetries: "10",
logging: {
level: h()
}
}), Cardinal.setup("init", {
jwt: e
}), Cardinal.on("payments.setupComplete", function (e) {
g("[MPI]", "Setup complete."), g("[MPI]", "SetupCompleteData =", e), M("onReady")
}), Cardinal.on("payments.validated", function (e) {
switch (g("[MPI]", "Payment validated."), g("[MPI]", "ActionCode =", e.ActionCode), g("[MPI]", "Data =", e), e.ActionCode) {
case "SUCCESS":
case "NOACTION":
case "FAILURE":
w(e.Payment.ProcessorTransactionId);
break;
case "ERROR":
k.Number = e.ErrorNumber, k.Description = e.ErrorDescription, e.Payment && e.Payment.ProcessorTransactionId ? w(e.Payment.ProcessorTransactionId) : M("onError", {
Xid: null,
Eci: null,
ReturnCode: k.HasError() ? k.Number : "MPI901",
ReturnMessage: k.HasError() ? k.Description : "Unexpected error",
ReferenceId: null
});
break;
default:
k.Number = e.ErrorNumber, k.Description = e.ErrorDescription, "Success" === e.ErrorDescription && e.Payment && e.Payment.ProcessorTransactionId ? w(e.Payment.ProcessorTransactionId) : M("onError", {
Xid: null,
Eci: null,
ReturnCode: k.HasError() ? k.Number : "MPI902",
ReturnMessage: k.HasError() ? k.Description : "Unexpected authentication response",
ReferenceId: null
})
}
})
}
function C(e, r, i) {
var t = JSON.stringify(r),
o = new XMLHttpRequest;
o.onreadystatechange = function() {
if (4 === this.readyState)
if (200 === this.status) {
var e = JSON.parse(o.responseText);
i(e, this)
} else M("onError", {
Xid: null,
Eci: null,
ReturnCode: "MPI900",
ReturnMessage: "An error has occurred (" + this.status + ")",
ReferenceId: null
})
}, o.open("POST", m(e)), o.setRequestHeader("Content-Type", "application/json"), o.setRequestHeader("Authorization", "Bearer " + n("bpmpi_accesstoken")), o.send(t)
}
function E() {
var e = r("bpmpi_auth", "true");
return g("[MPI]", "Authentication Enabled =", e), "false" === e ? (M("onDisabled"), !1) : !0
}
function v() {
if (g("[MPI]", "Debug =", b()), g("[MPI]", "Enviroment =", d()), E()) {
if (O) return void g("[MPI]", "Resources already loaded...");
g("[MPI]", "Loading resources..."), O = !0, _(u(), function() {
g("[MPI]", "Cardinal script loaded."), C("/v2/3ds/init", l(), function (e) {
f(e.Token, e.ReferenceId)
})
})
}
}
function I() {
if (E()) {
if (!O) return void g("[MPI]", "Resources not loaded...");
g("[MPI]", "Enrolling..."), Cardinal.trigger("accountNumber.update", n("bpmpi_cardnumber")), C("/v2/3ds/enroll", p(), function(e) {
g("[MPI]", "Enrollment result =", e), e.Version && (X = e.Version[0]);
var n = e.Authentication;
switch (e.Status) {
case "ENROLLED":
R(e);
break;
case "VALIDATION_NEEDED":
w(e.AuthenticationTransactionId);
break;
case "AUTHENTICATION_CHECK_NEEDED":
A(n);
break;
case "NOT_ENROLLED":
M("onUnenrolled", {
Xid: n.Xid,
Eci: n.Eci,
Version: X,
ReferenceId: n.DirectoryServerTransactionId
});
break;
case "FAILED":
M("onFailure", {
Xid: n.Xid,
Eci: n.Eci || n.EciRaw,
Version: X,
ReferenceId: n.DirectoryServerTransactionId
});
break;
case "UNSUPPORTED_BRAND":
M("onUnsupportedBrand", {
Xid: null,
Eci: null,
ReturnCode: e.ReturnCode,
ReturnMessage: e.ReturnMessage,
ReferenceId: null
});
break;
default:
M("onError", {
Xid: null,
Eci: null,
ReturnCode: e.ReturnCode,
ReturnMessage: e.ReturnMessage,
ReferenceId: null
})
}
})
}
}
function y(e, n) {
return e[n] || null
}
function P(e) {
g("[MPI] Building order object...");
var n = p(),
r = {
OrderDetails: {
TransactionId: e,
OrderNumber: n.ordernumber,
CurrencyCode: y(n, "currency"),
OrderChannel: n.transactionmode || "S"
},
Consumer: {
Account: {
AccountNumber: n.cardnumber,
ExpirationMonth: n.cardexpirationmonth,
ExpirationYear: n.cardexpirationyear
},
Email1: y(n, "shiptoemail"),
Email2: y(n, "billtoemail"),
ShippingAddress: {
FullName: null,
Address1: null,
Address2: null,
City: null,
State: null,
PostalCode: null,
CountryCode: null,
Phone1: null
},
BillingAddress: {
FullName: y(n, "billtocontactname"),
Address1: y(n, "billtostreet1"),
Address2: y(n, "billtostreet2"),
City: y(n, "billtocity"),
State: null === y(n, "billtostate") ? null : y(n, "billtostate").toUpperCase(),
PostalCode: y(n, "billtozipcode"),
CountryCode: y(n, "billtocountry"),
Phone1: y(n, "billtophonenumber")
}
},
Cart: []
};
if ("true" === n.shiptosameasbillto) {
var i = r.Consumer.BillingAddress;
r.Consumer.ShippingAddress.FullName = i.FullName, r.Consumer.ShippingAddress.Address1 = i.Address1, r.Consumer.ShippingAddress.Address2 = i.Address2, r.Consumer.ShippingAddress.City = i.City, r.Consumer.ShippingAddress.State = i.State, r.Consumer.ShippingAddress.PostalCode = i.PostalCode, r.Consumer.ShippingAddress.Phone1 = i.Phone1, r.Consumer.ShippingAddress.CountryCode = i.CountryCode
} else r.Consumer.ShippingAddress.FullName = y(n, "shiptoaddressee"), r.Consumer.ShippingAddress.Address1 = y(n, "shiptostreet1"), r.Consumer.ShippingAddress.Address2 = y(n, "shiptostreet2"), r.Consumer.ShippingAddress.City = y(n, "shiptocity"), r.Consumer.ShippingAddress.State = null === y(n, "shiptostate") ? null : y(n, "shiptostate").toUpperCase(), r.Consumer.ShippingAddress.PostalCode = y(n, "shiptozipcode"), r.Consumer.ShippingAddress.Phone1 = y(n, "shiptophonenumber"), r.Consumer.ShippingAddress.CountryCode = y(n, "shiptocountry");
if (n.cart)
for (var t = 0; t < n.cart.length; t++) r.Cart.push({
Name: y(n.cart[t], "name"),
Description: y(n.cart[t], "description"),
SKU: y(n.cart[t], "sku"),
Quantity: y(n.cart[t], "quantity"),
Price: y(n.cart[t], "unitprice")
});
return g("[MPI] Order object =", r), r
}
function R(e) {
var r = n("bpmpi_auth_suppresschallenge");
if (g("[MPI] Suppression enabled = " + r), "true" === r) return g("[MPI]", "Challenge supressed..."), void M("onChallengeSuppression", {
Xid: null,
Eci: null,
ReturnCode: "MPI601",
ReturnMessage: "Challenge suppressed",
ReferenceId: null
});
g("[MPI]", "Showing challenge...");
var i = {
AcsUrl: e.AcsUrl,
Payload: e.Pareq,
TransactionId: e.AuthenticationTransactionId
},
t = P(e.AuthenticationTransactionId);
g("[MPI] Continue object =", i), Cardinal.continue("cca", i, t)
}
function A(e) {
switch (g("[MPI]", "Authentication result =", e), e.Status) {
case "AUTHENTICATED":
document.getElementById("cavv").value = e.Cavv;
document.getElementById("xid").value = e.Xid;
document.getElementById("eci").value = e.Eci;
document.getElementById("version").value= e.Version[0];
document.getElementById("referenceId").value= e.DirectoryServerTransactionId;
M("onSuccess", {
Cavv: e.Cavv,
Xid: e.Xid,
Eci: e.Eci,
Version: e.Version[0],
ReferenceId: e.DirectoryServerTransactionId
});
break;
case "UNAVAILABLE":
M("onUnenrolled", {
Cavv: e.Cavv,
Xid: e.Xid,
Eci: e.Eci,
Version: e.Version[0],
ReferenceId: e.DirectoryServerTransactionId
});
alert("Ocorreu um erro na tentiva de processamento, por favor, tente novamente. A página será recarregada.");
location.replace(location.href);
break;
case "FAILED":
M("onFailure", {
Xid: e.Xid,
Eci: e.Eci || e.EciRaw,
Version: e.Version[0],
ReferenceId: e.DirectoryServerTransactionId
});
break;
case "ERROR_OCCURRED":
M("onError", {
Xid: e.Xid,
Eci: e.Eci || e.EciRaw,
ReturnCode: e.ReturnCode,
ReturnMessage: e.ReturnMessage,
ReferenceId: e.DirectoryServerTransactionId
});
alert("Ocorreu um erro na tentiva de processamento, por favor, tente novamente. A página será recarregada.");
location.replace(location.href);
break;
default:
M("onError", {
Xid: e.Xid,
Eci: e.Eci || e.EciRaw,
ReturnCode: k.HasError() ? k.Number : e.ReturnCode,
ReturnMessage: k.HasError() ? k.Description : e.ReturnMessage,
ReferenceId: e.DirectoryServerTransactionId
});
}
}
function w(e) {
var n = p();
n.transactionId = e, g("[MPI]", "Validating..."), C("/v2/3ds/validate", n, function(e) {
A(e)
})
}
function S(e) {
return "function" == typeof D[e]
}
function M(e, n) {
g("[MPI]", "Notifying..."), g("[MPI]", "Event type =", e), g("[MPI]", "Event data =", n || "None"), S(e) && D[e](n)
if(e == "onError" || e == "onFailure"){
alert("Ocorreu um erro na tentiva de processamento, por favor, tente novamente. A página será recarregada.");
location.replace(location.href);
}
if(e == "onSuccess"){
if (document.getElementById("nameSOP") != null) {
FecharPedidoCielo();
} else {
Fbits.Carrinho.Pedido.Fechar();
}
}
}
var D = c(),
N = ["bpmpi_transaction_mode", "bpmpi_merchant_url", "bpmpi_merchant_newcustomer", "bpmpi_ordernumber", "bpmpi_currency", "bpmpi_totalamount", "bpmpi_paymentmethod", "bpmpi_installments", "bpmpi_cardnumber", "bpmpi_cardexpirationmonth", "bpmpi_cardexpirationyear", "bpmpi_cardalias", "bpmpi_default_card", "bpmpi_cardaddeddate", "bpmpi_giftcard_amount", "bpmpi_giftcard_currency", "bpmpi_billto_customerid", "bpmpi_billto_contactname", "bpmpi_billto_email", "bpmpi_billto_street1", "bpmpi_billto_street2", "bpmpi_billto_city", "bpmpi_billto_state", "bpmpi_billto_zipcode", "bpmpi_billto_phonenumber", "bpmpi_billto_country", "bpmpi_shipto_sameasbillto", "bpmpi_shipto_addressee", "bpmpi_shipto_email", "bpmpi_shipto_street1", "bpmpi_shipto_street2", "bpmpi_shipto_city", "bpmpi_shipto_state", "bpmpi_shipto_zipcode", "bpmpi_shipto_shippingmethod", "bpmpi_shipto_phonenumber", "bpmpi_shipto_firstusagedate", "bpmpi_shipto_country", "bpmpi_device_ipaddress", "bpmpi_device_#_fingerprint", "bpmpi_device_#_provider", "bpmpi_device_channel", "bpmpi_cart_#_name", "bpmpi_cart_#_description", "bpmpi_cart_#_sku", "bpmpi_cart_#_quantity", "bpmpi_cart_#_unitprice", "bpmpi_order_recurrence", "bpmpi_order_productcode", "bpmpi_order_countlast24hours", "bpmpi_order_countlast6months", "bpmpi_order_countlast1year", "bpmpi_order_cardattemptslast24hours", "bpmpi_order_marketingoptin", "bpmpi_order_marketingsource", "bpmpi_useraccount_guest", "bpmpi_useraccount_createddate", "bpmpi_useraccount_changeddate", "bpmpi_useraccount_passwordchangeddate", "bpmpi_useraccount_authenticationmethod", "bpmpi_useraccount_authenticationprotocol", "bpmpi_useraccount_authenticationtimestamp", "bpmpi_airline_travelleg_#_carrier", "bpmpi_airline_travelleg_#_departuredate", "bpmpi_airline_travelleg_#_origin", "bpmpi_airline_travelleg_#_destination", "bpmpi_airline_passenger_#_name", "bpmpi_airline_passenger_#_ticketprice", "bpmpi_airline_numberofpassengers", "bpmpi_airline_billto_passportcountry", "bpmpi_airline_billto_passportnumber", "bpmpi_mdd1", "bpmpi_mdd2", "bpmpi_mdd3", "bpmpi_mdd4", "bpmpi_mdd5", "bpmpi_auth_notifyonly", "bpmpi_auth_suppresschallenge", "bpmpi_recurring_enddate", "bpmpi_recurring_frequency", "bpmpi_recurring_originalpurchasedate", "bpmpi_challenge_window_size"],
T = null,
X = null,
k = {
Number: null,
Description: null,
HasError: function() {
return null !== this.Number
}
},
O = !1;
return {
Mpi: {
load: function() {
v()
},
authenticate: function() {
I()
}
}
}
}();
function bpmpi_config() {
return {
onReady: function () {
bpmpi_authenticate();
},
Environment:"PRD",
Debug: true,
};
}
function MpiLoad() {
let numberText = document.getElementsByName("number");
let amount = document.getElementsByClassName("currency")[0].innerHTML.replace(',', '').replace('.', '');
let token = document.getElementById("tokenMpi").value;
token = token.replace('Bearer ','');
if (document.getElementById("dataOnly") != null) {
dict.bpmpi_auth_notifyonly = document.getElementById("dataOnly").value;
}
var divs = document.body.getElementsByTagName("div");
for (const div of divs) {
if (div.hasAttribute("data-gateway-parcelas")) {
dict.bpmpi_installments = div.getAttribute("data-gateway-parcelas");
}
};
dict.bpmpi_accesstoken = token;
dict.bpmpi_ordernumber = Fbits.Carrinho.Id;
dict.bpmpi_cardnumber = numberText[0].value.split(" ").join("");
dict.bpmpi_totalamount = amount;
dict.bpmpi_cardexpirationmonth = document.getElementsByName("month")[0].value;
dict.bpmpi_cardexpirationyear = document.getElementsByName("year")[0].value;
dict.bpmpi_paymentmethod = document.getElementById("paymentType").value;
dict.bpmpi_billto_name = Fbits.Carrinho.Usuario.Nome;
dict.bpmpi_billto_email = Fbits.Carrinho.Usuario.Email;
dict.bpmpi_billto_street1 = Fbits.Carrinho.Usuario.Enderecos[0].Rua;
dict.bpmpi_billto_street2 = Fbits.Carrinho.Usuario.Enderecos[0].Complemento;
dict.bpmpi_billto_city = Fbits.Carrinho.Usuario.Enderecos[0].Cidade;
dict.bpmpi_billto_state = Fbits.Carrinho.Usuario.Enderecos[0].Estado;
dict.bpmpi_billto_country = "BR",
dict.bpmpi_billto_zipcode = Fbits.Carrinho.Usuario.Enderecos[0].CEP;
dict.bpmpi_shipto_name = Fbits.Carrinho.Usuario.Nome;
dict.bpmpi_merchant_url = window.location.origin;
bpmpi_load();
}
</script>
Após inserir o script e fazer as alterações, clique em “Adicionar Script”, depois clique em “Salvar”, e por fim clique em “Publicar”, ao final da página:
Recomendações Gerais
- Realize um pedido teste com um cartão válido para verificar se o pagamento transacionará corretamente na Cielo;
- Cancelamento / Estorno de Pagamentos: A opção de Cancelamento do pedido está disponível em nossa API Pública, assim como a opção de Estorno total ou parcial. Essas ações devem ser feitas por uma aplicação externa usando nossa API Pública;
- Ao tentar realizar o pedido, o sistema de segurança da plataforma poderá bloquear as URLs externas da Cielo. Para orientações sobre o desbloqueio, confira o conteúdo Gerenciar Políticas de Segurança.
- Cancelar os pedidos manualmente na plataforma não estorna os pagamentos na Cielo. Sendo assim, cancele os pedidos também no painel da Cielo para que os pagamentos sejam realmente cancelados.
Comentários
0 comentário
Por favor, entre para comentar.