Мы просто обновляемся до версии v3.0 и при этом реорганизуем наш код.Форма SagePay - ошибка успеха/сбоя при кодировании RFC1738
Хотя Поступая таким образом, мы заметили, что при использовании http_build_query
, который принимает ассоциативный массив и преобразует его в RFC1738 действительный URL, который SagePay выдает следующее сообщение об ошибке:
The SuccessURL format is invalid
Форма подачи в конечной точке SagePay имеет enctype application/x-www-form-urlencoded
.
Однако ... Если мы вручную построить строку зашифровать, выполнив:
$tmp = '';
foreach ($crypt_store as $key => $value) {
$tmp .= sprintf('&%s=%s', $key, $value);
}
Он работает ...
Теперь, как я понимаю, RFC1738, если URL существует в пределах URL, его должны быть закодированы, т.е.
RFC1738:
&VendorTxCode=Test&SuccessUrl=http%3A%2F%2Fwww.stackoverflow.com%3Fa%3Da%26b%3Db&FailureUrl...
SagePay:
&VendorTxCode=Test&SuccessUrl=http://www.stackoverflow.com?a=a&b=b&FailureUrl...
Несомненно, если SagePay соответствует RFC1738, кодировка URL-адреса должна работать? Или это потому, что строка зашифрована, что означает, что это не имеет большого значения?
Любые мысли?
Благодаря
Gavin
Типичный;) Спасибо. – Gavin
За исключением случаев, когда они содержат '&' или другие специальные символы? Это особенно взрывается, когда URL-адрес содержит параметры, которые соответствуют параметрам, используемым в поле склепа. (Из моего тестирования и вашего ответа, я полагаю, вы разделили строку на имена известных параметров, а не на более стандартный раскол на '&'). – Deanna
Правильно - если ваша строка SuccessURL содержит & VendorTxCode =, она удаляется. –