Ở bước này bạn cần tạo kết nối webhook vào app, để app có thể gửi dữ liệu chuyển khoản bank vào hook trong quá trình xử lý hoàn tất đơn hàng tự động.
Đây là webhook chính kết nối website trên app android.
Đối với website không sử dụng WooCommerce, bạn sử dụng mẫu webhook dưới đây. Ví dụ sau sử dụng NodeJS Express Framework làm mẫu:
Copy //webhook for process order
routes .post ( '/process-order' , async (req , res) => {
var result = {};
const { data } = req .body;
result .error = 1 ;
result .msg = '' ;
if (data) {
for ( let i = 0 ;i < data . length ;i ++ ) {
result ._ok = 1 ; //important: xác nhận webhook đã xử lý
//lấy nội dung chuyển khoản
if ( is_JSON (data[i].description)) {
var jsonDes = typeof data[i].description == 'string' ? JSON .parse (data[i].description) : data[i].description;
if ( jsonDes .code) data[i].description = jsonDes .code;
}
//số tiền mà khách hàng chuyển khoản
data[i].amount;
//your code..
}
}
res .status ( 200 ) .send (result);
});
Copy <? php
function getHeader (){
$headers = array ();
$copy_server = array (
'CONTENT_TYPE' => 'Content-Type' ,
'CONTENT_LENGTH' => 'Content-Length' ,
'CONTENT_MD5' => 'Content-Md5' ,
);
foreach ($_SERVER as $key => $value) {
if ( substr ( $key , 0 , 5 ) === 'HTTP_' ) {
$key = substr ( $key , 5 ) ;
if ( ! isset ( $copy_server[$key] ) || ! isset ( $_SERVER[$key] ) ) {
$key = str_replace ( ' ' , '-' , ucwords ( strtolower ( str_replace ( '_' , ' ' , $key )))) ;
$headers[$key] = $value;
}
} elseif ( isset ( $copy_server[$key] ) ) {
$headers[$copy_server[$key]] = $value;
}
}
if ( ! isset ( $headers[ 'Authorization' ] ) ) {
if ( isset ( $_SERVER[ 'REDIRECT_HTTP_AUTHORIZATION' ] ) ) {
$headers[ 'Authorization' ] = sanitize_text_field ( $_SERVER[ 'REDIRECT_HTTP_AUTHORIZATION' ] ) ;
} elseif ( isset ( $_SERVER[ 'PHP_AUTH_USER' ] ) ) {
$basic_pass = isset ( $_SERVER[ 'PHP_AUTH_PW' ] ) ? $_SERVER[ 'PHP_AUTH_PW' ] : '' ;
$headers[ 'Authorization' ] = 'Basic ' . base64_encode ( $_SERVER[ 'PHP_AUTH_USER' ] . ':' . $basic_pass ) ;
} elseif ( isset ( $_SERVER[ 'PHP_AUTH_DIGEST' ] ) ) {
$headers[ 'Authorization' ] = sanitize_text_field ( $_SERVER[ 'PHP_AUTH_DIGEST' ] ) ;
}
}
return $headers;
}
function payment_handler ()
{
$txtBody = file_get_contents ( 'php://input' ) ;
$jsonBody = json_decode ( $txtBody ) ;
if ( ! $txtBody || ! $jsonBody) {
echo json_encode ( [ 'error' => "Missing body" ] ) ;
die ();
}
if ( isset ( $jsonBody -> error ) && $jsonBody -> error != 0 ) {
echo json_encode ( [ 'error' => "An error occurred" ] ) ;
die ();
}
$header = getHeader () ;
$token = isset ( $header[ "Secure-Token" ] ) ? $header[ "Secure-Token" ] : '' ;
if ( strcasecmp ( $token , $this -> settings[ 'bank_transfer' ][ 'secure_token' ] ) !== 0 ) {
echo json_encode ( [ 'error' => "Missing secure_token or wrong secure_token" ] ) ;
die ();
}
$result = [ 'msg' => [] , 'error' => 0 , 'rawInput' => $txtBody];
if ( ! empty ( $jsonBody -> data ) )
foreach ($jsonBody -> data as $key => $transaction) {
$result[ '_ok' ] = 1 ; //detect webhook ok
$des = $transaction -> description; //tin nhắn/code
if ( is_JSON ( $des ) ) {
$desJson = is_string ( $des ) ? json_decode ( $des , true ) : $des;
if ( is_array ( $desJson ) ) {
if ( isset ( $desJson[ 'code' ] ) ) {
$des = $desJson[ 'code' ];
}
}
}
//...code xử lý đơn hàng
if ( empty ( $result[ 'error' ] ) ) break ;
}
echo json_encode ( $result ) ;
die ();
}
Chúng tôi thêm một webhook phụ, mọi giao dịch của tất cả các website sẽ gọi vào webhook này. Bạn có thể dùng vào mục đích xủ lý thêm dữ liệu theo ý muốn.
Dữ liệu được truyền vào webhook giống như webhook chính.