Histórico de mensagens sobre Product em cartões

EXIBINDO CONVERSAS RECENTES:

Texto: Product
Canal: cartões
Avatar discord do usuario marcelocaser

marcelocaser

try {
window.EfiJs.CreditCard
.setAccount('Identificador_de_conta_aqui')
.setEnvironment('production') // 'production' or 'sandbox'
.setCreditCardData({
brand: 'visa',
number: '4485785674290087',
cvv: '123',
expirationMonth: '05',
expirationYear: '2029',
reuse: false
})
.getPaymentToken()
.then(data => {
const payment_token = data.payment_token;
const card_mask = data.card_mask;

console.log('payment_token', payment_token);
console.log('card_mask', card_mask);
}).catch(err => {
console.log('Código: ', err.code);
console.log('Nome: ', err.error);
console.log('Mensagem: ', err.error_description);
});
} catch (error) {
console.log('Código: ', error.code);
console.log('Nome: ', error.error);
console.log('Mensagem: ', error.error_description);
}

Avatar discord do usuario adenilson2703

adenilson2703

Ver Respostas

let body = {
metadata: {
custom_id: "1264",
notification_url: "sua_url"
},
payment: {
banking_billet: {
expire_at: expireAt,// '2024-09-20',
customer: {
name: name,//'Gorbadoc Oldbuck',
email: email,// '[email protected]',
cpf: cpf,//'94271564656',
birth: birth,// '1977-01-15',
phone_number: phoneNumber,//'5144916523',
},
},
},

items: [
{
name: nameProduct,
value: parseInt(total),
amount: 1,
},
],
shippings: [
{
name: 'Frete grátis',
value: 0,
},
],
}

const result = await efipay.createOneStepCharge([], body);

Avatar discord do usuario adenilson2703

adenilson2703

let body = {
payment: {
banking_billet: {
expire_at: expireAt,// '2024-09-20',
customer: {
name: name,//'Gorbadoc Oldbuck',
email: email,// '[email protected]',
cpf: cpf,//'94271564656',
birth: birth,// '1977-01-15',
phone_number: phoneNumber,//'5144916523',
},
},
},

items: [
{
name: nameProduct,
value: parseInt(total),
amount: 1,
},
],
shippings: [
{
name: 'Frete grátis',
value: 0,
},
],
}

const result = await efipay.createOneStepCharge([], body);

Avatar discord do usuario adenilson2703

adenilson2703

Ver Respostas

const EfiJs = require('payment-token-efi');

try {
EfiJs.CreditCard
.setAccount('Identificador_de_conta_aqui')
.setEnvironment('sandbox') // 'production' or 'sandbox'
.setBrand('visa')
.setTotal(28990)
.getInstallments()
.then(installments => {
console.log('Parcelas', installments);
}).catch(err => {
console.log('Código: ', err.code);
console.log('Nome: ', err.error);
console.log('Mensagem: ', err.error_description);
});
} catch (error) {
console.log('Código: ', error.code);
console.log('Nome: ', error.error);
console.log('Mensagem: ', error.error_description);
}

Avatar discord do usuario aguiar.dev

aguiar.dev

Ver Respostas

Bom dia. Estou tendo problema em criar o getPaymentToken

txt
GET https://device.clearsale.com.br/p/fp.js net::ERR_BLOCKED_BY_CLIENT
Error: Falha na execução do FingerPrint
at p.getPaymentToken (payment-token-efi.min.js:1:71428)
js
try {
EfiJs.CreditCard
.setAccount('XXXX')
.setEnvironment('sandbox') // 'production' or 'sandbox'
.setCreditCardData({
brand: 'visa',
number: '4485785674290087',
cvv: '123',
expirationMonth: '05',
expirationYear: '2029',
reuse: false
})


.getPaymentToken()
.then(data => {
const payment_token = data.payment_token;
const card_mask = data.card_mask;

console.log('payment_token', payment_token);
console.log('card_mask', card_mask);
}).catch(err => {
console.log(err)
// console.log('Código: ', err.code);
// console.log('Nome: ', err.error);
// console.log('Mensagem: ', err.error_description);
});
} catch (error) {
console.log('Código CreditCard: ', error.code);
console.log('Nome CreditCard: ', error.error);
console.log('Mensagem CreditCard: ', error.error_description);
}

Avatar discord do usuario adenilson2703

adenilson2703

Ver Respostas

14|CLINIC | Código: undefined
14|CLINIC | Nome: undefined
14|CLINIC | Mensagem: undefined
14|CLINIC | POST /order/paymentToken 200 26.420 ms - 63
14|CLINIC | Debugger: true
14|CLINIC | Lib version: 2.1.0
14|CLINIC | Environment sandbox
14|CLINIC | salt: success
14|CLINIC | Error_getPaymentToken ReferenceError: fetch is not defined
14|CLINIC | at Function.getPublicKey (/home/tecno/clinic_manager/api_server/node_modules/payment-token-efi/distNode/payment-token-efi.js:1:65643)
14|CLINIC | at Function.getPaymentToken (/home/tecno/clinic_manager/api_server/node_modules/payment-token-efi/distNode/payment-token-efi.js:1:70831)
14|CLINIC | at exports.paymentToken (/home/tecno/clinic_manager/api_server/controllers/app-products/order-controller.js:458:17)
14|CLINIC | at Layer.handle [as handle_request] (/home/tecno/clinic_manager/api_server/node_modules/express/lib/router/layer.js:95:5)
14|CLINIC | at next (/home/tecno/clinic_manager/api_server/node_modules/express/lib/router/route.js:149:13)
14|CLINIC | at Route.dispatch (/home/tecno/clinic_manager/api_server/node_modules/express/lib/router/route.js:119:3)
14|CLINIC | at Layer.handle [as handle_request] (/home/tecno/clinic_manager/api_server/node_modules/express/lib/router/layer.js:95:5)
14|CLINIC | at /home/tecno/clinic_manager/api_server/node_modules/express/lib/router/index.js:284:15
14|CLINIC | at Function.process_params (/home/tecno/clinic_manager/api_server/node_modules/express/lib/router/index.js:346:12)
14|CLINIC | at next (/home/tecno/clinic_manager/api_server/node_modules/express/lib/router/index.js:280:10)
14|CLINIC | Código: undefined
14|CLINIC | Nome: undefined
14|CLINIC | Mensagem: undefined

Avatar discord do usuario adenilson2703

adenilson2703

exports.paymentToken = async (req, res, next) => {
EfiJs.CreditCard.debugger(true);
try {
const result = await EfiJs.CreditCard
.setAccount('')
.setEnvironment('sandbox') // 'production' or 'sandbox'
.setCreditCardData({
brand: 'visa',
number: '4485785674290087',
cvv: '123',
expirationMonth: '05',
expirationYear: '2029',
reuse: false
}) .getPaymentToken();
console.log('result', result);
const payment_token = result.payment_token;
const card_mask = result.card_mask;
console.log('payment_token', payment_token);
console.log('card_mask', card_mask);
return res.send({
request: true,
success: true,
message: 'Pagamento cartão!',
payment_token:payment_token,
card_mask:card_mask
});

} catch (error) {
console.log('Código: ', error.code);
console.log('Nome: ', error.error);
console.log('Mensagem: ', error.error_description);
return res.send({
request: true,
success: false,
message: 'Pagamento cartão!',

});
}

Avatar discord do usuario allisson4027

allisson4027

Ver Respostas

Bom dia pessoal, estou fazendo a integração da api de cobrança do cartão e usei o SDK pois o procedimento de geração do payment_token no back-end foi descontinuado.

Estou realizando o procedimento correto de todas as etapas para obter o payment_token, porém não estou conseguindo ver o pagamento realizado depois de obter o payment_token,

algumas duvidas:

1 - Depois gerar o payment_token preciso utiliza-lo em algum lugar?
2 - Onde passo o installments para número da parcela no SDK?

EfiJs.CreditCard
.setAccount('Identificador_de_conta_aqui')
.setEnvironment('production') // 'production' or 'sandbox'
.setCreditCardData({
brand: 'visa',
number: '4485785674290087',
cvv: '123',
expirationMonth: '05',
expirationYear: '2029',
reuse: false
})
.getPaymentToken()


Ainda estou com debbuger ligado:

Environment production
salt: success
publicKey: success
creditCardData success
cardDataEncripted: success
Application_type: Node
getFingerPrint: success
paymentTokenData: success

Avatar discord do usuario rodolphot

rodolphot

Ver Respostas

TL;DR: Webhook sendo bloqueada pelo Bot Fight Mode do Cloudflare
----
Boa tarde, pessoal. Desculpe se esse não é o melhor local para enviar minha mensagem mas não encontrei um que tratasse apenas de webhooks.

Vamos lá: Quando faço uma chamada na API da Efí solicitando o pagamento tudo funciona corretamente, o problema não está aí. Acontece que estou informando uma 'notification_url' que usa o Cloudflare (tanto o WAF como o 'Bot Fight Mode' do Cloudflare).

No WAF tenho regras para liberar qualquer requisição no caminho que informei lá na 'notification_url', digamos, "dominio.com.br/webhooks/efi". A regra do WAF funciona (Recebo outros webhooks similares sem problema)... porém as requisições vindas da Efí são sempre identificadas/filtradas no "Bot Fight Mode", o que ocorre antes de sequer chegarem aos meus filtros do WAF... e, sendo assim, as requisições estão sendo sempre descartadas.

Note que não uso o "Super Bot Fight Mode" que, nesse caso, seria sim possível criar uma regra no WAF que pule o "Super Bot Fight Mode", mas não do "Bot Fight Mode". (Há, inclusive, um aviso em destaque no local onde você habilita o Bot Fight Mode: "Note: Other security products cannot be used to skip Bot Fight Mode.") (Pelo que li isso pode mudar no futuro.... mas infelizmente tenho esse problema hoje).

Uma "solução" que encontrei (mas sequer testei pois não é possível pra mim) é desabilitar o Bot Fight Mode.... infelizmente isso não é uma solução.

Parece existir meios de mitigar isso, inclusive a Efí cadastrando o bot com a Cloudflare deve ser o bastante (https://radar.cloudflare.com/traffic/verified-bots). Vocês podem pensar nisso?

Eu que estou fazendo algo errado? Não devo ser o único passando por isso mas não encontrei nada a respeito..

Avatar discord do usuario wevertondumont

wevertondumont

Ver Respostas

Interessante, descobri que não é possível Processar uma notificação de cobrança(Cartão ou boleto) utilizando um Queued Job do Laravel(Versão 10x + Fila Redis + horizon).
Ele dá o seguinte erro: production.info: undefined array key "REMOTE_ADDR", omesmo código fora de um Job, por exemplo uam Action ou Controller simples, funciona perfeitamente. Estou utilizando a SDK Php nova da Efi.

Avatar discord do usuario joaolucas_efi

joaolucas_efi

Bom dia @jamersonbernardo, tudo bem?

Você pode utilizar o seguinte exemplo para gerar o payment token com React.

Exemplo alternativo para gerar payment_token react:

js
"use client"
import { useEffect, useState } from 'react';

const App = () => {
const [message, setMessage] = useState('Hello React!');

useEffect(() => {
const script = document.createElement('script');
script.type = 'module';
script.src = 'https://cdn.jsdelivr.net/gh/efipay/js-payment-token-efi/dist/payment-token-efi.min.js';
script.onload = runEfiJsCode;
document.head.appendChild(script);
}, []);

const runEfiJsCode = async () => {
try {
EfiJs.CreditCard
.debugger(false)
.setAccount('')
.setEnvironment('') // 'production' or 'sandbox'
.setCreditCardData({
brand: '',
number: '',
cvv: '',
expirationMonth: '05',
expirationYear: '2029',
reuse: false
})
.getPaymentToken()
.then(data => {
const payment_token = data.payment_token;
const card_mask = data.card_mask;

setMessage(Payment_token: ${payment_token} | Card_mask: ${card_mask})
console.log('payment_token', payment_token);
console.log('card_mask', card_mask);
})
.catch(err => {
console.log('Código: ', err.code);
console.log('Nome: ', err.error);
console.log('Mensagem: ', err.error_description);
});
} catch (error) {
console.log('Código: ', error.code);
console.log('Nome: ', error.error);
console.log('Mensagem: ', error.error_description);
}
};

return (

{message}

);
};

export default function Home() {
return (



);
}

Avatar discord do usuario vts3632

vts3632

para criar o combo uso a extensão do woocommerce woo-product-bundle

Avatar discord do usuario joaolucas_efi

joaolucas_efi

Ver Respostas

Bom dia @biruleibe6646 o webhook das cobranças de cartão de crédito funciona da mesma forma que das cobranças de boleto e carnês.
Ao criar a cobrança você define uma URL de notificação.
Segue um exemplo:

{
"items":[
{
"name":"Product 1",
"amount":1,
"value":1
}
],
"metadata":{
"notification_url":"https://sua-url.com.br"
},
"payment": {
"credit_card": {
"installments": 1,
"payment_token": "",
"billing_address": {
"street": "Street 3",
"number": 10,
"neighborhood": "Bauxita",
"zipcode": "35400000",
"city": "Ouro Preto",
"state": "MG"
},
"customer" : {
"name" : "Gorbadock Oldbuck",
"email" : "[email protected]",
"cpf": "94271564656",
"birth": "1977-01-15",
"phone_number": "5144916523"
}
}
}
}

Avatar discord do usuario You should motivate Urself. NOW!

You should motivate Urself. NOW!

Ver Respostas

Boa noite pessoal !
Estou tentando fazer a integração de pagamento com cartão de credito, porém recebo esse erro
Estou usando ambiente de homologação
Estou usando o metodo -> createOneStepCharge do sdk para Node

{
"code": 3500072,
"error": "request_not_allowed",
"error_description": "Não foi possível finalizar sua solicitação. Por favor, entre em contato com o suporte Gerencianet."
}

payload enviado
{
"payment": {
"credit_card": {
"installments": 1,
"payment_token": "e39d08751b5ee5c53645c874de29164c8d38fba5",
"billing_address": {
"street": "Maria Tereza",
"number": 10,
"neighborhood": "Centro",
"zipcode": "18209390",
"city": "Itapetininga",
"state": "SP"
},
"customer": {
"name": "Rafael Siqueira",
"email": "[email protected]",
"cpf": "36568749805",
"birth": "1987-09-25",
"phone_number": "15988342010"
}
}
},
"items": [{
"name": "Product 1",
"value": 1000,
"amount": 1
}]
}

Avatar discord do usuario oleoessencial

oleoessencial

Ver Respostas

recebí o codigo do erro

"code":3500006,"error":"greater_than_limit","error_description":"O total fornecido é superior ao limite máximo por transação."});
"code":3500006,"error":"greater_than_limit","error_description":"O total fornecido é superior ao limite máximo por transação."});
realmente é o limite, então qual o limite máximo para parcelamento no cartao em production e em sandbox
?

Avatar discord do usuario gcysne

gcysne

Ver Respostas

A propósito, para quem usa Angular, segue o snippet de um Service para obtenção do token para quem quiser 🙂

Typescript
import { Injectable } from '@angular/core';
import { environment } from 'src/environments/environment';

export interface ICreditCardGerenciaNet {
brand: string;
number: string;
cvv: string;
expiration_month: string;
expiration_year: string;
}

@Injectable({
providedIn: 'root'
})
export class GerenciaNetService {
private static readonly _PAYEE_CODE = "SEU_PAYEE_CODE";
private static readonly _ENDPOINT = environment.production ? "https://api.gerencianet.com.br/v1/cdn" : "https://sandbox.gerencianet.com.br/v1/cdn";

constructor() { }

public getPaymentToken(creditCard:ICreditCardGerenciaNet) : Promise {
return new Promise((resolve, reject)=>{
var s = document.createElement('script');
s.type='text/javascript';

var v = Math.random()1000000;
s.src=${GerenciaNetService._ENDPOINT}/${GerenciaNetService._PAYEE_CODE}/${v};
s.async=false;
s.id = GerenciaNetService._PAYEE_CODE;

if(!document.getElementById(GerenciaNetService._PAYEE_CODE)){
document.getElementsByTagName('head')[0].appendChild(s);
}

window['$gn'] = {
validForm:true,
processed:false,
done:{},
ready:function(fn){
window['$gn'].done = fn;
}
};

window['$gn'].ready((checkout)=>{
checkout.getPaymentToken(creditCard, (error, response)=>{
if(error) {
reject(error);
}else{
resolve(response.data.payment_token);
}
});
});
});
}

}