moip/moip-sdk-php

Name: moip-sdk-php

Owner: Moip Pagamentos

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

Created: 2014-05-19 13:00:16.0

Updated: 2018-01-18 21:53:55.0

Pushed: 2018-01-17 18:34:16.0

Homepage:

Size: 740

Language: PHP

GitHub Committers

UserMost Recent Commit# Commits

Other Committers

UserEmailMost Recent Commit# Commits

README

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

Estatísticas

Total Downloads Monthly Downloads

Versões

Latest Stable Version Latest Unstable Version


Índice

Packages
Dependências
require require-dev
Instalação

Execute em seu shell:

composer require moip/moip-sdk-php
Configurando a autenticação
Por Basic Auth
ire 'vendor/autoload.php';

Moip\Moip;
Moip\Auth\BasicAuth;

en = '01010101010101010101010101010101';
 = 'ABABABABABABABABABABABABABABABABABABABAB';

p = new Moip(new BasicAuth($token, $key), Moip::ENDPOINT_SANDBOX);
Por OAuth
ire 'vendor/autoload.php';

Moip\Moip;
Moip\Auth\OAuth;

ess_token = '33031e2aad484051b89030487e59d133_v2';
p = 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.

tomer = $moip->customers()->setOwnId(uniqid())
->setFullname('Fulano de Tal')
->setEmail('fulano@email.com')
->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();
t_r($customer);
Consultando os dados de um comprador
tomer = $moip->customers()->get('CUS-Q3BL0CAJ2G33');
t_r($customer);
Adicionar cartão de crédito
tomer = $moip->customers()->creditCard()
->setExpirationMonth('05')
->setExpirationYear(2018)
->setNumber('4012001037141112')
->setCVC('123')
->setFullName('Jose Portador da Silva')
->setBirthDate('1988-12-30')
->setTaxDocument('CPF', '33333333333')
->setPhone('55','11','66778899')
->create(CUSTOMER_ID);
t_r($customer);
Deletar cartão de crédito
p->customers()->creditCard()->delete(CREDIT_CARD_ID);
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.

er = $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();
t_r($order);
Consultando um pedido
Pedido específico
er = $moip->orders()->get('ORD-KZCH1S1ORAH23');
t_r($order);
Todos os Pedidos Sem Filtro
ers = $this->moip->orders()->getList();
Com Filtros
ters = new Filters();
ters->greaterThanOrEqual(OrdersList::CREATED_AT, '2017-08-17');
ters->in(OrdersList::PAYMENT_METHOD, ['BOLETO', 'DEBIT_CARD']);
ters->lessThan(OrdersList::VALUE, 100000);

ers = $this->moip->orders()->getList(null, $filters);
Com Paginação
ers = $this->moip->orders()->getList(new Pagination(10,0));
Consulta Valor Específico
ers = $this->moip->orders()->getList(null, null, 'josé silva');

Também é possível usar paginação, filtros e consulta de valor específico juntos

ters = new Filters();
ters->greaterThanOrEqual(OrdersList::CREATED_AT, '2017-08-17');
ters->lessThan(OrdersList::VALUE, 100000);

ers = $this->moip->orders()->getList(new Pagination(10,0), $filters, 'josé silva');
Pagamentos
Criação
Cartão de crédito

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

Inserir dados do portador

Para realizar o pagamento, via cartão de crédito, utilizando o cartão de um terceiro (quando o cliente não é o portador do cartão que será utilizado), é necessário que estes dados sejam diferenciados e informados corretamente, para cada etapa do fluxo.

der = $moip->holders()->setFullname('Jose Silva')
->setBirthDate("1990-10-10")
->setTaxDocument('22222222222', 'CPF')
->setPhone(11, 66778899, 55)
->setAddress('BILLING', 'Avenida Faria Lima', '2927', 'Itaim', 'Sao Paulo', 'SP', '01234000', 'Apt 101');
Com hash

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

h = 'i1naupwpTLrCSXDnigLLTlOgtm+xBWo6iX54V/hSyfBeFv3rvqa1VyQ8/pqWB2JRQX2GhzfGppXFPCmd/zcmMyDSpdnf1GxHQHmVemxu4AZeNxs+TUAbFWsqEWBa6s95N+O4CsErzemYZHDhsjEgJDe17EX9MqgbN3RFzRmZpJqRvqKXw9abze8hZfEuUJjC6ysnKOYkzDBEyQibvGJjCv3T/0Lz9zFruSrWBw+NxWXNZjXSY0KF8MKmW2Gx1XX1znt7K9bYNfhA/QO+oD+v42hxIeyzneeRcOJ/EXLEmWUsHDokevOkBeyeN4nfnET/BatcDmv8dpGXrTPEoxmmGQ==';
ment = $order->payments()
->setCreditCardHash($hash, $holder)
->setInstallmentCount(3)
->setStatementDescriptor('teste de pag')
->execute();
t_r($payment);
Com dados do cartão

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

ment = $order->payments()->setCreditCard(12, 21, '4073020000000002', '123', $holder)
->execute();
t_r($payment);
Criando um pagamento com boleto
o_uri = 'https://cdn.moip.com.br/wp-content/uploads/2016/05/02163352/logo-moip.png';
iration_date = new DateTime();
truction_lines = ['INSTRUÇÃO 1', 'INSTRUÇÃO 2', 'INSTRUÇÃO 3'];
ment = $order->payments()  
->setBoleto($expiration_date, $logo_uri, $instruction_lines)
->execute();
t_r($payment);
Criando um pagamento com Débito Bancário

No pagamento por débito bancário online também são enviados apenas 3 parâmetros:

Consulta
ment = $moip->payments()->get('PAYMENT-ID');
t_r($payment);
Capturar pagamento pré-autorizado
tured_payment = $payment->capture();
t_r($captured_payment);
Cancelar pagamento pré-autorizado

O método avoid usado para cancelamento de pagamentos pré-autorizados foi substituído por cancel.

ment = $payment->cancel();
t_r($payment);
Reembolsos

Para fazer reembolsos é necessário ter o objeto `Payment` do pagamento que você deseja reembolsar ou passar apenas o ID do pagamento.

Cartão de crédito
Valor Total Com o objeto
und = $payment->refunds()->creditCardFull();
t_r($refund);
Valor Parcial Com o objeto
und = $payment->refunds()->creditCardPartial(30000);
t_r($refund);
Conta bancária
Valor Total Com o objeto
e = 'CHECKING';
k_number = '001';
ncy_number = 4444444;
ncy_check_number = 2;
ount_number = 1234;
ount_check_number = 4;
und = $payment->refunds()
->bankAccountFull(
    $type,
    $bank_number,
    $agency_number,
    $agency_check_number,
    $account_number,
    $account_check_number,
    $customer
);
t_r($refund);
Valor Parcial Com o objeto
unt = 30000;
e = 'SAVING';
k_number = '001';
ncy_number = 4444444;
ncy_check_number = 2;
ount_number = 1234;
ount_check_number = 4;
und = $payment->refunds()
->bankAccountPartial(
    $amount,
    $type,
    $bank_number,
    $agency_number,
    $agency_check_number,
    $account_number,
    $account_check_number,
    $customer
);
t_r($refund);
Consultar reembolso
und = $payment->refunds()->get($refund_id);
OAuth (Moip Connect)
Solicitar permissões de acesso ao usuário

Para solicitar as permissões você deverá invocar o método getAuthUrl (que monta a URL) e redirecionar o usuário para a URL gerada. O usuário deverá conceder a permissão e então ele será redirecionado para a URL determinada pelo seu App e passada como atributo para o objeto Connect.

A URL passada como atributo deve ser exatamente a mesma que foi cadastrada na criação do APP, caso haja alguma divergência o usuário não será redirecionado corretamente.

Com a permissão concedida, você receberá um code que lhe permitirá gerar o accessToken de autenticação e processar requisições envolvendo outro usuário.

irect_uri = 'http://seusite.com.br/callback.php';
ent_id = 'APP-18JTHC3LOMT9';
pe = true;
nect = new Connect($redirect_uri, $client_id, $scope, Connect::ENDPOINT_SANDBOX);
nect->setScope(Connect::RECEIVE_FUNDS)
->setScope(Connect::REFUND)
->setScope(Connect::MANAGE_ACCOUNT_INFO)
->setScope(Connect::RETRIEVE_FINANCIAL_INFO);
er('Location: '.$connect->getAuthUrl());
Gerando access token OAuth

Abaixo usaremos o método authorize para gerar o access token OAuth. Note que é necessário instanciar o objeto Connect e passar os parâmetros como no exemplo abaixo.

Usamos a variável $code para enviar o code recebido pela permissão do usuário e inserimos no objeto com o método setCode.

A URL passada como atributo deve ser exatamente a mesma que foi cadastrada na criação do APP, caso haja alguma divergência não será possível recuperar o accessToken.

irect_uri = 'http://seusite.com.br/callback.php';
ent_id = 'APP-18JTHC3LOMT9';
pe = true;
nect = new Connect($redirect_uri, $client_id, $scope, Connect::ENDPOINT_SANDBOX);
ent_secret = '20f76456f6ec4874a1f38082d3139326';
nect->setClientSecret($client_secret);
e = 'f9053ca6e9853dd73f0bc4f332a5ce337b0bb0da';
nect->setCode($code);
h = $connect->authorize();
t_r($auth);
Multipedidos
Criando um multipedido
er = $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);
er2 = $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);

tiorder = $this->moip->multiorders()
->setOwnId(uniqid())
->addOrder($order)
->addOrder($order2)
->create();
t_r($multiorder);
Consultando um multipedido
tiorder_id = 'ORD-KZCH1S1ORAH25';
tiorder = $moip->multiorders()->get($multiorder_id);
t_r($multiorder);
Multipagamentos
Criando um multipagamento
h = 'i1naupwpTLrCSXDnigLLTlOgtm+xBWo6iX54V/hSyfBeFv3rvqa1VyQ8/pqWB2JRQX2GhzfGppXFPCmd/zcmMyDSpdnf1GxHQHmVemxu4AZeNxs+TUAbFWsqEWBa6s95N+O4CsErzemYZHDhsjEgJDe17EX9MqgbN3RFzRmZpJqRvqKXw9abze8hZfEuUJjC6ysnKOYkzDBEyQibvGJjCv3T/0Lz9zFruSrWBw+NxWXNZjXSY0KF8MKmW2Gx1XX1znt7K9bYNfhA/QO+oD+v42hxIeyzneeRcOJ/EXLEmWUsHDokevOkBeyeN4nfnET/BatcDmv8dpGXrTPEoxmmGQ==';
ment = $multiorder->multipayments()
->setCreditCardHash($hash, $customer)
->setInstallmentCount(3)
->setStatementDescriptor('teste de pag')
->execute();
t_r($payment);
Consulta
ment = $moip->payments()->get('MULTIPAYMENT-ID');
t_r($payment);
Conta Moip
Criação
eet = 'Rua de teste';
ber = 123;
trict = 'Bairro';
y = 'Sao Paulo';
te = 'SP';
 = '01234567';
plement = 'Apt. 23';
ntry = 'BRA';
a_code = 11;
ne_number = 66778899;
ntry_code = 55;
ntity_document = '4737283560';
uer = 'SSP';
ue_date = '2015-06-23';
ount = $moip->accounts()
->setName('Fulano')
->setLastName('De Tal')
->setEmail('fulano@email2.com')
->setIdentityDocument($identity_document, $issuer, $issue_date)
->setBirthDate('1988-12-30')
->setTaxDocument('16262131000')
->setType('MERCHANT')
->setPhone($area_code, $phone_number, $country_code)
->addAlternativePhone(11, 66448899, 55)
->addAddress($street, $number, $district, $city, $state, $zip, $complement, $country)        
->setCompanyName('Empresa Teste', 'Teste Empresa ME')
->setCompanyOpeningDate('2011-01-01')
->setCompanyPhone(11, 66558899, 55)
->setCompanyTaxDocument('69086878000198')
->setCompanyAddress('Rua de teste 2', 123, 'Bairro Teste', 'Sao Paulo', 'SP', '01234567', 'Apt. 23', 'BRA')
->setCompanyMainActivity('82.91-1/00', 'Atividades de cobranças e informações cadastrais')
->create();
t_r($account);
Consulta
ount = $moip->accounts()->get(ACCOUNT_ID);
t_r($account);
Verifica se usuário já possui conta Moip
etorna verdadeiro se já possui e falso caso não possuir conta Moip
p->accounts()->checkAccountExists(CPF);
Obter chave pública de uma Conta Moip
s = $moip->keys()->get();
t_r($keys);
Saldo Moip

O Saldo é a composição de valores atuais disponíveis, indisponíveis (bloqueados) e futuros de uma determinada Conta Moip.

Esta API está na versão 2.1, contendo o header Accept, com o valor application/json;version=2.1.

Consultar saldos
ances = $moip->balances()->get();

Requer autenticação OAuth.

Conta Bancária

A Conta bancária é o domicílio bancário de uma determinada Conta Moip. Esta API permite a criação, a consulta e a alteração dos dados de uma Conta Bancária.

Criar Conta Bancária
k_account = $moip->bankaccount()
->setBankNumber('237')
->setAgencyNumber('12345')
->setAgencyCheckNumber('0')
->setAccountNumber('12345678')
->setAccountCheckNumber('7')
->setType('CHECKING')
->setHolder('Demo Moip', '622.134.533-22', 'CPF')
->create($moip_account_id);
Consultar Conta Bancária
k_account = $moip->bankaccount()->get($bank_account_id);
Listar Contas Bancárias
k_accounts = $moip->bankaccount()->getList($account_id)->getBankAccounts();
Atualizar Conta Bancária
k_account = $moip->bankaccount()
->setAccountCheckNumber('8')
->update($bank_account_id);
Deletar Conta Bancária
p->bankaccount()->delete($bank_account_id);
Preferências de notificação
Criação
ification = $moip->notifications()->addEvent('ORDER.*')
->addEvent('PAYMENT.AUTHORIZED')
->setTarget('http://requestb.in/1dhjesw1')
->create();
t_r($notification);
Consulta
ification = $this->moip->notifications()->get('NPR-N6QZE3223P98');
t_r($notification);
Exclusão
ification = $moip->notifications()->delete('NOTIFICATION-ID');
t_r($notification);
Listagem
ifications = $moip->notifications()->getList();
t_r($notifications);
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:

ega o RAW data da requisição
n = file_get_contents('php://input');
onverte os dados recebidos
ponse = json_decode($json, true);
Consulta
Sem paginação ou filtro por resource/evento
p->webhooks()->get();
Com paginação e filtros por resource/evento
p->webhooks()->get(new Pagination(10, 0), 'ORD-ID', 'ORDER.PAID');
Transferência

A Transferência é uma movimentação de fundos entre uma Conta Moip e outra conta de pagamento (pode ser uma Conta bancária ou uma determinada Conta Moip).

Criando/executando uma transferência
Por conta bancária
unt = 500;
k_number = '001';
ncy_number = '1111';
ncy_check_number = '2';
ount_number = '9999';
ount_check_number = '8';
der_name = 'Nome do Portador';
_document = '22222222222';

nsfer = $moip->transfers()
->setTransfers($amount, $bank_number, $agency_number, $agency_check_number, $account_number, $account_check_number)
->setHolder($holder_name, $tax_document)
->execute();

t_r($transfer);

Para realizar uma transferência utilizando uma conta bancária já cadastrada:

nsfer = $moip->transfers()
->setTransfersToBankAccount($amount, $bank_account_id)
->execute();
Consultar transferência
nsfer_id = 'TRA-28HRLYNLMUFH';
nsfer = $moip->transfers()->get($transfer_id);

t_r($transfer);
Listar transferências
Sem paginação
nsfers = $moip->transfers()->getList();
Com paginação
nsfers = $moip->transfers()->getList(new Pagination(10,0));
Reverter transferência
nsfer_id = 'TRA-28HRLYNLMUFH';

nsfer = $moip->transfers()->revert($transfer_id);
Tratamento de Exceções

Quando ocorre algum erro na API, é lançada a exceção UnexpectedException para erros inesperados, UnautorizedException para erros de autenticação e ValidationException para erros de validação.

{
$moip->customers()->setOwnId(uniqid())
    ->setFullname('Fulano de Tal')
    ->setEmail('fulano@email.com')
    //...
    ->create();
tch (\Moip\Exceptions\UnautorizedException $e) {
//StatusCode 401
echo $e->getMessage();
tch (\Moip\Exceptions\ValidationException $e) {
//StatusCode entre 400 e 499 (exceto 401)
printf($e->__toString());
tch (\Moip\Exceptions\UnexpectedException $e) {
//StatusCode >= 500
echo $e->getMessage();

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:

Como registrar seu aplicativo Moip

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

Exemplo:

rt MOIP_ACCESS_TOKEN=76926cb0305243c8adc79aad54321ec1_v2
or/bin/phpunit -c .
Licença

The MIT License


This work is supported by the National Institutes of Health's National Center for Advancing Translational Sciences, Grant Number U24TR002306. This work is solely the responsibility of the creators and does not necessarily represent the official views of the National Institutes of Health.