Giter VIP home page Giter VIP logo

pagarme-php's Introduction

Introdução

Essa SDK foi construída com o intuito de torná-la flexível, de forma que todos possam utilizar todas as features, de todas as versões de API.

Você pode acessar a documentação oficial do Pagar.me acessando esse link.

Índice

Instalação

Instale a biblioteca utilizando o comando

composer require pagarme/pagarme-php

Configuração

Para incluir a biblioteca em seu projeto, basta fazer o seguinte:

<?php
require('vendor/autoload.php');

$pagarme = new PagarMe\Client('SUA_CHAVE_DE_API');

Definindo headers customizados

  1. Se necessário for é possível definir headers http customizados para os requests. Para isso basta informá-los durante a instanciação do objeto Client:
<?php
require('vendor/autoload.php');

$pagarme = new PagarMe\Client(
    'SUA_CHAVE_DE_API',
    ['headers' => ['MEU_HEADER_CUSTOMIZADO' => 'VALOR HEADER CUSTOMIZADO']]
); 

E então, você pode poderá utilizar o cliente para fazer requisições ao Pagar.me, como nos exemplos abaixo.

Transações

Nesta seção será explicado como utilizar transações no Pagar.me com essa biblioteca.

Criando uma transação

<?php
$transaction = $pagarme->transactions()->create([
    'amount' => 1000,
    'payment_method' => 'credit_card',
    'card_holder_name' => 'Anakin Skywalker',
    'card_cvv' => '123',
    'card_number' => '4242424242424242',
    'card_expiration_date' => '1220',
    'customer' => [
        'external_id' => '1',
        'name' => 'Nome do cliente',
        'type' => 'individual',
        'country' => 'br',
        'documents' => [
          [
            'type' => 'cpf',
            'number' => '00000000000'
          ]
        ],
        'phone_numbers' => [ '+551199999999' ],
        'email' => '[email protected]'
    ],
    'billing' => [
        'name' => 'Nome do pagador',
        'address' => [
          'country' => 'br',
          'street' => 'Avenida Brigadeiro Faria Lima',
          'street_number' => '1811',
          'state' => 'sp',
          'city' => 'Sao Paulo',
          'neighborhood' => 'Jardim Paulistano',
          'zipcode' => '01451001'
        ]
    ],
    'shipping' => [
        'name' => 'Nome de quem receberá o produto',
        'fee' => 1020,
        'delivery_date' => '2018-09-22',
        'expedited' => false,
        'address' => [
          'country' => 'br',
          'street' => 'Avenida Brigadeiro Faria Lima',
          'street_number' => '1811',
          'state' => 'sp',
          'city' => 'Sao Paulo',
          'neighborhood' => 'Jardim Paulistano',
          'zipcode' => '01451001'
        ]
    ],
    'items' => [
        [
          'id' => '1',
          'title' => 'R2D2',
          'unit_price' => 300,
          'quantity' => 1,
          'tangible' => true
        ],
        [
          'id' => '2',
          'title' => 'C-3PO',
          'unit_price' => 700,
          'quantity' => 1,
          'tangible' => true
        ]
    ]
]);

Capturando uma transação

<?php
$capturedTransaction = $pagarme->transactions()->capture([
    'id' => 'ID_OU_TOKEN_DA_TRANSAÇÃO',
    'amount' => VALOR_TOTAL_COM_CENTAVOS
]);

Estornando uma transação

<?php
$refundedTransaction = $pagarme->transactions()->refund([
    'id' => 'ID_OU_TOKEN_DA_TRANSAÇÃO',
]);

Esta funcionalidade também funciona com estornos parciais, ou estornos com split. Por exemplo:

Estornando uma transação parcialmente

<?php
$partialRefundedTransaction = $pagarme->transactions()->refund([
    'id' => 'ID_OU_TOKEN_DA_TRANSAÇÃO',
    'amount' => 'VALOR_PARCIAL_DO_ESTORNO',
]);

Estornando uma transação com split

<?php
$refundedTransactionWithSplit = $pagarme->transactions()->refund([
    'id' => 'ID_OU_TOKEN_DA_TRANSAÇÃO',
    'amount' => '6153',
    'split_rules' => [
        [
            'id' => 'sr_cj41w9m4d01ta316d02edaqav',
            'amount' => '3000',
            'recipient_id' => 're_cj2wd5ul500d4946do7qtjrvk'
        ],
        [
            'id' => 'sr_cj41w9m4e01tb316dl2f2veyz',
            'amount' => '3153',
            'recipient_id' => 're_cj2wd5u2600fecw6eytgcbkd0',
            'charge_processing_fee' => 'true'
        ]
    ]
]);

Retornando transações

<?php
$transactions = $pagarme->transactions()->getList();

Se necessário, você pode utilizar parâmetros para filtrar essa busca, por exemplo, se quiser filtrar apenas transações pagas, você pode utilizar o código abaixo:

<?php
$paidTransactions = $pagarme->transactions()->getList([
    'status' => 'paid'
]);

Retornando uma transação

<?php
$transactions = $pagarme->transactions()->get([
    'id' => 'ID_DA_TRANSAÇÃO' 
]);

Retornando recebíveis de uma transação

<?php
$transactionPayables = $pagarme->transactions()->listPayables([
    'id' => 'ID_DA_TRANSAÇÃO'
]);

Retornando um recebível de uma transação

<?php
$transactionPayable = $pagarme->transactions()->getPayable([
    'transaction_id' => 'ID_DA_TRANSAÇÃO',
    'payable_id' => 'ID_DO_PAYABLE'
]);

Retornando o histórico de operações de uma transação

<?php
$transactionOperations = $pagarme->transactions()->listOperations([
    'id' => 'ID_DA_TRANSAÇÃO',
]);

Notificando cliente sobre boleto a ser pago

<?php
$transactionPaymentNotify = $pagarme->transactions()->collectPayment([
    'id' => 'ID_DA_TRANSAÇÃO',
    'email' = > '[email protected]'
]);

Retornando eventos de uma transação

<?php
$transactionEvents = $pagarme->transactions()->events([
    'id' => 4262049,
]);

Calculando pagamentos parcelados

Essa rota não é obrigatória para uso. É apenas uma forma de calcular pagamentos parcelados com o Pagar.me.

Para fins de explicação, utilizaremos os seguintes valores:

amount: 1000, free_installments: 4, max_installments: 12, interest_rate: 3

O parâmetro free_installments decide a quantidade de parcelas sem juros. Ou seja, se ele for preenchido com o valor 4, as quatro primeiras parcelas não terão alteração em seu valor original.

Nessa rota, é calculado juros simples, efetuando o seguinte calculo:

valorTotal = valorDaTransacao * ( 1 + ( taxaDeJuros * numeroDeParcelas ) / 100 )

Então, utilizando os valores acima, na quinta parcela, a conta ficaria dessa maneira:

valorTotal = 1000 * (1 + (3 * 5) / 100)

Então, o valor a ser pago na quinta parcela seria de 15% da compra, totalizando 1150.

Você pode usar o código abaixo caso queira utilizar essa rota:

<?php
$calculateInstallments = $pagarme->transactions()->calculateInstallments([
    'amount' => 'VALOR_DA_TRANSAÇÃO_EM_CENTAVOS',
    'free_installments' => 'PARCELAS_SEM_JUROS',
    'max_installments' => 'MÁXIMO_DE_PARCELAS',
    'interest_rate' => 'TAXA_DE_JUROS_AO_MÊS'
]);

Testando pagamento de boletos

<?php
$paidBoleto = $pagarme->transactions()->simulateStatus([
    'id' => 'ID_DA_TRANSAÇÃO',
    'status' => 'paid'
]);

Estornos

É possível visualizar todos os estornos que ocorreram em sua conta, basta utilizar o código abaixo:

<?php
$refunds = $pagarme->refunds()->getList();

Se preferir, você pode utilizar filtros para trazer apenas o estorno de uma transação em específico, por exemplo:

<?php
$transactionRefunds = $pagarme->refunds()->getList([
    'transaction_id' => 'ID_DA_TRANSAÇÃO_ESTORNADA'
]);

Chargebacks

Da mesma forma que estornos, você pode visualizar todos os chargebacks que ocorreram em sua conta.

<?php
$transactionChargebacks = $pagarme->refunds()->getList();

Cartões

Sempre que você faz uma requisição através da nossa API, nós guardamos as informações do portador do cartão, para que, futuramente, você possa utilizá-las em novas cobranças, ou até mesmo implementar features como one-click-buy.

Criando cartões

<?php
$card = $pagarme->cards()->create([
    'holder_name' => 'Yoda',
    'number' => '4242424242424242',
    'expiration_date' => '1225',
    'cvv' => '123'
]);

Retornando cartões

<?php
$cards = $pagarme->cards()->getList();

Se necessário, você pode filtrar por algum dado específico do cartão, por exemplo, o código abaixo irá trazer todos os cartões da bandeira visa:

<?php
$visaCards = $pagarme->cards()->getList([
    'brand' => 'visa'
]);

Retornando um cartão

<?php
$card = $pagarme->cards()->get([
    'id' => 'ID_DO_CARTÃO'
]);

Planos

Representa uma configuração de recorrência a qual um cliente consegue assinar. É a entidade que define o preço, nome e periodicidade da recorrência

Criando planos

<?php
$plan = $pagarme->plans()->create([
    'amount' => '15000',
    'days' => '30',
    'name' => 'The Pro Plan - Platinum - Best ever'
]);

Retornando planos

<?php
$plans = $pagarme->plans()->getList();

Retornando um plano

<?php
$plan = $pagarme->plans()->get(['id' => '123456']);

Atualizando um plano

<?php
$updatedPlan = $pagarme->plans()->update([
    'id' => '365403',
    'name' => 'The Pro Plan - Susan',
    'trial_days' => '7',
]);

Assinaturas

Criando assinaturas

<?php
$substription = $pagarme->subscriptions()->create([
    'plan_id' => 123456,
    'payment_method' => 'credit_card',
    'card_number' => '4111111111111111',
    'card_holder_name' => 'UNIX TIME',
    'card_expiration_date' => '0722',
    'card_cvv' => '123',
    'postback_url' => 'http://postbacj.url',
    'customer' => [
        'email' => '[email protected]',
        'name' => 'Unix Time',
        'document_number' => '75948706036',
        'address' => [
            'street' => 'Rua de Teste',
            'street_number' => '100',
            'complementary' => 'Apto 666',
            'neighborhood' => 'Bairro de Teste',
            'zipcode' => '11111111'
        ],
        'phone' => [
            'ddd' => '01',
            'number' => '923456780'
        ],
        'sex' => 'other',
        'born_at' => '1970-01-01',
    ],
    'metadata' => [
        'foo' => 'bar'
    ]
]);

Criando assinaturas utilizando card_id

<?php
// Criando o cartão
$card = $pagarme->cards()->create([
    'holder_name' => 'Yoda',
    'number' => '4242424242424242',
    'expiration_date' => '1225',
    'cvv' => '123'
]);

$substription = $pagarme->subscriptions()->create([
    'plan_id' => 365403,
    'card_id' => $card->id,
    'payment_method' => 'credit_card',
    'postback_url' => 'http://www.pudim.com.br',
    'customer' => [
        'email' => '[email protected]',
        'name' => 'Unix Time',
        'document_number' => '75948706036',
        'address' => [
            'street' => 'Rua de Teste',
            'street_number' => '100',
            'complementary' => 'Apto 666',
            'neighborhood' => 'Bairro de Teste',
            'zipcode' => '88370801'
        ],
        'phone' => [
            'ddd' => '01',
            'number' => '923456780'
        ],
        'sex' => 'other',
        'born_at' => '1970-01-01',
    ],
    'metadata' => [
        'foo' => 'bar'
    ]
]);

Split com assinatura

<?php
$substription = $pagarme->subscriptions()->create([
    'plan_id' => 123456,
    'card_id' => 'card_abc123456',
    'payment_method' => 'credit_card',
    'postback_url' => 'http://www.pudim.com.br',
    'customer' => [
        'email' => '[email protected]',
        'name' => 'Unix Time',
        'document_number' => '75948706036',
        'address' => [
            'street' => 'Rua de Teste',
            'street_number' => '100',
            'complementary' => 'Apto 666',
            'neighborhood' => 'Bairro de Teste',
            'zipcode' => '88370801'
        ],
        'phone' => [
            'ddd' => '01',
            'number' => '923456780'
        ],
        'sex' => 'other',
        'born_at' => '1970-01-01',
    ],
    'amount' => 10000,
    'split_rules' => [
        [
            'recipient_id' => 're_abc1234abc1234abc1234abc1',
            'percentage' => 20,
            'liable' => true,
            'charge_processing_fee' => true,
        ],
        [
            'recipient_id' => 're_abc1234abc1234abc1234abc1',
            'percentage' => 80,
            'liable' => true,
            'charge_processing_fee' => true,
        ]
    ],
    'metadata' => [
        'foo' => 'bar'
    ]
]);

Retornando uma assinatura

<?php
$substription = $pagarme->subscriptions()->get([
    'id' => 123456
]);

Retornando assinaturas

<?php
$substription = $pagarme->subscriptions()->getList();

Se necessário, você pode aplicar filtros em sua busca. Por exemplo, se quiser trazer todas as assinatura de um certo plano, você pode utilizar o código abaixo:

<?php
$planSubstriptions = $pagarme->subscriptions()->getList([
    'plan_id' => 'ID_DO_PLANO'
]);

Atualizando uma assinatura

<?php
$updatedSubscription = $pagarme->subscriptions()->update([
    'id' => 1234,
    'plan_id' => 4321,
    'payment_method' => 'boleto'
]);

Cancelando uma assinatura

<?php
$canceledSubscription = $pagarme->subscriptions()->cancel([
    'id' => 12345
]);

Transações de assinatura

<?php
$substriptionTransactions = $pagarme->subscriptions()->transactions([
    'subscription_id' => 1245
]);

Pulando cobranças

<?php
$settledCharges = $pagarme->subscriptions()->settleCharges([
    'id' => 12345,
    'charges' => 5
]);

Postbacks

Ao criar uma transação ou uma assinatura você tem a opção de passar o parâmetro postback_url na requisição. Essa é uma URL do seu sistema que irá então receber notificações a cada alteração de status dessas transações/assinaturas.

Para obter informações sobre postbacks, 3 informações serão necessárias, sendo elas: model, model_id e postback_id.

model: Se refere ao objeto que gerou aquele POSTback. Pode ser preenchido com o valor transaction ou subscription.

model_id: Se refere ao ID do objeto que gerou ao POSTback, ou seja, é o ID da transação ou assinatura que você quer acessar os POSTbacks.

postback_id: Se refere à notificação específica. Para cada mudança de status de uma assinatura ou transação, é gerado um POSTback. Cada POSTback pode ter várias tentativas de entregas, que podem ser identificadas pelo campo deliveries, e o ID dessas tentativas possui o prefixo pd_. O campo que deve ser enviado neste parâmetro é o ID do POSTback, que deve ser identificado pelo prefixo po_.

Retornando postbacks

<?php
$postbacks = $pagarme->postbacks()->getList([
    'model' => 'subscription',
    'model_id' => 'ID_DA_ASSINATURA'
]);

Retornando um postback

<?php
$postback = $pagarme->postbacks()->get([
    'model' => 'transaction',
    'model_id' => 'ID_DA_TRANSAÇÃO',
    'postback_id' => 'po_cjlzhftd2006xg573fwelfg9y'
]);

Reenviando um postback

<?php
$postbackRedeliver = $pagarme->postbacks()->redeliver([
    'model' => 'subscription',
    'model_id' => 'ID_DA_ASSINATURA',
    'postback_id' => 'po_cjlzhftd2006xg573fwelfg9y'
]);

Validando uma requisição de postback

<?php
$postbackPayload = file_get_contents('php://input');
$signature = $_SERVER['HTTP_X_HUB_SIGNATURE'];
$postbackIsValid = $pagarme->postbacks()->validate($postbackPayload, $signature);

Observação: o código acima serve somente de exemplo para que o processo de validação funcione. Recomendamos que utilize ferramentas fornecidas por bibliotecas ou frameworks para recuperar estas informações de maneira mais adequada.

Saldo do recebedor principal

Para saber o saldo de sua conta, você pode utilizar esse código:

<?php
$balance = $pagarme->balances()->get();

Operações de saldo

Com este objeto você pode acompanhar todas as movimentações financeiras ocorridas em sua conta Pagar.me.

Histórico das operações

<?php
$balanceOperations = $pagarme->balanceOperations()->getList();

Se necessário, você pode passar filtros como parâmetro, por exemplo:

<?php
$balanceOperations = $pagarme->balanceOperations()->getList([
    'status' => 'available'
]);

Histórico de uma operação específica

<?php
$balanceOperation = $pagarme->balanceOperations()->get([
    'id' => 'BALANCE_OPERATION_ID'
]);

Recebível

Objeto contendo os dados de um recebível. O recebível (payable) é gerado automaticamente após uma transação ser paga. Para cada parcela de uma transação é gerado um recebível, que também pode ser dividido por recebedor (no caso de um split ter sido feito).

Retornando recebíveis

<?php
$payables = $pagarme->payables()->getList();

Se necessário, você pode aplicar filtros na busca dos payables, por exemplo, você pode recuperar todos os payables de uma transação:

<?php
$transactionPayables = $pagarme->payables()->getList([
    'transaction_id' => 'ID_DA_TRANSAÇÃO'
]);

Retornando um recebível

<?php
$payable = $pagarme->payables()->get([
    'id' => 'ID_DO_PAYABLE'
]);

Transferências

Transferências representam os saques de sua conta.

Criando uma transferência

<?php
$transfer = $pagarme->transfers()->create([
    'amount' => 1000,
    'recipient_id' => 're_cjeptpdyg03u3cb6elj68p5ej'
]);

Retornando transferências

<?php
$transfers = $pagarme->transfers()->getList();

Se necessário, você pode aplicar filtros em sua busca, por exemplo:

<?php
$recipientTransfers = $pagarme->transfers()->getList([
    'recipient_id' => 'ID_DO_RECEBEDOR'
]);

Retornando uma transferência

<?php
$transfer = $pagarme->transfers()->get([
    'id' => 'ID_DA_TRANSFERÊNCIA'
]);

Cancelando uma transferência

<?php
$canceledTransfer = $pagarme->transfers()->cancel([
    'id' => 'ID_DA_TRANSFERÊNCIA'
]);

Antecipações

Para entender o que são as antecipações, você deve acessar esse link.

Criando uma antecipação

<?php
$anticipation = $pagarme->bulkAnticipations()->create([
    'recipient_id' => 're_cjeptpdyg03u3cb6elj68p5ej',
    'payment_date' => '1536883200000',
    'requested_amount' => '300000',
    'timeframe' => 'start'
]);

Obtendo os limites de antecipação

<?php
$anticipationLimits = $pagarme->bulkAnticipations()->getLimits([
    'recipient_id' => 'ID_DO_RECEBEDOR',
    'payment_date' => '1536883200000',
    'timeframe' => 'start'
]);

Cancelando uma antecipação pending

<?php
$canceledAnticipation = $pagarme->bulkAnticipations()->cancel([
    'recipient_id' => 'ID_DO_RECEBEDOR',
    'bulk_anticipation_id' => 'ID_DA_ANTECIPAÇÃO',
]);

Retornando antecipações

<?php
$anticipations = $pagarme->bulkAnticipations()->getList([
    'recipient_id' => 'ID_DO_RECEBEDOR'
]);

Se necessário, você pode aplicar filtros nessa busca, por exemplo, pelo valor antecipado:

<?php
$anticipations = $pagarme->bulkAnticipations()->getList([
    'recipient_id' => 'ID_DO_RECEBEDOR',
    'amount' => 'VALOR_ANTECIPADO'
]);

Contas bancárias

Contas bancárias identificam para onde será enviado o dinheiro de futuros pagamentos.

Criando uma conta bancária

<?php
$bankAccount = $pagarme->bankAccounts()->create([
    'bank_code' => '341',
    'agencia' => '0932',
    'agencia_dv' => '5',
    'conta' => '58054',
    'conta_dv' => '1',
    'document_number' => '26268738888',
    'legal_name' => 'API BANK ACCOUNT'
]);

Retornando uma conta bancária

<?php
$bankAccount = $pagarme->bankAccounts()->get([
    'id' => 'ID_DA_CONTA_BANCÁRIA'
]);

Retornando contas bancárias

<?php
$bankAccounts = $pagarme->bankAccounts()->getList();

Se quiser, você pode aplicar filtros para a busca de contas bancárias, como por exemplo, filtrar pelo código do banco:

<?php
$bankAccounts = $pagarme->bankAccounts()->getList([
    'bank_code' => '341'
]);

Recebedores

Para dividir uma transação entre várias entidades, é necessário ter um recebedor para cada uma dessas entidades. Recebedores contém informações da conta bancária para onde o dinheiro será enviado, e possuem outras informações para saber quanto pode ser antecipado por ele, ou quando o dinheiro de sua conta será sacado automaticamente.

Criando um recebedor

<?php
$recipient = $pagarme->recipients()->create([
    'anticipatable_volume_percentage' => '85', 
    'automatic_anticipation_enabled' => 'true', 
    'bank_account_id' => '17899179', 
    'transfer_day' => '5', 
    'transfer_enabled' => 'true', 
    'transfer_interval' => 'weekly'
]);

Retornando recebedores

<?php
$recipients = $pagarme->recipients()->getList();

Se necessário, você pode aplicar filtros nessa busca. Por exemplo, se quiser retornar todos os recebedores, com transferência habilitada, você pode utilizar esse código:

<?php
$transferEnabledRecipients = $pagarme->recipients()->getList([
    'transfer_enabled' => true
]);

Retornando um recebedor

<?php
$recipient = $pagarme->recipients()->get([
    'id' => 'ID_DO_RECEBEDOR'
]);

Atualizando um recebedor

<?php
$updatedRecipient = $pagarme->recipients()->update([
    'id' => 'ID_DO_RECEBEDOR',
    'anticipatable_volume_percentage' => 80,
    'transfer_day' => 4
]);

Saldo de um recebedor

<?php
$recipientBalance = $pagarme->recipients()->getBalance([
    'recipient_id' => 'ID_DO_RECEBEDOR',
]);

Operações de saldo de um recebedor

<?php
$recipientBalanceOperations = $pagarme->recipients()->listBalanceOperation([
    'recipient_id' => 'ID_DO_RECEBEDOR'
]);

Operação de saldo específica de um recebedor

<?php
$recipientBalanceOperation = $pagarme->recipients()->getBalanceOperation([
    'recipient_id' => 'ID_DO_RECEBEDOR',
    'balance_operation_id' => 'ID_DA_OPERAÇÃO'
]);

Clientes

Clientes representam os usuários de sua loja, ou negócio. Este objeto contém informações sobre eles, como nome, e-mail e telefone, além de outros campos.

Criando um cliente

<?php
$customer = $pagarme->customers()->create([
    'external_id' => '#123456789',
    'name' => 'João das Neves',
    'type' => 'individual',
    'country' => 'br',
    'email' => '[email protected]',
    'documents' => [
      [
        'type' => 'cpf',
        'number' => '11111111111'
      ]
    ],
    'phone_numbers' => [
      '+5511999999999',
      '+5511888888888'
    ],
    'birthday' => '1985-01-01'
]);

Retornando clientes

<?php
$customers = $pagarme->customers()->getList();

Retornando um cliente

<?php
$customer = $pagarme->customers()->get([
    'id' => 'ID_DO_CLIENTE'
]);

Links de pagamento

Criando um link de pagamento

<?php
$paymentLink = $pagarme->paymentLinks()->create([
    'amount' => 10000,
    'items' => [
        [
            'id' => '1',
            'title' => "Fighter's Sword",
            'unit_price' => 4000,
            'quantity' => 1,
            'tangible' => true,
            'category' => 'weapon',
            'venue' => 'A Link To The Past',
            'date' => '1991-11-21'
        ],
        [
            'id' => '2',
            'title' => 'Kokiri Sword',
            'unit_price' => 6000,
            'quantity' => 1,
            'tangible' => true,
            'category' => 'weapon',
            'venue' => "Majora's Mask",
            'date' => '2000-04-27'
        ],
    ],
    'payment_config' => [
        'boleto' => [
            'enabled' => true,
            'expires_in' => 20
        ],
        'credit_card' => [
            'enabled' => true,
            'free_installments' => 4,
            'interest_rate' => 25,
            'max_installments' => 12
        ],
        'default_payment_method' => 'boleto'
    ],
    'max_orders' => 1,
    'expires_in' => 60
]);

Retornando links de pagamento

<?php
$paymentLinks = $pagarme->paymentLinks()->getList();

Retornando um link de pagamento

<?php
$paymentLink = $pagarme->paymentLinks()->get([
    'id' => 'ID_DO_LINK_DE_PAGAMENTO'
]);

Cancelando um link de pagamento

<?php
$canceledPaymentLink = $pagarme->paymentLinks()->cancel([
    'id' => 'ID_DO_LINK_DE_PAGAMENTO'
]);

Buscas avançadas (Elasticsearch)

Realizando uma busca

<?php
$search = $pagarme->search()->get([                
    "type" => "transaction",
    "query" => [
        "query" => [
            "terms" => [
                "items.id" => [8, 9] // Busca transações com itens de ID 8 e 9
            ]
        ]
    ]
]);

pagarme-php's People

Contributors

backstage-me-stg[bot] avatar devdrops avatar dfkimera avatar dudu avatar flyingluscas avatar gstpereira avatar jonathanribas avatar kennedytedesco avatar leonampd avatar leonardo-barbosa avatar lflimeira avatar lucaslima-7 avatar lucianopf avatar marcoworms avatar murilohns avatar petriuslima avatar rapitivo avatar ricardotulio avatar sfwill-dev avatar thamarahessel avatar williamokano avatar xduh avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

pagarme-php's Issues

SDK trata endereços e telefones de forma diferente da API

Pelo que foi analisado no seguinte trecho de código:

$customerData->address = new Address(
    get_object_vars($customerData->addresses[0])
);

$customerData->phone = new Phone($customerData->phones[0]);

A SDK está tratando os dados como um único objeto para Address e para Phone e a API utiliza um array de objetos.

Criar cartão através da hash

Atualmente, via SDK, não é possível criar um Card através do card_hash gerado via Pagarme.js, apenas com os dados completos do cartão. Gostaria de realizar essa operação para evitar trafegar dados de cartão "abertos" via rede.

A criação via hash é possível usando a API REST, passando o parâmetro card_hash no lugar dos dados do cartão, mas a funcionalidade não é exposta na SDK PHP.

Sugiro a criação de um método createFromHash(string $card_hash) que permita essa operação.

Posso abrir um PR com esse objetivo, se for interessante.

Obrigado!

Ao criar uma assinatura é necessário ter o endereço do Costumer

Contexto

Ao tentar criar uma assinatura é necessário ter populado um objeto de Address do Customer, pois quando se é populado os dados para envio para o endpoint da API de subscriptions, é feito o acesso ao objeto, conforme código abaixo:

https://github.com/pagarme/pagarme-php/blob/V3/lib/Subscription/Request/SubscriptionCreate.php#L67

Ambiente

O Ambiente não interfere pois o erro ocorre quando se tenta acessar um método no atributo address e o mesmo esta nulo, o mesmo erro deve acontecer phone. Ja que o mesmo também esta nulo

Passos para reproduzir

Criar uma assinatura, pode ser por boleto ou cartão sem passar o endereço do costumer.

Resultado esperado

Deveria criar uma assinatura sem a obrigatoriedade do endereço, ja que pelo Documentação o endereço somente é obrigatório quando for usar o antifraude, e como dito na Documentação quando vai usar o recurso de Subscription o mesmo não utiliza o antifraude, segue o trecho onde isso é mencionado:

OBS: As transações criadas pelas assinaturas não passam pelo antifraude, devido a ocorrência de fraudes nesse tipo de serviço serem praticamente nulas.
https://docs.pagar.me/api/?shell#objeto-subscription

Resultado atual

Quando se tenta criar uma subscription sem preenchimento de endereço ocorre o seguinte erro:
FatalThrowableError in SubscriptionCreate.php line 100: Call to a member function getStreet() on null

Possível correção

A forma de correção mais simples seria a verificação se os métodos citados abaixo tem o retorno nulo, antes de adicionar eles ao payload de envio:

https://github.com/pagarme/pagarme-php/blob/V3/lib/Subscription/Request/SubscriptionCreate.php#L67

https://github.com/pagarme/pagarme-php/blob/V3/lib/Subscription/Request/SubscriptionCreate.php#L68

Split Rules em transação com cartão de crédito

Como faço para utilizar as regras de split nas transações utilizando cartão de crédito? O código abaixo está ignorando as informações de "split_rules"

$pagarme->transaction()->creditCardTransaction(
         intval($itemPrice*100),
         $card,
         $customer,
         1,
          true,
          null,
          ['item' => $itemName],
          [
                'split_rules' => array(
                       array(
                            'recipient_id' => 're_cizsf7yqb00nefv6esyivk11k',
                            'charge_processing_fee' => false,
                            'liable' => true,
                            'percentage' => '80',
                        ),
                        array(
                            'recipient_id' => 're_cizk96xvh049bws6ey9wf92tq',
                            'charge_processing_fee' => true,
                            'liable' => false,
                            'percentage' => '20',
                 )
           )
     ]
);

Arrays como argumentos para construção de objetos

Contexto

Hoje, para realizar uma transação, temos 2 formas distintas para compor um objeto \PagarMe\Sdk\Customer\Customer:

  • Através da API, usando \PagarMe\Sdk\Customer\CustomerHandler->get(), que nos retorna uma estrutura de objetos completa;
  • Através do construtor, passando os dados como um array, onde as estruturas de Address e Phone são arrays dentro de Customer.

O Problema

A classe \PagarMe\Sdk\Transaction\Request\TransactionCreate sofreu alterações para esse problema, gerando instâncias de Address e Phone caso esses dados sejam arrays ao invés de objetos.

\PagarMe\Sdk\Transaction\Request\TransactionCreate

/**
 * @return array
 */
 public function getPayload()
 {
    $customer = $this->transaction->getCustomer();

    $address = $customer->getAddress();
    if (is_array($address)) {
        $address = new \PagarMe\Sdk\Customer\Address($address);
    }
    $phone = $customer->getPhone();
    if (is_array($phone)) {
        $phone = new \PagarMe\Sdk\Customer\Phone($phone);
    }

Para que isso seja resolvido, precisamos encontrar uma forma mais limpa e consistente para manipulação desses dados, cogitando manter as duas interfaces de entrada de dados (array e objeto) ou mantendo somente uma (objeto).

Captura de transação por token

Contexto

Hoje, como desenvolvedor, gostaria de fazer a captura de uma transação diretamente pelo token gerado na autorização (modelo checkout pagar.me).

Ambiente

  • SDK Pagar.me 3.1.1

Passos para reproduzir

  1. Obter um token de uma transação
  2. Realizar a captura (hoje através de um objeto \PagarMe\Sdk\Transaction\CreditCardTransaction)
  3. Validar a captura

Resultado esperado

Transação capturada sem a necessidade de buscar a transação na API.

boleto_url e boleto_barcode

Versão: 3.0.1
https://github.com/pagarme/pagarme-php/tree/V3/

Ao rodar o código abaixo não estou conseguindo recuperar o "boleto_url" e "boleto_barcode" porem o pedido aparece corretamente lá no Dashboard, parece que os getters estão faltando na classe BoletoTransaction.

$this->pagarMe = new PagarMe($apiKey);

$transaction = $this->pagarMe->transaction()->boletoTransaction($amount, $customer, $this->helper->getNotificationUrl());

Validação de POSTback

Na api v2 existia uma forma de validar as notificações recebidas utilizando: PagarMe::validateRequestSignature(file_get_contents('php://input'), $_SERVER['HTTP_X_HUB_SIGNATURE'])

Qual a forma de validar utilizando a api v3?
Obs.: Não achei na documentação.

Use tags

I think it is really dangerous to use "dev-master" as a composer requirement on my production environment.

Can you create a tag?

Thanks =)

Objeto Card não tem propriedade expiration_date

Contexto

Ao utilizar o SDK V3, para qualquer ação com cartão, o objeto retornado com ele não vem o atributo expiration_date, onde o mesmo esta no exemplo de retorno https://docs.pagar.me/api/?shell#retornando-um-cartao-salvo e quando se faz um CURL para o endpoint de consulta de cartão o mesmo atributo é retornado

Ambiente

Qualquer uso do SDK V3, pois a classe não tem esse atributo para ser populado

Passos para reproduzir

Usando qualquer um dos passos da wiki, listados abaixo:

/** @var $card \PagarMe\Sdk\Card\Card */
$card = $pagarMe->card()->create(
    '4242424242424242',
    'JOHN DOVE',
    '0722'
);
/** @var $card \PagarMe\Sdk\Card\Card */
$card = $pagarMe->card()->get('card_ci6y37h16wrxsmzyi');

Resultado esperado

O Objeto Card, deve ter o atributo expirationDate

Resultado atual

Atualmente o objeto Card não tem o atributo, expiration_date, referente ao retorno do endpoint

Possível correção

Adicionar o atributo ao objeto para o mesmo ser populado

[BUG] Não está sendo buildings de bulk_anticipation

Contexto

Ao tentar criar uma antecipação e passar o building como "true" ainda sim a antecipação é criada como pendente.

Ambiente

  • SDK Pagar.me v3.1.1
  • Servidor Linux Mint 18.1
  • PHP 5.6.28
  • Apache 2.4
  • MySQL 5.6

Passos para reproduzir

  • Criar uma antecipação
  • Passar como parâmetro building como true
  • Consultar que o $bulk->getStatus() não é building

Resultado esperado

Que o status da bulk_anticipation seja building

Resultado atual

O status da bulk_anticipation é pending

Possível correção

Alterar a linha https://github.com/pagarme/pagarme-php/blob/V3/lib/BulkAnticipation/Request/BulkAnticipationCreate.php#L69 e trocar de building para build. Não se o correto é true como valor ou como string, porém uma string true funciona.

Quando a assinatura está em teste, ao recuperá-la, como não tem transação, dá erro

Contexto

Quando a assinatura está em teste, ao recuperá-la, como não tem transação, o SubscriptionBuilder tenta setar a current_transaction com buildTransaction fornecendo um valor vazio.

Possível correção

O que eu fiz foi verificar se a current_transaction do Subscription não é vazia antes de tentar executar o buildTransaction:

$subscriptionData->current_transaction = $subscriptionData->current_transaction ? $this->buildTransaction($subscriptionData->current_transaction) : [];

[NFR] Make SplitRuleCollection Countable

IMHO the SplitRuleCollection could implement the Countable. Today I need to calculate how many Payables a transaction created, so I had to get the Transaction and then iterate over the SplitRules to get how many splits the transaction have.

$transaction = $pagarme->transaction->get($transactionId);
$splitRulesQtt = 0;
foreach ($transaction->getSplitRules() as $splitRule) {
    $splitRulesQtt++;
}

$payablesQtt = $transaction->getInstallments() * $splitRulesQtt;

Proposal

class SplitRuleCollection implements \ArrayAccess, \Iterator, \Countable
{
    // ... Existing code

    /**
     * Count the number of items in the collection.
     *
     * @return int
     */
    public function count()
    {
        return count($this->rules);
    }
}

Adicionar Metadata quando Capturar uma Transação

Contexto

Hoje só podemos adicionar metadata numa transação no momento de sua criação, como demonstrado na documentação. Seria interessante ter a opção para inserir metadata numa transação no ato de sua captura pelo Checkout Pagar.me, assim como é disponibilizado pela API.

Ambiente

  • SDK Pagar.me 0.1.6
  • PHP 5.4

Passos para reproduzir

  • Autorizar uma transação pelo Checkout Pagar.me
  • Obter o token
  • Notar que o metadata não pode ser adicionado no ato da captura dessa transação pelo token

Resultado esperado

Adicionar metadata na etapa de captura de uma transação pelo modo token do Checkout Pagar.me.

Resultado atual

Recurso não implementado.

Possível correção

Adicionar a manipulação de metadata no objeto PagarMe\Sdk\Transaction\Request\TransactionCapture.

Array to string conversion

Boa tarde,
estou tendo este erro quase em qualquer request que eu faço atráves do sdk, porém, eu consigo realizar o mesmo request pelo browser, sem problemas.

Pelo pouco que sei, entendo que o response do curl está sendo erro 500. Porém, como disse o mesmo request pelo browser está ok.

Aguardo resposta, abraço.

issue

sublime

Fui até o fundo desta situação e descobri que o problema está na classe Request.php, linha 22.
parameters1

O método parent::getApiKey() já esta retornando um array, resultando em um array_merge defeituoso:
api_key => api_key => ak_test......; Após um dump na instância RestClient, reparem no endpoint montado.
parameters3

Alterando a linha 22 da classe Request.php para:
parameters_solve_1

o endpoint é montado corretamente e o restante do sdk funciona corretamente.
parameters_solve_2

Espero que considerem está situação... Obrigado.

Problema ao setar a apiKey

Importei a api v3 no meu projeto e já estou com um problema ao setar a apiKey: Class 'PagarMe\Sdk\Client' not found in PagarMe.php on line 134

Problema ao instalar a biblioteca no Laravel 5.4

Contexto

Ao tentar rodar o composer require pagarme/pagarme-php foi notificado que a versão necessário do Guzzle é conflitante com a versão necessário do Guzzle para o Laravel.

Possível correção

Atualizar a versão necessário do Guzzle na biblioteca do Pagarme para uma versão compatível com a do Laravel 5.4.

Screenshots

image

image

Erro 500 ao tentar capturar transaçao

E ai pessoal, to tentando implementar o PagarMe e estou enfrentando um problema aqui, estou em ambiante de teste, executando uma transação de teste, tudo ocorre normal no front-end, o problema é quando o tenho que capturar a transação no backend, veja bem:

Na linha 26 do Request.php onde a requisiçao é feita, em vez de eu receber um JSON com uma respota de sucesso ou erro eu estou recebendo uma página de 500 internal error, gerando uma excessão na linha 29 do Request.php primeiramente eu achei que o erro era da minha parte, eu chequei e testei todas as variáveis aqui e não estou conseguindo achar o erro, será que vocês poderiam me ajudar?

Criar transação sem dados do customer

  • Problema: Criar uma transação sem dados do customer
  • Tentativas:
<?php
require __DIR__.'/vendor/autoload.php';

date_default_timezone_set('America/Sao_Paulo');
$pagarMe = new \PagarMe\Sdk\PagarMe('API_KEY');

$card = new \PagarMe\Sdk\Card\Card([
    'id' => 'card_cizri9czn00csfi6e1ygzw9vz',
    'cvv' => '122'
]);

//tentativa 1
$customer = new \PagarMe\Sdk\Customer\Customer(
    [
        'address' => new \PagarMe\Sdk\Customer\Address([]),
        'phone' => new  \PagarMe\Sdk\Customer\Phone([])
    ]
);
//tentativa 2
$customer = new \PagarMe\Sdk\Customer\Customer(
    [
        'address' => [],
        'phone' => []
    ]
);

$transaction = $pagarMe->transaction()->creditCardTransaction(
    1000,
    $card,
    $customer,
    1,
    true,
    'www.asd.com.br',
    ['idProduto' => 13933139],
    []
);

Mas são enviado os dados do customer, mas com valores null e a API acaba verificando e barrrando, mesmo com antifraude.

Talvez seja problema da API?

Obrigado

Doesn't create transaction when expiration_month is an integer lower than 10

<?php
    require("pagarme-php/Pagarme.php");

    Pagarme::setApiKey("ak_test_TSgC3nvXtdYnDoGKgNLIOfk3TFfkl9");

    $transaction = new PagarMe_Transaction(array(
        "amount" => 4400,
        "metadata" => array(
            "order_id" => "2235451",
            "event_id" => "17533",
            "products_amount" => 40,
            "payment_type_id" => 18,
            "installment_amount" => 0
        ),
        "payment_method" => "credit_card",
        "async" => false,
        "card" => array(
            "card_number" => "5232840325291779",
            "card_holder_name" => "Joao G F E MIRANDA",
            "card_expiration_month" => 6,
            "card_expiration_year" => 2019,
            "card_cvv" => 123
        ),
        "installments" => 1     
    ));

    $transaction->charge();

    $status = $transaction->status;

    echo $status;
?>

This throws an exception:

Fatal error: Uncaught exception 'PagarMe_Exception' with message 'Data de expiração inválida ' in /Users/joaofaria/new/php-poc/pagarme-php/lib/Pagarme/Model.php:24

RSA-encrypted ciphertext isn't a hash

Hi,

https://github.com/pagarme/pagarme-php/blob/master/lib/Pagarme/CardHashCommon.php

This class has a confusing name. CardHash implies a cryptographic hash (e.g. SHA256) is being used, but you're encrypting with RSA. Interestingly, you're not specifying the padding client-side, so you're encrypting with PKCS1v1.5 padding. (This is OpenSSL's default.)

If your server-side API is actually decrypting PKCS1v1.5 padded ciphertexts, this is actually vulnerable to Bleichenbacher's 1998 Padding Oracle Attack. (I have no way of confirming this without an API key, of course.)

See ZF2015-10 for an example of how this is usually mitigated.

See also: this blog post on Cryptographic right answers.

Problemas ao usar Address e Phone como objetos

Olá,

Estou tentando usar a API do PagarMe, como ensinado na documentação aqui (aliás, a documentação básica está aparentemente errada, já que usando Composer, não consigo seguir os passos daqui: https://docs.pagar.me/transactions/).

Entretanto, ao criar um Address e Phone, passando para o Customer e tentando criar uma transação acontece o seguinte erro: Cannot use object of type PagarMe\Sdk\Customer\Address as array in C:\Projects\pagarmetest\vendor\pagarme\pagarme-php\lib\Transaction\Request\TransactionCreate.php.

O erro é meio óbvio pois olhando o código é simples de corrigir aparentemente:

<?php
 'address' => [
    'street'        => $address['street'],
    'street_number' => $address['street_number'],
    'complementary' => isset($address['complementary']) ? $address['complementary']: null,
    'neighborhood'  => $address['neighborhood'],
    'zipcode'       => $address['zipcode']
]

Como podem ver, o código está tentando utilizar o $address como se fosse um array, mas ele é uma instância de \PagarMe\Sdk\Customer\Address.

Alterando para (por exemplo) $address->getAddress(), já corrige o problema, mas eu realmente não sei por que este código foi escrito assim.

Alguma coisa que preciso fazer?
O código inteiro é este:

<?php
$pagarMe = new PagarMe("xxx");

$card = $pagarMe->card()->create('xxx', 'JOHN DOVE', '0722');

$address = new \PagarMe\Sdk\Customer\Address([
	'street' => 'xxx',
	'streetNumber' => 'xx',
	'neighborhood' => 'xxx',
	'zipcode' => 'xxx',
	'complementary' => '',
	'city' => 'xxx',
	'state' => 'xxx',
	'country' => 'xxx',
]);

$phone = new \PagarMe\Sdk\Customer\Phone(['ddd' => '47', 'number' => '99999999', 'ddi' => '55']);

$customer = $pagarMe->customer()->create(
	'John Dove',
	'[email protected]',
	'09130141095',
	$address,
	$phone,
	'15021994',
	'M'
);

$transaction = $pagarMe->transaction()->creditCardTransaction(
	1000,
	$card,
	$customer,
	1,
	true,
	'http://requestb.in/pkt7pgpk',
	['idProduto' => 13933139]
);

Ps.: Esse código é só um exemplo que estou tentando fazer pois estou apenas testando a API para uso posterior

[NFR] Ability to fetch the payables from a given transaction

I was looking into the pagar.me docs and I noticed that on the payables endpoint it is possible to fetch a list of payables using any property as filter.

Said that, I need the ability to fetch those payables with the SDK V3. I know that it's possible to fetch it using the elasticsearch advanced search, but I think it could be a good idea to have an specific method (under payables domain) to get those data and not using the elastic search stuff.

Transação de boletos com problemas devido a propriedades não declaradas.

Versão 3.0

Ao executar o método implementado e referenciado na issue: #116

public function getBoletoUrl() { return $this->boletoUrl; }
public function getBoletoBarcode() { return $this->boletoBarcode; }

Está retornando erros, pois a propriedade boletoUrl e boletoBarcode não existem no objeto em questão.

Isto acontece por conta do método fill da trait Fillable implementada na class AbstractTransaction: fill()

Este método checa se a propriedade existe antes de setar como field do objeto.

Alteração de pacote para composer

Seria um grande diferencial para o pacote de integração estar em formato do composer, assim poderia ser incluido mais facilmente em Frameworks que trabalham com o composer!

Atualmente existem muitos Frameworks utilizando: Laravel, Synfony, Zend 2 entre outros.

[BUG] Erro ao cancelar bulk_anticipation

Contexto

BUG: URL da rota de deletar bulk_anticipation está incorreta.

A URL neste arquivo (https://github.com/pagarme/pagarme-php/blob/V3/lib/BulkAnticipation/Request/BulkAnticipationDelete.php#L54) contém um /delete no final. O correto seria sem. Por conta disso as antecipações em status building não são deletadas.

Ambiente

  • SDK Pagar.me v3.1.1
  • Servidor Linux Min 17
  • PHP 5.6.28
  • Apache 2.4
  • MySQL 5.6

Passos para reproduzir

  • Criar um bulk_anticipation com o build definido como true
  • Será retornado um objeto bulk_anticipation com o status building
  • Chamar o método $client->bulkAnticipation()->delete($bulkAnticipation)

Resultado esperado

Espera-se que retorne 200 e a antecipação seja cancelada.

Resultado atual

Uma exceção é lançada e a antecipação não é deletada, mantendo "presos" todos os payables utilizados na antecipação pelos próximos 5 minutos.

Possível correção

Remover o /delete no endpoint da API, assim como indicado na documentação: https://docs.pagar.me/api/#deletando-uma-antecipacao-building

Adicionando a Classe para trabalhar com a Pesquisa

Não há classe para trabalhar com o endpoint Search.

Criei a classe e o método search(), que recebe o $type, $query e $search_type de acordo com a documentação. Além dele, o método searchTransactionByMetadata() para pesquisar metadados em transações.

Invalid resource type: boolean in guzzleHttp

Estou trabalhando na migração da v1.1 para a v3 desse SDK e estou tomando erro quando tento criar transações. A versão 1.1 funciona perfeitamente.

Unknown Error (0): Invalid resource type: boolean in /media/sf_scire/system/vendor/guzzlehttp/streams/src/Stream.php on line 85

Meu código:

$address = new \PagarMe\Sdk\Customer\Address([
    'street' => $customer->address,
    'street_number' => $customer->addrNumber,
    'complementary' => $customer->complement,
    'neighborhood'  => $customer->neighborhood,
    'city' => $customer->city,
    'state' => $customer->state,
    'zipcode' => $customer->zip,
]);

$phone = new \PagarMe\Sdk\Customer\Phone([
    'ddd' => $customer->ddd,
    'number' => $customer->phone,
]);

$customer = $pagarMe->customer()->create(
    $customer->name,
    $customer->email,
    $customer->documentNumber,
    $address,
    $phone
);

$transaction = $pagarMe->transaction()->boletoTransaction(
    $orderValue,
    $customer,
    postbackUrl()
);

SDK V3 - Dúvidas

Essa V3 do SDK já está disponível para rodar em produção? É que não vi na Wiki alguma menção sobre o card_hash e também na criação de um cartão o CVV não é informado.

Impossibilidade do envio do parâmetro soft_descriptor

Contexto

Ao criar uma transação, não consigo enviar o parâmetro soft_descriptor disponível na API. Segue exemplo das tentativas:

['softDescriptor' => TESTE]
//OU
['soft_descriptor' => TESTE]

$extraAttributes = ['soft_descritor'     => $soft_descriptor]

Ambiente

  • SDK Pagar.me 3.1.8
  • Servidor Linux
  • PHP 5.4

Passos para reproduzir

  1. Definir o valor do soft_descriptor
  2. Criar a transação, enviando o parâmetro acima em $extraAttributes

Resultado esperado

No JSON de retorno da API, o esperado era:
"soft_descriptor":"TESTE",

Resultado atual

Segue o JSON retornado:
"soft_descriptor":null,

Composer desatualizado

Estou utilizando a lib pelo composer e a versão esta desatualizada.

V1.1.0 - 2015-11-13 16:08 UTC

Nessa versão não tem o método validateRequestSignature, provavelmente muitas outras melhorias pois tem vários commits a partir dessa data.

A versão dev-master esta atualizada, porém como esta em desenvolvimento pode esta instável.

[Question] SDK V3 Payable object don't have recipient_id

Digging into the SDK and the api documentation (https://docs.pagar.me/api/#objeto-payable) I noticed that there's no mention about the recipient_id on the Payable return object.

I checked on the api and it return this info. Follow the object that I got from the api call:

[{
    "object": "payable",
    "id": 107xxxxx,
    "status": "waiting_funds",
    "amount": 6492,
    "fee": 0,
    "anticipation_fee": 0,
    "installment": 12,
    "transaction_id": 132xxxx,
    "split_rule_id": "sr_cizhajmq400c5zg6e0xxxxxxx",
    "bulk_anticipation_id": null,
    "recipient_id": "re_ciy67slew0220kn6evxxxxxxx",
    "payment_date": "2018-02-20T03:00:00.000Z",
    "original_payment_date": null,
    "type": "credit",
    "payment_method": "credit_card",
    "date_created": "2017-02-22T18:28:23.527Z"
}]

PS.: I added some x characters into the id, transaction_id, split_rule_id and recipient_id to "hide" the original data.

There's any intention in adding this on the SDK? Is the documentation incomplete yet?

Thanks in advance.

Atualização de Plano não funciona

Embora a funcionalidade esteja OK via cURL, não está funcionando através do código PHP indicado na documentação, que faz uso dessa biblioteca:

require("pagarme-php/Pagarme.php");

    Pagarme::setApiKey("ak_test_grXijQ4GicOa2BLGZrDRTR5qNQxJW0");

    $plan = PagarMe_Plan::findById("12785");

    $plan->setName("plano silver");

A resposta é válida, mas o nome não é alterado.

Retorno da criação e assinatura

Estou utilizando o branch master (v2) e estou com problema ao criar uma assinatura, pois não tenho retorno dos dados após a assinatura criada, assim como acontece na criação do plano. Poderiam ter colocado na documentação o retorno das requisições.

Exception without message

Hi,

I was testing an integration and an Exception was raised without any message about the error.
I extracted the error object from the lib and obtained this:

Pagarme error with no message

In PHPUnit I have this:

1) Test\PagarmeServiceTest::testGetTransactionByIdWithSuccess
PagarMe_Exception:

/var/www/myapp/vendor/pagarme/pagarme-php/lib/Pagarme/Exception.php:26
/var/www/myapp/vendor/pagarme/pagarme-php/lib/Pagarme/TransactionCommon.php:45
/var/www/myapp/vendor/pagarme/pagarme-php/lib/Pagarme/Transaction.php:6

Issue/Pull Request templates

Contexto

Seria excelente usar os recursos de template para Issue e Pull Request neste repositório, assim podemos nos beneficiar de um formato padrão para detalhamento de problema/melhorias.

Resultado atual

As Issues e Pull Requests criados atualmente não seguem um padrão e muitas vezes carecem de informação, o que dificulta investigação e priorização deles.

Posssível correção

Criar um arquivo .github/ISSUE_TEMPLATE.md e um arquivo .github/PULL_REQUEST_TEMPLATE.md contendo um modelo para criação de Issue e Pull Request.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.