Code Monkey home page Code Monkey logo

laravel-pagseguro's People

Contributors

caiquecastro avatar cassianogf avatar diegocleir avatar fabioferreira3 avatar felipehertzer avatar felipemarques avatar fernandobandeira avatar heitorspedroso avatar lucasgiovanny avatar narirock avatar nascimentolh avatar robertotcestari avatar spacedog4 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

laravel-pagseguro's Issues

Notificações

Implementar métodos para facilitar o recebimento das notificações do PagSeguro.

Erro durante assinatura de plano

Quando tento fazer a chamada do método de assinatura de plano, conforme a documentação wiki ("PagSeguroRecorrente::setPlan()" ), me é retornado esse erro:

Non-static method Artistas\PagSeguro\PagSeguroRecorrente::setPlan() should not be called statically

De fato o método não é estático, mas alguém poderia me dar uma dica de como contornar esse erro?

Pagamento recorrente

Poderia implantar a função de pagamento recorrente no projeto ... ta ficando bom isso aqui ...

Atualização 1.5.* para 1.6.0 quebrou o pacote

Apos atualizar para a versão 1.6.0 toda rota do pacote retorna que o controller não foi encontrado.

Tentei criar uma instalação do zero do laravel apenas para testar e retorna o mesmo erro. "PagseguroController not found"

Incompatibilidade com Laravel 5.5

composer require artistas/laravel-pagseguro

Retorno:

  • artistas/laravel-pagseguro 1.4.0 requires illuminate/support 5.1.x|5.2.x|5.3.x|5.4.x -> satisfiable by illuminate/support[v5.1.1, v5.1.13, v5.1.16, v5.1.2, v5.1.20, v5.1.22, v5.1.25, v5.1.28, v5.1.30, v5.1.31, v5.1.41, v5.1.6, v5.1.8, v5.2.0, v5.2.19, v5.2.21, v5.2.24, v5.2.25, v5.2.26, v5.2.27, v5.2.28, v5.2.31, v5.2.32, v5.2.37, v5.2.43, v5.2.45, v5.2.6, v5.2.7, v5.3.0, v5.3.16, v5.3.23, v5.3.4, v5.4.0, v5.4.13, v5.4.17, v5.4.19, v5.4.27, v5.4.36, v5.4.9].

Obs: incompatibilidade com o novo "illuminate/support" v5.5

Diminuir complexidade

Diminuir a complexidade dos métodos setCreditCardHolder() e setBillingAddress() , e verificar outras possíveis refatorações.

Problemas no setShippingAddress - BOLETO

Ao gerar o boleto o endereço que vem no mesmo é diferente do que é lançado no setShippingAddress para aquele pagador. Alguém saberia informa se tem algum default ou algo do tipo?

Segue o endereço que é passado em todos os boletos, independente do pagador.

Av. Brigadeiro Faria Lima, 1.384 - CEP 01452002
São Paulo.

Erro installment quantity.

Atualmente estou tendo esse erro na hora de enviar os dados paga pagseguro!

The no interest installment quantity must be an integer.

Provavelmente é esperado dados em integer e por isso causa o erro, acontece que já alterei para integer e o erro persiste!
Log abaixo:

at PagSeguro->validate(array('paymentMethod' => 'creditCard', 'bankName' => null, 'creditCardToken' => 'Vem do Javascript', 'installmentQuantity' => '2', 'installmentValue' => '50.20', 'noInterestInstallmentQuantity' => null), array('paymentMethod' => 'required', 'bankName' => 'required_if:paymentMethod,eft', 'creditCardToken' => 'required_if:paymentMethod,creditCard', 'installmentQuantity' => 'required_if:paymentMethod,creditCard|integer|between:1,18', 'installmentValue' => 'required_if:paymentMethod,creditCard|numeric|between:0.00,9999999.00', 'noInterestInstallmentQuantity' => 'integer|between:1,18')) in PagSeguro.php line 436

Detalhes sobre o getSenderHash na wiki

Sugiro adicionar a seguinte informação na wiki do projeto (tópico 1.1):

Atenção: Este método possui algumas dependências e, por isso, recomendamos que o getSenderHash não seja executado no onLoad da página. Você pode executa-lo, por exemplo quando o cliente clicar no botão de conclusão de pagamento.

Motivo: Durante testes realizados, o valor do senderHash era undefined se não seguisse o que a documentação informa.

Fazer chamadas via XML ao invés de JSON

Qual seria a dificuldade para fazer todas as chamadas via XML ao invés de JSON!? Estava conversando com um pessoal e lendo coisas a respeito do pagsgeuro, parece que a taxa de incidência de problemas com chamadas via JSON é bem mais alta do que via XML.

Method of payment currently unavailable.

Estou obtendo esse erro ao envivar o pedido para um pagamento recorrente.

Eis o log da transação:

HTTP/1.1 POST
/pre-approvals?email=[email protected]&token=BD87C05155854599A18019952E563F78

host: ws.sandbox.pagseguro.uol.com.br
accept: application/vnd.pagseguro.com.br.v3+json;charset=ISO-8859-1
content-type: application/json; charset=UTF-8
connection: Keep-Alive
{"reference":"ID do pedido","plan":"0DFB3756BFBF81E114E7BF9B14A84AA3","sender":{"name":"Nome Completo","email":"[email protected]","ip":"123.123.123.123","hash":"36cb99ebc5a34567a89cb3651de29b65","phone":{"areaCode":"32","number":"988448523"},"documents":[{"type":"CPF","value":"06003738600"}],"address":{"street":"Rua/Avenida","number":"N\u00famero","complement":"Complemento","district":"Bairro","postalCode":"12345678","city":"Cidade","state":"RS","country":"BRA"}},"paymentMethod":{"type":"CREDITCARD","creditCard":{"token":"36cb99ebc5a34567a89cb3651de29b65","holder":{"name":"Nome Completo","birthDate":"10/02/1940","phone":{"areaCode":"32","number":"988448523"},"documents":[{"type":"CPF","value":"22233344455"}],"billingAddress":{"street":"Rua/Avenida","number":"N\u00famero","complement":"Complemento","district":"Bairro","postalCode":"12345678","city":"Cidade","state":"RS","country":"BRA"}}}}}

400
Content-Type: application/vnd.pagseguro.com.br.v3+json;charset=ISO-8859-1
{"error":true,"errors":{"10009":"Method of payment currently unavailable."}}

Adição de opcionalidade de endereço de entrega.

Adicionando a seguinte configuração como parâmetro 'shippingAddressRequired' => 'false' faz com que não seja necessário enviar dados de entrega (shippingInfo e shippingAddress) para casos em que não há produtos a serem enviados.

Ship List

1.2.0

Foco: O básico para habilitar o pagamento recorrente.

  • Criação de Plano
  • Adesão a pagamento recorrente
  • Cancelamento de recorrência

1.3.0

Foco: Terminar a implementação do Pagamento Recorrente.

  • Mudança de meio de pagamento
  • Desconto no pagamento
  • Suspensão e reativação
  • Retentativa de pagamento
  • Efetuando uma cobrança manual

1.4.0

Foco: Criar métodos pra consultar transações, necessário caso seja desenvolvido um painel que liste um histórico de pagamentos, por exemplo...

  • Habilitar consulta de Pagamentos, com filtros

Entre as versões

  • Notificações do PagSeguro Recorrente?
  • Criar arquivo para traduzir os erros.

Erro simplexml_load_string()

Ao tentar processar a transação recebo o seguinte error. Como resolver posso resolver?

simplexml_load_string(): Entity: line 1: parser error : Start tag expected, '<' not found {"userId":1,"email":"[email protected]","exception":"[object] (ErrorException(code: 0): simplexml_load_string(): Entity: line 1: parser error : Start tag expected, '<' not found at /application/vendor/artistas/laravel-pagseguro/src/Artistas/PagSeguroClient.php:155) [stacktrace] #0 [internal function]: Illuminate\\Foundation\\Bootstrap\\HandleExceptions->handleError(2, 'simplexml_load_...', '/application/ve...', 155, Array) #1 /application/vendor/artistas/laravel-pagseguro/src/Artistas/PagSeguroClient.php(155): simplexml_load_string('Internal Server...') #2 /application/vendor/artistas/laravel-pagseguro/src/Artistas/PagSeguroClient.php(43): Artistas\\PagSeguro\\PagSeguroClient->formatResult('Internal Server...') #3 /application/vendor/artistas/laravel-pagseguro/src/Artistas/PagSeguro.php(423): Artistas\\PagSeguro\\PagSeguroClient->sendTransaction('email=thiago_an...') #4 /application/app/Http/Controllers/PagSeguro/PagSeguroController.php(28): Artistas\\PagSeguro\\PagSeguro->send(Array) #5 [internal function]: App\\Http\\Controllers\\PagSeguro\\PagSeguroController->boleto(Object(Illuminate\\Http\\Request), Object(App\\Models\\PagSeguro)) #6 /application/vendor/laravel/framework/src/Illuminate/Routing/Controller.php(54): call_user_func_array(Array, Array) #7 /application/vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php(45): Illuminate\\Routing\\Controller->callAction('boleto', Array) #8 /application/vendor/laravel/framework/src/Illuminate/Routing/Route.php(212): Illuminate\\Routing\\ControllerDispatcher->dispatch(Object(Illuminate\\Routing\\Route), Object(App\\Http\\Controllers\\PagSeguro\\PagSeguroController), 'boleto') #9 /application/vendor/laravel/framework/src/Illuminate/Routing/Route.php(169): Illuminate\\Routing\\Route->runController() #10 /application/vendor/laravel/framework/src/Illuminate/Routing/Router.php(658): Illuminate\\Routing\\Route->run() #11 /application/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(30): Illuminate\\Routing\\Router->Illuminate\\Routing\\{closure}(Object(Illuminate\\Http\\Request)) #12 /application/vendor/laravel/framework/src/Illuminate/Routing/Middleware/SubstituteBindings.php(41): Illuminate\\Routing\\Pipeline->Illuminate\\Routing\\{closure}(Object(Illuminate\\Http\\Request)) #13 /application/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(149): Illuminate\\Routing\\Middleware\\SubstituteBindings->handle(Object(Illuminate\\Http\\Request), Object(Closure)) #14 /application/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request)) #15 /application/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/VerifyCsrfToken.php(68): Illuminate\\Routing\\Pipeline->Illuminate\\Routing\\{closure}(Object(Illuminate\\Http\\Request)) #16 /application/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(149): Illuminate\\Foundation\\Http\\Middleware\\VerifyCsrfToken->handle(Object(Illuminate\\Http\\Request), Object(Closure)) #17 /application/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request)) #18 /application/vendor/laravel/framework/src/Illuminate/View/Middleware/ShareErrorsFromSession.php(49): Illuminate\\Routing\\Pipeline->Illuminate\\Routing\\{closure}(Object(Illuminate\\Http\\Request)) #19 /application/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(149): Illuminate\\View\\Middleware\\ShareErrorsFromSession->handle(Object(Illuminate\\Http\\Request), Object(Closure)) #20 /application/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request)) #21 /application/vendor/laravel/framework/src/Illuminate/Session/Middleware/StartSession.php(63): Illuminate\\Routing\\Pipeline->Illuminate\\Routing\\{closure}(Object(Illuminate\\Http\\Request)) #22 /application/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(149): Illuminate\\Session\\Middleware\\StartSession->handle(Object(Illuminate\\Http\\Request), Object(Closure)) #23 /application/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request)) #24 /application/vendor/laravel/framework/src/Illuminate/Cookie/Middleware/AddQueuedCookiesToResponse.php(37): Illuminate\\Routing\\Pipeline->Illuminate\\Routing\\{closure}(Object(Illuminate\\Http\\Request)) #25 /application/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(149): Illuminate\\Cookie\\Middleware\\AddQueuedCookiesToResponse->handle(Object(Illuminate\\Http\\Request), Object(Closure)) #26 /application/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request)) #27 /application/vendor/laravel/framework/src/Illuminate/Cookie/Middleware/EncryptCookies.php(66): Illuminate\\Routing\\Pipeline->Illuminate\\Routing\\{closure}(Object(Illuminate\\Http\\Request)) #28 /application/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(149): Illuminate\\Cookie\\Middleware\\EncryptCookies->handle(Object(Illuminate\\Http\\Request), Object(Closure)) #29 /application/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request)) #30 /application/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(102): Illuminate\\Routing\\Pipeline->Illuminate\\Routing\\{closure}(Object(Illuminate\\Http\\Request)) #31 /application/vendor/laravel/framework/src/Illuminate/Routing/Router.php(660): Illuminate\\Pipeline\\Pipeline->then(Object(Closure)) #32 /application/vendor/laravel/framework/src/Illuminate/Routing/Router.php(635): Illuminate\\Routing\\Router->runRouteWithinStack(Object(Illuminate\\Routing\\Route), Object(Illuminate\\Http\\Request)) #33 /application/vendor/laravel/framework/src/Illuminate/Routing/Router.php(601): Illuminate\\Routing\\Router->runRoute(Object(Illuminate\\Http\\Request), Object(Illuminate\\Routing\\Route)) #34 /application/vendor/laravel/framework/src/Illuminate/Routing/Router.php(590): Illuminate\\Routing\\Router->dispatchToRoute(Object(Illuminate\\Http\\Request)) #35 /application/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(176): Illuminate\\Routing\\Router->dispatch(Object(Illuminate\\Http\\Request)) #36 /application/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(30): Illuminate\\Foundation\\Http\\Kernel->Illuminate\\Foundation\\Http\\{closure}(Object(Illuminate\\Http\\Request)) #37 /application/vendor/fideloper/proxy/src/TrustProxies.php(56): Illuminate\\Routing\\Pipeline->Illuminate\\Routing\\{closure}(Object(Illuminate\\Http\\Request)) #38 /application/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(149): Fideloper\\Proxy\\TrustProxies->handle(Object(Illuminate\\Http\\Request), Object(Closure)) #39 /application/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request)) #40 /application/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(30): Illuminate\\Routing\\Pipeline->Illuminate\\Routing\\{closure}(Object(Illuminate\\Http\\Request)) #41 /application/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(149): Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest->handle(Object(Illuminate\\Http\\Request), Object(Closure)) #42 /application/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request)) #43 /application/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(30): Illuminate\\Routing\\Pipeline->Illuminate\\Routing\\{closure}(Object(Illuminate\\Http\\Request)) #44 /application/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(149): Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest->handle(Object(Illuminate\\Http\\Request), Object(Closure)) #45 /application/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request)) #46 /application/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ValidatePostSize.php(27): Illuminate\\Routing\\Pipeline->Illuminate\\Routing\\{closure}(Object(Illuminate\\Http\\Request)) #47 /application/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(149): Illuminate\\Foundation\\Http\\Middleware\\ValidatePostSize->handle(Object(Illuminate\\Http\\Request), Object(Closure)) #48 /application/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request)) #49 /application/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/CheckForMaintenanceMode.php(46): Illuminate\\Routing\\Pipeline->Illuminate\\Routing\\{closure}(Object(Illuminate\\Http\\Request)) #50 /application/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(149): Illuminate\\Foundation\\Http\\Middleware\\CheckForMaintenanceMode->handle(Object(Illuminate\\Http\\Request), Object(Closure)) #51 /application/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request)) #52 /application/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(102): Illuminate\\Routing\\Pipeline->Illuminate\\Routing\\{closure}(Object(Illuminate\\Http\\Request)) #53 /application/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(151): Illuminate\\Pipeline\\Pipeline->then(Object(Closure)) #54 /application/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(116): Illuminate\\Foundation\\Http\\Kernel->sendRequestThroughRouter(Object(Illuminate\\Http\\Request)) #55 /application/public/index.php(55): Illuminate\\Foundation\\Http\\Kernel->handle(Object(Illuminate\\Http\\Request)) #56 {main} "}

Geração de Boletos

Ao tentar gerar um boleto utilizando a facade PagSeguroBoleto, tenho o retorno NULL e não é gerado o boleto.

Erro ao tentar resgatar Transaction code, Reference e Payment Link

Olá, tudo bem?

Estou com um problema após o método send, recebo o erro abaixo:

--
Undefined property: Artistas\PagSeguro\PagSeguro::$paymentLink

 
`
$pagseguro = PagSeguro::setReference($pedido->id)
->setSenderInfo([
'senderName' => $input['nome'], //Deve conter nome e sobrenome
'senderPhone' => $input['telefone'], //Código de área enviado junto com o telefone
'senderEmail' => $cadastro->email,
'senderHash' => $input['hash_pagseguro'],
'senderCPF' => $input['cpf'] //Ou CNPJ se for Pessoa Júridica
])
->setShippingAddress([ // OPCIONAL
'shippingAddressStreet' => $input['rua'],
'shippingAddressNumber' => $input['numero'],
'shippingAddressDistrict' => $input['bairro'],
'shippingAddressPostalCode' => $input['cep'],
'shippingAddressCity' => $input['cidade'],
'shippingAddressState' => $input['estado']
])->setItems($carrinho);

if($input['metodo'] == 2){

    // Boleto
    $pagseguro->send([
      'paymentMethod' => 'boleto'
    ]);

    $pedido->boleto = $pagseguro->paymentLink;
    $pedido->save();

}
`

Alguém pode me ajudar?

Erro em PagSeguro::getSession(): Serialization of 'SimpleXMLElement

Estou tentando implementar o pacote em meu formulário próprio.
Contudo, estou recebendo a mensagem "Serialization of 'SimpleXMLElement' is not allowed".

Dando uma rápida olhada, percebi algo que possivelmente estava gerando o meu problema:
Artistas/PagSeguroClient.php na linha 75:

$this->session->put('pagseguro.session', $result->id);

Contudo, o $result->id não é uma string. O retorno dela é:

SimpleXMLElement {#362 ▼
+0: "id-retornado"
}

Isso gera a mensagem "Serialization of 'SimpleXMLElement' is not allowed" ao tentar armazenar esse valor na Sessão. Se eu forçar o retorno da string da seguinte maneira, o retorno seria uma string que possibilitaria a serialização:

$this->session->put('pagseguro.session', (string) $result->id);

O retorno:

"id-retornado"

Estou correto, ou eu que estou implementando isso erroneamente?

Agradeço desde já. Abraço.

Retorno do Boleto Bancário

Quando eu envio o pagamento por boleto bancário, o pagseguro retorna um xml com o link para imprimir o boleto. Tem alguma função pronta para receber este retorno? Não encontrei na Wiki...

Obrigada!

Campo reference no method para criação de Plano ausente

Boa noite,

Não encontrei nenhum padrão para abertura de issues ou pull request. Então colocarei aqui o que fiz pra poder usar o campo reference, disponivel na API do Pagseguro Recorrente.

no arquivo: ./vendor/artistas/laravel-pagseguro/src/Artistas/PagSeguroRecorrente.php
na linha 70, temo o metodo sendPreApprovalRequest com a seguinte implementacao:

/**
 * Define os dados do plano.
 *
 * @param array $preApprovalRequest
 *
 * @return \SimpleXMLElement
 */
public function sendPreApprovalRequest(array $preApprovalRequest)
{
    $preApprovalRequest = [
        'email'                             => $this->email,
        'token'                             => $this->token,
        'preApprovalName'                   => $this->sanitize($preApprovalRequest, 'preApprovalName'),
        'preApprovalCharge'                 => $this->sanitize($preApprovalRequest, 'preApprovalCharge'),
        'preApprovalPeriod'                 => $this->sanitize($preApprovalRequest, 'preApprovalPeriod'),
        'preApprovalCancelUrl'              => $this->sanitize($preApprovalRequest, 'preApprovalCancelUrl'),
        'preApprovalAmountPerPayment'       => $this->sanitizeMoney($preApprovalRequest, 'preApprovalAmountPerPayment'),
        'preApprovalMembershipFee'          => $this->sanitizeMoney($preApprovalRequest, 'preApprovalMembershipFee'),
        'preApprovalTrialPeriodDuration'    => $this->sanitizeNumber($preApprovalRequest, 'preApprovalTrialPeriodDuration'),
        'preApprovalExpirationValue'        => $this->sanitizeNumber($preApprovalRequest, 'preApprovalExpirationValue'),
        'preApprovalExpirationUnit'         => $this->sanitize($preApprovalRequest, 'preApprovalExpirationUnit'),
        'maxUses'                           => $this->sanitizeNumber($preApprovalRequest, 'maxUses'),
    ];

    $this->validatePreApprovalRequest($preApprovalRequest);

    return (string) $this->sendTransaction($preApprovalRequest, $this->url['preApprovalRequest'])->code;
}

Porem não é possível utilizar o campo reference. Eu modifiquei o metodo e ficou assim:

/**
 * Define os dados do plano.
 *
 * @param array $preApprovalRequest
 *
 * @return \SimpleXMLElement
 */
public function sendPreApprovalRequest(array $preApprovalRequest)
{
    $preApprovalRequest = [
        'email'                             => $this->email,
        'token'                             => $this->token,
        'preApprovalName'                   => $this->sanitize($preApprovalRequest, 'preApprovalName'),
        'preApprovalCharge'                 => $this->sanitize($preApprovalRequest, 'preApprovalCharge'),
        'preApprovalPeriod'                 => $this->sanitize($preApprovalRequest, 'preApprovalPeriod'),
        'preApprovalCancelUrl'              => $this->sanitize($preApprovalRequest, 'preApprovalCancelUrl'),
        'preApprovalAmountPerPayment'       => $this->sanitizeMoney($preApprovalRequest, 'preApprovalAmountPerPayment'),
        'preApprovalMembershipFee'          => $this->sanitizeMoney($preApprovalRequest, 'preApprovalMembershipFee'),
        'preApprovalTrialPeriodDuration'    => $this->sanitizeNumber($preApprovalRequest, 'preApprovalTrialPeriodDuration'),
        'preApprovalExpirationValue'        => $this->sanitizeNumber($preApprovalRequest, 'preApprovalExpirationValue'),
        'preApprovalExpirationUnit'         => $this->sanitize($preApprovalRequest, 'preApprovalExpirationUnit'),
        'maxUses'                           => $this->sanitizeNumber($preApprovalRequest, 'maxUses'),
        'reference'                         => $this->sanitize($preApprovalRequest, 'preApprovalReference')
    ];

    $this->validatePreApprovalRequest($preApprovalRequest);

    return (string) $this->sendTransaction($preApprovalRequest, $this->url['preApprovalRequest'])->code;
}

Possibilitando utilizar o pacote para criar plano assim:

/**
 * Display a listing of the resource.
 * @return Response
 */
public function pagseguro()
{
    $reference = uniqid();

    $response = \Artistas\PagSeguro\PagSeguroRecorrenteFacade::sendPreApprovalRequest([
        'preApprovalReference' => $reference,
        'preApprovalName' => 'Plano ' . $reference, //Nome do plano
        'preApprovalCharge' => 'AUTO', //Tipo de Cobrança
        'preApprovalPeriod' => 'MONTHLY', //Periodicidade do plano
        //'preApprovalCancelURL' => 'https://sistema.spicolibri.com.br', //URL de cancelamento OPCIONAL
        'preApprovalAmountPerPayment' => '1.00', //Valor exato da cobrança
        'preApprovalTrialPeriodDuration' => '28', //Tempo de teste OPCIONAL
        'preApprovalExpirationUnit' => 'MONTHS', //Período em que as cobranças serão realizadas OPCIONAL
    ]);

    dump($response);

    exit;

    return view('recurringsignature::index');
}

É possível incluir isso ?

Obrigado.

Erro ao iniciar sessão

Boa noite pessoal,

Primeiro lugar, parabéns pela iniciativa, esta me ajudando muito.

Mas estou com o seguinte problema ao iniciar a sessão via sandbox:

{{ PagSeguro::startSession() }}

simplexml_load_string(): Entity: line 14: parser error : Input is not proper UTF-8, indicate encoding !
Bytes: 0xE3 0x6F 0x20 0x66 (View: /home/vagrant/Code/Anun/resources/views/payment/showForm.blade.php)

No final de semana não estava dando este erro. Será que é problema da pagseguro?

Atualiza TLS 1.2

Recentemente o pagseguro atualizou para TLS 1.2. Existe alguma previsão para implementar essa modificação?

Notificações

Quando eu recebo uma notificação do pagseguro, o PagSeguro::notification($request->notificationCode, $request->notificationType);sempre retorna vazio. Entrei na função e fui dando uns Logs para entender e percebi que sempre que chega na chamada formatResult($result) que está em PagSeguroClient.php, é aonde fica nula a resposta.
O método $result = simplexml_load_string($result); está fazendo algo de errado e deixando nula a resposta.
Como faz para corrigir isso?

Unauthorized: Não foi possível estabelecer uma conexão com o PagSeguro.

Olá,

Estava utilizando normalmente o pagseguro, mas ontem ao dar um update no composer recebi uma atualização e desde então estou recebendo a seguinte mensagem "Unauthorized: Não foi possível estabelecer uma conexão com o PagSeguro." ...

Fiz outras modificações também e tenho tentado verificar o que aconteceu, já verifiquei o token e as configurações, mas até o momento sem sucesso ...

[Propposal] Atualizar wiki Notificações

Eu não consegui fazer funcionar a consulta de notificações usando o codigo abaixo:

PagSeguro::notification($request->notificationCode, $request->notificationType);

Retorna erro dizendo que não é possível chamar este método de forma estática. De fato, eu vi no codigo que a função não está declarada com static. Isso pode ser devido a versão do PHP. Estou usando a seguinte versão:

PHP 7.1.9 (cli) (built: Sep 15 2017 00:15:33) ( NTS )
Copyright (c) 1997-2017 The PHP Group
Zend Engine v3.1.0, Copyright (c) 1998-2017 Zend Technologies
    with Zend OPcache v7.1.9, Copyright (c) 1999-2017, by Zend Technologies

Consegui fazer funcionar usando o iOC do Laravel:

<?php
...
            $notificationCode = $request->input('notificationCode');
            $notificationType = $request->input('notificationType');

            $p = app()->make(PagSeguro::class);
            $response = $p->notification($notificationCode, $notificationType);
            dd($response);

Me retornando o seguinte:

SimpleXMLElement {#421
  +"date": "2018-07-20T10:24:40.000-03:00"
  +"code": "DC2527F9-XXX-XXXX-XXXX-7CF1DA73774D"
  +"reference": " - 5b51e2981f3bf"
  +"type": "1"
  +"status": "1"
  +"lastEventDate": "2018-07-20T10:24:41.000-03:00"
  +"paymentMethod": SimpleXMLElement {#433
    +"type": "2"
    +"code": "202"
  }
  +"paymentLink": "https://sandbox.pagseguro.uol.com.br/checkout/payment/booklet/print.jhtml?c=fc333e3eff9c677c9ebcad1bc3148b91212b02bc082c11f79b1d2a98d1324fc468fb2d7e369fa0fa"
  +"grossAmount": "1311.00"
  +"discountAmount": "0.00"
  +"creditorFees": SimpleXMLElement {#434
    +"intermediationRateAmount": "0.40"
    +"intermediationFeeAmount": "52.31"
  }
  +"netAmount": "1258.29"
  +"extraAmount": "0.00"
  +"installmentCount": "1"
  +"itemCount": "1"
  +"items": SimpleXMLElement {#435
    +"item": SimpleXMLElement {#441
      +"id": "01"
      +"description": "Teste de compra"
      +"quantity": "1"
      +"amount": "1311.00"
    }
  }
  +"sender": SimpleXMLElement {#436
    +"name": "Joselito da Silva"
    +"email": "[email protected]"
    +"phone": SimpleXMLElement {#443
      +"areaCode": "41"
      +"number": "99999999"
    }
    +"documents": SimpleXMLElement {#444
      +"document": SimpleXMLElement {#449
        +"type": "CPF"
        +"value": "00000000"
      }
    }
  }
  +"primaryReceiver": SimpleXMLElement {#437
    +"publicKey": "PUBC4AF6294AE9A4EC6B576D75559EA9174"
  }
}

Resposta com link do boleto.

Apesar de muitos erros de validação, comentei algumas linhas e os dados são enviados para o sandbox.
Entretanto, não retorna dados de resposta do sandbox.
Alguém sabe me dizer o que pode ser!??

Unauthorized: Não foi possível estabelecer uma conexão com o PagSeguro

Olá, talvez esse problema que estou enfrentando seja por causa de falta de conhecimento não neccessáriamente um bug no sistema de vcs, enfim segue a baixo o problema.

erro:

Unauthorized: Não foi possível estabelecer uma conexão com o PagSeguro.
--
in PagSeguroClient.php (line 139)

meu código:

......
......
.....
<script type="text/javascript" src="/pagseguro/javascript"></script>
        <script>
            PagSeguroDirectPayment.setSessionId('{{ PagSeguro::startSession() }}'); 
        </script>
......
......
......

minha configuração .env (email e token ficticios porem acredito estar usando os dados corretos rsrs)


#pagseguro settings
PAGSEGURO_SANDBOX=true
[email protected]
PAGSEGURO_TOKEN=135772AD6B3C401ABC7EE285FC0G972A
PAGSEGURO_NOTIFICATION=/payment/notification

Basicamente o que fiz ate agora foi seguir os passos 1 e 1.1 da wiki. espero que alguem consiga me ajudar ou caso seja algum problema no sistema eu consiga ser util para ajudar a soluciona-lo.

informações de ambiente utilizado:

php: 7.1.7
laravel: 5.4

Dês de já agradeço pela atenção.

Possível problema no método sendPreApprovalPaymentMethod()

Pessoal, vejam o método abaixo. Onde tem $this->plan, não deveria ser o código do preApproval?

public function sendPreApprovalPaymentMethod(array $paymentSettings)
{
if (empty($this->billingAddress)) {
$this->setBillingAddress([]);
}
$this->validatePaymentSettings($paymentSettings);
$data = $this->formatPreApprovalPaymentMethodData($paymentSettings);
return (string) $this->sendJsonTransaction($data, $this->url['preApproval'].'/'.$this->plan.'/payment-method', 'PUT');
}

Na documentação dá a entender isto, mas como estou fazendo esse tipo de integração pela primeira vez, posso não estar enxergando alguma coisa. https://dev.pagseguro.uol.com.br/documentacao/pagamento-online/pagamentos/pagamento-recorrente-transparente

Quando tento executar este método ele me retorna:

{
    "code": 17008,
    "message": "pre-approval not found."
}

Mais um indício de que o valor que realmente vai no request é o código do plano e não o do preApproval.

Caracteres acentuados

Atualmente quando é feito o envio da requisição com caracteres acentuados no nome por exemplo, os mesmos perdem a codificação no pagseguro. Verificar o que pode ser feito para evitar que isto aconteça, caso não tenha o que fazer trocar os acentos por caracteres normais ao enviar.

Pagamento manual

Percebi que vocês possuem possibilidade de pagamento recorrente e assinar um plano manual.

Mas percebi que não tem método implementado para fazer a cobrança manual

https://dev.pagseguro.uol.com.br/v1/reference#api-pagamento-recorrente-cobranca-de-plano

O que adianta fazer adesão de um plano e configurar ele como manual se não tem como fazer um acionamento de cobrança?

Acredito que deveríamos implementar algo desse tipo:

public function sendPayment(string $preApprovalCode)
{
$data = [
'preApprovalCode' => $preApprovalCode
];
return $this->sendJsonTransaction($data, $this->url['preApproval'] . '/payment');
}

Atualizar Plano

Existe alguma função para atualizar os valores de um plano já criado?

Checkout

Existiria algum comando para gerar o checkout?

Erro ao setar reference

$pagseguro = PagSeguro::setReference('id')...

Error:
Non-static method Artistas\PagSeguro\PagSeguro::setReference() should not be called statically

Pagseguro Sandbox: Service Temporarily Unavailable

Deparei-me com esta tela de manutenção do Pagseguro Sandbox http://prntscr.com/cw8sta

Sendo assim, eu não consigo realizar transações na minha implementação, rebendo o erro:

ErrorException in PagSeguroClient.php line 66:
simplexml_load_string(): Entity: line 1: parser error : Space required after the Public Identifier

Identifiquei o seguinte. Na classe PagSeguroClient.php, método sendTransaction() na linha que é executado o CURL:

$result = curl_exec($ch);

Se eu utilizar um echo $result me retorna o seguinte: http://prntscr.com/cw8uqf
Ou seja, ocasiona um erro 503 do servidor. O que não entra em nenhuma condição de tratamento que vem logo abaixo desse trecho do código.

Como sugestão, poderia ser utilizado após o curl_exec o seguinte:

$getInfo = curl_getinfo($ch);

Esse cara retornaria o seguinte: http://prntscr.com/cw8vxy
Com esse array, poderia ser tratado chamando o índice 'http_code' e verificando se o mesmo retorno uma resposta válida do servidor.

Dessa forma, seria melhor para eu tratar o sistema de pagamento informando ao usuário que o serviço está temporariamente indisponível.

Espero que eu tenha sido claro na minha explicação.
Se eu estiver realizando alguma coisa errada, por favor me informe.

Fico no aguardo. Abraço.

Rever formulário

Analisar se o formulário está sendo utilizado, desta forma refatorar o mesmo ou tirá-lo da lib (nesse caso melhorar a documentação).

Erro ao efetuar pagamento em produção

Em sandbox o pagamento e realizado perfeitamente.
Em produção ele não é realizado e não retorna nenhuma mensagem de erro.
Somente o status 301.
Esse erro ocorre somente para checkout transparente.

Suporte às notificações das Assinaturas

Agora o PagSeguro tem outro modelo de notificação que tem como o parâmetro o notificationType => 'preApproval' e essas notificações podem ser consultadas usando o link https://ws.pagseguro.uol.com.br/v2/pre-approvals/notifications/{notificationCode}

Ao usar o PagSeguroRecorrente::notification($notificationCode) ele busca diretamente nas transações e não nas assinaturas, retornando assim como Not Found

Validação não acontece em todos os itens do pedido.

Me parece que existe um erro de lógica na validação que acontece na linha 291 do arquivo PagSeguro.php.

A validação não acontece em todos os itens do pedido. Se tiver 3 itens por, exemplo, ele valida o primeiro e o segundo item e não valida o terceiro.

Isso acontece, pois a comparação na linha 305 do mesmo arquivo é:

for ($cont = 1; $cont < $this->itemsCount; $cont++) {

mas deveria ser

for ($cont = 1; $cont <= $this->itemsCount; $cont++) {

Eu usei a sua biblioteca como base para criar a minha própria, pois precisava usar o modelo de aplicação (que é quando o cliente me dá permissão para receber pagamento por ele). Essa forma de integração é melhor pois em um clique o usuário integra a conta dele com o meio de pagamento. Caso queira que eu desenvolva essa nova funcionalidade aqui neste library me diga como poderia contribuir com o projeto. grande abraço!

erro com a facade!

Estou tendo erro com a trait!

Fiz igual o modelo, usando a facade e deu esse erro

FatalErrorException in PagSeguroController.php line 11:
Trait 'Icom\Http\Controllers\PagSeguro' not found

fiz todo o passo a passo do Wiki....

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.