/** * Funció que amb una resposta del TPV la valida i retorna els camps * @param $Ds_Merchant_Amount * @param $Ds_Merchant_Order * @param $Ds_Merchant_MerchantCode * @param $Ds_Merchant_Currency * @param $MerchantSignature * @param $password * @return boolean * */ public static function valTPV($Ds_SignatureVersion, $Ds_MerchantParameters, $Ds_Signature, $IDS) { //Creem objecte $RedSys = new sha256(); //Descodifiquem i passem a array els paràmetres $decode = $RedSys->decodeMerchantParameters($Ds_MerchantParameters); $RedSys->stringToArray($decode); $parametres = $RedSys->vars_pay; $parametres['Error'] = 0; //Carreguem la id de matrícula i comencem el procés $idM = $parametres['Ds_MerchantData']; $OM = MatriculesPeer::retrieveByPK($idM); if ($OM instanceof Matricules) { $signatura_rebuda = $Ds_Signature; $signatura_generada = $RedSys->createMerchantSignatureNotif(OptionsPeer::getString('TPV_PASSWORD', $OM->getSiteid()), $Ds_MerchantParameters); //Si la signatura és correcta i no ha donat error, marquem la matrícula com a pagada if ($signatura_rebuda != $signatura_generada) { $parametres['Error'] = "SIGNATURA"; } elseif ($parametres['Ds_Response'] != '0000') { $parametres['Error'] = "RESPONSE"; } else { $preu = strval($parametres['Ds_Amount']) / 100; $OM->setEstat(MatriculesPeer::ACCEPTAT_PAGAT); $OM->setTpvOperacio($parametres['Ds_AuthorisationCode']); $OM->setTpvOrder($parametres['Ds_Order']); $OM->setPagat($preu); $OM->save(); $parametres['OM'] = $OM; } } else { $parametres['Error'] = 'MATRICULA'; } return $parametres; }
/** * hospiciActions::executeEntitats() * * Part de mostra dels espais per reservar a l'hospici * * @param mixed $request * @return void */ public function executeEntrades(sfWebRequest $request) { if ($request->getParameter('accio') == 'ENTRADA') { $this->setLayout('hospici'); $this->setTemplate('indexEntrades'); $this->ERROR = ""; //Descodifiquem i passem a array els paràmetres $RedSys = new sha256(); $decode = $RedSys->decodeMerchantParameters($request->getParameter('Ds_MerchantParameters')); $RedSys->stringToArray($decode); $parametres = $RedSys->vars_pay; $signatura_rebuda = $request->getParameter('Ds_Signature'); $signatura_generada = $RedSys->createMerchantSignatureNotif(OptionsPeer::getString('TPV_ENT_PASSWORD', 1), $request->getParameter('Ds_MerchantParameters')); $this->idEntrada = 0; $tmp = explode('-', $parametres['Ds_MerchantData']); if (!isset($tmp[1])) { $this->ERROR .= '<br />Codi de matrícula incorrecte.'; } if ($signatura_rebuda != $signatura_generada) { $this->ERROR .= '<br />La signatura enviada pel TPV no és correcta.'; } elseif ($parametres['Ds_Response'] != '0000') { $this->ERROR .= '<br />El codi de resposta del TPV no és correcte. '; } else { $this->idEntrada = intval($tmp[1]); if (!file_exists('/var/www/hospici_cultural/web/documents/entrades/' . $this->idEntrada . '.pdf')) { $this->ERROR .= '<br />No he trobat la factura.'; } $this->idUsuari = $this->getUser()->getSessionPar('idU', ''); } } else { $this->setLayout('hospici'); $this->setTemplate('indexEntrades'); $idEspectacle = $request->getParameter('idEspectacle'); $this->idEspectacle = $idEspectacle; $this->idUsuari = $this->getUser()->getSessionPar('idU', ''); $this->TPV = OptionsPeer::getString('TPV_ENT_URL', 1); } }