-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathvalidation.php
executable file
·107 lines (88 loc) · 3.83 KB
/
validation.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
<?php
/**
* Copyright 2013-2018 PayXpert
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
* @author Regis Vidal
* @copyright 2013-2018 PayXpert
* @license http://www.apache.org/licenses/LICENSE-2.0 Apache License, Version 2.0 (the "License")
*/
/* Used for Prestashop < 1.5 */
/* SSL Management */
$useSSL = true;
require_once(dirname(__FILE__) . '/../../config/config.inc.php');
require_once(dirname(__FILE__) . '/../../init.php');
require_once(dirname(__FILE__) . '/payxpert.php');
require_once(dirname(__FILE__) . '/lib/Connect2PayClient.php');
$payxpert = new PayXpert();
// init api
$c2pClient = new PayXpert\Connect2Pay\Connect2PayClient(
$payxpert->getPayXpertUrl(),
Configuration::get('PAYXPERT_ORIGINATOR'),
html_entity_decode(Configuration::get('PAYXPERT_PASSWORD'))
);
if ($c2pClient->handleCallbackStatus()) {
$status = $c2pClient->getStatus();
// get the Error code
$errorCode = $status->getErrorCode();
$errorMessage = $status->getErrorMessage();
$transaction = $status->getLastTransactionAttempt();
if ($transaction !== null) {
$transactionId = $transaction->getTransactionID();
$orderId = $status->getOrderID();
$amount = number_format($status->getAmount() / 100, 2, '.', '');
$callbackData = $status->getCtrlCustomData();
$message = "PayXpert payment module: ";
// load the customer cart and perform some checks
$cart = new Cart((int) ($orderId));
if (!$cart->id) {
$message .= "Cart is empty: " . $orderId;
error_log($message);
}
$responseStatus = "KO";
$responseMessage = "Callback validation failed";
$customer = new Customer((int) ($cart->id_customer));
if (!$customer) {
$message .= "Customer is empty for order " . $orderId;
error_log($message);
} else {
if (!PayXpert::checkCallbackAuthenticityData($callbackData, $cart->id, $customer->secure_key)) {
$message .= "Invalid callback received for order " . $orderId . ". Validation failed.";
error_log($message);
} else {
$responseStatus = "OK";
$responseMessage = "Status recorded";
$message .= "Error code: " . $errorCode . "<br />";
$message .= "Error message: " . $errorMessage . "<br />";
$message .= "Transaction ID: " . $transactionId . "<br />";
$message .= "Order ID: " . $orderId . "<br />";
error_log(str_replace("<br />", " ", $message));
$paymentMean = $payxpert->l('Credit Card') . ' (PayXpert)';
switch ($errorCode) {
case "000":
/* Payment OK */
$payxpert->validateOrder((int) $orderId, _PS_OS_PAYMENT_, $amount, $paymentMean, $message);
break;
default:
$payxpert->validateOrder((int) $orderId, _PS_OS_ERROR_, $amount, $paymentMean, $message);
break;
}
}
}
}
// Send a response to mark this transaction as notified
$response = array("status" => $responseStatus, "message" => $responseMessage);
header("Content-type: application/json");
echo json_encode($response);
}