Пример ответа на платеж PHP Worldpay
Я занимаюсь разработкой сайта для клиента, и одним из требований является интеграция платежей WorldPay для процесса покупки.
После того, как пользователь завершил платеж за продукт, мне нужно предупредить систему лицензирования о завершении платежа. Документация worldpay дает обзор сервиса ответа на платеж, но не дает пример кода.
У меня был клиент, настроивший вариант ответа на оплату в своей тестовой установке, но мне не пришлось бы кодировать мою собственную страницу, чтобы обработать ответ, если кто-то уже сделал это. У кого-нибудь есть ссылка на хороший пример кода (в php)?? У меня был приличный взгляд онлайн и я не появлялся много.
Спасибо!
4 ответа
Задача решена. В итоге я создал собственный класс для обработки ответа от worldpay. Вот упрощенная версия моей страницы обработчика на случай, если кто-то еще может найти ее полезной.
(Примечание: я не являюсь разработчиком php, поэтому некоторые синтаксис может быть немного хитрым!)
<?php //Worldpay
// class definition
class WorldPay_Response {
// define properties
public $transaction_id = null;
public $transaction_status = null;
public $transaction_time = null;
public $authorisation_amount = null;
public $authorisation_currency = null;
public $authorisation_amount_string = null;
public $raw_auth_message = null;
public $raw_auth_code = null;
public $callback_password = null;
public $card_type = null;
public $authentication = null;
public $ip_address = null;
public $character_encoding = null;
public $future_payment_id = null;
public $future_payment_status_change = null;
//custom properties not included by worldpay
public $mc_custom_property = null;
// constructor
public function __construct() {
$this->transaction_id = $_POST['transId'];
$this->transaction_status = $_POST['transStatus']; //should be either Y (successful) or C (cancelled)
$this->transaction_time = $_POST['transTime'];
$this->authorisation_amount = $_POST['authAmount'];
$this->authorisation_currency = $_POST['authCurrency'];
$this->authorisation_amount_string = $_POST['authAmountString'];
$this->raw_auth_message = $_POST['rawAuthMessage'];
$this->raw_auth_code = $_POST['rawAuthCode'];
$this->callback_password = $_POST['callbackPW'];
$this->card_type = $_POST['cardType'];
$this->country_match = $_POST['countryMatch']; //Y - Match, N - Mismatch, B - Not Available, I - Country not supplied, S - Issue Country not available
$this->waf_merchant_message = $_POST['wafMerchMessage'];
$this->authentication = $_POST['authentication'];
$this->ip_address = $_POST['ipAddress'];
$this->character_encoding = $_POST['charenc'];
$this->future_payment_id = $_POST['futurePayId'];
$this->future_payment_status_change = $_POST['futurePayStatusChange'];
//custom properties
$this->mc_custom_property = $_POST['MC_custom_property'];
}
}
?>
<html>
<head><title>Thank you for your payment</title></head>
<WPDISPLAY FILE="header.html">
<?php
//Response from Worldpay
$wp_response = new WorldPay_Response();
if($wp_response->transaction_status == "Y"){ ?>
<strong>Transaction Details</strong><br />
<?php
echo "Worldpay Transaction id: " . $wp_response->transaction_id . "<br />";
echo "Payment Status: " . $wp_response->transaction_status . "<br />";
echo "Transaction Time: " . $wp_response->transaction_time . "<br />";
echo "Amount: " . $wp_response->authorisation_amount_string . "<br />";
echo "IP Address: " . $wp_response->ip_address . "<br /><br />";
}else if($wp_response->transaction_status == "C") { ?>
<strong>Transaction Cancelled</strong>
<?php } else { ?>
Your transaction was unsuccessful.
<?php } ?>
<WPDISPLAY ITEM="banner">
<WPDISPLAY FILE="footer.html">
</html>
Для тех, кто читает это из поиска Google, re: worldpay Платежный ответ.
Март 2015:
Я настраиваю систему онлайн-платежей worldpay для клиента и, черт возьми, это ужасно. Они сделали посредственную систему в 2011 году и не удосужились обновить ее с тех пор. Это утомительно, а примеры кода и документация оставляют желать лучшего.
Worldpay все еще используют MD5()
хэширование как "высокозащищенный метод шифрования" и все еще ссылается на различные ресурсы и концепции серверов, которые больше не используются. С практической точки зрения программирования НЕ ИСПОЛЬЗУЙТЕ WORLDPAY.
У них нет документации для обработки динамических платежей, и, тем не менее, я ожидаю, что каждый платеж будет завершен, и я отправлю им .html
файл для их отображения, а не для отправки клиента обратно на мой сайт для вывода динамического кода.
Я бы никогда не стал прикасаться к WorldPay после этой работы, но мой клиент уже заплатил им за то, что подписался на них, и поэтому я должен реализовать это для него.:-/
Их обслуживание клиентов (Великобритания) также очень плохое.
Расширение небольшого класса для класса TGuimond - WorldPay_Response:
<?php //Worldpay
class WorldPay_Response {
// define properties
public $transaction_id = null;
public $transaction_status = null;
public $transaction_time = null;
public $authorisation_amount = null;
public $authorisation_currency = null;
public $authorisation_amount_string = null;
public $raw_auth_message = null;
public $raw_auth_code = null;
public $callback_password = null;
public $card_type = null;
public $authentication = null;
public $ip_address = null;
public $character_encoding = null;
public $future_payment_id = null;
public $future_payment_status_change = null;
/* extension */
public $name = null;
public $address = null;
public $town = null;
public $email = null;
public $desc = null;
//custom properties not included by worldpay
public $mc_custom_property = null;
// constructor
public function __construct() {
$this->transaction_id = $_POST['transId'];
$this->transaction_status = $_POST['transStatus']; //should be either Y (successful) or C (cancelled)
$this->transaction_time = $_POST['transTime'];
$this->authorisation_amount = $_POST['authAmount'];
$this->authorisation_currency = $_POST['authCurrency'];
$this->authorisation_amount_string = $_POST['authAmountString'];
$this->raw_auth_message = $_POST['rawAuthMessage'];
$this->raw_auth_code = $_POST['rawAuthCode'];
$this->callback_password = $_POST['callbackPW'];
$this->card_type = $_POST['cardType'];
$this->country_match = $_POST['countryMatch']; //Y - Match, N - Mismatch, B - Not Available, I - Country not supplied, S - Issue Country not available
$this->waf_merchant_message = $_POST['wafMerchMessage'];
$this->authentication = $_POST['authentication'];
$this->ip_address = $_POST['ipAddress'];
$this->character_encoding = $_POST['charenc'];
$this->future_payment_id = $_POST['futurePayId'];
$this->future_payment_status_change = $_POST['futurePayStatusChange'];
if(isset($_POST['name'])){
$this->name = $_POST['name'];
}
if(isset($_POST['address'])){
$this->address = $_POST['address'];
}
if(isset($_POST['town'])){
$this->town = $_POST['town'];
}
if(isset($_POST['email'])){
$this->email = $_POST['email'];
}
if(isset($_POST['desc'])){
$this->desc = $_POST['desc'];
}
//custom properties
$this->mc_custom_property = $_POST['MC_custom_property'];
}
}
Выглядит очень похоже на PayPal. в основном сервер<> серверные вещи. у них есть свои 9 ярдов здесь. http://www.worldpay.com/support/kb/bg/pdf/custa.pdf Вы ищете полноценный сервисный центр покупки? б / с просто получение с простым уведомлением это страница или около того. У Google есть кое-что с открытым исходным кодом. http://code.google.com/p/opencart/source/browse/trunk/upload/catalog/language/english/payment/worldpay.php?spec=svn694&r=694. просто гугл worldpay.php. если вы найдете что-нибудь, дайте нам знать. мы рассматривали предложение WORLDPAY для наших клиентов. Мои, как они изменились за последние 5 лет.