diff --git a/README.md b/README.md index 56c787c..d651e1d 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ SDK Moip-PHP - API ==================================================== -O Moip-PHP é uma biblioteca que implementa uma camada de abstração para geração do XML de instruções do Moip, permitindo que você integre aos serviços de API sem poluir seu código com várias linhas de XML. Um exemplo rápido: +O Moip-PHP é uma biblioteca que implementa uma camada de abstração para geração do XML de instruções do Moip, permitindo que você integre aos serviços de API sem poluir seu código com várias linhas de XML. Um exemplo rápido: include_once "autoload.inc.php"; @@ -19,9 +19,9 @@ O Moip-PHP $moip->validate('Basic'); print_r($moip->send()); - + -O Moip-PHP utiliza o padrão Fluent Interfaces, portanto, você pode fazer o exemplo acima da seguinte forma: +O Moip-PHP utiliza o padrão Fluent Interfaces, portanto, você pode fazer o exemplo acima da seguinte forma: include_once "autoload.inc.php"; @@ -37,16 +37,16 @@ O Moip-PHP utiliza o padr ->send()); ------------------------------------- -Métodos disponíveis +Métodos disponíveis ---------- -Veja baixo relação e detalhes dos métodos disponíveis que você poderá utilizar com o Moip-PHP. +Veja baixo relação e detalhes dos métodos disponíveis que você poderá utilizar com o Moip-PHP. ------------------------------------- Moip() ---------- -Método construtor. +Método construtor. Moip() @@ -55,187 +55,187 @@ Moip() setEnvironment() ---------- -Método que define o ambiente em qual o requisição será processada, 'test' para definir que será em ambiente de testes Moip o Sandbox, a omissão desse método define que a requisição deverá ser processada em ambiente real, de produção Moip. +Método que define o ambiente em qual o requisição será processada, 'test' para definir que será em ambiente de testes Moip o Sandbox, a omissão desse método define que a requisição deverá ser processada em ambiente real, de produção Moip. -Importante: ao definir o ambiente certifique-se de que está utilizando a autenticação correspondente ao ambiente, no Moip cada ambiente possui suas própria chaves de autenticação API. +Importante: ao definir o ambiente certifique-se de que está utilizando a autenticação correspondente ao ambiente, no Moip cada ambiente possui suas própria chaves de autenticação API. setEnvironment($environment) $environment : String ('test') - $moip->setEnvironment('test'); + $moip->setEnvironment('test'); ------------------------------------- setCredential() ---------- -O Moip requer que você se autentique para que seja possivel processar requisições em sua API, para isso antes de realizar qualquer requisição você deverá informar ao Moip suas credenciais da API formados por um TOKEN e uma KEY. +O Moip requer que você se autentique para que seja possivel processar requisições em sua API, para isso antes de realizar qualquer requisição você deverá informar ao Moip suas credenciais da API formados por um TOKEN e uma KEY. -O parâmetro $credencials é um array associativo contendo as chaves key e token (ex: array('key'=>'sua_key','token'=>'seu_token')). Se você ainda não possui estes dados, veja como obtelas tarvés em sua conta Sandbox. +O parâmetro $credencials é um array associativo contendo as chaves key e token (ex: array('key'=>'sua_key','token'=>'seu_token')). Se você ainda não possui estes dados, veja como obtelas tarvés em sua conta Sandbox. setCredential($credential) $credential : Array('key','token') - $moip->setCredential(array( - 'key' => 'SUA_KEY', - 'token' => 'SEU_TOKEN' - )); + $moip->setCredential(array( + 'key' => 'SUA_KEY', + 'token' => 'SEU_TOKEN' + )); ------------------------------------- validate() ---------- -O método validate() irá realizar a validação dos dados obrigatórios para o tipo de instrução que você deseja processar, você pode optar por um dos dois níveis de validação disponíveis o 'Basic' e 'Identification'. +O método validate() irá realizar a validação dos dados obrigatórios para o tipo de instrução que você deseja processar, você pode optar por um dos dois níveis de validação disponíveis o 'Basic' e 'Identification'. -1. Basic : Irá realizar a validação dos dados mínimos de para uma requisição XML ao Moip. -2. Identification : Irá validar os dados necessários para se processar um XML com identificação Moip, usados geralmente para redirecionar o cliente já no segundo step da pagina de pagamento no checkout Moip ou usar o Moip Transaparente. +1. Basic : Irá realizar a validação dos dados mínimos de para uma requisição XML ao Moip. +2. Identification : Irá validar os dados necessários para se processar um XML com identificação Moip, usados geralmente para redirecionar o cliente já no segundo step da pagina de pagamento no checkout Moip ou usar o Moip Transaparente. validate($validateType) $validateType : String ('Basic' ou 'Identification') - $moip->validate('Identification'); + $moip->validate('Identification'); ------------------------------------- setUniqueID() ---------- -O método setUniqueID() atribui valor a tag "<IdProprio>" no XML Moip. +O método setUniqueID() atribui valor a tag "<IdProprio>" no XML Moip. -1. <IdProprio>: Seu identificador único de pedido, essa mesma informações será enviada para você em nossas notificações de alterações de status para que você possa identificar o pedido e tratar seu status. +1. <IdProprio>: Seu identificador único de pedido, essa mesma informações será enviada para você em nossas notificações de alterações de status para que você possa identificar o pedido e tratar seu status. setUniqueID($id) $id : String - $moip->setUniqueID('ABCD123456789'); + $moip->setUniqueID('ABCD123456789'); ------------------------------------- setValue() ---------- -O método setValue() atribui valor a tag "<Valor>" no XML Moip. +O método setValue() atribui valor a tag "<Valor>" no XML Moip. -1. <Valor>: Responsável por definir o valor que deverá ser pago. +1. <Valor>: Responsável por definir o valor que deverá ser pago. setValue($value) $value : Numeric - $moip->setValue('100.00'); + $moip->setValue('100.00'); ------------------------------------- setAdds() --------------- -O método setAdds() atribui valor a tag "<Acrescimo>" no XML Moip. +O método setAdds() atribui valor a tag "<Acrescimo>" no XML Moip. -1. <Acrescimo>: Responsável por definir o valor adicional que deverá ser pago. +1. <Acrescimo>: Responsável por definir o valor adicional que deverá ser pago. setAdds($value) $value : Numeric - $moip->setAdds('15.00'); + $moip->setAdds('15.00'); ------------------------------------- setDeduct() --------------- -O método setDeduct() atribui valor a tag "<Deducao>" no XML Moip. +O método setDeduct() atribui valor a tag "<Deducao>" no XML Moip. -1. <Deducao>: Responsável por definir o valor de desconto que será subtraído do total a ser pago. +1. <Deducao>: Responsável por definir o valor de desconto que será subtraído do total a ser pago. setDeduct($value) $value : Numeric - $moip->setDeduct('15.00'); + $moip->setDeduct('15.00'); ------------------------------------- setReason() --------------- -O método setReason() atribui valor a tag "<Razao>" no XML Moip. +O método setReason() atribui valor a tag "<Razao>" no XML Moip. -1. <Razao>: Responsável por definir o motivo do pagamento. -1. Este campo é sempre obrigatório em um instrução de pagamento. +1. <Razao>: Responsável por definir o motivo do pagamento. +1. Este campo é sempre obrigatório em um instrução de pagamento. setReason($value) $value : String - $moip->setReason('Pagamento de teste do Moip-PHP'); + $moip->setReason('Pagamento de teste do Moip-PHP'); ------------------------------------- setPayer() --------------- -O método setPayer() atribui valores ao nodo "<Pagador>" no XML Moip. +O método setPayer() atribui valores ao nodo "<Pagador>" no XML Moip. -1. <Pagador>: Nodo de informações de quem está realizando o pagamento. +1. <Pagador>: Nodo de informações de quem está realizando o pagamento. 1. name : <Nome> : Nome completo do pagador 2. email : <Email> : E-mail do pagador 3. payerId : <IdPagador> : Identificados unico do pagador 4. identity : <Identidade> : Identidade do pagador (CPF) -5. phone : <TelefoneCelular> : Telefone de contato secundário do pagador -6. billingAddress : <EnderecoCobranca> : Endereço do pagador +5. phone : <TelefoneCelular> : Telefone de contato secundário do pagador +6. billingAddress : <EnderecoCobranca> : Endereço do pagador 1. address : <Logradouro> : Logradouro do pagador, rua, av, estrada, etc. 2. number : <Numero> : Numero residencial do pagador -3. complement : <Complemento> : Complemento do endereço do pagador -4. city : <Cidade> : Cidade do endereço do pagador -5. neighborhood : <Bairro> : Bairro do endereço do pagador -6. state : <Estado> : Estado do endereço do pagador em formato ISO-CODE (UF) +3. complement : <Complemento> : Complemento do endereço do pagador +4. city : <Cidade> : Cidade do endereço do pagador +5. neighborhood : <Bairro> : Bairro do endereço do pagador +6. state : <Estado> : Estado do endereço do pagador em formato ISO-CODE (UF) 7. country : <Pais> : Pais do pagador em formato ISO-CODE -8. zipCode : <CEP> : CEP de endereço +8. zipCode : <CEP> : CEP de endereço 9. phone : <TelefoneFixo> : Telefone de contato do pagador setPayer($value) $value : Array ('name','email','payerId','identity', 'phone','billingAddress' => Array('address','number','complement','city','neighborhood','state','country','zipCode','phone')) - $moip->setPayer(array('name' => 'Nome Sobrenome', - 'email' => 'email@cliente.com.br', - 'payerId' => 'id_usuario', - 'billingAddress' => array('address' => 'Rua do Zézinho Coração', - 'number' => '45', - 'complement' => 'z', - 'city' => 'São Paulo', - 'neighborhood' => 'Palhaço Jão', - 'state' => 'SP', - 'country' => 'BRA', - 'zipCode' => '01230-000', - 'phone' => '(11)8888-8888'))); + $moip->setPayer(array('name' => 'Nome Sobrenome', + 'email' => 'email@cliente.com.br', + 'payerId' => 'id_usuario', + 'billingAddress' => array('address' => 'Rua do Zézinho Coração', + 'number' => '45', + 'complement' => 'z', + 'city' => 'São Paulo', + 'neighborhood' => 'Palhaço Jão', + 'state' => 'SP', + 'country' => 'BRA', + 'zipCode' => '01230-000', + 'phone' => '(11)8888-8888'))); ------------------------------------- addPaymentWay() --------------- -O método addPaymentWay() atribui valor a tag "<FormaPagamento>" do nodo "<FormasPagamento>" no XML Moip. +O método addPaymentWay() atribui valor a tag "<FormaPagamento>" do nodo "<FormasPagamento>" no XML Moip. -<FormaPagamento>: Define quais as formas de pagamento que serão exibidas ao pagador no Checkout Moip. -1. billet : Para disponibilizar a opção "Boleto Bancário" como forma de pagamento no checkout Moip. -2. financing : Para disponibilizar a opção "Financiamento" como forma de pagamento no checkout Moip. -3. debit : Para disponibilizar a opção "Debito em conta" como forma de pagamento no checkout Moip. -4. creditCard : Para disponibilizar a opção "Cartão de Crédito" como forma de pagamento no checkout Moip. -5. debitCard : Para disponibilizar a opção "Cartão de débito" como forma de pagamento no checkout Moip. +<FormaPagamento>: Define quais as formas de pagamento que serão exibidas ao pagador no Checkout Moip. +1. billet : Para disponibilizar a opção "Boleto Bancário" como forma de pagamento no checkout Moip. +2. financing : Para disponibilizar a opção "Financiamento" como forma de pagamento no checkout Moip. +3. debit : Para disponibilizar a opção "Debito em conta" como forma de pagamento no checkout Moip. +4. creditCard : Para disponibilizar a opção "Cartão de Crédito" como forma de pagamento no checkout Moip. +5. debitCard : Para disponibilizar a opção "Cartão de débito" como forma de pagamento no checkout Moip. addPaymentWay($way) $way : String ('billet','financing','debit','creditCard','debitCard') - $moip->addPaymentWay('creditCard'); - $moip->addPaymentWay('billet'); - $moip->addPaymentWay('financing'); - $moip->addPaymentWay('debit'); - $moip->addPaymentWay('debitCard'); + $moip->addPaymentWay('creditCard'); + $moip->addPaymentWay('billet'); + $moip->addPaymentWay('financing'); + $moip->addPaymentWay('debit'); + $moip->addPaymentWay('debitCard'); ------------------------------------- setBilletConf() --------------- -O método setBilletConf() atribui valores ao node "<Boleto>" no XML Moip que é responsável por definir as configurações adicionais e personalização do Boleto bancário. +O método setBilletConf() atribui valores ao node "<Boleto>" no XML Moip que é responsável por definir as configurações adicionais e personalização do Boleto bancário. 1. $expiration : Data em formato "AAAA-MM-DD" ou quantidade de dias. -2. $workingDays : Caso "$expiration" seja quantidade de dias você pode definir com "true" para que seja contado em dias úteis, o padrão será dias corridos. -3. $instructions : Mensagem adicionais a ser impresso no boleto, até três mensagens. -4. $uriLogo : URL de sua logomarca, dimensões máximas 75px largura por 40px altura. +2. $workingDays : Caso "$expiration" seja quantidade de dias você pode definir com "true" para que seja contado em dias úteis, o padrão será dias corridos. +3. $instructions : Mensagem adicionais a ser impresso no boleto, até três mensagens. +4. $uriLogo : URL de sua logomarca, dimensões máximas 75px largura por 40px altura. setBilletConf($expiration, $workingDays, $instructions, $uriLogo) @@ -247,17 +247,17 @@ $instructions : Array() $uriLogo : String - $moip->setBilletConf("2011-04-06", - false, - array("Primeira linha", - "Segunda linha", - "Terceira linha"), - "http://seusite.com.br/logo.gif"); + $moip->setBilletConf("2011-04-06", + false, + array("Primeira linha", + "Segunda linha", + "Terceira linha"), + "http://seusite.com.br/logo.gif"); ------------------------------------- addMessage() --------------- -O método addMessage() atribui valor a tag "<Mensagem>" do node "<Mensagens>" no XML Moip. +O método addMessage() atribui valor a tag "<Mensagem>" do node "<Mensagens>" no XML Moip. 1. <Mensagens>: Node com "<Mensagens>". 1. <Mensagem>: TAG que define mensagem adicional a ser exibida no checkout Moip. @@ -266,41 +266,41 @@ addMessage($msg) $msg : String - $moip->addMessage('Seu pedido contem os produtos X,Y e Z.'); + $moip->addMessage('Seu pedido contem os produtos X,Y e Z.'); ------------------------------------- setReturnURL() --------------- -O método setReturnURL() atribui valor a tag "<URLRetorno>" no XML Moip, responsável por definir a URL que o comprador será redirecionado ao finalizar um pagamento através do checkout Moip. +O método setReturnURL() atribui valor a tag "<URLRetorno>" no XML Moip, responsável por definir a URL que o comprador será redirecionado ao finalizar um pagamento através do checkout Moip. setReturnURL($url) $url : String - $moip->setReturnURL('https://meusite.com.br/cliente/pedido/bemvindodevolta'); + $moip->setReturnURL('https://meusite.com.br/cliente/pedido/bemvindodevolta'); ------------------------------------- setNotificationURL() --------------- -O método setNotificationURL() atribui valor a tag "<URLNotificacao>" no XML Moip, responsável por definir a URL ao qual o Moip deverá notificar com o NASP (Notificação de Alteração de Status de Pagamento) as mudança de status. +O método setNotificationURL() atribui valor a tag "<URLNotificacao>" no XML Moip, responsável por definir a URL ao qual o Moip deverá notificar com o NASP (Notificação de Alteração de Status de Pagamento) as mudança de status. setNotificationURL($url) $url : String - $moip->setNotificationURL('https://meusite.com.br/nasp/'); + $moip->setNotificationURL('https://meusite.com.br/nasp/'); ------------------------------------- addComission() --------------- -O método addComission() atribui valores as tags "<Comissoes>" no XML Moip, responsável por atribuir recebedores secundários a transação. +O método addComission() atribui valores as tags "<Comissoes>" no XML Moip, responsável por atribuir recebedores secundários a transação. -1. $reason : Razão/Motivo ao qual o recebedor secundário receberá o valor definido. -2. $receiver: Login Moip do usuario que receberá o valor. -3. $value : Valor ao qual será destinado ao recebedor secundário. -4. $percentageValue: Caso "true" define que valor será calculado em relação ao percentual sobre o valor total da transação. -5. $ratePayer: Caso "true" define que esse recebedor secundário irá pagar a Taxa Moip com o valor recebido. +1. $reason : Razão/Motivo ao qual o recebedor secundário receberá o valor definido. +2. $receiver: Login Moip do usuario que receberá o valor. +3. $value : Valor ao qual será destinado ao recebedor secundário. +4. $percentageValue: Caso "true" define que valor será calculado em relação ao percentual sobre o valor total da transação. +5. $ratePayer: Caso "true" define que esse recebedor secundário irá pagar a Taxa Moip com o valor recebido. addComission($reason, $receiver, $value, $percentageValue, $ratePayer) @@ -314,25 +314,25 @@ $percentageValue: Boolean $ratePayer : Boolean - $moip->addComission('Razão do Split', - 'recebedor_secundario', - '5.00'); - $moip->addComission('Razão do Split', - 'recebedor_secundario_2', - '12.00', - true, - true); + $moip->addComission('Razão do Split', + 'recebedor_secundario', + '5.00'); + $moip->addComission('Razão do Split', + 'recebedor_secundario_2', + '12.00', + true, + true); ------------------------------------- addParcel() --------------- -O método addParcel() atribui valores as tags de "<Parcelamentos>" no XML Moip, responsável configuras as opções de parcelamento que serão disponíveis ao pagador. +O método addParcel() atribui valores as tags de "<Parcelamentos>" no XML Moip, responsável configuras as opções de parcelamento que serão disponíveis ao pagador. -1. $min : Quantidade mínima de parcelas disponível ao pagador. -2. $max : Quantidade máxima de parcelas disponíveis ao pagador. +1. $min : Quantidade mínima de parcelas disponível ao pagador. +2. $max : Quantidade máxima de parcelas disponíveis ao pagador. 3. $rate : Valor de juros a.m por parcela. -4. $transfer : Caso "true" define que o valor de juros padrão do Moip será pago pelo pagador. +4. $transfer : Caso "true" define que o valor de juros padrão do Moip será pago pelo pagador. addParcel($min, $max, $rate, $transfer) @@ -345,14 +345,14 @@ $rate : Number $transfer : Boolean - $moip->addParcel('2', '4'); - $moip->addParcel('5', '7', '1.00'); - $moip->addParcel('8', '12', null, true); + $moip->addParcel('2', '4'); + $moip->addParcel('5', '7', '1.00'); + $moip->addParcel('8', '12', null, true); ------------------------------------- setReceiver() --------------- -O método setReceiver() atribui valor a tag "<LoginMoIP>" do node "<Recebedor>" que identifica o usuário Moip que irá receber o pagamento no Moip. +O método setReceiver() atribui valor a tag "<LoginMoIP>" do node "<Recebedor>" que identifica o usuário Moip que irá receber o pagamento no Moip. 1. $receiver : Login Moip do recebedor primario. @@ -362,30 +362,30 @@ setReceiver($receiver) $receiver : String - $moip->setReceiver('integracao@labs.moip.com.br'); + $moip->setReceiver('integracao@labs.moip.com.br'); ------------------------------------- getXML() --------------- -O método getXML() irá retornar o XML gerado com todos os atributos que você configurou, esse método pode ajudar a saber exatamente o XML que você irá enviar ao Moip. +O método getXML() irá retornar o XML gerado com todos os atributos que você configurou, esse método pode ajudar a saber exatamente o XML que você irá enviar ao Moip. getXML() - $moip = new Moip(); - $moip->setEnvironment('test'); - $moip->setCredential(array( - 'key' => 'ABABABABABABABABABABABABABABABABABABABAB', - 'token' => '01010101010101010101010101010101' - )); - $moip->setUniqueID(false); - $moip->setValue('100.00'); - $moip->setReason('Teste do Moip-PHP'); - $moip->validate('Basic'); + $moip = new Moip(); + $moip->setEnvironment('test'); + $moip->setCredential(array( + 'key' => 'ABABABABABABABABABABABABABABABABABABABAB', + 'token' => '01010101010101010101010101010101' + )); + $moip->setUniqueID(false); + $moip->setValue('100.00'); + $moip->setReason('Teste do Moip-PHP'); + $moip->validate('Basic'); - print_r($moip->getXML()); + print_r($moip->getXML()); - //IRÃ? IMPRIMIR + //IRÃ? IMPRIMIR @@ -400,29 +400,29 @@ getXML() send() --------------- -O método send() executa o envio da instrução ao Moip, e retorna os dados de resposta obtidos do Moip. +O método send() executa o envio da instrução ao Moip, e retorna os dados de resposta obtidos do Moip. 1. response : "true" para o caso de sucesso e "false" para quando ocorre algum erro. -2. error : Retorna sempre uma mensagem quando "response" é "false". -3. xml: Retorna sempre o XML de resposta Moip quando "response" é "true". +2. error : Retorna sempre uma mensagem quando "response" é "false". +3. xml: Retorna sempre o XML de resposta Moip quando "response" é "true". send() - $moip = new Moip(); - $moip->setEnvironment('test'); - $moip->setCredential(array( - 'key' => 'ABABABABABABABABABABABABABABABABABABABAB', - 'token' => '01010101010101010101010101010101' - )); - $moip->setUniqueID(false); - $moip->setValue('100.00'); - $moip->setReason('Teste do Moip-PHP'); - $moip->validate('Basic'); + $moip = new Moip(); + $moip->setEnvironment('test'); + $moip->setCredential(array( + 'key' => 'ABABABABABABABABABABABABABABABABABABABAB', + 'token' => '01010101010101010101010101010101' + )); + $moip->setUniqueID(false); + $moip->setValue('100.00'); + $moip->setReason('Teste do Moip-PHP'); + $moip->validate('Basic'); - print_r($moip->send()); + print_r($moip->send()); - //IRÃ? IMPRIMIR + //IRÃ? IMPRIMIR stdClass Object ( [response] => 1 @@ -433,49 +433,49 @@ send() getAnswer() --------------- -O método getAnswer() retorna os dados de resposta do Moip em forma de objeto. +O método getAnswer() retorna os dados de resposta do Moip em forma de objeto. 1. response : "true" para o caso onde o "<Status>" Moip retornou "Sucesso" e "false" para quando retornou "Falha". -2. error : Retorna sempre uma mensagem quando "response" é "false". -3. token: Retorna o TOKEN de pagamento gerado para quando "response" é "true". -4. payment_url : Retorna a URL de checkout Moip preparada para redirecionar o cliente com o TOKEN de pagamento para quando "response" é "true". +2. error : Retorna sempre uma mensagem quando "response" é "false". +3. token: Retorna o TOKEN de pagamento gerado para quando "response" é "true". +4. payment_url : Retorna a URL de checkout Moip preparada para redirecionar o cliente com o TOKEN de pagamento para quando "response" é "true". getAnswer() - $moip = new Moip(); - $moip->setEnvironment('test'); - $moip->setCredential(array( - 'key' => 'ABABABABABABABABABABABABABABABABABABABAB', - 'token' => '01010101010101010101010101010101' - )); - - $moip->setUniqueID(false); - $moip->setValue('100.00'); - $moip->setReason('Teste do Moip-PHP'); - $moip->validate('Basic'); - $moip->send(); - - print_r($moip->getAnswer()); - - //IRÃ? IMPRIMIR - stdClass Object - ( - [response] => 1 - [error] => - [token] => 92D091R2I0Y9X0E4T2K034L2H2V4H2J6L9R0S0T0K0N0L0T0Y9H879H144O8 - [payment_url] => https://desenvolvedor.moip.com.br/sandbox/Instrucao.do?token=92D091R2I0Y9X0E4T2K034L2H2V4H2J6L9R0S0T0K0N0L0T0Y9H879H144O8 - ) + $moip = new Moip(); + $moip->setEnvironment('test'); + $moip->setCredential(array( + 'key' => 'ABABABABABABABABABABABABABABABABABABABAB', + 'token' => '01010101010101010101010101010101' + )); + + $moip->setUniqueID(false); + $moip->setValue('100.00'); + $moip->setReason('Teste do Moip-PHP'); + $moip->validate('Basic'); + $moip->send(); + + print_r($moip->getAnswer()); + + //IRÃ? IMPRIMIR + stdClass Object + ( + [response] => 1 + [error] => + [token] => 92D091R2I0Y9X0E4T2K034L2H2V4H2J6L9R0S0T0K0N0L0T0Y9H879H144O8 + [payment_url] => https://desenvolvedor.moip.com.br/sandbox/Instrucao.do?token=92D091R2I0Y9X0E4T2K034L2H2V4H2J6L9R0S0T0K0N0L0T0Y9H879H144O8 + ) ------------------------------------- queryParcel() --------------- -O método queryParcel() retorna um Array() contendo as informações de parcelas e seus respectivos valores cobrados por parcela e o valor total a ser pago referente a taxa de juros simulada.. +O método queryParcel() retorna um Array() contendo as informações de parcelas e seus respectivos valores cobrados por parcela e o valor total a ser pago referente a taxa de juros simulada.. 1. REQUEST 2. $login: Login Moip do usuario. -3. $maxParcel: Máximo de parcelar a ser consultado. -4. $rate: Taxa de juros para simulação. -5. $simulatedValue: Valor pago ao qual será simulado. +3. $maxParcel: Máximo de parcelar a ser consultado. +4. $rate: Taxa de juros para simulação. +5. $simulatedValue: Valor pago ao qual será simulado. 6. RESPONSE 7. response : "true" em caso de resposta Moip com "<Status>" "Sucesso" e "false" em caso de "Falha" @@ -505,7 +505,7 @@ $simulatedValue: Number print_r($moip->queryParcel('integracao@labs.moip.com.br', '4', '1.99', '100.00')); - //IRÃ? IMPRIMIR + //IRÃ? IMPRIMIR Array ( [response] => 1 @@ -547,4 +547,111 @@ $simulatedValue: Number ) ---------------- \ No newline at end of file +--------------- + +Moip Assinaturas - API +------------------------ +Para interação com a API do Moip Assinaturas, utilize a classe `MoipSubscriptionsAPI`. Ela é construida de forma semelhante à classe `Moip`: + + $moip = new MoipSubscriptionsAPI(); + $moip->setEnvironment('test'); //ambiente sandbox + $moip->setCredential(array( + 'key' => 'ABABABABABABABABABABABABABABABABABABABAB', + 'token' => '01010101010101010101010101010101') + ); + +No momento está implementada apenas a API de Planos (as outras ficarão prontas em breve!). +Um plano é representado pela classe `MoipPlan`. Um plano possui os atributos listados [aqui](http://moiplabs.github.io/assinaturas-docs/api.html#planos). +Para cada atributo, existe um método setter que define o dado. Por exemplo: `setCode()`, `setName()`, etc... + + $plano = new MoipPlan(); + $plano->setCode('meu_plano')->setName('Meu Plano')->setAmount(500)->setInterval(array('unit' => 'MONTH', 'length' => 1)); + +Além disso, um plano pode receber um array com esses dados em seu construtor para inicializar seus atributos. + + $dados = array( + 'code' => 'meu_plano', + 'name' => 'Meu Plano', + 'amount' => 500, + 'interval' => array('unit' => 'MONTH', 'length' => 1) + ); + $plano = new MoipPlan($dados); + +Os atributos podem ser acessados normalmente, como abaixo: + + $plano->code; + +Os métodos abaixo da classe MoipSubscriptionsAPI interagem com a API de Planos: + +###createPlan() +Cria um plano. + + $moip = new MoipSubscriptionsAPI(); + $moip->setEnvironment('test'); //ambiente sandbox + $moip->setCredential(array( + 'key' => 'ABABABABABABABABABABABABABABABABABABABAB', + 'token' => '01010101010101010101010101010101') + ); + $plano = new MoipPlan(); + $plano->setCode('meu_plano')->setName('Meu Plano')->setAmount(500); + $moip->createPlan($plano); + +###getPlans() +Retorna a lista de todos os planos no atributo `data` do MoipResponse. A resposta é retornada na forma de um array de `MoipPlan`s. + + $moip = new MoipSubscriptionsAPI(); + $moip->setEnvironment('test'); //ambiente sandbox + $moip->setCredential(array( + 'key' => 'ABABABABABABABABABABABABABABABABABABABAB', + 'token' => '01010101010101010101010101010101') + ); + $resp = $moip->getPlans(); + print_r($resp->data); + +###getPlan() +Retorna informações sobre um plano em específico. + + $moip = new MoipSubscriptionsAPI(); + $moip->setEnvironment('test'); //ambiente sandbox + $moip->setCredential(array( + 'key' => 'ABABABABABABABABABABABABABABABABABABABAB', + 'token' => '01010101010101010101010101010101') + ); + $resp = $moip->getPlan('meu_plano'); + print_r($resp->data); + +###activatePlan() +Ativa um plano. + + $moip = new MoipSubscriptionsAPI(); + $moip->setEnvironment('test'); //ambiente sandbox + $moip->setCredential(array( + 'key' => 'ABABABABABABABABABABABABABABABABABABABAB', + 'token' => '01010101010101010101010101010101') + ); + $resp = $moip->activatePlan('meu_plano'); + +###inactivatePlan() +Inativa um plano. + + $moip = new MoipSubscriptionsAPI(); + $moip->setEnvironment('test'); //ambiente sandbox + $moip->setCredential(array( + 'key' => 'ABABABABABABABABABABABABABABABABABABABAB', + 'token' => '01010101010101010101010101010101') + ); + $resp = $moip->inactivatePlan('meu_plano'); + +###updatePlan() +Atualiza informações sobre um plano. + + $moip = new MoipSubscriptionsAPI(); + $moip->setEnvironment('test'); //ambiente sandbox + $moip->setCredential(array( + 'key' => 'ABABABABABABABABABABABABABABABABABABABAB', + 'token' => '01010101010101010101010101010101') + ); + $resp = $moip->getPlan('meu_plano'); + $plano = $resp->data; + $plano->setAmount(700); + $moip->updatePlan($plano); \ No newline at end of file diff --git a/lib/Moip.php b/lib/Moip.php index 08f1bef..c988d91 100644 --- a/lib/Moip.php +++ b/lib/Moip.php @@ -803,15 +803,4 @@ public function queryParcel($login, $maxParcel, $rate, $simulatedValue) { return $answer; } -} - -class MoipEnvironment { - public $base_url; - public $name; - - function __construct($base_url = '', $name = '') - { - $this->base_url = $base_url; - $this->name = $name; - } } \ No newline at end of file diff --git a/lib/MoipClient.php b/lib/MoipClient.php index d49f4dd..0aef134 100644 --- a/lib/MoipClient.php +++ b/lib/MoipClient.php @@ -128,30 +128,4 @@ function curlGet($credentials, $url, $error=null) { } } -} - -/** - * Read-only response - * @property boolean|string $response - * @property string $error - * @property string $xml - * @property string $payment_url - * @property string $token - */ -class MoipResponse { - private $response; - - function __construct(array $response) - { - $this->response = $response; - } - - function __get($name) - { - if (isset($this->response[$name])) - { - return $this->response[$name]; - } - return null; - } } \ No newline at end of file diff --git a/lib/MoipCustomer.php b/lib/MoipCustomer.php new file mode 100644 index 0000000..cf933d2 --- /dev/null +++ b/lib/MoipCustomer.php @@ -0,0 +1,417 @@ +BSD License + */ + +/** + * This class represents a Customer. + */ + class MoipCustomer { + /** + * Customer's code + * + * @var string + */ + protected $code; + + /** + * Customer's e-mail + * + * @var string + */ + protected $email; + + /** + * Customer's full name + * + * @var string + */ + protected $fullname; + + /** + * Customer's CPF + * + * @var string + */ + protected $cpf; + /** + * Customer's phone area code + * + * @var string + */ + protected $phone_area_code; + + /** + * Customer's phone number + * + * @var string + */ + protected $phone_number; + + /** + * Customer's birthdate day + * + * @var int + */ + protected $birthdate_day; + + /** + * Customer's birthdate month + * + * @var int + */ + protected $birthdate_month; + + /** + * Customer's birthdate year + * + * @var int + */ + protected $birthdate_year; + + /** + * Customer's address. An associative array with the keys: + * 'street' => street name + * 'number' => the number + * 'complement' => the complement + * 'district' => the district + * 'city' => the city name + * 'state' => the state, with two letters + * 'country' => the country, with three letters (BRA for Brazil) + * 'zipcode' => the zipcode, only numbers, no dashes + * + * @var array + */ + protected $address; + + /** + * Customer's billing info. An associative array with the key: + * 'credit_card' => the credit card, represented by an associative array, containing the keys: + * 'holder_name' => the full holder name + * 'number' => the credit card number + * 'expiration_month' => the month of expiration + * 'expiration_year' => the year of expiration + * If the credit card is already stored on a vault, it's enough to provide only the following key: + * 'vault' => the vault number + * + * @var array + */ + protected $billing_info; + + /** + * Errors + * + * @var string + */ + public $errors; + + protected $fields = array( + 'code' => 'setCode', + 'email' => 'setEmail', + 'fullname' => 'setFullName', + 'cpf' => 'setCPF', + 'phone_area_code' => 'setPhoneAreaCode', + 'phone_number' => 'setPhoneNumber', + 'birthdate_day' => 'setBirthdateDay', + 'birthdate_month' => 'setBirthdateMonth', + 'birthdate_year' => 'setBirthdateYear', + 'address' => 'setAddress', + 'billing_info' => 'setBillingInfo', + ); + + public function __construct($initial_values = null) { + if($initial_values != null) { + foreach($this->fields as $field => $setter) { + if(isset($initial_values[$field])) { + $this->$setter($initial_values[$field]); //invoke the setter to make sure the data is valid + } + } + } + } + + /** + * Method setError() + * + * Set Error alert + * + * @param String $error Error alert + * @return MoipPlan + */ + public function setError($error) { + $this->errors = $error; + + return $this; + } + + /** + * Method setCode() + * + * Set the customer code. + * + * @param string $code + * @return MoipCustomer + */ + public function setCode($code) { + if(strlen($code) > 65) { + $this->setError('Code cannot be greater than 65 characters.'); + } + else { + $this->code = $code; + } + + return $this; + } + + /** + * Method setEmail() + * + * Set the customer's email. + * + * @param string $email + * @return MoipCustomer + */ + public function setEmail($email) { + if(strpos($email,'@') === false || strpos($email,'.') === false) { //very simple validation, just to make sure it's not completely invalid. + $this->setError('E-mail is not valid.'); + } + else { + $this->email = $email; + } + + return $this; + } + + /** + * Method setFullName() + * + * Set the customer's full name. + * + * @param string $fullname + * @return MoipCustomer + */ + public function setFullName($fullname) { + if(strlen($fullname) > 150) { + $this->setError('Full name cannot be greater than 150 characters.'); + } + else { + $this->fullname = $fullname; + } + + return $this; + } + + /** + * Method setCPF() + * + * Set the customer's CPF. + * + * @param string $cpf + * @return MoipCustomer + */ + public function setCPF($cpf) { + if(!preg_match('/^[0-9]{11}$/',$cpf)) { + $this->setError('CPF is not valid.'); + } + else { + $this->cpf = $cpf; + } + + return $this; + } + + /** + * Method setPhoneAreaCode() + * + * Set the customer's phone area code. + * + * @param string $phone_area_code + * @return MoipCustomer + */ + public function setPhoneAreaCode($phone_area_code) { + if(!is_numeric($phone_area_code)) { + $this->setError('Phone area code is an integer number.'); + } + else { + $this->phone_area_code = $phone_area_code; + } + + return $this; + } + + /** + * Method setPhoneNumber() + * + * Set the customer's phone number. + * + * @param string $phone_number + * @return MoipCustomer + */ + public function setPhoneNumber($phone_number) { + if(!is_numeric($phone_number)) { + $this->setError('Phone number must be numeric.'); + } + else { + $this->phone_number = $phone_number; + } + + return $this; + } + + /** + * Method setBirthdateDay() + * + * Set the customer's birthdate day. + * + * @param int $birthdate_day + * @return MoipCustomer + */ + public function setBirthdateDay($birthdate_day) { + if(!is_numeric($birthdate_day) || $birthdate_day > 31 || $birthdate_day < 1) { + $this->setError('Birthdate day must be a number between 1 and 31.'); + } + else { + $this->birthdate_day = $birthdate_day; + } + + return $this; + } + + /** + * Method setBirthdateMonth() + * + * Set the customer's birthdate month. + * + * @param int $birthdate_month + * @return MoipCustomer + */ + public function setBirthdateMonth($birthdate_month) { + if(!is_numeric($birthdate_month) || $birthdate_month > 12 || $birthdate_month < 1) { + $this->setError('Birthdate month must be a number between 1 and 12.'); + } + else { + $this->birthdate_month = $birthdate_month; + } + + return $this; + } + + /** + * Method setBirthdateYear() + * + * Set the customer's birthdate year. + * + * @param int $birthdate_year + * @return MoipCustomer + */ + public function setBirthdateYear($birthdate_year) { + if(!is_numeric($birthdate_year)) { + $this->setError('Birthdate year must be a number.'); + } + else { + $this->birthdate_year = $birthdate_year; + } + + return $this; + } + + /** + * Method setAddress() + * + * Set the customer's address. + * + * @param array $address + * @return MoipCustomer + */ + public function setAddress($address) { + if(!isset($address['street']) || + !isset($address['number']) || + !isset($address['complement']) || + !isset($address['district']) || + !isset($address['city']) || + !isset($address['state']) || + !isset($address['country']) || + !isset($address['zipcode'])) { + $this->setError('All address fields are mandatory.'); + } + else { + $this->address = $address; + } + + return $this; + } + + /** + * Method setBillingInfo() + * + * Set the customer's billing info. + * + * @param array $billing_info + * @return MoipCustomer + */ + public function setBillingInfo($billing_info) { + if(!isset($billing_info['credit_card']) || + ( + ( + !isset($billing_info['credit_card']['holder_name']) || + !isset($billing_info['credit_card']['number']) || + !isset($billing_info['credit_card']['expiration_month']) || + !isset($billing_info['credit_card']['expiration_year']) + ) && ( + !isset($billing_info['credit_card']['vault']) + ) + ) + ) { + $this->setError('Provide credit card information or a vault number.'); + } + else { + $this->billing_info = $billing_info; + } + + return $this; + } + + public function hasCreditCard() { + return isset($this->billing_info) && isset($this->billing_info['credit_card']); + } + + public function validate() { + if($this->code == null || $this->fullname == null || $this->email == null || $this->cpf == null || $this->phone_area_code == null + || $this->phone_number== null || $this->birthdate_day == null || $this->birthdate_month == null || $this->birthdate_year == null + || $this->address == null ) { + $this->setError('Code, full name, e-mail, CPF, phone area code, phone number, birthdate day, birthdate month, birthdate year and address fields are mandatory.'); + } + } + + /** + * Method toJSON() + * + * Generates the JSON representation of this object. + * + * @return string + */ + public function toJSON() { + $json = array(); + + foreach($this->fields as $field => $setter) { + if($this->$field != null) { + $json[$field] = $this->$field; + } + } + + return json_encode($json); + } + + function __get($name) + { + if (isset($this->$name)) + { + return $this->$name; + } + return null; + } + } \ No newline at end of file diff --git a/lib/MoipEnvironment.php b/lib/MoipEnvironment.php new file mode 100644 index 0000000..41c06f8 --- /dev/null +++ b/lib/MoipEnvironment.php @@ -0,0 +1,12 @@ +base_url = $base_url; + $this->name = $name; + } +} \ No newline at end of file diff --git a/lib/MoipPlan.php b/lib/MoipPlan.php new file mode 100644 index 0000000..258a96d --- /dev/null +++ b/lib/MoipPlan.php @@ -0,0 +1,354 @@ +BSD License + */ + +/** + * This class represents a Moip Plan + */ + class MoipPlan { + /** + * Code of the plan (65 characters) + * + * @var string + */ + protected $code; + + /** + * Name of the plan (65 characters) + * + * @var string + */ + protected $name; + + /** + * Description of the plan (255 characters) + * + * @var string + */ + protected $description; + + /** + * Price of the plan + * + * @var int + */ + protected $amount; + /** + * Setup fee + * + * @var int + */ + protected $setup_fee; + + /** + * Maximum number of subscriptions. Default is unlimited + * + * @var int + */ + protected $max_qty; + + /** + * Plan status (ACTIVE or INACTIVE) + * + * @var string + */ + protected $status; + + /** + * Associative array with the keys: + * 'length' => integer + * 'unit' => string ('DAY', 'MONTH' or 'YEAR') + * + * @var array + */ + protected $interval; + + /** + * Number of billing cycles before the subscription expires. Default is unlimited + * + * @var int + */ + protected $billing_cycles; + + /** + * Associative array with the keys: + * 'days' => integer, the number of trial days + * 'enabled' => 'TRUE' or 'FALSE', indicating if the trial is enabled. Default is 'FALSE' + * @var unknown + */ + protected $trial; + + /** + * Errors + * + * @var string + */ + public $errors; + + protected $fields = array( + 'code' => 'setCode', + 'name' => 'setName', + 'description' => 'setDescription', + 'amount' => 'setAmount', + 'setup_fee' => 'setSetupFee', + 'max_qty' => 'setMaxQty', + 'status' => 'setStatus', + 'interval' => 'setInterval', + 'billing_cycles' => 'setBillingCycles', + 'trial' => 'setTrial' + ); + + public function __construct($initial_values = null) { + if($initial_values != null) { + foreach($this->fields as $field => $setter) { + if(isset($initial_values[$field])) { + $this->$setter($initial_values[$field]); //invoke the setter to make sure the data is valid + } + } + } + } + + /** + * Method setError() + * + * Set Error alert + * + * @param String $error Error alert + * @return MoipPlan + */ + public function setError($error) { + $this->errors = $error; + + return $this; + } + + /** + * Method setCode() + * + * Set the plan code. + * + * @param string $code + * @return MoipPlan + */ + public function setCode($code) { + if(strlen($code) > 64) { + $this->setError('Code cannot be greater than 65 characters.'); + } + else { + $this->code = $code; + } + + return $this; + } + + /** + * Method setName() + * + * Set the plan name. + * + * @param string $name + * @return MoipPlan + */ + public function setName($name) { + if(strlen($name) > 64) { + $this->setError('Name cannot be greater than 65 characters.'); + } + else { + $this->name = $name; + } + + return $this; + } + + /** + * Method setDescription() + * + * Set the plan description. + * + * @param string $description + * @return MoipPlan + */ + public function setDescription($description) { + if(strlen($description) > 255) { + $this->setError('Description cannot be greater than 255 characters.'); + } + else { + $this->description = $description; + } + + return $this; + } + + /** + * Method setAmount() + * + * Set the plan price. + * + * @param int $amount + * @return MoipPlan + */ + public function setAmount($amount) { + if(!is_numeric($amount)) { + $this->setError('Amount is an integer number.'); + } + else { + $this->amount = $amount; + } + + return $this; + } + + /** + * Method setSetupFee() + * + * Set the plan setup fee. + * + * @param int $setup_fee + * @return MoipPlan + */ + public function setSetupFee($setup_fee) { + if(!is_numeric($setup_fee)) { + $this->setError('Setup fee is an integer number.'); + } + else { + $this->setup_fee = $setup_fee; + } + + return $this; + } + + /** + * Method setMaxQty() + * + * Set the plan maximum quantity. + * + * @param int $max_quantity + * @return MoipPlan + */ + public function setMaxQty($max_qty) { + if(!is_numeric($max_qty)) { + $this->setError('Max quantity is an integer number.'); + } + else { + $this->max_qty = $max_qty; + } + + return $this; + } + + /** + * Method setStatus() + * + * Set the plan status. + * + * @param string $status + * @return MoipPlan + */ + public function setStatus($status) { + if($status != 'ACTIVE' && $status != 'INACTIVE') { + $this->setError('Status must be ACTIVE or INACTIVE.'); + } + else { + $this->status = $status; + } + + return $this; + } + + /** + * Method setInterval() + * + * Set the plan interval. + * + * @param array $interval + * @return MoipPlan + */ + public function setInterval($interval) { + if(!isset($interval['unit']) || !isset($interval['length']) || !in_array($interval['unit'], array('DAY', 'MONTH', 'YEAR')) || !is_numeric($interval['length'])) { + $this->setError('Interval must be an array containing the keys \'length\' and \'unit\'.'); + } + else { + $this->interval = $interval; + } + + return $this; + } + + /** + * Method setBillingCycles() + * + * Set the plan billing cycles. + * + * @param int $billing_cycles + * @return MoipPlan + */ + public function setBillingCycles($billing_cycles) { + if(!is_numeric($billing_cycles)) { + $this->setError('Billing cycles is an integer number.'); + } + else { + $this->billing_cycles = $billing_cycles; + } + + return $this; + } + + /** + * Method setTrial() + * + * Set the plan trial. + * + * @param array $trial + * @return MoipPlan + */ + public function setTrial($trial) { + if(!isset($trial['days']) || !isset($trial['enabled']) || !is_bool($trial['enabled']) || !is_numeric($trial['days'])) { + $this->setError('Trial must be an array containing the keys \'days\' and \'enabled\'.'); + } + else { + $this->trial = $trial; + } + + return $this; + } + + public function validate() { + if($this->code == null || $this->name == null || $this->amount == null) { + $this->setError('Code, name and amount are mandatory.'); + } + } + + /** + * Method toJSON() + * + * Generates the JSON representation of this object. + * + * @return string + */ + public function toJSON() { + $json = array(); + + foreach($this->fields as $field => $setter) { + if($this->$field != null) { + $json[$field] = $this->$field; + } + } + + return json_encode($json); + } + + function __get($name) + { + if (isset($this->$name)) + { + return $this->$name; + } + return null; + } + } \ No newline at end of file diff --git a/lib/MoipResponse.php b/lib/MoipResponse.php new file mode 100644 index 0000000..e900313 --- /dev/null +++ b/lib/MoipResponse.php @@ -0,0 +1,26 @@ +response = $response; + } + + function __get($name) + { + if (isset($this->response[$name])) + { + return $this->response[$name]; + } + return null; + } +} \ No newline at end of file diff --git a/lib/MoipSubscriptionsAPI.php b/lib/MoipSubscriptionsAPI.php new file mode 100644 index 0000000..0aa6351 --- /dev/null +++ b/lib/MoipSubscriptionsAPI.php @@ -0,0 +1,367 @@ +BSD License + */ + +/** + * This class interacts with the Moip's Subscriptions API + */ +class MoipSubscriptionsAPI { + /** + * Encoding of the page + * + * @var string + */ + + public $encoding = 'UTF-8'; + /** + * Associative array with two keys. 'key'=>'your_key','token'=>'your_token' + * + * @var array + */ + protected $credential; + + /** + * Errors + * + * @var string + */ + public $errors; + + /** + * Server's answer + * + * @var MoipResponse + */ + public $answer; + + public function __construct() { + $this->setEnvironment(); + } + + /** + * Method setError() + * + * Set Error alert + * + * @param String $error Error alert + * @return MoipSubscriptionsAPI + * @access public + */ + public function setError($error) { + $this->errors = $error; + + return $this; + } + + /** + * Method setEnvironment() + * + * Define the environment for the API utilization. + * + * @param bool $testing If true, will use the sandbox environment + * @return MoipSubscriptionsAPI + */ + public function setEnvironment($testing = false) { + if (empty($this->environment)) + { + $this->environment = new MoipEnvironment(); + } + + if ($testing) { + $this->environment->name = "Sandbox"; + $this->environment->base_url = "https://sandbox.moip.com.br/assinaturas/v1"; + } else { + $this->environment->name = "Produção"; + $this->environment->base_url = "https://moip.com.br/assinaturas/v1"; + } + + return $this; + } + + /** + * Method setCredential() + * + * Set the credentials(key,token) required for the API authentication. + * + * @param array $credential Array with the credentials token and key + * @return MoipSubscriptionsAPI + */ + public function setCredential($credential) { + if (!isset($credential['token']) or + !isset($credential['key']) or + strlen($credential['token']) != 32 or + strlen($credential['key']) != 40) + $this->setError("Error: credential invalid"); + + $this->credential = $credential; + return $this; + } + + /** + * Method createPlan() + * + * Tells Moip to create a plan. + * + * @param MoipPlan $plan + * @return MoipResponse the server response + */ + public function createPlan($plan) { + $plan->validate(); + + if($plan->errors != null) { + $this->setError($plan->errors); + } + + return $this->curlPost($plan->toJSON(),'/plans'); + } + + public function getPlans() { + $response = $this->curlGet('/plans', $this->errors); + + if($response->response) { + $plans = array(); + + foreach($response->data['plans'] as $plan) { + $plans[$plan['code']] = new MoipPlan($plan); + } + + return new MoipResponse(array('response' => true, 'error' => null, 'data' => $plans)); + } else { + return $response; + } + } + + public function getPlan($code) { + $response = $this->curlGet('/plans/' . $code); + + if($response->response) { + $plan = new MoipPlan($response->data); + return new MoipResponse(array('response' => true, 'error' => null, 'data' => $plan)); + } else { + return $response; + } + } + + public function activatePlan($code) { + return $this->curlPut(null,'/plans/'.$code.'/activate'); + } + + public function inactivatePlan($code) { + return $this->curlPut(null,'/plans/'.$code.'/inactivate'); + } + + public function updatePlan($plan) { + $plan->validate(); + + if($plan->errors != null) { + $this->setError($plan->errors); + } + + return $this->curlPut($plan->toJSON(),'/plans/'.$plan->code); + } + + /** + * Method createCustomer() + * + * Tells Moip to create a customer. + * + * @param MoipCustomer $customer + * @return MoipResponse the server response + */ + public function createCustomer($customer, $new_vault = false) { + $customer->validate(); + + if($customer->errors != null) { + $this->setError($customer->errors); + } + + if($new_vault && (!$customer->hasCreditCard() || isset($customer->billing_info['credit_card']['vault']))) { + $this->setError('Cannot create vault without credit card information.'); + } + + return $this->curlPost($customer->toJSON(),'/customers?newvault=' . ($new_vault ? 'true' : 'false')); + } + + public function getCustomers() { + $response = $this->curlGet('/customers', $this->errors); + + if($response->response) { + $customers = array(); + + foreach($response->data['customers'] as $customer) { + $customers[$customer['code']] = new MoipCustomer($customer); + } + + return new MoipResponse(array('response' => true, 'error' => null, 'data' => $customers)); + } else { + return $response; + } + } + + public function getCustomer($code) { + $response = $this->curlGet('/customers/' . $code); + + if($response->response) { + $customer = new MoipCustomer($response->data); + return new MoipResponse(array('response' => true, 'error' => null, 'data' => $customer)); + } else { + return $response; + } + } + + public function updateCustomer($customer) { + $customer->validate(); + + if($customer->errors != null) { + $this->setError($customer->errors); + } + + return $this->curlPut($customer->toJSON(),'/customers/'.$customer->code); + } + + public function updateCustomerBillingInfo($code, $billing_info) { + return $this->curlPut(json_encode($billing_info), '/customers/'.$code.'/billing_infos'); + } + + public function suspendSubscription($code) { + return $this->curlPut(null,'/subscriptions/'.$code.'/suspend'); + } + + public function activateSubscription($code) { + return $this->curlPut(null,'/subscriptions/'.$code.'/activate'); + } + + public function cancelSubscription($code) { + return $this->curlPut(null,'/subscriptions/'.$code.'/cancel'); + } + + /** + * @param string $json json data + * @param string $url url request + * @param string $error errors + * @return MoipResponse + */ + private function curlPost($json, $url) { + + if (!$this->errors) { + $header[] = 'Expect:'; + $header[] = 'Authorization: Basic ' . base64_encode($this->credential['token'] . ':' . $this->credential['key']); + $header[] = 'Content-Type: application/json'; + + $ch = curl_init(); + $options = array(CURLOPT_URL => $this->environment->base_url . $url, + CURLOPT_HTTPHEADER => $header, + CURLOPT_SSL_VERIFYPEER => false, + CURLOPT_POST => true, + CURLOPT_POSTFIELDS => $json, + CURLOPT_RETURNTRANSFER => true, + CURLINFO_HEADER_OUT => true + ); + + curl_setopt_array($ch, $options); + $ret = curl_exec($ch); + $err = curl_error($ch); + $info = curl_getinfo($ch); + curl_close($ch); + + $obj = json_decode($ret, true); + + return new MoipResponse(array( + 'response' => (substr($info['http_code'],0,1) == '2'), + 'error' => isset($obj['errors']) ? $obj['message'] : null, + 'data' => $obj) + ); + } else { + return new MoipResponse(array('response' => false, 'error' => $this->errors, 'data' => null)); + } + } + + + /** + * @param string $url url request + * @param string $error errors + * @return MoipResponse + */ + private function curlGet($url) { + + if (!$this->errors) { + $header[] = 'Expect:'; + $header[] = 'Authorization: Basic ' . base64_encode($this->credential['token'] . ':' . $this->credential['key']); + $header[] = 'Content-Type: application/json'; + + $ch = curl_init(); + $options = array(CURLOPT_URL => $this->environment->base_url . $url, + CURLOPT_HTTPHEADER => $header, + CURLOPT_SSL_VERIFYPEER => false, + CURLOPT_RETURNTRANSFER => true, + CURLINFO_HEADER_OUT => true + ); + + curl_setopt_array($ch, $options); + $ret = curl_exec($ch); + $err = curl_error($ch); + $info = curl_getinfo($ch); + curl_close($ch); + + $obj = json_decode($ret, true); + + return new MoipResponse(array( + 'response' => (substr($info['http_code'],0,1) == '2'), + 'error' => isset($obj['errors']) ? $obj['message'] : null, + 'data' => $obj) + ); + } else { + return new MoipResponse(array('response' => false, 'error' => $this->errors, 'data' => null)); + } + } + + /** + * @param string $url url request + * @param string $error errors + * @return MoipResponse + */ + private function curlPut($json, $url) { + + if (!$this->errors) { + $header[] = 'Expect:'; + $header[] = 'Authorization: Basic ' . base64_encode($this->credential['token'] . ':' . $this->credential['key']); + $header[] = 'Content-Type: application/json'; + + if($json != null) + $header[] = 'Content-Length: '.strlen($json); + + $ch = curl_init(); + $options = array(CURLOPT_URL => $this->environment->base_url . $url, + CURLOPT_HTTPHEADER => $header, + CURLOPT_SSL_VERIFYPEER => false, + CURLOPT_CUSTOMREQUEST => 'PUT', + CURLOPT_RETURNTRANSFER => true, + CURLINFO_HEADER_OUT => true + ); + curl_setopt_array($ch, $options); + + if($json != null) + curl_setopt($ch, CURLOPT_POSTFIELDS, $json); + + $ret = curl_exec($ch); + $err = curl_error($ch); + $info = curl_getinfo($ch); + curl_close($ch); + + $obj = json_decode($ret, true); + + return new MoipResponse(array( + 'response' => (substr($info['http_code'],0,1) == '2'), + 'error' => isset($obj['errors']) ? $obj['message'] : null, + 'data' => $obj) + ); + } else { + return new MoipResponse(array('response' => false, 'error' => $this->errors, 'data' => null)); + } + } +} \ No newline at end of file