Histórico de mensagens sobre sandbox

EXIBINDO CONVERSAS RECENTES:

Texto: sandbox
# cartões
Avatar discord do usuario taffarelxavier

taffarelxavier

Estou tentando fazer uma transação:

require __DIR__.'/vendor/autoload.php'; // caminho relacionado a SDK

use Gerencianet\Exception\GerencianetException;
use Gerencianet\Gerencianet;

$clientId = 'Client_Id_99869ea3xxxxxxxxxxxxxxxxxxxxx78a6a4708f3e'; // insira seu Client_Id, conforme o ambiente (Des ou Prod)
$clientSecret = 'Client_Secret_xxxxxxxxxxxxxxxxxxxxe0b24848af5d1bfb'; // insira seu Client_Secret, conforme o ambiente (Des ou Prod)

$options = [
'client_id' => $clientId,
'client_secret' => $clientSecret,
'sandbox' => true // altere conforme o ambiente (true = desenvolvimento e false = producao)
];

$item_1 = [
'name' => 'Item 1', // nome do item, produto ou serviço
'amount' => 1, // quantidade
'value' => 1000 // valor (1000 = R$ 10,00) (Obs: É possível a criação de itens com valores negativos. Porém, o valor total da fatura deve ser superior ao valor mínimo para geração de transações.)
];

$item_2 = [
'name' => 'Item 2', // nome do item, produto ou serviço
'amount' => 2, // quantidade
'value' => 2000 // valor (2000 = R$ 20,00)
];

$items = [
$item_1,
$item_2
];

$body = [
'items' => $items
];

try {
$api = new Gerencianet($options);
$charge = $api->createCharge([], $body);

print_r($charge);
} catch (GerencianetException $e) {
print_r($e->code);
print_r($e->error);
print_r($e->errorDescription);
} catch (Exception $e) {
print_r($e->getMessage());
}
Mas obtenho o erro acima, na imagem.

# bolix
Avatar discord do usuario sady_efi

sady_efi

Ver Respostas

Tivemos uma instabilidade no sandbox, mas já esta normal o serviço. Testa novamente ai por favor e qualquer coisa só acionar a gente aqui

# cartões
Avatar discord do usuario matheus_efi

matheus_efi

Ver Respostas

Bom dia <@!281518400918781952>, identificamos essa falha de "Erro interno do servidor." em ambiente sandbox, nossa equipe já está atuando para soluciona-la o quanto antes. Reforço que para o ambiente de produção está normal os serviços.

# cartões
Avatar discord do usuario gcysne

gcysne

Saberiam me dizer se está tudo operacional ai no endpoint do sandbox?

# bolix
Avatar discord do usuario christianosilveira4948

christianosilveira4948

Ver Respostas

hWebService := CURL_EASY_INIT()

IF !EMPTY(hWebService)

CURL_EASY_SETOPT(hWebService, HB_CURLOPT_URL, "https://sandbox.gerencianet.com.br/v1/authorize")
CURL_EASY_SETOPT(hWebService, HB_CURLOPT_RETURNTRANSFER, .T.)
CURL_EASY_SETOPT(hWebService, HB_CURLOPT_ENCODING, '')
CURL_EASY_SETOPT(hWebService, HB_CURLOPT_MAXREDIRS, 10)
CURL_EASY_SETOPT(hWebService, HB_CURLOPT_TIMEOUT, 0)
CURL_EASY_SETOPT(hWebService, HB_CURLOPT_FOLLOWLOCATION, .T.)
CURL_EASY_SETOPT(hWebService, HB_CURLOPT_HTTP_VERSION, "CURL_HTTP_VERSION_1_1")
CURL_EASY_SETOPT(hWebService, HB_CURLOPT_CUSTOMREQUEST, "POST")
CURL_EASY_SETOPT(hWebService, HB_CURLOPT_POSTFIELDS, {"grant_type","client_credentials"})
CURL_EASY_SETOPT(hWebService, HB_CURLOPT_HTTPHEADER, {'Authorization: Basic Q2...','Content-Type: application/json'})

ncurlErr:=curl_easy_perform (hWebService)
IF ncurlErr > 0
? "Curl Error: "+str(ncurlErr)
ENDIF

ENDIF

curl_easy_cleanup( hWebService )

# pix
Avatar discord do usuario guilherme_efi

guilherme_efi

Ver Respostas

Alterou também "sandbox" para false, no config.json?
Tente excluir a pasta vendor, e executar o comando composer install novamente

# cartões
Avatar discord do usuario gcysne

gcysne

Ver Respostas

A propósito, só para informar mesmo, não sei se é o comportamento esperado, mas a chamada do getPaymentToken (no sandbox) gera esse erro de carregamento apesar de não comprometer o funcionamento. Acho que é por conta da falta do SSL.
imagem enviada na mensagem pelo usuario gcysne

# cartões
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);
}
});
});
});
}

}

# bolix
Avatar discord do usuario matheus_efi

matheus_efi

Ver Respostas

Sim, você tem que mandar o juridical_person, ao invés de passar nome e cpf, veja um exemplo em Delphi:

json
interface
function PayChargeWithBilletAsPJ(Id: String): String;

implementation
uses uGerenciaClient, uGerenciaNetClientUtilities;
{... your code ... }

function PayChargeWithBilletAsPJ(Id: String): String;
var
Body : String;
PaymentParams: String;
const
BodyText =
'{'+
'"payment": {'+
'"banking_billet": {'+
'"customer": {'+
'"email": "[email protected]",'+
'"phone_number": "5144916523",'+
'"birth": "1977-07-17",'+
'"address": {'+
'"street": "Avenida Juscelino Kubitschek",'+
'"number": 909,'+
'"neighborhood": "Bauxita",'+
'"complement": "",'+
'"city": "Ouro Preto",'+
'"state": "MG",'+
'"zipcode": "35400000"'+
'},'+
'"name": "Gorbadoc Oldbuck",'+
'"cpf": "94271564656",'+
'"juridical_person": {'+
'"corporate_name": "Nome da Empresa",'+
'"cnpj": "99794567000144"'+
'}'+
'},'+
'"configurations": {' +
'"fine": 200,' +
'"interest": 33' +
'},'+
'"message": "Este é um espaço de até 80 caracteres para informar algo a seu cliente",'+
'"expire_at": "2019-02-21"'+
'}'+
'}'+
'}';

begin
EnableService( 'GerenciaNet.dll' );
ConfigureService( ToPAnsiChar( 'client_id' ),ToPAnsiChar( 'client_secret' ),'sandbox','config.json','');
GerenciaNetAuthorize();

PaymentParams := CreateRequestParams( [ 'id='+Id ] ).Text; // Passa o id da transação
Body := BodyText;

Result := ExecuteGerenciaNetRequest( 'payCharge',PaymentParams,'',Body );
end;

# bolix
Avatar discord do usuario christianosilveira4948

christianosilveira4948

Ver Respostas

Boa tarde, estou iniciando uma integração com um sistema criado em xBase, no caso, eu posso usar a DLL do delphi para isso, mas não acho os comandos que devo usar e etc... Na documentação que vi no site vi os exemplos para o delphi.

Exemplo
ConfigureService(ClientID,ClientSecret,'sandbox','config.json',PartnerToken) <--- Esse comando esta na DLL

GerenciaNetAuthorize() <--- Esse não esta....

# pix
Avatar discord do usuario roguitar88

roguitar88

$options = [
'client_id' => $this->clientId,
'client_secret' => $this->clientSecret,
'pix_cert' => '/etc/certs-gerencianet/olimppiuspixprod.pem',
// 'debug' => false,
// 'timeout' => 30,
'sandbox' => false
];

# bolix
Avatar discord do usuario guilherme_efi

guilherme_efi

Ver Respostas

Conforme o Matheus exemplificou a forma como é feito o settleCharge()
Ou seja, este trecho que ele lhe passou, você irá implementar em seu _QUITAR_boletocliente.php

E nele você irá pegar o id que foi passado via POST no data : "_method=id_transacao="+id,, da seguinte forma:

php
'use strict';

var Gerencianet = require('gn-api-sdk-node');

var id_transacao = $_POST['id_transacao']; // Id vindo da request Ajax
var clientId = 'your_client_id';
var clientSecret = 'your_client_secret';

var options = {
client_id: clientId,
client_secret: clientSecret,
sandbox: true
}

var params = {
id: id_transacao
}

var gerencianet = new Gerencianet(options);

gerencianet
.settleCharge(params)
.then(console.log)
.catch(console.log)
.done();

# bolix
Avatar discord do usuario matheus_efi

matheus_efi

Ver Respostas

Boa tarde <@!824696840153726987>, o método é PUT mesmo, especificamente PUT /v1/charge/:id/settle. Como você está utilizando JS seria assim:

js
'use strict';

var Gerencianet = require('gn-api-sdk-node');

var clientId = 'your_client_id';
var clientSecret = 'your_client_secret';

var options = {
client_id: clientId,
client_secret: clientSecret,
sandbox: true
}

var params = {
id: 1000 // no lugar do 1000 coloque o charge_id desejado
}

var gerencianet = new Gerencianet(options);

gerencianet
.settleCharge(params)
.then(console.log)
.catch(console.log)
.done();

# pix
Avatar discord do usuario roguitar88

roguitar88

$options = [
'client_id' => $this->clientId,
'client_secret' => $this->clientSecret,
'pix_cert' => $this->pixCert,
'headers' => array(
'x-skip-mtls-checking' => 'true'
),
// 'debug' => false,
// 'timeout' => 30,
'sandbox' => $this->sandboxBoolean // (true = development e false = production)
];

# pix
Avatar discord do usuario roguitar88

roguitar88

$options = [
'client_id' => $this->clientId,
'client_secret' => $this->clientSecret,
'pix_cert' => $this->pixCert,
// 'debug' => false,
// 'timeout' => 30,
'sandbox' => $this->sandboxBoolean // (true = development e false = production)
];

# pix
Avatar discord do usuario guilherme_efi

guilherme_efi

Ver Respostas

<@!723278999236771916> A SDK já foi planejada para ser utilizada com poucas modificações. No caso, foi centralizado no arquivo .json as configurações de ambiente (sandbox true => Homologação ou sandbox false => produção), definições de credenciais e caminho do certificado.

Não necessariamente deve ser salvo na pasta /exemples/pix/certs, mas então no config.json você pode modificar o diretório do certificado para referenciá-lo em outra pasta.

# pix
Avatar discord do usuario roguitar88

roguitar88

Ver Respostas

Como faço então pra simular um pagamento no sandbox?