Как сделать кнопку BuyNow для SagePay? - PullRequest
4 голосов
/ 03 марта 2012

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

1 Ответ

7 голосов
/ 03 марта 2012

Желаемая система называется 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имеет, поэтому вам нужно будет отобразить это по мере необходимости, прежде чем показывать эту кнопку BuyNow, или, возможно, на странице подтверждения или в электронном письме с подтверждением, которое вы отправляете. У них есть параметр "& Basket =", в котором можно указать налог, но он избыточен длято, что вы можете отобразить на странице формы самостоятельно и не обязательно. Следовательно, значение & Amount должно быть значением брутто, а не нетто. Также нет количествазначение (которое можно использовать для параметра & Basket).Скорее всего, вы найдете параметр & Basket просто избыточным по сравнению с тем, что вы уже можете отобразить в своей форме в процессе оформления заказа.Вот почему мой пример не включил его.

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

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

Они предоставляют пример 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 «OK».

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

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

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

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

РЕДАКТИРОВАТЬ: Новая ссылка (25 октября 2017 г.) - https://www.sagepay.co.uk/file/25041/download-document/FORM_Integration_and_Protocol_Guidelines_270815.pdf

...