# Webhook Schedule API > [name=阿水] ###### tags: `Webhook的log table需求` `API規格` ## code內關鍵字 - function : saveonpassword - dao參考 model.memberchangelog memberchangelogdao memberchangelogdaoimpl ## 流程 - 本次阿水負責的簡易流程 : 客戶修改密碼 $\longrightarrow$ 紀錄在這次要製作的log table $\longrightarrow$ scheduler的排程執行程式 $\longrightarrow$ 程式發送通知給有該應用服務權限(app_service_target)的客戶所提供的URL(後面簡稱webhookURL) ## 可能遇到的問題 - 若是該帳號在排程時間還沒到的時候,又再其他網站更換密碼的狀況 - 寄送通知是否該跳過原本的網站,還是應該把url附在通知裡由各自的網站自己處理 ## 查詢有該應用服務權限的SQL範例 SELECT * FROM taitra_member.app_service_target left join app_service on app_service.sid = app_service_target.service_id where target_type = 'USR' and target_id = '2c94d0df6a259bf4016a2b0265a00041'; (target_id就是member_id) ## 本次預計新增的 table 本次預計新增3張table - table name : app_service_webhook_url AppServiceWebhookUrl - insert時機 : 手動新增、UI新增、API新增 | 欄位名稱 | 欄位說明 | 型態 | 是否必要欄位 | | -------- | -------- | -------- | -------- | | webhook_url | 該服務類別的webhook url | String | Y | | service_id | 應用服務ID | String | Y | | type | 類別 | String | Y | * type : 目前唯一種類,修改密碼--pwd - DDL CREATE TABLE `app_service_webhook_url` ( `LID` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL, `TYPE` char(3) COLLATE utf8mb4_unicode_ci NOT NULL, `SERVICE_ID` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL, `WEBHOOK_URL` varchar(256) COLLATE utf8mb4_unicode_ci DEFAULT NULL, PRIMARY KEY (`LID`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci - table name : pwd_change_log - insert時機 : 每次修改密碼時(在function : addmemberchangelog之後) | 欄位名稱 | 欄位說明 | 型態 | 是否必要欄位 | | -------- | -------- | -------- | -------- | | member_id | 被密碼修改的帳號 | String | Y | | modify_date | 該帳號被密碼修改的時間 | DATETIME | Y | | modify_type | 修改來源類型 | String | Y | | modify_serivce | 修改應用服務 | String | Y | | host_ip | 密碼修改的Client IP | String | N | | host_user_agent | 密碼修改的User Agent | String | N | | status | 狀態 | String | Y | * status : 0為未處理,1為處理成功,2為處理失敗(過段時間再處理) - DDL CREATE TABLE `pwd_change_log` ( `LID` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL, `MEMBER_ID` varchar(32) COLLATE utf8mb4_unicode_ci DEFAULT NULL, `MODIFY_DATE` datetime NOT NULL, `MODIFY_TYPE` char(3) COLLATE utf8mb4_unicode_ci NOT NULL, `MODIFY_SERVICE` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL, `HOST_IP` varchar(256) COLLATE utf8mb4_unicode_ci DEFAULT NULL, `HOST_USER_AGENT` varchar(256) COLLATE utf8mb4_unicode_ci DEFAULT NULL, `STATUS` char(1) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '0', PRIMARY KEY (`LID`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci - table name : pwd_webhook_log PwdWebhookLog - insert時機 : scheduler發送完webhook拿到的結果 | 欄位名稱 | 欄位說明 | 型態 | 是否必要欄位 | | -------- | -------- | -------- | -------- | | member_id | 被修改的帳號 | String | Y | | webhook_url | 應用服務ID | String | Y | | webhook_date | webhook收到回傳的時間 | DATETIME | Y | | type | 類別 | String | Y | | status | 狀態 | number | Y | * type : 目前唯一種類,修改密碼--pwd * status : 0為未處理,1為處理成功,2為處理失敗(狀態不會被更新) - DDL CREATE TABLE `pwd_webhook_log` ( `LID` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL, `MEMBER_ID` varchar(32) COLLATE utf8mb4_unicode_ci DEFAULT NULL, `WEBHOOK_URL` varchar(256) COLLATE utf8mb4_unicode_ci DEFAULT NULL, `WEBHOOK_DATE` datetime NOT NULL, `TYPE` char(3) COLLATE utf8mb4_unicode_ci NOT NULL, `STATUS` char(1) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '0', PRIMARY KEY (`LID`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ## 網址 - path:符合 RESTful API 命名規則 ## Input JSON Path - path:符合 RESTful API 命名規則 - Request Method:POST - Content Type:application/json;charset=utf-8 - query : 無 - body : ```=json { "member_id" : 被密碼修改的帳號, //ex: vinceshieh@yahoo.com.tw "modify_date" : 該帳號被密碼修改的時間 //ex: 2022-04-17 17:53:48 "modify_type" : 修改來源類型, // API : API修改(密碼) / USR: 會員中心(密碼修改) / FPW: 忘記密碼(重設密碼) "modify_serivce" : 修改應用服務, // 如果modify_type是 API,顯示此欄位 "host_ip" : 密碼修改的Client IP // ex: 61.66.108.194 "host_user_agent" : 密碼修改的User Agent // ex: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.66 Safari/537.36 } ``` 我只是想打文字 test.sh,就變成超連結 ## Output JSON Path ```=json { "status" : 本次處理狀態, //1為處理成功,2為處理失敗 "error" : 錯誤訊息 //若有錯誤訊息,請備註在這裡 } ```