yanguel Posted November 4, 2016 Share Posted November 4, 2016 (edited) Hola de nuevo, estoy haciendo un modulo tpv ceca, el problema es que al intentar subirlo a addons no pasa la validación técnica. Decir que el modulo funciona correctamente, lo he probado tanto en modo real como en modo pruebas y no he detectado problemas. Lo que no sé es porque no me lo validan. Vamos al lio, primero el codigo: class tpvcecaValidationModuleFrontController extends ModuleFrontController { public function postProcess() { $mensajeinfo="NA"; if (!empty($_POST)) { // Valores enviados por el tpv $MerchantID = Tools::getValue('MerchantID'); $AcquirerBIN = Tools::getValue('AcquirerBIN'); $TerminalID = Tools::getValue('TerminalID'); $Num_operacion = Tools::getValue('Num_operacion'); $Importe = Tools::getValue('Importe'); $TipoMoneda = Tools::getValue('TipoMoneda'); $Referencia = Tools::getValue('Referencia'); $Exponente = Tools::getValue('Exponente'); $FirmaTPV = Tools::getValue('Firma'); $Num_aut = Tools::getValue('Num_aut'); $strEXEC = $MerchantID.$AcquirerBIN.$TerminalID.$Num_operacion.$Importe.$TipoMoneda.$Exponente.$Referencia; //Cadena para verificar la firma $FirmaLocal= $this->module->calculaFirma($strEXEC); if ($FirmaTPV != $FirmaLocal) //Compruebo que las firmas coinciden { $mensajeinfo = 'Signatures DO NOT MATCH.<br>'; //Error, la firma no coincide } else { $this->module->validateOrder($Num_operacion, _PS_OS_PAYMENT_, $ImporteEUR, $this->module->displayName, $this->module->l('Payment ok. Num. Authorization: ').$Num_aut); $mensajeinfo = '$*$OKY$*$'; //enviamos cadena de ok para el tpv } $this->module->enviar_debug('Validate paid from TPV CECA', $debug_mail_msg); } else { //Solicitud erronea $mensajeinfo = 'No POST in TPV CECA module'; } $this->context->smarty->assign(array('mensaje' => $mensajeinfo)); //Mostramos resulltado return $this->setTemplate('responsetpv.tpl'); } } Este el script de validación que llama el tpv vara validar la operación, lo que se llama el URL online OK Vale pues me dicen que el problema es este: PHP errors: In the validation.php, there is no check that the payment was successful. This is also possible to re-use the signature generated for the payment to valid any order. Sí que valido la operación, concretamente con la línea: if ($FirmaTPV != $FirmaLocal) En la cual uso la "Firma" calculada que envia el tpv, y la recalculo siguiendo el manual del tpv concatenando $MerchantID.$AcquirerBIN.$TerminalID.$Num_operacion.$Importe.$TipoMoneda.$Exponente.$Referencia y calculando su sha1 Y aun es más he visto varios ejemplos en distintos lenguages y todos validan de la misma manera. Como no entendía el porque no me lo validaban les envie un mensaje para que se explayaran más, y la respuesta fue esta: Hello,Yes you are checking the signature but the payment can be in error and the signature good. And for the signature itself, as explained this is possible to re-use the signature generated for the payment.Signature for the payment:$cadenafirma=$MerchantID.$AcquirerBIN.$TerminalID.$Num_operacion.$Importe.$TipoMoneda.$Exponente.$Cifrado.$url_OK.$url_NOK;Signature for the validation:$strEXEC= $MerchantID.$AcquirerBIN.$TerminalID.$Num_operacion.$Importe.$TipoMoneda.$Exponente.$Referencia;All these fields are known you just have to put the $Cifrado.$url_OK.$url_NOK values in the $Referencia variable.Regards, Me dicen que chequeo la firma pero puede ser la firma valida y el pago erróneo y es imposible. Ese script lo procesa internamente el tpv solo si el pago es valido, es absurdo lo que dicen. Si llega ahí es que el pago se hizo en el tpv, si la firma es correcta se cambia el estado del pedido y listo. Y no entiendo exactamente que quieren que haga. Estan mezclando la firma que calcula el modulo al crear el formulario de envio al tpv ($cadenafirma=$MerchantID.$AcquirerBIN...) con la firma que envia el tpv y que se calcula con otros campos distintos. Es decir la firma para enviar al tpv se calcula con los campos: $MerchantID.$AcquirerBIN.$TerminalID.$Num_operacion.$Importe.$TipoMoneda.$Exponente.$Cifrado.$url_OK.$url_NOK; Mientras que la firma que envia el tpv (calculada internamente) es en base a: $MerchantID.$AcquirerBIN.$TerminalID.$Num_operacion.$Importe.$TipoMoneda.$Exponente.$Referencia; Lo pone en el manual oficial de ceca, página 16: https://server401.islonline.net/live/islpronto_download_file/SPc8455f84a5c6482e0801ae0102/CHde3d07bb01a8cb84adadd7cd4479aa971001910102/1184740911/Manual%20TPV_completo%206.2.pdf?_d=1&d=s6_0_387&sid=CP9e50e98a785191ba0801910102 Yo el script lo hice viendo modulos gratuitos ceca que circulan por ahí, para distintos lenguajes y plataformas, y todos validan de la misma manera, concatenan $MerchantID.$AcquirerBIN.$TerminalID.$Num_operacion.$Importe.$TipoMoneda.$Exponente.$Referencia y lo comparan al valor del post o get de "Firma". No se exactamente cual es el problema, ..., a lo mejor debo verificar la firma de otra manera y no usar el valor devuelto por el tpv en "Firma"... yo ya no sé... Les envie un nuevo mensaje para que me lo aclaren y me vuelven a enviar lo mismo citado arriba, sin más explicaciones... Os agradecería que me ayudaseis. Edited November 4, 2016 by yanguel (see edit history) Link to comment Share on other sites More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now