Base de conhecimento - Top RentCar - Desenvolvimento

DESENVOLVIMENTO

Aqui você pode ver como um gateway de pagamento personalizado pode ser integrado ao VikRentCar.

 

Como desenvolver um processador de pagamento

A estrutura de pagamento do VikRentCar pode ser estendida criando um arquivo PHP que declara a classe VikRentCarPayment.

O arquivo criado deve ser colocado via FTP no diretório: / administrator / components / com_vikrentcar / payment /

Para desenvolver a classe VikRentCarPayment, siga o exemplo de código abaixo.

 

<?php

 

defined('_JEXEC') OR die('Restricted Area');

 

class VikRentCarPayment {

               

                private $order_info;

                private $params;

               

                public static function getAdminParameters() {

                               return array();

                }

               

                public function __construct($order, $params=array()) {

                               $this->order_info = $order;

                               $this->params = $params;

                }

               

                public function showPayment() {

                               /** See the code below to build this method */

                }

               

                public function validatePayment() {

                               /** See the code below to build this method */

                               return array();

 

                }

 

                public function afterValidation($esit = 0) {

                               /** See the code below to build this method */

                }

}

?>

 

Construção de Parâmetros

O formulário de parâmetros para a seção do administrador pode ser criado através do método estático getAdminParameters (). Isso é útil para preencher dados ou credenciais particulares, necessárias para a criação e a validação do pagamento / transação. Um ID do comerciante e uma chave de assinatura são um exemplo de parâmetros que devem ser visíveis e editáveis ​​no back-end.

Os parâmetros do formulário são retornados como uma matriz com a seguinte estrutura:

 

[

                "param_1" : [

                               "label" : "Label 1",

                               "type" : "text",

                ],

                "param_2" : [

                               "label" : "Label 2",

                               "type" : "select",

                ],

]

 

param_1 - é uma chave da matriz que deve ser exclusiva (necessária).

Representa o nome do parâmetro a ser usado.

 

label - indica o texto a ser atribuído ao parâmetro na seção do administrador (opcional).

Ao colocar uma barra dupla (//) após o rótulo, o texto a seguir será exibido como uma dica ao lado do campo do parâmetro (como "ID do comerciante // esta é uma dica para exibir ...").

type - é usado para renderizar o tipo certo de campo de entrada na seção do administrador (obrigatório).

Os valores permitidos para o tipo são os seguintes: personalizado, selecione, texto.

html - será usado apenas quando o tipo do parâmetro for personalizado (opcional).

options - é uma matriz que contém todos os valores possíveis para usar no menu suspenso (necessário apenas quando o tipo é selecionado).

 

public static function getAdminParameters() {

                $logo_img = JURI::root().'administrator/components/com_vikrentcar/payments/mypay/mypay-logo.jpg';

                return array(    

                               'logo' => array(

                                               'label' => '',

                                               'type' => 'custom',

                                               'html' => '<img src="'.$logo_img.'"/>'

                               ),

                               'merchantid' => array(

                                               'label' => 'Merchant ID',

                                               'type' => 'text'

                               ),

                               'testmode' => array(

                                               'label' => 'Test Mode',

                                               'type' => 'select',

                                               'options' => array('Yes', 'No'),

                               ),

                );

}

O código acima irá gerar um formulário de parâmetros na seção do administrador da seguinte maneira.

Se seu formulário não aparecer, provavelmente há um erro de sintaxe no seu arquivo.

Quando você preenche o formulário de administração, os parâmetros são armazenados na matriz $ params e você pode obter os valores com as instruções abaixo:

 

 

$merchant_id = $this->params['merchantid']; /* returns "539264823539" */
$test = $this->params['testmode']; /* returns "Yes" */

Objeto Informações do pedido

O objeto $ order_info é uma matriz de chave / val mapeada com as informações do pedido necessárias para concluir o processo de pagamento. Você pode ver abaixo todas as chaves disponíveis da matriz.

Param

Order

Custmail

Transaction_currency

Return_url

Error_url

Notify_url

Total_to_pay

 

Tipo

Array

Alphanumeric

Char(3)

String

String

String

Decimal

 

Descrição

Array contendo sub-parâmetros para o registro da reserva.

O  endereço do email do cliente.

A moeda da quantidade. O padrão é Euro.

A URL de retorno volta para a sua loja direta do banco nas transferências sucedidas.

O erro de URL volta para a sua loja direto das transações bancárias mal sucedidas.

A notificação de URL para validação de dados enviada pelo banco. Esta URL chama o método validatePayment do seu gateway.

A quantidade total para pagar em decimal. (ex. 135.50)

 

 

 

Você pode recuperar as informações da matriz $ order_info com o exemplo abaixo.

$uniq_id = $this->order_info['order']['sid']."-".$this->order_info['order']['ts'];

Mostrar Pagamento

O método showPayment () do objeto VikRentCarPayment é chamado toda vez que um usuário visita a página de uma reserva com Status PENDING. Aqui você precisa ecoar o formulário HTML que aponta para o URL de criação de pagamento do seu gateway bancário.

Nesse método, também é possível fazer chamadas via cURL para recuperar tokens ou enviar o formulário automaticamente para receber informações adicionais a serem enviadas ao banco.

 

public function showPayment() { $merchant_id = $this->params['merchantid']; $action_url = "https://yourbankgateway.com/"; if( $this->params['testmode'] == 'Yes' ) { $action_url = "https://test.yourbankgateway.com/"; } $form='<form action="'.$action_url.'" method="post">'; // put here all the required fields of your gateway $form.='<input type="hidden" name="your_post_data_merchantid" value="'.$merchant_id.'"/>'; $form.='<input type="hidden" name="your_post_data_amount" value="'.$this->order_info['total_to_pay'].'"/>'; $form.='<input type="hidden" name="your_post_data_notifyurl" value="'.$this->order_info['notify_url'].'"/>'; $form.='<input type="hidden" name="your_post_data_description" value="'.$this->order_info['transaction_name'].'"/>'; // print a button to submit the payment form $form.='<input type="submit" name="_submit" value="Pay Now!" />'; $form.='</form>'; echo $form; }

 

Validar pagamento

O método validatePayment () é usado para validar os detalhes da transação enviados pelo banco. Esse método é chamado pelo sistema toda vez que o NotifyURL é visitado (o descrito no método showPayment ()). Geralmente, os dados são enviados pelo método POST e você pode acessá-los simplesmente usando a variável super global $ _POST. Alguns gateways exigem uma validação de assinatura para garantir que a transação não foi corrompida. A validação da assinatura pode ser criada apenas seguindo as instruções na documentação oficial do seu banco.

 

Este método deve retornar uma matriz de chave / valor com o status da transação. As possíveis chaves da matriz são as seguintes.

 

Param

verified

tot_paid

log

 

Tipo

Boolean

Decimal

String

 

Descrição

O status da transação. 1/ Verdadeiro em caso de sucesso, ao contrário 0/falso.

O número real da quantidade paga pelo cliente, deverá ser devolvido pelo Gateway (ex, 102.75)

Uma mensagem de log enviada ao administrador em caso de falha. O log pode conter qualquer valor retornado pelo banco e deve ser o mais específico possível. Quando não estiver vazio, o sistema armazenará os logs no banco de dados e eles estarão visíveis na página de detalhes do pedido do back-end.

 

 

Quaisquer valores diferentes na matriz retornada serão completamente ignorados durante a validação da transação.

 

public function validatePayment() { $array_result = array(); $array_result['verified'] = 0; $array_result['tot_paid'] = ''; /** This value will be stored in the DB */ /** In case of error the log will be sent via email to the admin */ $status = $_POST['status']; /** Process your gateway response here */ if($status == 'success') { $array_result['verified'] = 1; /** Set a value for $array_result['tot_paid'] */ $array_result['tot_paid'] = $_POST['amount']; } else { $array_result['log'] = "Transaction Error!\n".$_POST['error_msg']; } /** Return the array to VikRentCar */ return $array_result; }

 

Após a validação

O método afterValidation ($ esit) geralmente é usado para exibir uma mensagem e redirecionar o gateway para a visualização do resumo do pedido em caso de sucesso ou falha. Observe que esse método deve estar na sua classe apenas no caso de o Gateway do banco não redirecionar o usuário para o ReturnURL. Além disso, esse método, se existir na Classe, será chamado pelo sistema após o validatePayment (). O argumento $ esit é um valor booleano que representa o status da transação. Em caso de sucesso (1 / true), você deve imprimir uma mensagem positiva e redirecionar o gateway para o endereço return_url, caso contrário (0 / false), você deve imprimir uma mensagem de erro e redirecionar o gateway para o endereço error_url. Lembre-se também de colocar uma regra de saída ou matriz no final do método para interromper completamente o fluxo.

 

public function afterValidation($esit = 0) { $mainframe = JFactory::getApplication(); //Build the URL to the order details page $redirect_url = 'index.php?option=com_vikrentcar&task=vieworder&sid='.$this->order_info['sid'].'&ts='.$this->order_info['ts']; if($esit < 1) { JError::raiseWarning('', 'The payment was not verified, please try again.'); $mainframe->redirect($redirect_url); } else { $mainframe->enqueueMessage('Thank you! The payment was verified successfully.'); $mainframe->redirect($redirect_url); } exit; // }

 

 

 

Detalhes

Criado : 2019-09-13 05:28:09, Última alteração : 2019-09-13 05:32:18

Comentários dos Usuários

Adicionar comentário