J'ai un problème similaire mais je ne trouve aucune solution pour travailler avec mon code (hérité), donc toute aide que vous pourriez fournir serait grandement appréciée.
Nous utilisons la passerelle de paiement Sage Pay / Opayo via l'intégration de formulaires.
En cas de réussite/d'échec, le client sera redirigé vers une URL de notre site Web avec une chaîne _GET cryptée.
Après le décryptage, appelez la fonction getToken ( $values = getToken($Decoded);
) pour obtenir la valeur du tableau.
Tous les marqueurs ne sont pas toujours renseignés, je soupçonne que ces valeurs nulles peuvent être à l'origine du problème.
Ce code fonctionne correctement sur PHP 7.1, mais génère une exception sur PHP 8.1 :
[2023-05-03 15:12:15 Europe/Londres] Erreur fatale PHP : erreur non détectée : tentative d'attribution de la propriété 'start' sur null dans /home/sitename/public_html/ch_functions.php:166 Trace de la pile: #0 /home/sitename/public_html/not_completed.php(32) : getToken('VendorTxCode=AP...') #1 {Principal} En ajoutant /home/sitename/public_html/ch_functions.php ligne 166
Le code est le suivant : ce qui échoue sur $resultArray[$i]->start = $start;
est :
function getToken($thisString) { // List the possible tokens $Tokens = array("Status","StatusDetail","VendorTxCode","VPSTxId","TxAuthNo","Amount","AVSCV2","AddressResult","PostCodeResult","CV2Result","GiftAid","3DSecureStatus","CAVV", "AddressStatus", "PayerStatus", "CardType", "Last4Digits","BankAuthCode","DeclineCode"); // Initialise arrays $output = array(); $resultArray = array(); // Get the next token in the sequence for ($i = count($Tokens)-1; $i >= 0 ; $i--){ // Find the position in the string $start = strpos($thisString, $Tokens[$i]); // If it's present if ($start !== false){ // Record position and token name $resultArray[$i]->start = $start; $resultArray[$i]->token = $Tokens[$i]; } } // Sort in order of position sort($resultArray); // Go through the result array, getting the token values for ($i = 0; $i<count($resultArray); $i++){ // Get the start point of the value $valueStart = $resultArray[$i]->start + strlen($resultArray[$i]->token) + 1; // Get the length of the value if ($i==(count($resultArray)-1)) { $output[$resultArray[$i]->token] = substr($thisString, $valueStart); } else { $valueLength = $resultArray[$i+1]->start - $resultArray[$i]->start - strlen($resultArray[$i]->token) - 2; $output[$resultArray[$i]->token] = substr($thisString, $valueStart, $valueLength); } } // Return the ouput array return $output; }
Vous faites référence à
$resultArray[$i]
en tant qu'objet, mais le tableau est vide, il n'y a donc aucun objet à référencer. Dans PHP 7.4 et versions antérieures, vous pouvez effectuer les opérations suivantes :PHP créera dynamiquement la propriété foo dans l'objet
$x[0]
处动态创建一个stdClass
, mais émettra un avertissement :Vous supprimez ou ignorez actuellement cet avertissement. En PHP 8.0, cela génère désormais une erreur fatale. Créez donc simplement un objet vide avant d'essayer de définir sa valeur :
ou :