Ich habe ein ähnliches Problem, aber ich finde keine Lösung für die Arbeit mit meinem (geerbten) Code. Daher wäre ich für jede Hilfe sehr dankbar.
Wir nutzen das Sage Pay / Opayo-Zahlungsgateway über die Formularintegration.
Nach Abschluss/Fehler wird der Kunde mit einer verschlüsselten _GET-Zeichenfolge zu einer URL auf unserer Website weitergeleitet.
Rufen Sie nach der Entschlüsselung die Funktion getToken ( $values = getToken($Decoded);
) auf, um den Wert aus dem Array abzurufen.
Es werden jedoch nicht immer alle Marker ausgefüllt. Ich vermute, dass diese Nullwerte die Ursache des Problems sein könnten.
Dieser Code läuft einwandfrei unter PHP 7.1, löst jedoch unter PHP 8.1 eine Ausnahme aus:
[03.05.2023 15:12:15 Europa/London] Schwerwiegender PHP-Fehler: Nicht abgefangener Fehler: Versuch, die Eigenschaft „start“ auf null in /home/sitename/public_html/ch_functions.php:166 zuzuweisen Stacktrace: #0 /home/sitename/public_html/not_completed.php(32): getToken('VendorTxCode=AP...') #1 {Haupt} Einwerfen /home/sitename/public_html/ch_functions.php Zeile 166
Der Code lautet: Was bei $resultArray[$i]->start = $start;
fehlschlägt, ist:
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; }
您将
$resultArray[$i]
作为对象引用,但该数组为空,因此没有可供引用的对象。在 PHP 7.4 及更早版本中,您可以执行以下操作:PHP 会在
$x[0]
处动态创建一个stdClass
对象,然后动态创建 foo 属性,但会发出警告:您当前正在抑制或忽略此警告。在 PHP 8.0 中,这现在会生成致命错误。因此,只需在尝试设置其值之前创建一个空对象即可:
或者: