Thực hiện thanh toán đơn hàng - nukeviet/module-wallet GitHub Wiki

  1. 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']);
  1. 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$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.