2015-03-12 1 views
2

Мы просто обновляемся до версии 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

ответ

1

Вы правильно. Поскольку URL-адрес Success/Failure зашифрован в поле Crypt, нет необходимости их кодировать.

+0

Типичный;) Спасибо. – Gavin

+0

За исключением случаев, когда они содержат '&' или другие специальные символы? Это особенно взрывается, когда URL-адрес содержит параметры, которые соответствуют параметрам, используемым в поле склепа. (Из моего тестирования и вашего ответа, я полагаю, вы разделили строку на имена известных параметров, а не на более стандартный раскол на '&'). – Deanna

+1

Правильно - если ваша строка SuccessURL содержит & VendorTxCode =, она удаляется. –

 Смежные вопросы

  • Нет связанных вопросов^_^