Мы просто обновляемся до версии v3.0 и пока делаем рефакторинг нашего кода.
При этом мы заметили, что при использовании http_build_query
который берет ассоциативный массив и преобразует его в действительный URL RFC1738, что SagePay завершается ошибкой со следующей ошибкой:
The SuccessURL format is invalid
Форма, отправляемая в конечную точку SagePay, имеет тип 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
Ты прав. Поскольку URL-адреса успеха / неудачи зашифрованы в поле Crypt, их не нужно кодировать.
Других решений пока нет …