/**
  * 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;
 }
示例#2
0
 /**
  * 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);
     }
 }