Как сделать кнопку SagePay BuyNow?

С помощью PayPal я могу довольно легко создать кнопку «Купить сейчас», содержащую информацию о моем продавце, цену, налог, доставку и т. д. Возможно ли это в SagePay?


person Volomike    schedule 02.03.2012    source источник


Ответы (1)


Желаемая система называется SagePay Form, поскольку похожа на кнопку PayPal BuyNow + процесс PDT. Во-первых, вам нужно создать ФОРМУ следующим образом:

<form action="https://live.sagepay.com/gateway/service/vspform-register.vsp" method="POST" id="SagePayForm" name="SagePayForm">
    <input type="hidden" name="VPSProtocol" value="2.23" />
    <input type="hidden" name="TxType" value="PAYMENT" />
    <input type="hidden" name="Vendor" value="<?= $YOUR_VENDOR_LOGIN_NAME ?>" />
    <input type="hidden" name="Crypt" value="<?= $PAYMENT_CRYPT ?>">    
    <input type="image" src="images/buynow-sagepay.png" />
</form>

(Можно заменить действующий URL-адрес тестовым здесь: https://test.sagepay.com/gateway/service/vspform-register.vsp)

Что касается $PAYMENT_CRYPT, вам нужно сначала создать такую ​​строку:

VendorTxCode=406227821909
&Amount=32.00
&Currency=USD
&Description=1 ACME Widget
&SuccessURL=http://example.com/success.php
&FailureURL=http://example.com/fail.php
&BillingSurname=Smith
&BillingFirstnames=John
&BillingAddress1=123 Main Street
&BillingCity=Anywhere
&BillingPostCode=29555
&BillingCountry=USA
&DeliverySurname=Smith
&DeliveryFirstnames=John
&DeliverAddress1=123 Main Street
&DeliveryCity=Anywhere
&DeliveryPostCode=29555
&DeliveryCountry=USA

Это немного глупо, зачем им нужна эта информация, когда PayPal этого не делает, ну да ладно. В документах четко сказано, что система выдаст ошибку, если не получит законные значения, такие как реальный почтовый индекс, который валидирует для этого города и страны, а также используется для арбитража проблемных споров.

Обратите внимание, что в моем примере нет разбивки по налогам или доставке, как у PP, поэтому вам нужно отобразить это по мере необходимости, прежде чем показывать эту кнопку «Купить сейчас» или, возможно, на странице подтверждения или в электронном письме с подтверждением, которое вы отправляете. У них есть параметр "&Basket=", где можно указать налог, но он избыточен по сравнению с тем, что вы можете отобразить на странице формы самостоятельно, и не нужен. Поэтому значение &Amount должно быть значением брутто, а не нетто. Также отсутствует значение количества (которое можно было бы указать с помощью параметра &Basket). Скорее всего, вы обнаружите, что параметр &Basket просто избыточен по сравнению с тем, что вы уже можете отображать в своей собственной форме в процессе оформления заказа. Вот почему мой пример не включал его.

Что касается VendorTxCode, это то, что вы создаете, чтобы вы могли отслеживать заказ до соответствующего клиента.

Затем этот $PAYMENT_CRYPT шифруется с использованием кодировки XOR + Base64 с использованием пароля шифрования, предоставленного SagePay. У них есть опция шифрования AES + Binhex, но это излишне, и на вашем сервере должна быть включена библиотека mcrypt. Некоторые тарифные планы общего хостинга ЕЩЕ еще не включены!

Они предоставляют пример XOR, но это типичный пример, который вы видите бесчисленное количество раз в курсах информатики, где вы многократно перебираете каждый код ASCII пароля и каждый код ASCII данных и берете дополнительный бит другого (процесс XOR) . После этого пропустите его через кодировку Base64 для безопасной передачи POST. Кодировка Base64 использует встроенную функцию из PHP.

Ответ на это больше похож на процесс PDT PayPal, чем на процесс IPN PayPal. Они направляют кого-то к success.php и fail.php вместе с зашифрованным URL-ответом через GET, который вы можете расшифровать и проанализировать (декодирование base64 + XOR), но сложность заключается в том, что клиент может закрыть форму, прежде чем ждать, пока страница закроется. перенаправить. В этом случае вы увидите это в своей панели управления в SagePay и должны будете выполнить транзакцию вручную для клиента.

В Success.php и fail.php вам решать, что вы хотите сделать. Как только строка запроса и параметр crypt будут расшифрованы, вы сможете проанализировать, завершена транзакция или нет, посмотрев, что параметр Status имеет значение «ОК».

Обратите внимание, что вам не нужно сразу переходить к Success.php. Вы можете сделать это как success.php?custom=value для передачи дополнительной информации о транзакции, которую вы можете проанализировать. Их код автоматически обнаружит это и добавит параметр &crypt= в конце. То же самое и с fail.php.

У них есть способы заставить SagePay отправлять электронные письма покупателю и поставщику, но это действительно излишество, потому что вы можете сделать то же самое в своем собственном PHP-коде с оператором mail() при выполнении заказа.

ССЫЛКА: обратите внимание, что следующий URL-адрес документа может измениться в будущем. Чтобы получить последнюю версию документа, посетите веб-сайт, зарегистрируйтесь в качестве разработчика (процесс занимает 1 минуту) и выполните поиск по запросу «протокол формы».

http://www.sagepay.com/sites/default/files/downloads/sagepayformprotocolandintegrationguidelines_0.pdf

EDIT: новая ссылка (25 октября 2017 г.) — https://www.sagepay.co.uk/file/25041/download-document/FORM_Integration_and_Protocol_Guidelines_270815.pdf

person Community    schedule 03.03.2012
comment
нижняя ссылка умерла. Я получаю сообщение об ошибке - 5080: Ошибка регистрации транзакции формы. Используя приведенный выше пример. Есть ли способ отладки? Есть рабочие примеры? Можно ли добавить строку непосредственно в форму или нужно сделать больше? - person Jon; 28.02.2017