add setting token
This commit is contained in:
@@ -10,11 +10,25 @@ Content-Type: application/json
|
|||||||
|
|
||||||
### Wynacom - check token
|
### Wynacom - check token
|
||||||
POST https://{{host}}/one-api/tools/wynacom/check_token
|
POST https://{{host}}/one-api/tools/wynacom/check_token
|
||||||
Content-Type: application/jsons
|
Content-Type: application/json
|
||||||
Authorization: Bearer {{accessToken}}
|
Authorization: Bearer {{accessToken}}
|
||||||
|
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
### Wynacom - get token setting
|
||||||
|
POST https://{{host}}/one-api/tools/wynacom/token_setting
|
||||||
|
Content-Type: application/json
|
||||||
|
|
||||||
|
{}
|
||||||
|
|
||||||
|
### Wynacom - save token setting exp 10 hari
|
||||||
|
POST https://{{host}}/one-api/tools/wynacom/save_token_setting
|
||||||
|
Content-Type: application/json
|
||||||
|
|
||||||
|
{
|
||||||
|
"token_expired_days": 3
|
||||||
|
}
|
||||||
|
|
||||||
### Wynacom - cek timestamp gabungan nonlab dan lab
|
### Wynacom - cek timestamp gabungan nonlab dan lab
|
||||||
POST https://{{host}}/one-api/tools/wynacom/sampling
|
POST https://{{host}}/one-api/tools/wynacom/sampling
|
||||||
Content-Type: application/json
|
Content-Type: application/json
|
||||||
@@ -26,6 +40,7 @@ Content-Type: application/json
|
|||||||
### Wynacom - cek union records nonlab dan lab
|
### Wynacom - cek union records nonlab dan lab
|
||||||
POST https://{{host}}/one-api/tools/wynacom/sampling_timestamp
|
POST https://{{host}}/one-api/tools/wynacom/sampling_timestamp
|
||||||
Content-Type: application/json
|
Content-Type: application/json
|
||||||
|
Authorization: Bearer {{accessToken}}
|
||||||
|
|
||||||
{
|
{
|
||||||
"T_OrderHeaderLabNumber": "{{labNumber}}"
|
"T_OrderHeaderLabNumber": "{{labNumber}}"
|
||||||
|
|||||||
@@ -20,7 +20,9 @@ class Wynacom extends MY_Controller
|
|||||||
"POST /tools/wynacom/lab",
|
"POST /tools/wynacom/lab",
|
||||||
"POST /tools/wynacom/sampling",
|
"POST /tools/wynacom/sampling",
|
||||||
"POST /tools/wynacom/generate_token",
|
"POST /tools/wynacom/generate_token",
|
||||||
"POST /tools/wynacom/check_token"
|
"POST /tools/wynacom/check_token",
|
||||||
|
"POST /tools/wynacom/token_setting",
|
||||||
|
"POST /tools/wynacom/save_token_setting"
|
||||||
)
|
)
|
||||||
));
|
));
|
||||||
exit;
|
exit;
|
||||||
@@ -84,17 +86,30 @@ class Wynacom extends MY_Controller
|
|||||||
public function generate_token()
|
public function generate_token()
|
||||||
{
|
{
|
||||||
try {
|
try {
|
||||||
|
$active_token = $this->get_active_wynacom_token();
|
||||||
|
if ($active_token) {
|
||||||
|
$this->sys_ok(array(
|
||||||
|
"access_token" => $active_token["Api_WynacomTokenAccessToken"],
|
||||||
|
"token_type" => "Bearer",
|
||||||
|
"expired_at" => $active_token["Api_WynacomTokenExpiredAt"],
|
||||||
|
"expires_in" => (int) $active_token["expires_in"]
|
||||||
|
));
|
||||||
|
exit;
|
||||||
|
}
|
||||||
|
|
||||||
|
$expired_days = $this->get_wynacom_token_expired_days();
|
||||||
$access_token = $this->create_access_token();
|
$access_token = $this->create_access_token();
|
||||||
$expired_at = date("Y-m-d H:i:s", strtotime("+3 days"));
|
$expired_at = date("Y-m-d H:i:s", strtotime("+{$expired_days} days"));
|
||||||
|
|
||||||
$sql = "INSERT INTO api_wynacom_token (
|
$sql = "INSERT INTO api_wynacom_token (
|
||||||
Api_WynacomTokenAccessToken,
|
Api_WynacomTokenAccessToken,
|
||||||
Api_WynacomTokenExpiredAt,
|
Api_WynacomTokenExpiredAt,
|
||||||
|
Api_WynacomTokenIsActive,
|
||||||
Api_WynacomTokenCreated,
|
Api_WynacomTokenCreated,
|
||||||
Api_WynacomTokenCreatedUserID,
|
Api_WynacomTokenCreatedUserID,
|
||||||
Api_WynacomTokenLastUpdated,
|
Api_WynacomTokenLastUpdated,
|
||||||
Api_WynacomTokenLastUpdatedUserID
|
Api_WynacomTokenLastUpdatedUserID
|
||||||
) VALUES (?, ?, NOW(), 0, NOW(), 0)";
|
) VALUES (?, ?, 'Y', NOW(), 0, NOW(), 0)";
|
||||||
$qry = $this->db->query($sql, array(
|
$qry = $this->db->query($sql, array(
|
||||||
$access_token,
|
$access_token,
|
||||||
$expired_at
|
$expired_at
|
||||||
@@ -109,7 +124,8 @@ class Wynacom extends MY_Controller
|
|||||||
"access_token" => $access_token,
|
"access_token" => $access_token,
|
||||||
"token_type" => "Bearer",
|
"token_type" => "Bearer",
|
||||||
"expired_at" => $expired_at,
|
"expired_at" => $expired_at,
|
||||||
"expires_in" => 259200
|
"expired_days" => $expired_days,
|
||||||
|
"expires_in" => $expired_days * 86400
|
||||||
));
|
));
|
||||||
exit;
|
exit;
|
||||||
} catch (Exception $exc) {
|
} catch (Exception $exc) {
|
||||||
@@ -135,9 +151,72 @@ class Wynacom extends MY_Controller
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function token_setting()
|
||||||
|
{
|
||||||
|
try {
|
||||||
|
$this->sys_ok($this->get_wynacom_token_setting());
|
||||||
|
exit;
|
||||||
|
} catch (Exception $exc) {
|
||||||
|
$this->sys_error($exc->getMessage());
|
||||||
|
exit;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public function save_token_setting()
|
||||||
|
{
|
||||||
|
try {
|
||||||
|
$prm = is_array($this->sys_input) ? $this->sys_input : array();
|
||||||
|
$expired_days = isset($prm["token_expired_days"]) ? (int) $prm["token_expired_days"] : 0;
|
||||||
|
|
||||||
|
if ($expired_days < 1) {
|
||||||
|
throw new Exception("Parameter token_expired_days harus angka lebih besar dari 0");
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($expired_days > 365) {
|
||||||
|
throw new Exception("Parameter token_expired_days maksimal 365 hari");
|
||||||
|
}
|
||||||
|
|
||||||
|
$sql = "INSERT INTO api_wynacom_setting (
|
||||||
|
Api_WynacomSettingKey,
|
||||||
|
Api_WynacomSettingValue,
|
||||||
|
Api_WynacomSettingDescription,
|
||||||
|
Api_WynacomSettingIsActive,
|
||||||
|
Api_WynacomSettingCreatedUserID,
|
||||||
|
Api_WynacomSettingLastUpdatedUserID
|
||||||
|
) VALUES (
|
||||||
|
'token_expired_days',
|
||||||
|
?,
|
||||||
|
'Masa berlaku token Wynacom dalam hari',
|
||||||
|
'Y',
|
||||||
|
0,
|
||||||
|
0
|
||||||
|
)
|
||||||
|
ON DUPLICATE KEY UPDATE
|
||||||
|
Api_WynacomSettingValue = VALUES(Api_WynacomSettingValue),
|
||||||
|
Api_WynacomSettingDescription = VALUES(Api_WynacomSettingDescription),
|
||||||
|
Api_WynacomSettingIsActive = 'Y',
|
||||||
|
Api_WynacomSettingLastUpdated = NOW(),
|
||||||
|
Api_WynacomSettingLastUpdatedUserID = 0";
|
||||||
|
$qry = $this->db->query($sql, array((string) $expired_days));
|
||||||
|
|
||||||
|
if (!$qry) {
|
||||||
|
$this->sys_error_db("Gagal menyimpan setting token Wynacom", $this->db);
|
||||||
|
exit;
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->sys_ok($this->get_wynacom_token_setting());
|
||||||
|
exit;
|
||||||
|
} catch (Exception $exc) {
|
||||||
|
$this->sys_error($exc->getMessage());
|
||||||
|
exit;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public function sampling_timestamp()
|
public function sampling_timestamp()
|
||||||
{
|
{
|
||||||
try {
|
try {
|
||||||
|
$this->validate_wynacom_token($this->get_access_token_param());
|
||||||
|
|
||||||
$order = $this->require_order_header();
|
$order = $this->require_order_header();
|
||||||
$lab_number = $order["T_OrderHeaderLabNumber"];
|
$lab_number = $order["T_OrderHeaderLabNumber"];
|
||||||
|
|
||||||
@@ -217,6 +296,7 @@ class Wynacom extends MY_Controller
|
|||||||
$sql = "SELECT *
|
$sql = "SELECT *
|
||||||
FROM api_wynacom_token
|
FROM api_wynacom_token
|
||||||
WHERE Api_WynacomTokenAccessToken = ?
|
WHERE Api_WynacomTokenAccessToken = ?
|
||||||
|
AND Api_WynacomTokenIsActive = 'Y'
|
||||||
AND Api_WynacomTokenExpiredAt >= NOW()
|
AND Api_WynacomTokenExpiredAt >= NOW()
|
||||||
AND (
|
AND (
|
||||||
Api_WynacomTokenDeleted IS NULL
|
Api_WynacomTokenDeleted IS NULL
|
||||||
@@ -239,6 +319,68 @@ class Wynacom extends MY_Controller
|
|||||||
return $credential;
|
return $credential;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private function get_active_wynacom_token()
|
||||||
|
{
|
||||||
|
$sql = "SELECT *,
|
||||||
|
TIMESTAMPDIFF(SECOND, NOW(), Api_WynacomTokenExpiredAt) AS expires_in
|
||||||
|
FROM api_wynacom_token
|
||||||
|
WHERE Api_WynacomTokenExpiredAt >= NOW()
|
||||||
|
AND Api_WynacomTokenIsActive = 'Y'
|
||||||
|
AND (
|
||||||
|
Api_WynacomTokenDeleted IS NULL
|
||||||
|
OR Api_WynacomTokenDeleted = '0000-00-00 00:00:00'
|
||||||
|
)
|
||||||
|
ORDER BY Api_WynacomTokenID DESC
|
||||||
|
LIMIT 1";
|
||||||
|
$qry = $this->db->query($sql);
|
||||||
|
|
||||||
|
if (!$qry) {
|
||||||
|
$this->sys_error_db("Gagal mengambil token aktif Wynacom", $this->db);
|
||||||
|
exit;
|
||||||
|
}
|
||||||
|
|
||||||
|
$rows = $qry->result_array();
|
||||||
|
return count($rows) > 0 ? $rows[0] : false;
|
||||||
|
}
|
||||||
|
|
||||||
|
private function get_wynacom_token_expired_days()
|
||||||
|
{
|
||||||
|
$default_days = 3;
|
||||||
|
$sql = "SELECT Api_WynacomSettingValue
|
||||||
|
FROM api_wynacom_setting
|
||||||
|
WHERE Api_WynacomSettingKey = 'token_expired_days'
|
||||||
|
AND Api_WynacomSettingIsActive = 'Y'
|
||||||
|
ORDER BY Api_WynacomSettingID DESC
|
||||||
|
LIMIT 1";
|
||||||
|
$qry = $this->db->query($sql);
|
||||||
|
|
||||||
|
if (!$qry) {
|
||||||
|
return $default_days;
|
||||||
|
}
|
||||||
|
|
||||||
|
$rows = $qry->result_array();
|
||||||
|
if (count($rows) === 0) {
|
||||||
|
return $default_days;
|
||||||
|
}
|
||||||
|
|
||||||
|
$expired_days = (int) $rows[0]["Api_WynacomSettingValue"];
|
||||||
|
if ($expired_days < 1) {
|
||||||
|
return $default_days;
|
||||||
|
}
|
||||||
|
|
||||||
|
return $expired_days;
|
||||||
|
}
|
||||||
|
|
||||||
|
private function get_wynacom_token_setting()
|
||||||
|
{
|
||||||
|
$expired_days = $this->get_wynacom_token_expired_days();
|
||||||
|
|
||||||
|
return array(
|
||||||
|
"token_expired_days" => $expired_days,
|
||||||
|
"expires_in" => $expired_days * 86400
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
private function create_access_token()
|
private function create_access_token()
|
||||||
{
|
{
|
||||||
if (function_exists("random_bytes")) {
|
if (function_exists("random_bytes")) {
|
||||||
|
|||||||
37
scripts/sql/2026-06-18_create_api_wynacom_setting.sql
Normal file
37
scripts/sql/2026-06-18_create_api_wynacom_setting.sql
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
CREATE TABLE IF NOT EXISTS api_wynacom_setting (
|
||||||
|
Api_WynacomSettingID INT NOT NULL AUTO_INCREMENT,
|
||||||
|
Api_WynacomSettingKey VARCHAR(100) NOT NULL,
|
||||||
|
Api_WynacomSettingValue VARCHAR(255) NOT NULL,
|
||||||
|
Api_WynacomSettingDescription VARCHAR(255) NULL,
|
||||||
|
Api_WynacomSettingIsActive CHAR(1) NOT NULL DEFAULT 'Y',
|
||||||
|
Api_WynacomSettingCreated DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||||
|
Api_WynacomSettingCreatedUserID INT NOT NULL DEFAULT 0,
|
||||||
|
Api_WynacomSettingLastUpdated DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||||
|
Api_WynacomSettingLastUpdatedUserID INT NOT NULL DEFAULT 0,
|
||||||
|
Api_WynacomSettingDeleted DATETIME NULL,
|
||||||
|
Api_WynacomSettingDeletedUserID INT NOT NULL DEFAULT 0,
|
||||||
|
PRIMARY KEY (Api_WynacomSettingID),
|
||||||
|
UNIQUE KEY uq_api_wynacom_setting_key (Api_WynacomSettingKey),
|
||||||
|
KEY idx_api_wynacom_setting_active (Api_WynacomSettingIsActive)
|
||||||
|
);
|
||||||
|
|
||||||
|
INSERT INTO api_wynacom_setting (
|
||||||
|
Api_WynacomSettingKey,
|
||||||
|
Api_WynacomSettingValue,
|
||||||
|
Api_WynacomSettingDescription,
|
||||||
|
Api_WynacomSettingIsActive,
|
||||||
|
Api_WynacomSettingCreatedUserID,
|
||||||
|
Api_WynacomSettingLastUpdatedUserID
|
||||||
|
) VALUES (
|
||||||
|
'token_expired_days',
|
||||||
|
'3',
|
||||||
|
'Masa berlaku token Wynacom dalam hari',
|
||||||
|
'Y',
|
||||||
|
0,
|
||||||
|
0
|
||||||
|
)
|
||||||
|
ON DUPLICATE KEY UPDATE
|
||||||
|
Api_WynacomSettingValue = Api_WynacomSettingValue,
|
||||||
|
Api_WynacomSettingDescription = VALUES(Api_WynacomSettingDescription),
|
||||||
|
Api_WynacomSettingIsActive = 'Y',
|
||||||
|
Api_WynacomSettingLastUpdated = NOW();
|
||||||
Reference in New Issue
Block a user