O jeito mais simples e rápido de integrar o Moip a sua aplicação PHP
Estado atual do sdk
Estatísticas
Versões
Índice
- PHP >= 5.5
- rmccue/requests >= 1.0
- phpunit/phpunit ~ 4.0
Execute em seu shell:
composer require moip/moip-sdk-php
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);
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);
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());
}
try {
$customer_id = 'CUS-Q3BL0CAJ2G33';
$customer = $moip->customers()->get($customer_id);
print_r($customer);
} catch (Exception $e) {
printf($e->__toString());
}
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());
}
try {
$order_id = 'ORD-KZCH1S1ORAH23';
$order = $moip->orders()->get($order_id);
print_r($order);
} catch (Exception $e) {
printf($e->__toString());
}
Após criar o pedido basta criar um pagamento nesse pedido.
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());
}
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());
}
$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());
}
Para fazer reembolsos é necessário ter o objeto Payment
do pagamento que você deseja reembolsar.
try {
$refund = $payment->refunds()->creditCardFull();
print_r($refund);
} catch (Exception $e) {
printf($e->__toString());
}
try {
$amount = 30000;
$refund = $payment->refunds()->creditCardPartial($amount);
print_r($refund);
} catch (Exception $e) {
printf($e->__toString());
}
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());
}
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());
}
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());
}
try {
$multiorder_id = 'ORD-KZCH1S1ORAH25';
$multiorder = $moip->multiorders()->get($multiorder_id);
print_r($multiorder);
} catch (Exception $e) {
printf($e->__toString());
}
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());
}
O PHP, por padrão, está preparado para receber apenas alguns tipos de
content-type
(application/x-www-form-urlencoded
emultipart/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);
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 .