Skip to content

Cliente em PHP para integração server-side com APIs Moip v2

License

Notifications You must be signed in to change notification settings

dyegonery/moip-sdk-php

 
 

Repository files navigation

MoIP v2 PHP client SDK

O jeito mais simples e rápido de integrar o Moip a sua aplicação PHP

Estado atual do sdk

Scrutinizer Code Quality Code Climate Codacy Badge StyleCI Build Status Circleci Status

Estatísticas

Total Downloads Monthly Downloads

Versões

Latest Stable Version Latest Unstable Version


Índice

Packages

Dependências

require

  • PHP >= 5.5
  • rmccue/requests >= 1.0

require-dev

  • phpunit/phpunit ~ 4.0

Instalação

Execute em seu shell:

composer require moip/moip-sdk-php

Configurando a autenticação

Por Basic Auth

require 'vendor/autoload.php';

use Moip\Moip;
use Moip\Auth\BasicAuth;

$token = '01010101010101010101010101010101';
$key = 'ABABABABABABABABABABABABABABABABABABABAB';

$moip = new Moip(new BasicAuth($token, $key), Moip::ENDPOINT_SANDBOX);

Por OAuth

require 'vendor/autoload.php';

use Moip\Moip;
use Moip\Auth\OAuth;

$access_token = '33031e2aad484051b89030487e59d133_v2';
$moip = new Moip(new OAuth($access_token), Moip::ENDPOINT_SANDBOX);

Clientes

Criando um comprador

Nesse exemplo será criado um pedido com dados do cliente - Com endereço de entrega e de pagamento.

try {
    $customer = $moip->customers()->setOwnId(uniqid())
        ->setFullname('Fulano de Tal')
        ->setEmail('[email protected]')
        ->setBirthDate('1988-12-30')
        ->setTaxDocument('22222222222')
        ->setPhone(11, 66778899)
        ->addAddress('BILLING',
            'Rua de teste', 123,
            'Bairro', 'Sao Paulo', 'SP',
            '01234567', 8)
        ->addAddress('SHIPPING',
                  'Rua de teste do SHIPPING', 123,
                  'Bairro do SHIPPING', 'Sao Paulo', 'SP',
                  '01234567', 8)
        ->create();
    print_r($customer);
} catch (Exception $e) {
    printf($e->__toString());
}

Consultando os dados de um comprador

try {
    $customer_id = 'CUS-Q3BL0CAJ2G33';
    $customer = $moip->customers()->get($customer_id);
    print_r($customer);
} catch (Exception $e) {
    printf($e->__toString());
}

Pedidos

Criando um pedido com o comprador que acabamos de criar

Nesse exemplo com vários produtos e ainda especificando valor de frete, valor adicional e ainda valor de desconto.

try {
    $order = $moip->orders()->setOwnId(uniqid())
        ->addItem("bicicleta 1",1, "sku1", 10000)
        ->addItem("bicicleta 2",1, "sku2", 11000)
        ->addItem("bicicleta 3",1, "sku3", 12000)
        ->addItem("bicicleta 4",1, "sku4", 13000)
        ->addItem("bicicleta 5",1, "sku5", 14000)
        ->addItem("bicicleta 6",1, "sku6", 15000)
        ->addItem("bicicleta 7",1, "sku7", 16000)
        ->addItem("bicicleta 8",1, "sku8", 17000)
        ->addItem("bicicleta 9",1, "sku9", 18000)
        ->addItem("bicicleta 10",1, "sku10", 19000)
        ->setShippingAmount(3000)->setAddition(1000)->setDiscount(5000)
        ->setCustomer($customer)
        ->create();

    print_r($order);
} catch (Exception $e) {
    printf($e->__toString());
}

Consultando um pedido

try {
    $order_id = 'ORD-KZCH1S1ORAH23';
    $order = $moip->orders()->get($order_id);
    print_r($order);
} catch (Exception $e) {
    printf($e->__toString());
}

Pagamentos

Cartão de crédito

Após criar o pedido basta criar um pagamento nesse pedido.

Com hash

Para mais detalhes sobre a geração de hash com os dados do cartão consulte a documentação.

try {
    $hash = 'i1naupwpTLrCSXDnigLLTlOgtm+xBWo6iX54V/hSyfBeFv3rvqa1VyQ8/pqWB2JRQX2GhzfGppXFPCmd/zcmMyDSpdnf1GxHQHmVemxu4AZeNxs+TUAbFWsqEWBa6s95N+O4CsErzemYZHDhsjEgJDe17EX9MqgbN3RFzRmZpJqRvqKXw9abze8hZfEuUJjC6ysnKOYkzDBEyQibvGJjCv3T/0Lz9zFruSrWBw+NxWXNZjXSY0KF8MKmW2Gx1XX1znt7K9bYNfhA/QO+oD+v42hxIeyzneeRcOJ/EXLEmWUsHDokevOkBeyeN4nfnET/BatcDmv8dpGXrTPEoxmmGQ==';
    $payment = $order->payments()
        ->setCreditCardHash($hash, $customer)
	->setInstallmentCount(3)
	->setStatementDescriptor('teste de pag')
	->setDelayCapture(false)
	->execute();
	print_r($payment);
} catch (Exception $e) {
    printf($e->__toString());
}

Com dados do cartão

Esse método requer certificação PCI. Consulte a documentação.

try {
    $payment = $order->payments()->setCreditCard(12, 21, '4073020000000002', '123', $customer)
        ->execute();

    print_r($payment);
} catch (Exception $e) {
    printf($e->__toString());
}

Criando um pagamento com boleto

$logo_uri = 'https://cdn.moip.com.br/wp-content/uploads/2016/05/02163352/logo-moip.png';
$expiration_date = new DateTime();
$instruction_lines = ['INSTRUÇÃO 1', 'INSTRUÇÃO 2', 'INSTRUÇÃO 3'];
try {
    $payment = $order->payments()  
        ->setBoleto($expiration_date, $logo_uri, $instruction_lines)
        ->execute();
    print_r($payment);
} catch (Exception $e) {
    printf($e->__toString());
}

Reembolsos

Para fazer reembolsos é necessário ter o objeto Payment do pagamento que você deseja reembolsar.

Cartão de crédito

Valor Total

try {
    $refund = $payment->refunds()->creditCardFull();
    print_r($refund);
} catch (Exception $e) {
    printf($e->__toString());
}

Valor Parcial

try {
    $amount = 30000;
    $refund = $payment->refunds()->creditCardPartial($amount);
    print_r($refund);
} catch (Exception $e) {
    printf($e->__toString());
}

Conta bancária

Valor Total

try {
    $type = 'CHECKING';
    $bank_number = '001';
    $agency_number = 4444444;
    $agency_check_number = 2;
    $account_number = 1234;
    $account_check_number = 4;
    $refund = $payment->refunds()
	->bankAccountFull($type, $bank_number, $agency_number, $agency_check_number, $account_number, $account_check_number, $customer);
    print_r($refund);
} catch (Exception $e) {
    printf($e->__toString());
}

Valor Parcial

try {
    $amount = 30000;
    $type = 'SAVING';
    $bank_number = '001';
    $agency_number = 4444444;
    $agency_check_number = 2;
    $account_number = 1234;
    $account_check_number = 4;
    $refund = $payment->refunds()
	->bankAccountPartial($amount, $type, $bank_number, $agency_number, $agency_check_number, $account_number, $account_check_number, $customer);
    print_r($refund);
} catch (Exception $e) {
    printf($e->__toString());
}

Multipedidos

Criando um multipedido

try {
    $order = $moip->orders()->setOwnId(uniqid())
        ->addItem("bicicleta 1",1, "sku1", 10000)
        ->addItem("bicicleta 2",1, "sku2", 11000)
        ->addItem("bicicleta 3",1, "sku3", 12000)
        ->addItem("bicicleta 4",1, "sku4", 13000)
        ->setShippingAmount(3000)
        ->setAddition(1000)
        ->setDiscount(5000)
        ->setCustomer($customer)
        ->addReceiver('MPA-VB5OGTVPCI52', 'PRIMARY', NULL);
    $order2 = $moip->orders()->setOwnId(uniqid())
        ->addItem("bicicleta 1",1, "sku1", 10000)
        ->addItem("bicicleta 2",1, "sku2", 11000)
        ->addItem("bicicleta 3",1, "sku3", 12000)
        ->setShippingAmount(3000)
        ->setAddition(1000)
        ->setDiscount(5000)
        ->setCustomer($customer)
        ->addReceiver('MPA-IFYRB1HBL73Z', 'PRIMARY', NULL); 

    $multiorder = $this->moip->multiorders()
        ->setOwnId(uniqid())
        ->addOrder($order)
        ->addOrder($order2)
        ->create();
    print_r($multiorder);
} catch (Exception $e) {
    printf($e->__toString());
}

Consultando um multipedido

try {
    $multiorder_id = 'ORD-KZCH1S1ORAH25';
    $multiorder = $moip->multiorders()->get($multiorder_id);
    print_r($multiorder);
} catch (Exception $e) {
    printf($e->__toString());
}

Multipagamentos

Criando um multipagamento

try {
    $hash = 'i1naupwpTLrCSXDnigLLTlOgtm+xBWo6iX54V/hSyfBeFv3rvqa1VyQ8/pqWB2JRQX2GhzfGppXFPCmd/zcmMyDSpdnf1GxHQHmVemxu4AZeNxs+TUAbFWsqEWBa6s95N+O4CsErzemYZHDhsjEgJDe17EX9MqgbN3RFzRmZpJqRvqKXw9abze8hZfEuUJjC6ysnKOYkzDBEyQibvGJjCv3T/0Lz9zFruSrWBw+NxWXNZjXSY0KF8MKmW2Gx1XX1znt7K9bYNfhA/QO+oD+v42hxIeyzneeRcOJ/EXLEmWUsHDokevOkBeyeN4nfnET/BatcDmv8dpGXrTPEoxmmGQ==';
    $payment = $multiorder->multipayments()
        ->setCreditCardHash($hash, $customer)
	->setInstallmentCount(3)
	->setStatementDescriptor('teste de pag')
	->setDelayCapture(false)
	->execute();
	print_r($payment);
} catch (Exception $e) {
    printf($e->__toString());
}

Webhooks

O PHP, por padrão, está preparado para receber apenas alguns tipos de content-type (application/x-www-form-urlencoded e multipart/form-data). A plataforma do Moip, no entanto, envia dados no formato JSON, o qual a linguagem não está preparada para receber por padrão. Para receber e acessar os dados enviados pelo Moip, você precisa adicionar o seguinte código ao seu arquivo que receberá os webhooks:

// Pega o RAW data da requisição
$json = file_get_contents('php://input');
// Converte os dados recebidos
$response = json_decode($json, true);

Documentação

Documentação oficial

Testes

Por padrão os testes não fazem nenhuma requisição para a API do Moip. É possível rodar os testes contra o ambiente de Sandbox do moip, para isso basta setar a variável de ambiente:

  • MOIP_ACCESS_TOKEN Token de autenticação do seu aplicativo Moip.

Como registrar seu aplicativo Moip

Para registrar seu aplicativo Moip você precisará de suas chaves de acesso. Como obter suas chaves de acesso.

Exemplo:

export MOIP_ACCESS_TOKEN=76926cb0305243c8adc79aad54321ec1_v2
vendor/bin/phpunit -c .

Licença

The MIT License

About

Cliente em PHP para integração server-side com APIs Moip v2

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • PHP 100.0%