Thực hiện thanh toán đơn hàng - nukeviet/module-wallet GitHub Wiki
- Tạo đơn hàng và gửi thông tin sang wallet
// Chỉ ra ID đơn hàng vào biến $order_id (giá trị này không được trùng lặp đối với một module nhất định)
$order_id = '123.345.567.ACB';
// Chỉ ra URL trả về sau khi khách hàng thanh toán trên wallet
$url_back = array(
'op' => 'download/san-pham/Iphone-X',
'querystr' => ''
);
// Dữ liệu trả về trong admin quản lý: Phần này tương tự như $url_admin tuy nhiên chưa viết tính năng
$url_admin = array(
'op' => 'download_content',
'querystr' => 'userid=123&fid=456'
);
// Xây xựng biến theo mẫu:
$data = array(
'modname' => $module_name, // Module thanh toán
'id' => $order_id, // ID đơn hàng
'order_object' => 'Điện thoại', // Loại đối tượng được mua ví dụ: Ứng dụng, sản phẩm, giỏ hàng...
'order_name' => 'Iphone X 256GB', // Tên đối tượng mua ví dụ: Iphone X 256GB, module shops...
'money_amount' => '550000', // Giá tiền cần thanh toán
'money_unit' => 'VND', // Đơn vị tiền tệ sử dụng ví dụ VND, USD...
'url_back' => $url_back,
'url_admin' => $url_admin
);
$payment_info = $wallet->getInfoPayment($data);
// Thông báo lỗi nếu có, thông tin lỗi lưu trong $payment_info['message']
if ($payment_info['status'] !== 'SUCCESS') {
nv_exit_theme($lang_module['pay_save_error_title'], $payment_info['message'], 0);
}
// Chuyển hướng đến trang thanh toán bên wallet
nv_redirect_location($payment_info['url']);
- Nhận thông tin thanh toán trả về từ wallet
Wallet sẽ trả về theo phương thức get, thêm vào hai biến
$worderid = $nv_Request->get_title('worderid', 'get', '');
$wchecksum = $nv_Request->get_title('wchecksum', 'get', '');
URL nhận của module kết nối căn cứ vào hai biết đó để xác định là có dữ liệu trả về hay không. Trong đó:
$worderid
là biến $order_id ở bước trên$wchecksum
là biến để kiểm tra tính toàn vẹn dữ liệu tránh trường hợp tự ý nhập url có biến$worderid
và$wchecksum
để giả mạo thanh toán.
URL nhận cũng gọi ra thư viện wallet nếu chưa gọi:
// Kiểm tra và báo lỗi nếu không cài module wallet
if (!isset($site_mods['wallet']) or !file_exists(NV_ROOTDIR . '/modules/wallet/wallet.class.php')) {
trigger_error('There is no support payment tool', 256);
}
// Gọi và khởi tạo wallet Class
require_once NV_ROOTDIR . '/modules/wallet/wallet.class.php';
$wallet = new nukeviet_wallet();
Tiếp theo lấy ra thông tin thanh toán bằng lệnh:
$paid = $wallet->getOrderPaid($module_name, $worderid, $wchecksum);
Nếu lỗi thì $paid
sẽ là false, khi đó thông báo lỗi thanh toán. Lỗi này là lỗi do sai $wchecksum
hoặc không tìm thấy $worderid
.
Nếu thành công (lấy thông tin thanh toán thành công) thì
$paid[0] => Trạng thái thanh toán quy chuẩn của wallet
$paid[1] => Thời điểm thực hiện thanh toán bên wallet
$paid[2] => Mã giao dịch trên wallet
Bên module kết nối căn cứ vào giá trị $paid[0]
để cập nhật trạng thái đơn hàng và xử lý tiếp.
Quy chuẩn của wallet về Trạng thái thanh toán xem Bảng trạng thái transaction status
Chú ý: Chỉ có duy nhất một trạng thái = 4 thì giao dịch thanh toán mới hoàn toàn thành công.