moiplabs / moip-php Goto Github PK
View Code? Open in Web Editor NEWBiblioteca de integração com o MoIP em PHP
Home Page: http://labs.moip.com.br/
Biblioteca de integração com o MoIP em PHP
Home Page: http://labs.moip.com.br/
Substitua as partes que estão escritas 3a por ```.
Poderia usar, nas partes de código do READM.md, não só 3a, mas 3aphp (fechamento 3a), assim o código terá ficará com a exibição mudada para outro style, com cores, itálicos e negritos.
Set código:
$var = 'text';
Com 3aphp:
$var = 'text';
The MoIP::addCommission() method contains the following validation:
<?php
//When either one is not set, an exception is thrown (incorrect: in this case an exception is ALWAYS thrown)
if (!isset($param['valor_fixo']) or !isset($param['valor_percentual']))
throw new InvalidArgumentException('Você deve especificar um tipo de valor para comissionar.');
//When both are set, an exception is thrown (correct)
if (isset($param['valor_fixo']) and isset($param['valor_percentual']))
throw new InvalidArgumentException('Você deve especificar somente um tipo de valor de comissão');
?>
The result of these validations is that none of the options are allowed.
The solution is to use an 'and' in the first validation:
<?php
//When BOTH are not set, we don't know how to proceed: throw exception
if (!isset($param['valor_fixo']) and !isset($param['valor_percentual']))
throw new InvalidArgumentException('Você deve especificar um tipo de valor para comissionar.');
?>
Also note that the provided unit test does not cover this area.
Cheers
Mesmo preenchendo todos os atributos solicitados para enviar uma transação, o SDK ficava me retornando o erro "Error: The following data required were not informed: ."
Motivo: Na linha 285 do Moip.php a variável $varNotSeted está setada com '', porém a validação que ocorre na linha 314 verifica se a variável não é "false".
Alterando a linha 285 para $varNotSeted = false; o problema é resolvido.
Obrigado.
Meus clientes estão reclamando que quando testam o MOIP com conta desenvolvedor recebem o seguinte erro: Unknown SSL protocol error in connection to desenvolvedor.moip.com.br:443
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, 'https://desenvolvedor.moip.com.br/sandbox/ws/alpha/EnviarInstrucao/Unica');
curl_setopt($curl, CURLOPT_HTTPHEADER, $header);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_USERAGENT, 'Mozilla/4.0');
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, $param);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
$ret = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
Fiquei sabendo que a API v2.0 será lançada ainda esse ano!
Tem alguma data especifa ?
É necessário alterar o código nos métodos: setNotificationURL() e setReturnURL(), para que possam receber & na url:
DE:
$this->xml->InstrucaoUnica->addChild('URLNotificacao', $url);
$this->xml->InstrucaoUnica->addChild('URLRetorno', $url);
PARA:
$this->xml->InstrucaoUnica->URLNotificacao = $url;
$this->xml->InstrucaoUnica->URLRetorno = $url;
Como informado aqui: http://www.php.net/manual/pt_BR/simplexmlelement.addchild.php#112204
Boa noite, pessoal.
Ontem publiquei uma "adição" às funcionalidade do Moip PHP em que possibilitará o usuário pegar o token e finalizar o pagamento sem sair do servidor: https://github.com/lucaswxp/moip-checkout-transparente-sem-javascript
Só queria que soubessem da existência dessa classe e que seria uma honra se incorporassem à API atual :) (se for o caso, obviamente com algumas melhorias)
Abs
Seria interessante o SDK funcionar implementar uma forma de singleton? Dessa forma, uma mesma instância do Moip poderia conter vários tokens, podendo manipular todos ao mesmo tempo, de certa forma usando polimorfismo.
Seria tipo (pseudo code):
$moip = Moip::instance();
$moip['000000000000000000000000000000000000000000000000000000000000']->removeInstruction();
$moip['111111111111111111111111111111111111111111111111111111111111']->setReason('Pedido #21');
$lastToken = $moip->setReason('adsf')->setValue(11.20)->send(); // retorna o token criado
$moip[$lastToken]->removeInstruction();
Claro, que o token não seria escrito manualmente, mas sim, pegaria o valor de alguma variável, tipo:
$moip[$token]->removeInstruction();
eu faria essa modificação facilmente, e daí criaria uns testes via phpunit
Depois do commit 2693019 o repositório simplesmente não contém a biblioteca do MoIP
Não faz sentido deixar esta funcionalidade já que estamos utilizando o SimpleXML para parsing de XML.
MoIP::setPagamentoDireto() contains a check on the incoming array:
if ($params['forma'] == 'cartao_credito' and
(!isset($params['cartao']) or
!isset($params['cartao']['numero']) or
!isset($params['cartao']['expiracao']) or
!isset($params['cartao']['codigo_seguranca']) or
!isset($params['cartao']['portador']) or
!isset($params['cartao']['portador']['nome']) or
!isset($params['cartao']['portador']['identidade_numero']) or
!isset($params['cartao']['portador']['identidade_tipo']) or
!isset($params['cartao']['portador']['telefone']) or
!isset($params['cartao']['portador']['data_nascimento']) or
!isset($params['cartao']['parcelamento']) or
!isset($params['cartao']['parcelamento']['parcelas']) or
!isset($params['cartao']['parcelamento']['recebimento'])
)
)
A part of this check is about the 'portador':
!isset($params['cartao']['portador']) or
!isset($params['cartao']['portador']['nome']) or
!isset($params['cartao']['portador']['identidade_numero']) or
!isset($params['cartao']['portador']['identidade_tipo']) or
!isset($params['cartao']['portador']['telefone']) or
!isset($params['cartao']['portador']['data_nascimento']) or
However, the following fields are not used when generating the XML:
//See how some fields are simply not used
$portador = $cartao->addChild('Portador');
$portador->addChild('Nome',$params['cartao']['portador']['nome']);
$portador->addChild('Identidade',$params['cartao']['portador']['identidade_numero'])
->addAttribute('tipo',$params['cartao']['portador']['identidade_tipo']);
Please remove the unrequired fields from the check and update the documentation. Is there an XSD available with the exact definition of the request?
Nome incorreto ao instanciar a classe MoIPClient.
Moip.php nos métodos send e queryParcel
$client = new MoipClient();
Correto
$client = new MoIPClient();
Estou tentando implementar o moip com codeigniter 2, porém está sendo retornado o seguinte erro: Class 'MoipClient'
For the various payment institutions (VISA, MasterCard, American Express, Banco do Brasil), an array is used in the ./lib/MoIP.php file:
private $institution = array('moip'=>'MoIP',
'visa'=>'Visa',
'american_express'=>'AmericanExpress',
'mastercard'=>'Mastercard',
'diners'=>'Diners',
'banco_brasil'=>'BancoDoBrasil',
'bradesco'=>'Bradesco',
'itau'=>'Itau',
'real'=>'BancoReal',
'unibanco'=>'Unibanco',
'aura'=>'Aura',
'hipercard'=>'Hipercard',
'paggo'=>'Paggo', //oi paggo
'banrisul'=>'Banrisul'
);
Note that the key => name mappings are not consisten. We have stored the names of the supported institutions in our database and would like to use:
$institutionKey = str_replace(' ', '_', $institutionName); //replace spaces with underscores
$institutionKey = strtolower($institutionKey); //make the whole string lowercase
However, this approach fails for:
I would like to suggest to add the following entries to the array:
'banco_do_brasil' => 'BancoBrasil'
'banco_real' => 'BancoReal'
'oi_paggo' => 'Paggo'
This way the client is consistent with general naming of the payment institutions and no changes to the MoIP engine are required, since the keys map to the same name (which is used in the request)
Cheers
The MoIP::addComission() seems to add an element named 'Comissao' to the wrapping element 'Comissoes'. However, the specs state that this element should be named 'Comissionamento'.
Seria possível criar o composer.json e adicionar no https://packagist.org/
Segue abaixo uma implementacao para boletos, funcionando:
Ao tentar pagar direto com o boleto, obtivemos erro até descobrir que setPagamentoDireto() existe e é o único método em pt-br da lib toda. Bizarro.
Resumidamente, voce define como ('Direto'), mas é como se fosse inutil, voce precisa setar setPagamentoDireto() para que funcione.
$payer = array();
$payer['nome'] = 'Djalma Araujo';
$payer['email'] = '[email protected]';
$payer['celular'] = '(81)55558899';
$payer['apelido'] = 'djalmaaraujo';
$payer['identidade'] = '111.111.111-11';
$payer['endereco']['logradouro'] = 'Rua lalala';
$payer['endereco']['numero'] = '555';
$payer['endereco']['complemento'] = 'Apt 503';
$payer['endereco']['bairro'] = 'Bairro';
$payer['endereco']['cidade'] = 'Cidade';
$payer['endereco']['estado'] = 'PE';
$payer['endereco']['pais'] = 'BRA';
$payer['endereco']['cep'] = '55448-888';
$payer['endereco']['telefone'] = '(81)32222222';
$this->gateway = new MoIP();
$this->gateway->setCredential(array(
'key'=>'123',
'token'=>'123')
)
->setReason('Testes')
->setUniqueID(rand(1,rand(5, 9999)))
->setValue(123.45)
->setPayer($payer)
->setEnvironment('producao')
->setPaymentType('Direto')
->setPagamentoDireto(array(
'forma' => 'boleto'
))
->addPaymentWay('boleto', array(
'dias_expiracao'=> array(
'dias' => 7,
'tipo' => 'corridos'
)
)
)
->validate()
->send();
$response = $this->gateway->getAnswer();
if ($response->success) {
header('Location: ' . $this->redirectGateway . $response->token);
exit;
} else {
die('ERROR');
}
o phpDoc dentro da livraria está completamente confuso. Exemplos:
/**
* Method setEnvironment()
*
* Define the environment for the API utilization.
*
* @param string $environment Only two values supported, 'sandbox' or 'producao'
*/
daí, dentro da função ele testa por 'test' ou [qualquer outra coisa]
outro exemplo:
/**
* Method setPaymentType()
*
* Define the payment's type between 'Unico' or 'Direto'
*
* @param string $tipo Can be 'Unico' or 'Direto'
* @return void
* @access public
*/
return void
na verdade retorna Moip $this
. $tipo
é checado por
if ($tipo == 'Basic' || $tipo == 'Identification') {
e não 'Unico' ou 'Direto'. A documentação do labs.moip já é bem precária, com essas inconsistencias no phpDoc, dificulta ainda mais a situação. No meu phpStorm, fica cheio de erro por causa que muitas funções tem o return void
e quebra o auto-complete. o code inspection do phpStorm mostra que tem pelo menos 119 inconsistências na livraria, o que é bem preocupante para um SDK
O autoload deve ser registrado com spl_autoload_register quando disponível.
Refatorar o getXML de forma que ele apenas "monte" o XML com os dados vindos de outros métodos mais fragmentados.
Seria muito bom colocar no packagist.org, só precisa criar o composer.json e criar a conta lá, bem tranquilo.
Uma adaptação pra instalar com composer enquanto não tem suporte é colocar isso no composer.json:
"repositories": [
{
"type": "package",
"package": {
"name": "moiplabs/moip-php",
"version": "master",
"source": {
"type": "git",
"url": "https://github.com/moiplabs/moip-php.git",
"reference": "master"
},
"autoload": {
"classmap": ["lib"]
}
}
}
],
"require": {
"moiplabs/moip-php": "dev-master"
},
Tem algum repositorio ou está em desenvolvimento o moip adptado/compativel com o Framework Laravel4 ou 5?
Tem como definir dentro da classe a data de vencimento do boleto? Porque no painel do sandbox aparece ao lado de cada transação um espaço chamado "vencimento" mas ele está sempre vazio.
Há formas de enviar o xml para o servidor sem o uso do cURL, o que pode eliminar uma das dependências da biblioteca.
Quando trabalhando por 'fora' da livraria, fica impossível acessar o base_url
a não ser que se extenda a classe Moip
. Então, utilizando o método mágico de __get
, pode-se acessar a url de base (que depende do ambiente) sem um __set
, tornando-a apenas leitura. Assim fica mais fácil incluir, por exemplo, o javascript do checkout transparente, pois ele depende da url de ambiente também.
E ainda, todas propriedades estão setadas como private
, o que torna impossível extender a classe Moip
plenamente
Hoje esta integração feita em PHP não permite alterar o valor Recebimento do Parcelamento no XML, fica como fixo AVista, desta forma todos os pagamentos feitos em cartãod e crédito são recebidos inteiro em 30 dias, com uma taxa por conta do adiantamento.
Precisa ser alterado o método addParcel para que o mesmo possibilite receber os pagametnos de acordo com a parcela escolhida pelo cliente.
Link da documentação deste node:
https://labs.moip.com.br/parametro/Parcelamentos/
PR com uma solução #56
URL:
https://github.com/moiplabs/moip-php
Tem 2 erros no código:
1 - $moip->setValue('123456') <- sem ponto e vírgula no final
2 - $moip->setCredencials(array('key'=>'sua_key','token'=>'seu_token')); <- é setCredential
O mesmo para fluent interfaces.
Estou utilizando a classe na minha aplicação. Tudo funcionando perfeitamente em ambiente local e também no site. Mas quando acionei o SSL no site para ficar https:// parou de funcionar.
Agora recebe o seguinte erro:
(17) "SSL connect error"
Alguém tem alguma dica, já verifiquei os arquivos da classe diversas vezes e não consegui encontrar o motivo do erro.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.