forked from littlewind/demo-vnpay-php
-
Notifications
You must be signed in to change notification settings - Fork 0
/
vnpay_ipn.php
83 lines (79 loc) · 2.88 KB
/
vnpay_ipn.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
<?php
/*
* IPN URL: Ghi nhận kết quả thanh toán từ VNPAY
* Các bước thực hiện:
* Kiểm tra checksum
* Tìm giao dịch trong database
* Kiểm tra tình trạng của giao dịch trước khi cập nhật
* Cập nhật kết quả vào Database
* Trả kết quả ghi nhận lại cho VNPAY
*/
require_once("./config.php");
$inputData = array();
$returnData = array();
$data = $_REQUEST;
foreach ($data as $key => $value) {
if (substr($key, 0, 4) == "vnp_") {
$inputData[$key] = $value;
}
}
$vnp_SecureHash = $inputData['vnp_SecureHash'];
unset($inputData['vnp_SecureHashType']);
unset($inputData['vnp_SecureHash']);
ksort($inputData);
$i = 0;
$hashData = "";
foreach ($inputData as $key => $value) {
if ($i == 1) {
$hashData = $hashData . '&' . $key . "=" . $value;
} else {
$hashData = $hashData . $key . "=" . $value;
$i = 1;
}
}
$vnpTranId = $inputData['vnp_TransactionNo']; //Mã giao dịch tại VNPAY
$vnp_BankCode = $inputData['vnp_BankCode']; //Ngân hàng thanh toán
//$secureHash = md5($vnp_HashSecret . $hashData);
$secureHash = hash('sha256',$vnp_HashSecret . $hashData);
$Status = 0;
$orderId = $inputData['vnp_TxnRef'];
try {
//Check Orderid
//Kiểm tra checksum của dữ liệu
if ($secureHash == $vnp_SecureHash) {
//Lấy thông tin đơn hàng lưu trong Database và kiểm tra trạng thái của đơn hàng, mã đơn hàng là: $orderId
//Việc kiểm tra trạng thái của đơn hàng giúp hệ thống không xử lý trùng lặp, xử lý nhiều lần một giao dịch
//Giả sử: $order = mysqli_fetch_assoc($result);
$order = NULL;
if ($order != NULL) {
if ($order["Status"] != NULL && $order["Status"] == 0) {
if ($inputData['vnp_ResponseCode'] == '00') {
$Status = 1;
} else {
$Status = 2;
}
//Cài đặt Code cập nhật kết quả thanh toán, tình trạng đơn hàng vào DB
//
//
//
//Trả kết quả về cho VNPAY: Website TMĐT ghi nhận yêu cầu thành công
$returnData['RspCode'] = '00';
$returnData['Message'] = 'Confirm Success';
} else {
$returnData['RspCode'] = '02';
$returnData['Message'] = 'Order already confirmed';
}
} else {
$returnData['RspCode'] = '01';
$returnData['Message'] = 'Order not found';
}
} else {
$returnData['RspCode'] = '97';
$returnData['Message'] = 'Chu ky khong hop le';
}
} catch (Exception $e) {
$returnData['RspCode'] = '99';
$returnData['Message'] = 'Unknow error';
}
//Trả lại VNPAY theo định dạng JSON
echo json_encode($returnData);