maikealame/moip-sdk-php
Composer 安装命令:
composer require maikealame/moip-sdk-php
包简介
Cliente em PHP para integração server-side com APIs Moip v2
README 文档
README
MoIP v2 PHP client SDK [FORK]
O repositório atual não está sendo mantido desde 2018, aqui você poderá contribuir com a atualização pela documentação oficial atualmente
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
- Instalação
- Configurando a autenticação
- Exemplos de Uso:
- Packages
- Tratamento de exceções
- Documentação
- Testes
- Licença
- Comunidade Slack

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.
$customer = $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(); print_r($customer);
Consultando os dados de um comprador
$customer = $moip->customers()->get('CUS-Q3BL0CAJ2G33'); print_r($customer);
Adicionar cartão de crédito
$customer = $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); print_r($customer);
Deletar cartão de crédito
$moip->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.
$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);
Consultando um pedido
Pedido específico
$order = $moip->orders()->get('ORD-KZCH1S1ORAH23'); print_r($order);
Todos os Pedidos
Sem Filtro
$orders = $this->moip->orders()->getList();
Com Filtros
$filters = new Filters(); $filters->greaterThanOrEqual(OrdersList::CREATED_AT, '2017-08-17'); $filters->in(OrdersList::PAYMENT_METHOD, ['BOLETO', 'DEBIT_CARD']); $filters->lessThan(OrdersList::VALUE, 100000); $orders = $this->moip->orders()->getList(null, $filters);
Com Paginação
$orders = $this->moip->orders()->getList(new Pagination(10,0));
Consulta Valor Específico
$orders = $this->moip->orders()->getList(null, null, 'josé silva');
Também é possível usar paginação, filtros e consulta de valor específico juntos
$filters = new Filters(); $filters->greaterThanOrEqual(OrdersList::CREATED_AT, '2017-08-17'); $filters->lessThan(OrdersList::VALUE, 100000); $orders = $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.
$holder = $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.
$hash = 'i1naupwpTLrCSXDnigLLTlOgtm+xBWo6iX54V/hSyfBeFv3rvqa1VyQ8/pqWB2JRQX2GhzfGppXFPCmd/zcmMyDSpdnf1GxHQHmVemxu4AZeNxs+TUAbFWsqEWBa6s95N+O4CsErzemYZHDhsjEgJDe17EX9MqgbN3RFzRmZpJqRvqKXw9abze8hZfEuUJjC6ysnKOYkzDBEyQibvGJjCv3T/0Lz9zFruSrWBw+NxWXNZjXSY0KF8MKmW2Gx1XX1znt7K9bYNfhA/QO+oD+v42hxIeyzneeRcOJ/EXLEmWUsHDokevOkBeyeN4nfnET/BatcDmv8dpGXrTPEoxmmGQ=='; $payment = $order->payments() ->setCreditCardHash($hash, $holder) ->setInstallmentCount(3) ->setStatementDescriptor('teste de pag') ->execute(); print_r($payment);
Com dados do cartão
Esse método requer certificação PCI. Consulte a documentação.
$payment = $order->payments()->setCreditCard(12, 21, '4073020000000002', '123', $holder) ->execute(); print_r($payment);
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']; $payment = $order->payments() ->setBoleto($expiration_date, $logo_uri, $instruction_lines) ->execute(); print_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:
- URL do logo que você deseja que apareça, representada abaixo com a variável: $return_uri;
- Data de vencimento, representada pela variável $expiration_date;
- Número do banco representado pela variável $bank_number (atualmente único valor possível é
341, referente ao Banco Itaú).
$bank_number = '341'; $return_uri = 'https://moip.com.br'; $expiration_date = new DateTime(); $payment = $order->payments() ->setOnlineBankDebit($bank_number, $expiration_date, $return_uri) ->execute(); print_r($payment);
Consulta
$payment = $moip->payments()->get('PAYMENT-ID'); print_r($payment);
Capturar pagamento pré-autorizado
$captured_payment = $payment->capture(); print_r($captured_payment);
Cancelar pagamento pré-autorizado
O método
avoidusado para cancelamento de pagamentos pré-autorizados foi substituído porcancel.
$payment = $payment->cancel(); print_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
$refund = $payment->refunds()->creditCardFull(); print_r($refund);
Valor Parcial
Com o objeto
$refund = $payment->refunds()->creditCardPartial(30000); print_r($refund);
Conta bancária
Valor Total
Com o objeto
$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);
Valor Parcial
Com o objeto
$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);
Consultar reembolso
$refund = $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.
$redirect_uri = 'http://seusite.com.br/callback.php'; $client_id = 'APP-18JTHC3LOMT9'; $scope = true; $connect = new Connect($redirect_uri, $client_id, $scope, Connect::ENDPOINT_SANDBOX); $connect->setScope(Connect::RECEIVE_FUNDS) ->setScope(Connect::REFUND) ->setScope(Connect::MANAGE_ACCOUNT_INFO) ->setScope(Connect::RETRIEVE_FINANCIAL_INFO); header('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.
$redirect_uri = 'http://seusite.com.br/callback.php'; $client_id = 'APP-18JTHC3LOMT9'; $scope = true; $connect = new Connect($redirect_uri, $client_id, $scope, Connect::ENDPOINT_SANDBOX); $client_secret = '20f76456f6ec4874a1f38082d3139326'; $connect->setClientSecret($client_secret); $code = 'f9053ca6e9853dd73f0bc4f332a5ce337b0bb0da'; $connect->setCode($code); $auth = $connect->authorize(); print_r($auth);
Multipedidos
Criando um multipedido
$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);
Consultando um multipedido
$multiorder_id = 'ORD-KZCH1S1ORAH25'; $multiorder = $moip->multiorders()->get($multiorder_id); print_r($multiorder);
Multipagamentos
Criando um multipagamento
$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') ->execute(); print_r($payment);
Consulta
$payment = $moip->payments()->get('MULTIPAYMENT-ID'); print_r($payment);
Conta Moip
Criação
$street = 'Rua de teste'; $number = 123; $district = 'Bairro'; $city = 'Sao Paulo'; $state = 'SP'; $zip = '01234567'; $complement = 'Apt. 23'; $country = 'BRA'; $area_code = 11; $phone_number = 66778899; $country_code = 55; $identity_document = '4737283560'; $issuer = 'SSP'; $issue_date = '2015-06-23'; $account = $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(); print_r($account);
Consulta
$account = $moip->accounts()->get(ACCOUNT_ID); print_r($account);
Verifica se usuário já possui conta Moip
// retorna verdadeiro se já possui e falso caso não possuir conta Moip $moip->accounts()->checkAccountExists(CPF);
Obter chave pública de uma Conta Moip
$keys = $moip->keys()->get(); print_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
$balances = $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
$bank_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
$bank_account = $moip->bankaccount()->get($bank_account_id);
Listar Contas Bancárias
$bank_accounts = $moip->bankaccount()->getList($account_id)->getBankAccounts();
Atualizar Conta Bancária
$bank_account = $moip->bankaccount() ->setAccountCheckNumber('8') ->update($bank_account_id);
Deletar Conta Bancária
$moip->bankaccount()->delete($bank_account_id);
Preferências de notificação
Criação
$notification = $moip->notifications()->addEvent('ORDER.*') ->addEvent('PAYMENT.AUTHORIZED') ->setTarget('http://requestb.in/1dhjesw1') ->create(); print_r($notification);
Consulta
$notification = $this->moip->notifications()->get('NPR-N6QZE3223P98'); print_r($notification);
Exclusão
$notification = $moip->notifications()->delete('NOTIFICATION-ID'); print_r($notification);
Listagem
$notifications = $moip->notifications()->getList(); print_r($notifications);
Webhooks
O PHP, por padrão, está preparado para receber apenas alguns tipos de
content-type(application/x-www-form-urlencodedemultipart/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);
Consulta
Sem paginação ou filtro por resource/evento
$moip->webhooks()->get();
Com paginação e filtros por resource/evento
$moip->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
$amount = 500; $bank_number = '001'; $agency_number = '1111'; $agency_check_number = '2'; $account_number = '9999'; $account_check_number = '8'; $holder_name = 'Nome do Portador'; $tax_document = '22222222222'; $transfer = $moip->transfers() ->setTransfers($amount, $bank_number, $agency_number, $agency_check_number, $account_number, $account_check_number) ->setHolder($holder_name, $tax_document) ->execute(); print_r($transfer);
Para realizar uma transferência utilizando uma conta bancária já cadastrada:
$transfer = $moip->transfers() ->setTransfersToBankAccount($amount, $bank_account_id) ->execute();
Consultar transferência
$transfer_id = 'TRA-28HRLYNLMUFH'; $transfer = $moip->transfers()->get($transfer_id); print_r($transfer);
Listar transferências
Sem paginação
$transfers = $moip->transfers()->getList();
Com paginação
$transfers = $moip->transfers()->getList(new Pagination(10,0));
Reverter transferência
$transfer_id = 'TRA-28HRLYNLMUFH'; $transfer = $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.
try { $moip->customers()->setOwnId(uniqid()) ->setFullname('Fulano de Tal') ->setEmail('fulano@email.com') //... ->create(); } catch (\Moip\Exceptions\UnautorizedException $e) { //StatusCode 401 echo $e->getMessage(); } catch (\Moip\Exceptions\ValidationException $e) { //StatusCode entre 400 e 499 (exceto 401) printf($e->__toString()); } catch (\Moip\Exceptions\UnexpectedException $e) { //StatusCode >= 500 echo $e->getMessage(); }
Documentação
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_TOKENToken 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
Comunidade Slack 
Tem dúvidas? Fale com a gente no Slack!
maikealame/moip-sdk-php 适用场景与选型建议
maikealame/moip-sdk-php 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 115 次下载、GitHub Stars 达 0, 最近一次更新时间为 2020 年 12 月 09 日, 在 PHP 生态内属于活跃度较高的组件。
它主要适用于以下技术方向: 「checkout」 「libraries」 「moip」 「marketplace」 「intermediary」 等业务场景。在实际项目中,围绕这些方向常见需要落地的问题包括:接口对接、性能调优、并发安全、与既有框架(Laravel / ThinkPHP / Yii / Webman 等)的兼容适配,以及生产环境的日志埋点与稳定性保障。
我们在过去多个企业项目中使用过 maikealame/moip-sdk-php 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。
基于 maikealame/moip-sdk-php 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。
线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。
承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。
与 maikealame/moip-sdk-php 相关的其它包
同方向 / 同关键字的高下载量 PHP Composer 包推荐,方便对比选型:
Custom libraries for CakePHP framework
O2System PSR it's build based on PHP Framework Interop Group (PHP-FIG) standards recommendations. This repository contains a collection of PHP interfaces based on the PSR-0 until the PSR-7.
Integration of MoIP payment intermediary with Laravel 5
MoPayment fornece uma interface para controlar pagamentos no moip.com.br
Cliente em PHP para integração server-side com APIs Moip v2
Meta-package of Tatter modules for CodeIgniter 4
统计信息
- 总下载量: 115
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 0
- 点击次数: 8
- 依赖项目数: 0
- 推荐数: 0
其他信息
- 授权协议: MIT
- 更新时间: 2020-12-09