Jump to content
Giovani Silva

Adesão de vários clientes há um plano Pagamento Recorrente Transparente PagSeguro

Recommended Posts

Boa tarde, estou integrando pagamento recorrente do pagseguro em PHP.
No entanto consigo criar planos e adicionar uma assinatura (cliente) ao plano.
No entanto não estou conseguindo inserir vários clientes (assinaturas) ao mesmo plano.
No fórum deles tem várias pessoas com o mesmo problema, mas não tem nenhuma solução até então.

 

Aparentemente encontrei uma solução em http://download.uol.com.br/pagseguro/docs/pagamento-recorrente-transparente.pdf 
Porém usa Json o que não é minha praia. Então a questão é o que fazer com tal informação usando php. Como enviar os dados.

 

Segue abaixo algumas informações importantes sobre o que tem que ser feito:


 

Citar

 

Integrações no browser A API do Checkout Transparente possui funções JavaScript para algumas operações que devem ser executadas no browser do cliente, funções que serão descritas mais adiante. Para essas funções uma API JavaScript deve ser importada no final da página dos meios de pagamento:

Esse JavaScript possui um objeto chamado PagSeguroDirectPayment, que é a interface de acesso aos métodos. Após importar o arquivo, deve ser executado o método setSessionId com o ID de sessão gerado anteriormente. 

 

 <script type="text/javascript">
 PagSeguroDirectPayment.setSessionId('ID_DA_SESSÃO');
 </script>

Nas funções abaixo os eventos de sucesso e erro ocorrem em chamadas callback no JavaScript que são passadas via JSON. Para isso basta passar três funções JavaScript com nome ‘success’, ‘error’ e ‘complete’ via JSON na chamada dos métodos. A função ‘complete’ será chamada independente do retorno e as funções ‘success’ e ‘error’ serão chamadas dependendo do retorno, ou seja, se o retorno não possuir erro a função chamada será a ‘success’ e se possuir erro a função chamada será a ‘error’.

 

 

Adesão a pagamento recorrente Permite aderir um cliente a um plano para que este seja cobrado recorrentemente conforme o plano informado.

URL: POST https://ws.pagseguro.uol.com.br/pre-approvals?{authenticationParameters} Formatos disponíveis: JSON Parâmetros JSON

 

No código abaixo, 'plan' seria o código do pano já criado ao qual iria receber a adesão de um novo assinante.

{
     "plan":"89A1108EFEFE7A8EE4065FAD7872DE0D",
     "reference":"ID-CND",
     "sender":{
         "name":"Comprador",
         "email":"adesao@istambul.com",
         "ip":"192.168.0.1",
         "hash":"hash",
         "phone":{
         "areaCode":"11",
         "number":"988881234"
     },
     "address":{
         "street":"Av. Brigadeira Faria Lima",
         "number":"1384",
        "complement":"3 andar",
         "district":"Jd. Paulistano",
         "city":"São Paulo",
         "state":"SP",
         "country":"BRA",
         "postalCode":"01452002"
     },
     "documents":[
         {
             "type":"CPF",
             "value":"00000000191"
         }
     ]
     },
     "paymentMethod":{
         "type":"CREDITCARD",
         "creditCard":{
         "token":"e08d3dccd95b432ba1c1830c3827f359",
         "holder":{
             "name":"Nome",
             "birthDate":"11/01/1984",
             "documents":[
             {
                 "type":"CPF",
                 "value":"00000000191"
             }
         ],
         "billingAddress":{
             "street":"Av. Brigadeiro Faria Lima",
             "number":"1384",
             "complement":"3 andar",
             "district":"Jd. Paulistano",
             "city":"São Paulo",
             "state":"SP",
             "country":"BRA",
             "postalCode":"01452002"
         },
         "phone":{
             "areaCode":"11",
             "number":"988881234"
         }
     }
     }
     }
 }

Resposta de Sucesso

{
 "code":"4989E778E4E4315BB4F37F9CAF05D094" //Código da assinatura
 }

 

To perdidão, se alguém puder der uma luz, agradeço.

 

Share this post


Link to post
Share on other sites

Encontrei o código abaixo, porém, precisaria só da parte de vincular um novo cliente há uma assinatura já existente.
Então, seria só a segunda parte dele, creio eu.

Mas não encontrei nele as informações mencionadas no meu primeiro comentário com o Json.

 

Deveria ter uma variável para informar o código do plano ao qual a nova assinatura será vinculada.
Não sei se iria na variável  $data da public function join (array $data)

 

 
namespace Site\PagSeguro;



use GuzzleHttp\Client;

use PagSeguro\Configuration\Configure;



class PagSeguroPlan

{

public function create(){

$preApproval = new \PagSeguro\Domains\Requests\PreApproval();

$preApproval->setCurrency("BRL");

$preApproval->setReference("plan_business");

$preApproval->setPreApproval()->setCharge('auto');

$preApproval->setPreApproval()->setName("Seguro contra roubo do Notebook Prata77");

$preApproval->setPreApproval()->setDetails("Todo dia 30 será cobrado o valor de R100,00 referente ao seguro contra

roubo do Notebook Prata.");

$preApproval->setPreApproval()->setAmountPerPayment('100.00');

$preApproval->setPreApproval()->setPeriod('Monthly');

$preApproval->setPreApproval()->setMaxTotalAmount('2400.00');

$preApproval->setRedirectUrl("http://www.lojateste.com.br/redirect");

$preApproval->setReviewUrl("http://www.lojateste.com.br/review");

try {

$response = $preApproval->register(

\PagSeguro\Configuration\Configure::getAccountCredentials()

);

echo "<h2>Criando requisição de assinatura</h2>"

. "<p>URL da assinatura: <strong>$response</strong></p>"

. "<p><a title=\"URL da assinatura\" href=\"$response\" target=\_blank\">Ir para URL da assinatura.</a></p>";

} catch (\Exception $e) {

dd($e->getMessage());

}

}



public function join(array $data){

$credentials = Configure::getAccountCredentials();

$env = Configure::getEnvironment();

$client = new Client();

$method = 'POST';



$url = $env->getEnvironment() == 'production' ?

'https://ws.pagseguro.uol.com.br/pre-approvals'

: 'https://ws.sandbox.pagseguro.uol.com.br/pre-approvals';



$response = $client->request($method,$url, [

'query' => [

'email'=>$credentials->getEmail(),

'token'=>$credentials->getToken(),

],

'headers' => [

'Content-Type' => 'application/json;charset=ISO-8859-1',

'Accept' => 'application/vnd.pagseguro.com.br.v3+json;charset=ISO-8859-1'

],

'json' => $data

]);



return json_decode($response->getBody()->getContents());

}

}

 

 

 

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By Vinicius Bazan
      Estou tendo um problema em elaborar o meu código com javascript, estou fazendo um teste em html e css simples pra depois elaborar um website, o objetivo aqui é fazer um relógio pelo JS e ter um contador em baixo desse relógio que vai pegar valores a partir de um switch para esse contador funcionar, isso porque se trata de dados sobre tipos de agressões contra as mulheres, então os cases do switch tem o dado em segundos para executar a formula, uma mensagem inicial e uma mensagem final.
       O usuário teria dois botões, um de cada lado (nesse caso estou usando 2 div com as ID's #btd e #bte, ao apertar esses botões aumentaria o valor de uma variável em +1 ou -1 e isso faria o switch escolher outro case e trocar os dados do contador, mas os dados não são trocados, mantendo as informações iniciais.
       Ao todo tem 4 funções, a função relogio(), contador(), btd() e bte(), sendo que a btd e bte estão dentro da contador() 
       Estou colocando o codigo dentro do spoiler, se alguém puder me ajudar a achar alguma solução agradeço
       
      OBS: Eu nem sei se pode ter uma function dentro da outra, mas como estou aprendendo JS ainda, imagino que assim como outras estruturas (If, Else, Switch, etc...) possa ser possível colocar uma função dentro da outra.
       
       
    • By luialcantara
      Olá, a empresa onde trabalho tem uma página de login para área restrita que está com problema na função de cadastro. O formulário está enviando os dados para o banco de dados e o usuário se torna ativo para acesso normalmente. O problema é que a mesma função que salva os dados deveria redirecionar o cliente para a área restrita ou então para a página inicial para que ele digite usuário e senha e consiga acessar a página. 
       
      A página já estava pronta quando comecei aqui e eu não tenho domínio sobre php, mas já corrigi alguns erros que estavam impedindo o cadastro. Porém os clientes reclamam pois após concluir o cadastro a imagem de carregamento não desaparece, então apenas coloquei um delay para evitar os questionamentos, pois o usuário fica ativo, então é só voltar para o login que eles conseguem usar nosso site.
       
      A página está dividida entre uma de login (php), uma para cadastro (php) e a principal, que está no wordpress. 
       
      Função do formulário de cadastro:
                  submitHandler: function(form) {                 $(".botoesactions").hide();                 $(".ajaxloader").show();                 var dados = jQuery( form ).serialize();                  $(".ajaxloader").fadeOut(1500);                 $.ajax({type: "POST", data: dados, url:"<?php echo get_site_url(); ?>/atendimento/cadastrar",success: function(data){                     console.log(data);                     try {             var ret = JSON.parse(data);                     } catch (e) {          var ret = false;                    }                     $(".ajaxloader").hide();                     if(ret !== false && ret.retorno === "ok"){                         console.log(ret);                         alert("Cadastrado realizado com sucesso!");                         window.location.href = "<--!?php echo get_site_url(); ?-->/atendimento/";                     }else if(ret !== false && ret.retorno === "fail"){                         alert(ret.mensagem);                         $(".botoesactions").show();                     }else{                         $(".botoesactions").show();                     }                 }});             }  
       
      Função de inserção de informações no banco de dados:
      elseif('cadastrar' == $syjusaten){                         if(!isset($_SESSION) || !isset($_SESSION['jusate_session']['answeris']) || $_SESSION['jusate_session']['answeris'] != 42 ){                 if($_POST && $_POST['typos'] == "iscadastro"){                     $url= $urlServer.'/Cliente/ClienteSite/cadastraclientesite';                     $parms = array(                         "usuario" => $_POST['user'],                         "Senha" => $_POST['pass'],                         "Cliente.ClienteId" => $_POST['clienteId'],                         "Cliente.Nome" => $_POST['nome'] /*Existem outros dados, mas acho que ficaria muito codigo e não contribuem para erro*/                     );                     $respServer = syJuCurl($url, $parms);                     if($respServer == ""){                         echo json_encode( array(                             "retorno" => "fail",                             "mensagem" => "Não foi possivel realizar o cadastro. Tente novamente mais tarde"                         ));                     }else{     echo $respServer;                         }                 }else{                     echo "ELSEE";                     header("Location: ".get_site_url()."/atendimento");                 }                         exit;             }else{                 header("Location: ".get_site_url()."/atendimento/");             }         }  
      Agradeço pela atenção ;)
       
    • By digonaweb
      Bom dia!
       
      Alguém pode me ajudar com esse script abaixo?
       
      Preciso fazer com que o link abra em uma nova janela, pois fica abrindo em um quadrado onde está fisicamente o relógio no site.
       
      <!-- clock widget start -->
       
      <script type="text/javascript">
           var css_file=document.createElement("link");
           css_file.setAttribute("rel","stylesheet");
           css_file.setAttribute("type","text/css");
           css_file.setAttribute("href","//s.bookcdn.com//css/cl/bw-cl-150x70.css");
           document.getElementsByTagName("head")[0].appendChild(css_file);
      </script>
       
      <div id="tw_1_737904741"><div style="width:150px; height:70px; margin: 0 auto;">
      <a href="https://booked.net/time/rio-de-janeiro-18486">Rio de Janeiro</a>
      <br/></div></div>
       
      <script type="text/javascript"> function setWidgetData_737904741(data){ if(typeof(data) != 'undefined' && data.results.length > 0) { for(var i = 0; i < data.results.length; ++i) { var objMainBlock = ''; var params = data.results; objMainBlock = document.getElementById('tw_'+params.widget_type+'_'+params.widget_id); if(objMainBlock !== null) objMainBlock.innerHTML = params.html_code; } } } var clock_timer_737904741 = -1; </script> <script type="text/javascript" charset="UTF-8" src="https://widgets.booked.net/time/info?ver=2&domid=209&type=1&id=737904741&scode=124&city_id=18486&wlangid=1&mode=1&details=0&background=ece0bf&color=4c4d57&add_background=ffffff&add_color=2071c9&head_color=ffffff&border=1&transparent=1"></script>
       
      <!-- clock widget end -->
       
       

       
       

    • By Vinicius Bazan
      Galera to com uma duvida aqui, no javascript é possível fazer uma função dentro de outra e uma acessar os valores de uma var da outra?
       
      Por exemplo digamos que eu tenha uma function a() e uma function b(), eu preciso que a function a utilize valores de variáveis que estarão na function b, se isto for possível a função b terá que estar dentro de a ou seria ao contrario?
    • By TheRonaldoStar
      Olá, Venho aqui de novo para tirar uma dúvida que creio eu ser muito simples porem não sei como aplicar!;
      Como diz no título do post eu gostaria de fazer um select de cadastros cujo o id do usuário online está nesta coluna,
      Porem neste campo contem 2 id separados por uma ' , '. Sendo assim não dar para mim fazer uma pesquisa com com a tag WHERE id ='Valor'
      Em fim eu quero ajuda para selecionar todos os cadastro cujo o id do usuário online está por EX: Sou o usuário 1 existe dois cadastros que tem meu id: [1, 2] e [2, 1];
      Alem de pesquisar todos os cadastros que tenha meu id nesta coluna eu quero que não tenha interferência ou listar cadastro do usuário 1 se eu for o usuário 21 por ex.
       
      Qual quer ajuda é bem vinda!
      Atenciosamente,
      ~Ronaldo
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.