Пример #1
0
 /**
  * @param $method
  * @param $args
  * @return bool|mixed
  */
 protected function call_ws($method, $args)
 {
     $this->buildAuthHeader();
     $response = $this->__soapCall($method, $args);
     /* logs XML*/
     spip_log("[Request Header]\n" . htmlspecialchars($this->__getLastRequestHeaders()), "payzen_ws" . _LOG_DEBUG);
     spip_log("[Request]\n" . htmlspecialchars($this->__getLastRequest()), "payzen_ws" . _LOG_DEBUG);
     spip_log("[Response Header]\n" . htmlspecialchars($this->__getLastResponseHeaders()), "payzen_ws" . _LOG_DEBUG);
     spip_log("[Response]\n" . htmlspecialchars($this->__getLastResponse()), "payzen_ws" . _LOG_DEBUG);
     //Analyse de la réponse
     //Récupération du SOAP Header de la réponse afin de stocker les en-têtes dans un tableau
     // (ici $responseHeader)
     $dom = new DOMDocument();
     $dom->loadXML($this->__getLastResponse(), LIBXML_NOWARNING);
     $path = new DOMXPath($dom);
     $headers = $path->query('//*[local-name()="Header"]/*');
     $responseHeader = array();
     foreach ($headers as $headerItem) {
         $responseHeader[$headerItem->nodeName] = $headerItem->nodeValue;
     }
     #var_dump($responseHeader);
     #var_dump($response);
     #var_dump($response[$method."Result"]);
     //Calcul du jeton d'authentification de la réponse
     $authTokenResponse = base64_encode(hash_hmac('sha256', $responseHeader['timestamp'] . $responseHeader['requestId'], systempay_key($this->config), true));
     if ($authTokenResponse !== $responseHeader['authToken']) {
         //Erreur de calcul ou tentative de fraude
         spip_log("call_ws:{$method}: Erreur signature reponse", "payzen_ws" . _LOG_ERREUR);
         return false;
     }
     return $response;
 }
Пример #2
0
/**
 * Recuperer le POST/GET de la reponse dans un tableau
 * en verifiant la signature
 *
 * @param array $config
 * @return array|bool
 */
function systempay_recupere_reponse($config)
{
    $reponse = array();
    foreach ($_REQUEST as $k => $v) {
        if (strncmp($k, 'vads_', 5) == 0) {
            $reponse[$k] = $v;
        }
    }
    $reponse['signature'] = isset($_REQUEST['signature']) ? $_REQUEST['signature'] : '';
    $ok = systempay_verifie_signature($reponse, systempay_key($config));
    // si signature invalide, verifier si
    // on rejoue manuellement un call vads_url_check_src=RETRY incomplet
    // en lui ajoutant le vads_subscription
    if (!$ok and isset($reponse['vads_url_check_src']) and $reponse['vads_url_check_src'] === 'RETRY' and isset($reponse['vads_subscription'])) {
        $response_part = $reponse;
        unset($response_part['vads_subscription']);
        $ok = systempay_verifie_signature($response_part, systempay_key($config));
    }
    if (!$ok) {
        spip_log("recupere_reponse : signature invalide " . var_export($reponse, true), $config['presta'] . _LOG_ERREUR);
        return false;
    }
    return $reponse;
}