Subversion Repositories php-qbpwcf

Rev

Rev 3 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 3 Rev 226
Line 1... Line 1...
1
<?php
1
<?php
2
 
2
 
3
/*
3
/*
4
 
4
 
5
	QBPWCF, Quick Build PHP website Component base on Fedora Linux.
5
	QBPWCF, Quick Build PHP website Component base on Fedora Linux.
6
    Copyright (C) 2015~2024 Min-Jhin,Chen
6
    Copyright (C) 2014~2025 MIN ZHI, CHEN
7
 
7
 
8
    This file is part of QBPWCF.
8
    This file is part of QBPWCF.
9
 
9
 
10
    QBPWCF is free software: you can redistribute it and/or modify
10
    QBPWCF is free software: you can redistribute it and/or modify
11
    it under the terms of the GNU General Public License as published by
11
    it under the terms of the GNU General Public License as published by
Line 43... Line 43...
43
	#$arguments,陣列,為呼叫方法時所用的參數.
43
	#$arguments,陣列,為呼叫方法時所用的參數.
44
	#參考資料:
44
	#參考資料:
45
	#__call=>http://php.net/manual/en/language.oop5.overloading.php#object.callstatic
45
	#__call=>http://php.net/manual/en/language.oop5.overloading.php#object.callstatic
46
	*/
46
	*/
47
	public function __call($method,$arguments){
47
	public function __call($method,$arguments){
48
		
48
 
49
		#取得當前執行的函式
49
		#取得當前執行的函式
50
		$result["function"]=__FUNCTION__;
50
		$result["function"]=__FUNCTION__;
51
		
51
 
52
		#設置執行不正常
52
		#設置執行不正常
53
		$result["status"]="false";
53
		$result["status"]="false";
54
		
54
 
55
		#設置執行錯誤
55
		#設置執行錯誤
56
		$result["error"][]=__NAMESPACE__ ."/".$method."() 不存在!";
56
		$result["error"][]=__NAMESPACE__ ."/".$method."() 不存在!";
57
		
57
 
58
		#設置所丟入的參數
58
		#設置所丟入的參數
59
		$result["error"][]=$arguments;
59
		$result["error"][]=$arguments;
60
		
60
 
61
		#回傳結果
61
		#回傳結果
62
		return $result;
62
		return $result;
63
		
63
 
64
		}#function __call end
64
		}#function __call end
65
		
65
 
66
	/*
66
	/*
67
	#函式說明:
67
	#函式說明:
68
	#當前類別被呼叫的靜態方法不存在時,將會執行該函數,回報該方法不存在.
68
	#當前類別被呼叫的靜態方法不存在時,將會執行該函數,回報該方法不存在.
69
	#回傳結果:
69
	#回傳結果:
70
	#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
70
	#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
Line 75... Line 75...
75
	#$arguments,陣列,為呼叫方法時所用的參數.
75
	#$arguments,陣列,為呼叫方法時所用的參數.
76
	#參考資料:
76
	#參考資料:
77
	#__call=>http://php.net/manual/en/language.oop5.overloading.php#object.callstatic
77
	#__call=>http://php.net/manual/en/language.oop5.overloading.php#object.callstatic
78
	*/
78
	*/
79
	public static function __callStatic($method,$arguments){
79
	public static function __callStatic($method,$arguments){
80
		
80
 
81
		#取得當前執行的函式
81
		#取得當前執行的函式
82
		$result["function"]=__FUNCTION__;
82
		$result["function"]=__FUNCTION__;
83
		
83
 
84
		#設置執行不正常
84
		#設置執行不正常
85
		$result["status"]="false";
85
		$result["status"]="false";
86
		
86
 
87
		#設置執行錯誤
87
		#設置執行錯誤
88
		$result["error"][]="欲呼叫的". __NAMESPACE__ ."/".$method."() 不存在!";
88
		$result["error"][]="欲呼叫的". __NAMESPACE__ ."/".$method."() 不存在!";
89
		
89
 
90
		#設置所丟入的參數
90
		#設置所丟入的參數
91
		$result["error"][]=$arguments;
91
		$result["error"][]=$arguments;
92
		
92
 
93
		#回傳結果
93
		#回傳結果
94
		return $result;
94
		return $result;
95
		
95
 
96
		}#function __callStatic end
96
		}#function __callStatic end
97
		
97
 
98
	/*
98
	/*
99
	#函式說明:
99
	#函式說明:
100
	#base64UrlEncode  https://jwt.io/ 中base64UrlEncode编码实现.
100
	#base64UrlEncode  https://jwt.io/ 中base64UrlEncode编码实现.
101
	#回傳結果:
101
	#回傳結果:
102
	#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
102
	#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
103
	#$result["error"],錯誤訊息陣列
103
	#$result["error"],錯誤訊息陣列
104
	#$result["function"],當前函數執行的名稱
104
	#$result["function"],當前函數執行的名稱
105
	#$result["content"],base64UrlEncode编码後的內容。	
105
	#$result["content"],base64UrlEncode编码後的內容。
106
	#必填參數:
106
	#必填參數:
107
	#$conf["input"],字串,需要編碼的字串.
107
	#$conf["input"],字串,需要編碼的字串.
108
	$conf["input"]="";
108
	$conf["input"]="";
109
	#可省略參數:
109
	#可省略參數:
110
	#無
110
	#無
Line 112... Line 112...
112
	#https://zhuanlan.zhihu.com/p/94747540
112
	#https://zhuanlan.zhihu.com/p/94747540
113
	#備註:
113
	#備註:
114
	#無.
114
	#無.
115
	*/
115
	*/
116
	public static function base64UrlEncode(&$conf){
116
	public static function base64UrlEncode(&$conf){
117
	
117
 
118
		#初始化要回傳的內容
118
		#初始化要回傳的內容
119
		$result=array();
119
		$result=array();
120
		
120
 
121
		#取得當前執行的函數名稱
121
		#取得當前執行的函數名稱
122
		$result["function"]=__FUNCTION__;
122
		$result["function"]=__FUNCTION__;
123
		
123
 
124
		#初始化要回傳的語法
124
		#初始化要回傳的語法
125
		$result["content"]="";
125
		$result["content"]="";
126
		
126
 
127
		#如果 $conf 不為陣列
127
		#如果 $conf 不為陣列
128
		if(gettype($conf)!="array"){
128
		if(gettype($conf)!="array"){
129
			
129
 
130
			#設置執行失敗
130
			#設置執行失敗
131
			$result["status"]="false";
131
			$result["status"]="false";
132
			
132
 
133
			#設置執行錯誤訊息
133
			#設置執行錯誤訊息
134
			$result["error"][]="\$conf變數須為陣列形態";
134
			$result["error"][]="\$conf變數須為陣列形態";
135
 
135
 
136
			#如果傳入的參數為 null
136
			#如果傳入的參數為 null
137
			if($conf==null){
137
			if($conf==null){
138
				
138
 
139
				#設置執行錯誤訊息
139
				#設置執行錯誤訊息
140
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
140
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
141
				
141
 
142
				}#if end
142
				}#if end
143
 
143
 
144
			#回傳結果
144
			#回傳結果
145
			return $result;
145
			return $result;
146
			
146
 
147
			}#if end
147
			}#if end
148
		
148
 
149
		#檢查參數
149
		#檢查參數
150
		#函式說明:
150
		#函式說明:
151
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
151
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
152
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
152
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
153
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
153
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
Line 159... Line 159...
159
		#必填寫的參數:
159
		#必填寫的參數:
160
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
160
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
161
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
161
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
162
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
162
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
163
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("input");
163
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("input");
164
		#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double"); 
164
		#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double");
165
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string");
165
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string");
166
		#$conf["variableCheck::checkArguments"]["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
166
		#$conf["variableCheck::checkArguments"]["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
167
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
167
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
168
		#可以省略的參數:
168
		#可以省略的參數:
169
		#$conf["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。
169
		#$conf["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。
170
		$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
170
		$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
171
		#$conf["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
171
		#$conf["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
172
		#$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("mimeType","compressType","delFile");
172
		#$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("mimeType","compressType","delFile");
173
		#$conf["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
173
		#$conf["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double");
174
		#$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string","string","string");
174
		#$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string","string","string");
175
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,「null」代表不指定,若預設值是必填參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
175
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,「null」代表不指定,若預設值是必填參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
176
		#$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array("null","base64","false");
176
		#$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array("null","base64","false");
177
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
177
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
178
		#$conf["arrayCountEqualCheck"][]=array();
178
		#$conf["arrayCountEqualCheck"][]=array();
179
		$checkResult=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
179
		$checkResult=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
180
		unset($conf["variableCheck::checkArguments"]);
180
		unset($conf["variableCheck::checkArguments"]);
181
		
181
 
182
		#如果檢查參數失敗
182
		#如果檢查參數失敗
183
		if($checkResult["status"]=="false"){
183
		if($checkResult["status"]=="false"){
184
			
184
 
185
			#設置執行失敗
185
			#設置執行失敗
186
			$result["status"]="false";
186
			$result["status"]="false";
187
			
187
 
188
			#設置錯誤訊息
188
			#設置錯誤訊息
189
			$result["error"]=$checkResult;
189
			$result["error"]=$checkResult;
190
			
190
 
191
			#回傳結果
191
			#回傳結果
192
			return $result;
192
			return $result;
193
			
193
 
194
			}#if end
194
			}#if end
195
			
195
 
196
		#如果檢查參數不通過
196
		#如果檢查參數不通過
197
		if($checkResult["passed"]=="false"){
197
		if($checkResult["passed"]=="false"){
198
			
198
 
199
			#設置執行失敗
199
			#設置執行失敗
200
			$result["status"]="false";
200
			$result["status"]="false";
201
			
201
 
202
			#設置錯誤訊息
202
			#設置錯誤訊息
203
			$result["error"]=$checkResult;
203
			$result["error"]=$checkResult;
204
			
204
 
205
			#回傳結果
205
			#回傳結果
206
			return $result;
206
			return $result;
207
			
207
 
208
			}#if end
208
			}#if end
209
	
209
 
210
		#設置執行正常
210
		#設置執行正常
211
		$result["status"]="true";
211
		$result["status"]="true";
212
	
212
 
213
		#設置 base64UrlEncode 字串
213
		#設置 base64UrlEncode 字串
214
		$result["content"]=str_replace('=', '', strtr(base64_encode($conf["input"]), '+/', '-_'));
214
		$result["content"]=str_replace('=', '', strtr(base64_encode($conf["input"]), '+/', '-_'));
215
	
215
 
216
		#回傳結果
216
		#回傳結果
217
		return $result;
217
		return $result;
218
	
218
 
219
		}#funcion base64UrlEncode end
219
		}#funcion base64UrlEncode end
220
		
220
 
221
	/*
221
	/*
222
	#函式說明:
222
	#函式說明:
223
	#base64UrlEncode https://jwt.io/ 中base64UrlEncode解码实现
223
	#base64UrlEncode https://jwt.io/ 中base64UrlEncode解码实现
224
	#回傳結果:
224
	#回傳結果:
225
	#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
225
	#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
Line 235... Line 235...
235
	#https://zhuanlan.zhihu.com/p/94747540
235
	#https://zhuanlan.zhihu.com/p/94747540
236
	#備註:
236
	#備註:
237
	#無.
237
	#無.
238
	*/
238
	*/
239
	public static function base64UrlDecode(&$conf){
239
	public static function base64UrlDecode(&$conf){
240
	
240
 
241
		#初始化要回傳的內容
241
		#初始化要回傳的內容
242
		$result=array();
242
		$result=array();
243
		
243
 
244
		#取得當前執行的函數名稱
244
		#取得當前執行的函數名稱
245
		$result["function"]=__FUNCTION__;
245
		$result["function"]=__FUNCTION__;
246
		
246
 
247
		#初始化要回傳的語法
247
		#初始化要回傳的語法
248
		$result["content"]="";
248
		$result["content"]="";
249
		
249
 
250
		#如果 $conf 不為陣列
250
		#如果 $conf 不為陣列
251
		if(gettype($conf)!="array"){
251
		if(gettype($conf)!="array"){
252
			
252
 
253
			#設置執行失敗
253
			#設置執行失敗
254
			$result["status"]="false";
254
			$result["status"]="false";
255
			
255
 
256
			#設置執行錯誤訊息
256
			#設置執行錯誤訊息
257
			$result["error"][]="\$conf變數須為陣列形態";
257
			$result["error"][]="\$conf變數須為陣列形態";
258
 
258
 
259
			#如果傳入的參數為 null
259
			#如果傳入的參數為 null
260
			if($conf==null){
260
			if($conf==null){
261
				
261
 
262
				#設置執行錯誤訊息
262
				#設置執行錯誤訊息
263
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
263
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
264
				
264
 
265
				}#if end
265
				}#if end
266
 
266
 
267
			#回傳結果
267
			#回傳結果
268
			return $result;
268
			return $result;
269
			
269
 
270
			}#if end
270
			}#if end
271
		
271
 
272
		#檢查參數
272
		#檢查參數
273
		#函式說明:
273
		#函式說明:
274
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
274
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
275
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
275
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
276
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
276
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
Line 282... Line 282...
282
		#必填寫的參數:
282
		#必填寫的參數:
283
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
283
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
284
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
284
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
285
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
285
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
286
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("input");
286
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("input");
287
		#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double"); 
287
		#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double");
288
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string");
288
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string");
289
		#$conf["variableCheck::checkArguments"]["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
289
		#$conf["variableCheck::checkArguments"]["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
290
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
290
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
291
		#可以省略的參數:
291
		#可以省略的參數:
292
		#$conf["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。
292
		#$conf["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。
293
		$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
293
		$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
294
		#$conf["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
294
		#$conf["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
295
		#$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("mimeType","compressType","delFile");
295
		#$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("mimeType","compressType","delFile");
296
		#$conf["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
296
		#$conf["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double");
297
		#$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string","string","string");
297
		#$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string","string","string");
298
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,「null」代表不指定,若預設值是必填參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
298
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,「null」代表不指定,若預設值是必填參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
299
		#$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array("null","base64","false");
299
		#$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array("null","base64","false");
300
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
300
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
301
		#$conf["arrayCountEqualCheck"][]=array();
301
		#$conf["arrayCountEqualCheck"][]=array();
302
		$checkResult=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
302
		$checkResult=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
303
		unset($conf["variableCheck::checkArguments"]);
303
		unset($conf["variableCheck::checkArguments"]);
304
		
304
 
305
		#如果檢查參數失敗
305
		#如果檢查參數失敗
306
		if($checkResult["status"]=="false"){
306
		if($checkResult["status"]=="false"){
307
			
307
 
308
			#設置執行失敗
308
			#設置執行失敗
309
			$result["status"]="false";
309
			$result["status"]="false";
310
			
310
 
311
			#設置錯誤訊息
311
			#設置錯誤訊息
312
			$result["error"]=$checkResult;
312
			$result["error"]=$checkResult;
313
			
313
 
314
			#回傳結果
314
			#回傳結果
315
			return $result;
315
			return $result;
316
			
316
 
317
			}#if end
317
			}#if end
318
			
318
 
319
		#如果檢查參數不通過
319
		#如果檢查參數不通過
320
		if($checkResult["passed"]=="false"){
320
		if($checkResult["passed"]=="false"){
321
			
321
 
322
			#設置執行失敗
322
			#設置執行失敗
323
			$result["status"]="false";
323
			$result["status"]="false";
324
			
324
 
325
			#設置錯誤訊息
325
			#設置錯誤訊息
326
			$result["error"]=$checkResult;
326
			$result["error"]=$checkResult;
327
			
327
 
328
			#回傳結果
328
			#回傳結果
329
			return $result;
329
			return $result;
330
			
330
 
331
			}#if end
331
			}#if end
332
	
332
 
333
		$remainder = strlen($conf["input"]) % 4;
333
		$remainder = strlen($conf["input"]) % 4;
334
		if($remainder){
334
		if($remainder){
335
			
335
 
336
			$addlen = 4 - $remainder;
336
			$addlen = 4 - $remainder;
337
			$conf["input"] .= str_repeat('=', $addlen);
337
			$conf["input"] .= str_repeat('=', $addlen);
338
		
338
 
339
			}#if end
339
			}#if end
340
			
340
 
341
		#設置執行正常
341
		#設置執行正常
342
		$result["status"]="true";	
342
		$result["status"]="true";
343
			
343
 
344
		#設置 base64UrlDecode 的結果.	
344
		#設置 base64UrlDecode 的結果.
345
		$result["content"]=base64_decode(strtr($conf["input"], '-_', '+/'));
345
		$result["content"]=base64_decode(strtr($conf["input"], '-_', '+/'));
346
	
346
 
347
		#回傳結果
347
		#回傳結果
348
		return $result;
348
		return $result;
349
	
349
 
350
		}#function base64UrlDecode end
350
		}#function base64UrlDecode end
351
		
351
 
352
	/*
352
	/*
353
	#函式說明:
353
	#函式說明:
354
	#產生 HMACSHA256签名  https://jwt.io/ 中HMACSHA256签名实现
354
	#產生 HMACSHA256签名  https://jwt.io/ 中HMACSHA256签名实现
355
	#回傳結果:
355
	#回傳結果:
356
	#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
356
	#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
Line 369... Line 369...
369
	#https://www.php.net/manual/en/function.hash-hmac.php
369
	#https://www.php.net/manual/en/function.hash-hmac.php
370
	#備註:
370
	#備註:
371
	#無.
371
	#無.
372
	*/
372
	*/
373
	public static function signature(&$conf){
373
	public static function signature(&$conf){
374
	
374
 
375
		#初始化要回傳的內容
375
		#初始化要回傳的內容
376
		$result=array();
376
		$result=array();
377
		
377
 
378
		#取得當前執行的函數名稱
378
		#取得當前執行的函數名稱
379
		$result["function"]=__FUNCTION__;
379
		$result["function"]=__FUNCTION__;
380
		
380
 
381
		#初始化要回傳的語法
381
		#初始化要回傳的語法
382
		$result["content"]="";
382
		$result["content"]="";
383
		
383
 
384
		#如果 $conf 不為陣列
384
		#如果 $conf 不為陣列
385
		if(gettype($conf)!="array"){
385
		if(gettype($conf)!="array"){
386
			
386
 
387
			#設置執行失敗
387
			#設置執行失敗
388
			$result["status"]="false";
388
			$result["status"]="false";
389
			
389
 
390
			#設置執行錯誤訊息
390
			#設置執行錯誤訊息
391
			$result["error"][]="\$conf變數須為陣列形態";
391
			$result["error"][]="\$conf變數須為陣列形態";
392
 
392
 
393
			#如果傳入的參數為 null
393
			#如果傳入的參數為 null
394
			if($conf==null){
394
			if($conf==null){
395
				
395
 
396
				#設置執行錯誤訊息
396
				#設置執行錯誤訊息
397
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
397
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
398
				
398
 
399
				}#if end
399
				}#if end
400
 
400
 
401
			#回傳結果
401
			#回傳結果
402
			return $result;
402
			return $result;
403
			
403
 
404
			}#if end
404
			}#if end
405
		
405
 
406
		#檢查參數
406
		#檢查參數
407
		#函式說明:
407
		#函式說明:
408
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
408
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
409
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
409
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
410
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
410
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
Line 416... Line 416...
416
		#必填寫的參數:
416
		#必填寫的參數:
417
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
417
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
418
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
418
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
419
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
419
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
420
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("input","key");
420
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("input","key");
421
		#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double"); 
421
		#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double");
422
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string","string");
422
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string","string");
423
		#$conf["variableCheck::checkArguments"]["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
423
		#$conf["variableCheck::checkArguments"]["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
424
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
424
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
425
		#可以省略的參數:
425
		#可以省略的參數:
426
		#$conf["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。
426
		#$conf["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。
427
		$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
427
		$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
428
		#$conf["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
428
		#$conf["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
429
		#$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("mimeType","compressType","delFile");
429
		#$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("mimeType","compressType","delFile");
430
		#$conf["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
430
		#$conf["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double");
431
		#$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string","string","string");
431
		#$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string","string","string");
432
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,「null」代表不指定,若預設值是必填參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
432
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,「null」代表不指定,若預設值是必填參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
433
		#$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array("null","base64","false");
433
		#$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array("null","base64","false");
434
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
434
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
435
		#$conf["arrayCountEqualCheck"][]=array();
435
		#$conf["arrayCountEqualCheck"][]=array();
436
		$checkResult=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
436
		$checkResult=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
437
		unset($conf["variableCheck::checkArguments"]);
437
		unset($conf["variableCheck::checkArguments"]);
438
		
438
 
439
		#如果檢查參數失敗
439
		#如果檢查參數失敗
440
		if($checkResult["status"]=="false"){
440
		if($checkResult["status"]=="false"){
441
			
441
 
442
			#設置執行失敗
442
			#設置執行失敗
443
			$result["status"]="false";
443
			$result["status"]="false";
444
			
444
 
445
			#設置錯誤訊息
445
			#設置錯誤訊息
446
			$result["error"]=$checkResult;
446
			$result["error"]=$checkResult;
447
			
447
 
448
			#回傳結果
448
			#回傳結果
449
			return $result;
449
			return $result;
450
			
450
 
451
			}#if end
451
			}#if end
452
			
452
 
453
		#如果檢查參數不通過
453
		#如果檢查參數不通過
454
		if($checkResult["passed"]=="false"){
454
		if($checkResult["passed"]=="false"){
455
			
455
 
456
			#設置執行失敗
456
			#設置執行失敗
457
			$result["status"]="false";
457
			$result["status"]="false";
458
			
458
 
459
			#設置錯誤訊息
459
			#設置錯誤訊息
460
			$result["error"]=$checkResult;
460
			$result["error"]=$checkResult;
461
			
461
 
462
			#回傳結果
462
			#回傳結果
463
			return $result;
463
			return $result;
464
			
464
 
465
			}#if end
465
			}#if end
466
		
466
 
467
		#函式說明:
467
		#函式說明:
468
		#base64UrlEncode  https://jwt.io/ 中base64UrlEncode编码实现.
468
		#base64UrlEncode  https://jwt.io/ 中base64UrlEncode编码实现.
469
		#回傳結果:
469
		#回傳結果:
470
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
470
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
471
		#$result["error"],錯誤訊息陣列
471
		#$result["error"],錯誤訊息陣列
472
		#$result["function"],當前函數執行的名稱
472
		#$result["function"],當前函數執行的名稱
473
		#$result["content"],base64UrlEncode编码後的內容。	
473
		#$result["content"],base64UrlEncode编码後的內容。
474
		#必填參數:
474
		#必填參數:
475
		#$conf["input"],字串,需要編碼的字串.
475
		#$conf["input"],字串,需要編碼的字串.
476
		$conf["jwt::base64UrlEncode"]["input"]=hash_hmac("sha256", $conf["input"], $conf["key"],true);
476
		$conf["jwt::base64UrlEncode"]["input"]=hash_hmac("sha256", $conf["input"], $conf["key"],true);
477
		#可省略參數:
477
		#可省略參數:
478
		#無
478
		#無
Line 480... Line 480...
480
		#https://zhuanlan.zhihu.com/p/94747540
480
		#https://zhuanlan.zhihu.com/p/94747540
481
		#備註:
481
		#備註:
482
		#無.
482
		#無.
483
		$base64UrlEncode=jwt::base64UrlEncode($conf["jwt::base64UrlEncode"]);
483
		$base64UrlEncode=jwt::base64UrlEncode($conf["jwt::base64UrlEncode"]);
484
		unset($conf["jwt::base64UrlEncode"]);
484
		unset($conf["jwt::base64UrlEncode"]);
485
		
485
 
486
		#如果檢查參數失敗
486
		#如果檢查參數失敗
487
		if($base64UrlEncode["status"]=="false"){
487
		if($base64UrlEncode["status"]=="false"){
488
			
488
 
489
			#設置執行失敗
489
			#設置執行失敗
490
			$result["status"]="false";
490
			$result["status"]="false";
491
			
491
 
492
			#設置錯誤訊息
492
			#設置錯誤訊息
493
			$result["error"]=$base64UrlEncode;
493
			$result["error"]=$base64UrlEncode;
494
			
494
 
495
			#回傳結果
495
			#回傳結果
496
			return $result;
496
			return $result;
497
			
497
 
498
			}#if end
498
			}#if end
499
			
499
 
500
		#取得加密後的內容
500
		#取得加密後的內容
501
		$result["content"]=$base64UrlEncode["content"];
501
		$result["content"]=$base64UrlEncode["content"];
502
	
502
 
503
		#設置執行正常
503
		#設置執行正常
504
		$result["status"]="true";
504
		$result["status"]="true";
505
	
505
 
506
		#回傳結果
506
		#回傳結果
507
		return $result;
507
		return $result;
508
	
508
 
509
		}#function signature end
509
		}#function signature end
510
		
510
 
511
	/*
511
	/*
512
	#函式說明:
512
	#函式說明:
513
	#建立 JWT 格式的內容
513
	#建立 JWT 格式的內容
514
	#回傳結果:
514
	#回傳結果:
515
	#$result["status"],狀態,"true"代表正常;"false"代表不正常.
515
	#$result["status"],狀態,"true"代表正常;"false"代表不正常.
Line 531... Line 531...
531
	#無.
531
	#無.
532
	#備註:
532
	#備註:
533
	#無.
533
	#無.
534
	*/
534
	*/
535
	public static function makeJWT(&$conf){
535
	public static function makeJWT(&$conf){
536
	
536
 
537
		#函式說明:
537
		#函式說明:
538
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
538
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
539
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
539
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
540
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
540
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
541
		#$result["function"],當前執行的函式名稱.
541
		#$result["function"],當前執行的函式名稱.
Line 580... Line 580...
580
		#$conf["arrayCountEqualCheck"][]=array();
580
		#$conf["arrayCountEqualCheck"][]=array();
581
		#參考資料來源:
581
		#參考資料來源:
582
		#array_keys=>http://php.net/manual/en/function.array-keys.php
582
		#array_keys=>http://php.net/manual/en/function.array-keys.php
583
		$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
583
		$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
584
		unset($conf["variableCheck::checkArguments"]);
584
		unset($conf["variableCheck::checkArguments"]);
585
		
585
 
586
		#如果檢查失敗
586
		#如果檢查失敗
587
		if($checkArguments["status"]==="false")
587
		if($checkArguments["status"]==="false")
588
		{
588
		{
589
			#設置執行失敗
589
			#設置執行失敗
590
			$result["status"]="false";
590
			$result["status"]="false";
591
		
591
 
592
			#設置錯誤訊息
592
			#設置錯誤訊息
593
			$result["error"]=$checkArguments;
593
			$result["error"]=$checkArguments;
594
		
594
 
595
			#回傳結果
595
			#回傳結果
596
			return $result;
596
			return $result;
597
		
597
 
598
		}#if end
598
		}#if end
599
		
599
 
600
		#如果檢查不通過
600
		#如果檢查不通過
601
		if($checkArguments["passed"]==="false")
601
		if($checkArguments["passed"]==="false")
602
		{
602
		{
603
			#設置執行失敗
603
			#設置執行失敗
604
			$result["status"]="false";
604
			$result["status"]="false";
605
		
605
 
606
			#設置錯誤訊息
606
			#設置錯誤訊息
607
			$result["error"]=$checkArguments;
607
			$result["error"]=$checkArguments;
608
		
608
 
609
			#回傳結果
609
			#回傳結果
610
			return $result;
610
			return $result;
611
		
611
 
612
		}#if end
612
		}#if end
613
	
613
 
614
		#建立 header
614
		#建立 header
615
		$head=array();		
615
		$head=array();
616
		$head["alg"]="HS256";
616
		$head["alg"]="HS256";
617
		$head["typ"]="JWT";
617
		$head["typ"]="JWT";
618
		$head=json_encode($head);		
618
		$head=json_encode($head);
619
		#函式說明:
619
		#函式說明:
620
		#base64UrlEncode  https://jwt.io/ 中base64UrlEncode编码实现.
620
		#base64UrlEncode  https://jwt.io/ 中base64UrlEncode编码实现.
621
		#回傳結果:
621
		#回傳結果:
622
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
622
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
623
		#$result["error"],錯誤訊息陣列
623
		#$result["error"],錯誤訊息陣列
624
		#$result["function"],當前函數執行的名稱
624
		#$result["function"],當前函數執行的名稱
625
		#$result["content"],base64UrlEncode编码後的內容。	
625
		#$result["content"],base64UrlEncode编码後的內容。
626
		#必填參數:
626
		#必填參數:
627
		#$conf["input"],字串,需要編碼的字串.
627
		#$conf["input"],字串,需要編碼的字串.
628
		$conf["jwt::base64UrlEncode"]["input"]=$head;
628
		$conf["jwt::base64UrlEncode"]["input"]=$head;
629
		#可省略參數:
629
		#可省略參數:
630
		#無
630
		#無
Line 632... Line 632...
632
		#https://zhuanlan.zhihu.com/p/94747540
632
		#https://zhuanlan.zhihu.com/p/94747540
633
		#備註:
633
		#備註:
634
		#無.
634
		#無.
635
		$base64UrlEncode=jwt::base64UrlEncode($conf["jwt::base64UrlEncode"]);
635
		$base64UrlEncode=jwt::base64UrlEncode($conf["jwt::base64UrlEncode"]);
636
		unset($conf["jwt::base64UrlEncode"]);
636
		unset($conf["jwt::base64UrlEncode"]);
637
		
637
 
638
		#如果加密失敗
638
		#如果加密失敗
639
		if($base64UrlEncode["status"]==="false")
639
		if($base64UrlEncode["status"]==="false")
640
		{
640
		{
641
			#設置執行失敗
641
			#設置執行失敗
642
			$result["status"]="false";
642
			$result["status"]="false";
643
		
643
 
644
			#設置錯誤訊息
644
			#設置錯誤訊息
645
			$result["error"]=$base64UrlEncode;
645
			$result["error"]=$base64UrlEncode;
646
		
646
 
647
			#回傳結果
647
			#回傳結果
648
			return $result;
648
			return $result;
649
		
649
 
650
		}#if end
650
		}#if end
651
		
651
 
652
		#取得加密後的內容
652
		#取得加密後的內容
653
		$head=$base64UrlEncode["content"];
653
		$head=$base64UrlEncode["content"];
654
		
654
 
655
		#初始化 body
655
		#初始化 body
656
		$body=array();
656
		$body=array();
657
		
657
 
658
		#設置到期時間
658
		#設置到期時間
659
		$body["exp"]=$conf["exp"];
659
		$body["exp"]=$conf["exp"];
660
		
660
 
661
		#設置簽章時間
661
		#設置簽章時間
662
		$body["iat"]=$conf["iat"];
662
		$body["iat"]=$conf["iat"];
663
		
663
 
664
		#如果有 $conf["otherBodies"]
664
		#如果有 $conf["otherBodies"]
665
		if(isset($conf["otherBodies"])){
665
		if(isset($conf["otherBodies"])){
666
		
666
 
667
			#針對每個 body
667
			#針對每個 body
668
			foreach($conf["otherBodies"] as $key=>$value){
668
			foreach($conf["otherBodies"] as $key=>$value){
669
			
669
 
670
				#加上 body
670
				#加上 body
671
				$body[$key]=$value;
671
				$body[$key]=$value;
672
			
672
 
673
				}#foreach end
673
				}#foreach end
674
		
674
 
675
			}#if end
675
			}#if end
676
		
676
 
677
		$body=json_encode($body);
677
		$body=json_encode($body);
678
		#函式說明:
678
		#函式說明:
679
		#base64UrlEncode  https://jwt.io/ 中base64UrlEncode编码实现.
679
		#base64UrlEncode  https://jwt.io/ 中base64UrlEncode编码实现.
680
		#回傳結果:
680
		#回傳結果:
681
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
681
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
682
		#$result["error"],錯誤訊息陣列
682
		#$result["error"],錯誤訊息陣列
683
		#$result["function"],當前函數執行的名稱
683
		#$result["function"],當前函數執行的名稱
684
		#$result["content"],base64UrlEncode编码後的內容。	
684
		#$result["content"],base64UrlEncode编码後的內容。
685
		#必填參數:
685
		#必填參數:
686
		#$conf["input"],字串,需要編碼的字串.
686
		#$conf["input"],字串,需要編碼的字串.
687
		$conf["jwt::base64UrlEncode"]["input"]=$body;
687
		$conf["jwt::base64UrlEncode"]["input"]=$body;
688
		#可省略參數:
688
		#可省略參數:
689
		#無
689
		#無
Line 691... Line 691...
691
		#https://zhuanlan.zhihu.com/p/94747540
691
		#https://zhuanlan.zhihu.com/p/94747540
692
		#備註:
692
		#備註:
693
		#無.
693
		#無.
694
		$base64UrlEncode=jwt::base64UrlEncode($conf["jwt::base64UrlEncode"]);
694
		$base64UrlEncode=jwt::base64UrlEncode($conf["jwt::base64UrlEncode"]);
695
		unset($conf["jwt::base64UrlEncode"]);
695
		unset($conf["jwt::base64UrlEncode"]);
696
		
696
 
697
		#如果加密失敗
697
		#如果加密失敗
698
		if($base64UrlEncode["status"]==="false")
698
		if($base64UrlEncode["status"]==="false")
699
		{
699
		{
700
			#設置執行失敗
700
			#設置執行失敗
701
			$result["status"]="false";
701
			$result["status"]="false";
702
		
702
 
703
			#設置錯誤訊息
703
			#設置錯誤訊息
704
			$result["error"]=$base64UrlEncode;
704
			$result["error"]=$base64UrlEncode;
705
		
705
 
706
			#回傳結果
706
			#回傳結果
707
			return $result;
707
			return $result;
708
		
708
 
709
		}#if end
709
		}#if end
710
		
710
 
711
		#取得加密後的內容
711
		#取得加密後的內容
712
		$body=$base64UrlEncode["content"];
712
		$body=$base64UrlEncode["content"];
713
		
713
 
714
		#產生簽章
714
		#產生簽章
715
		#函式說明:
715
		#函式說明:
716
		#產生 HMACSHA256签名  https://jwt.io/ 中HMACSHA256签名实现
716
		#產生 HMACSHA256签名  https://jwt.io/ 中HMACSHA256签名实现
717
		#回傳結果:
717
		#回傳結果:
718
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
718
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
Line 729... Line 729...
729
		#https://www.php.net/manual/en/function.hash-hmac.php
729
		#https://www.php.net/manual/en/function.hash-hmac.php
730
		#備註:
730
		#備註:
731
		#無.
731
		#無.
732
		$signature=jwt::signature($conf["jwt::signature"]);
732
		$signature=jwt::signature($conf["jwt::signature"]);
733
		unset($conf["jwt::signature"]);
733
		unset($conf["jwt::signature"]);
734
		
734
 
735
		#如果產生signature失敗
735
		#如果產生signature失敗
736
		if($signature["status"]==="false")
736
		if($signature["status"]==="false")
737
		{
737
		{
738
			#設置執行失敗
738
			#設置執行失敗
739
			$result["status"]="false";
739
			$result["status"]="false";
740
		
740
 
741
			#設置錯誤訊息
741
			#設置錯誤訊息
742
			$result["error"]=$signature;
742
			$result["error"]=$signature;
743
		
743
 
744
			#回傳結果
744
			#回傳結果
745
			return $result;
745
			return $result;
746
		
746
 
747
		}#if end
747
		}#if end
748
		
748
 
749
		#取得簽章
749
		#取得簽章
750
		$sig=$signature["content"];
750
		$sig=$signature["content"];
751
		
751
 
752
		#如果有要加密 
752
		#如果有要加密
753
		if($conf["base64encodeSig"]==="true"){
753
		if($conf["base64encodeSig"]==="true"){
754
		
754
 
755
			#函式說明:
755
			#函式說明:
756
			#base64UrlEncode  https://jwt.io/ 中base64UrlEncode编码实现.
756
			#base64UrlEncode  https://jwt.io/ 中base64UrlEncode编码实现.
757
			#回傳結果:
757
			#回傳結果:
758
			#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
758
			#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
759
			#$result["error"],錯誤訊息陣列
759
			#$result["error"],錯誤訊息陣列
760
			#$result["function"],當前函數執行的名稱
760
			#$result["function"],當前函數執行的名稱
761
			#$result["content"],base64UrlEncode编码後的內容。	
761
			#$result["content"],base64UrlEncode编码後的內容。
762
			#必填參數:
762
			#必填參數:
763
			#$conf["input"],字串,需要編碼的字串.
763
			#$conf["input"],字串,需要編碼的字串.
764
			$conf["jwt::base64UrlEncode"]["input"]=$sig;
764
			$conf["jwt::base64UrlEncode"]["input"]=$sig;
765
			#可省略參數:
765
			#可省略參數:
766
			#無
766
			#無
Line 768... Line 768...
768
			#https://zhuanlan.zhihu.com/p/94747540
768
			#https://zhuanlan.zhihu.com/p/94747540
769
			#備註:
769
			#備註:
770
			#無.
770
			#無.
771
			$base64UrlEncode=jwt::base64UrlEncode($conf["jwt::base64UrlEncode"]);
771
			$base64UrlEncode=jwt::base64UrlEncode($conf["jwt::base64UrlEncode"]);
772
			unset($conf["jwt::base64UrlEncode"]);
772
			unset($conf["jwt::base64UrlEncode"]);
773
			
773
 
774
			#如果加密失敗
774
			#如果加密失敗
775
			if($base64UrlEncode["status"]==="false")
775
			if($base64UrlEncode["status"]==="false")
776
			{
776
			{
777
				#設置執行失敗
777
				#設置執行失敗
778
				$result["status"]="false";
778
				$result["status"]="false";
779
			
779
 
780
				#設置錯誤訊息
780
				#設置錯誤訊息
781
				$result["error"]=$base64UrlEncode;
781
				$result["error"]=$base64UrlEncode;
782
			
782
 
783
				#回傳結果
783
				#回傳結果
784
				return $result;
784
				return $result;
785
			
785
 
786
			}#if end
786
			}#if end
787
			
787
 
788
			#取得加密後的sig
788
			#取得加密後的sig
789
			$sig=$base64UrlEncode["content"];
789
			$sig=$base64UrlEncode["content"];
790
		
790
 
791
			}#if end
791
			}#if end
792
				
792
 
793
		#回傳 JWT token
793
		#回傳 JWT token
794
		$result["content"]=$head.".".$body.".".$sig;
794
		$result["content"]=$head.".".$body.".".$sig;
795
					
795
 
796
		#設置執行正常
796
		#設置執行正常
797
		$result["status"]="true";				
797
		$result["status"]="true";
798
				
798
 
799
		#回傳結果
799
		#回傳結果
800
		return $result;		
800
		return $result;
801
					
801
 
802
		}#funcion makeJWT end
802
		}#funcion makeJWT end
803
		
803
 
804
	/*
804
	/*
805
	#函式說明:
805
	#函式說明:
806
	#檢查 JWT token 是否合法
806
	#檢查 JWT token 是否合法
807
	#回傳結果:
807
	#回傳結果:
808
	#$result["status"],"true"代表為正確得JWT token,反之"false"代表不正確得JWT token.
808
	#$result["status"],"true"代表為正確得JWT token,反之"false"代表不正確得JWT token.
Line 822... Line 822...
822
	#無.
822
	#無.
823
	#備註:
823
	#備註:
824
	#無.
824
	#無.
825
	*/
825
	*/
826
	public static function verifyJWT(&$conf){
826
	public static function verifyJWT(&$conf){
827
	
827
 
828
		#初始化要回傳的結果
828
		#初始化要回傳的結果
829
		$result=array();
829
		$result=array();
830
		
830
 
831
		#參數
831
		#參數
832
		$result["argu"]=$conf;
832
		$result["argu"]=$conf;
833
		
833
 
834
		#檢查參數
834
		#檢查參數
835
		#函式說明:
835
		#函式說明:
836
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
836
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
837
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
837
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
838
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
838
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
Line 878... Line 878...
878
		#$conf["arrayCountEqualCheck"][]=array();
878
		#$conf["arrayCountEqualCheck"][]=array();
879
		#參考資料來源:
879
		#參考資料來源:
880
		#array_keys=>http://php.net/manual/en/function.array-keys.php
880
		#array_keys=>http://php.net/manual/en/function.array-keys.php
881
		$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
881
		$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
882
		unset($conf["variableCheck::checkArguments"]);
882
		unset($conf["variableCheck::checkArguments"]);
883
		
883
 
884
		#如果檢查參數失敗
884
		#如果檢查參數失敗
885
		if($checkArguments["status"]==="false"){
885
		if($checkArguments["status"]==="false"){
886
		
886
 
887
			#設置執行失敗
887
			#設置執行失敗
888
			$result["status"]="false";
888
			$result["status"]="false";
889
		
889
 
890
			#設置錯誤訊息
890
			#設置錯誤訊息
891
			$result["error"]=$checkArguments;
891
			$result["error"]=$checkArguments;
892
		
892
 
893
			#回傳結果
893
			#回傳結果
894
			return $result;
894
			return $result;
895
		
895
 
896
			}#if end
896
			}#if end
897
		
897
 
898
		#如果檢查參數不通過
898
		#如果檢查參數不通過
899
		if($checkArguments["passed"]==="false"){
899
		if($checkArguments["passed"]==="false"){
900
		
900
 
901
			#設置執行失敗
901
			#設置執行失敗
902
			$result["status"]="false";
902
			$result["status"]="false";
903
		
903
 
904
			#設置錯誤訊息
904
			#設置錯誤訊息
905
			$result["error"]=$checkArguments;
905
			$result["error"]=$checkArguments;
906
		
906
 
907
			#回傳結果
907
			#回傳結果
908
			return $result;
908
			return $result;
909
		
909
 
910
			}#if end
910
			}#if end
911
		
911
 
912
		#取得 token
912
		#取得 token
913
		$token=$conf["token"];
913
		$token=$conf["token"];
914
		
914
 
915
		#取得 key
915
		#取得 key
916
		$key=$conf["key"];
916
		$key=$conf["key"];
917
	
917
 
918
		#檢查是否為 JWT token
918
		#檢查是否為 JWT token
919
		$isJWT=strpos($token,"Bearer ");
919
		$isJWT=strpos($token,"Bearer ");
920
		
920
 
921
		#如果是 JWT token
921
		#如果是 JWT token
922
		if($isJWT!==0){
922
		if($isJWT!==0){
923
		
923
 
924
			#debug
924
			#debug
925
			if($conf["debug"]==="true"){
925
			if($conf["debug"]==="true"){
926
			
926
 
927
				#設置錯誤訊息
927
				#設置錯誤訊息
928
				$result["error"][]="只允許 JWT token";
928
				$result["error"][]="只允許 JWT token";
929
			
929
 
930
				}#if end
930
				}#if end
931
		
931
 
932
			#設置檢查不通過
932
			#設置檢查不通過
933
			$result["status"]="false";
933
			$result["status"]="false";
934
		
934
 
935
			#只允許 JWT token
935
			#只允許 JWT token
936
			return $result;
936
			return $result;
937
		
937
 
938
			}#if end
938
			}#if end
939
				
939
 
940
		#剔除 "Bearer "
940
		#剔除 "Bearer "
941
		$token=substr($token,7);
941
		$token=substr($token,7);
942
		
942
 
943
		#涵式說明:
943
		#涵式說明:
944
		#將固定格式的字串分開,並回傳分開的結果。
944
		#將固定格式的字串分開,並回傳分開的結果。
945
		#回傳結果:
945
		#回傳結果:
946
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
946
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
947
		#$result["error"],錯誤訊息陣列
947
		#$result["error"],錯誤訊息陣列
Line 959... Line 959...
959
		#可省略參數:
959
		#可省略參數:
960
		#$conf["allowEmptyStr"],是否允許分割出來空字串,預設為"false"不允許;"true"代表允許.
960
		#$conf["allowEmptyStr"],是否允許分割出來空字串,預設為"false"不允許;"true"代表允許.
961
		$conf["stringProcess::spiltString"]["allowEmptyStr"]="false";
961
		$conf["stringProcess::spiltString"]["allowEmptyStr"]="false";
962
		$spiltString=stringProcess::spiltString($conf["stringProcess::spiltString"]);
962
		$spiltString=stringProcess::spiltString($conf["stringProcess::spiltString"]);
963
		unset($conf["stringProcess::spiltString"]);
963
		unset($conf["stringProcess::spiltString"]);
964
				
964
 
965
		#如果分割字串失敗
965
		#如果分割字串失敗
966
		if($spiltString["status"]==="false"){
966
		if($spiltString["status"]==="false"){
967
		
967
 
968
			#設置錯誤訊息
968
			#設置錯誤訊息
969
			$result["error"]=$spiltString;
969
			$result["error"]=$spiltString;
970
			
970
 
971
			#設置檢查不通過
971
			#設置檢查不通過
972
			$result["status"]="false";
972
			$result["status"]="false";
973
		
973
 
974
			#只允許 JWT token
974
			#只允許 JWT token
975
			return $result;
975
			return $result;
976
		
976
 
977
			}#if end
977
			}#if end
978
		
978
 
979
		#如果沒有解成3段
979
		#如果沒有解成3段
980
		if($spiltString["dataCounts"]!==3){
980
		if($spiltString["dataCounts"]!==3){
981
		
981
 
982
			#設置錯誤訊息
982
			#設置錯誤訊息
983
			$result["error"][]="JWT token 應該要透過 . 分成三段";
983
			$result["error"][]="JWT token 應該要透過 . 分成三段";
984
		
984
 
985
			#設置檢查不通過
985
			#設置檢查不通過
986
			$result["status"]="false";
986
			$result["status"]="false";
987
		
987
 
988
			#只允許 JWT token
988
			#只允許 JWT token
989
			return $result;
989
			return $result;
990
		
990
 
991
			}#if end
991
			}#if end
992
		
992
 
993
		#取得header
993
		#取得header
994
		$head=$spiltString["dataArray"][0];
994
		$head=$spiltString["dataArray"][0];
995
				
995
 
996
		#函式說明:
996
		#函式說明:
997
		#base64UrlEncode https://jwt.io/ 中base64UrlEncode解码实现
997
		#base64UrlEncode https://jwt.io/ 中base64UrlEncode解码实现
998
		#回傳結果:
998
		#回傳結果:
999
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
999
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
1000
		#$result["error"],錯誤訊息陣列.
1000
		#$result["error"],錯誤訊息陣列.
Line 1009... Line 1009...
1009
		#https://zhuanlan.zhihu.com/p/94747540
1009
		#https://zhuanlan.zhihu.com/p/94747540
1010
		#備註:
1010
		#備註:
1011
		#無.
1011
		#無.
1012
		$base64UrlDecode=jwt::base64UrlDecode($conf["jwt::base64UrlDecode"]);
1012
		$base64UrlDecode=jwt::base64UrlDecode($conf["jwt::base64UrlDecode"]);
1013
		unset($conf["jwt::base64UrlDecode"]);
1013
		unset($conf["jwt::base64UrlDecode"]);
1014
		
1014
 
1015
		#如果解密失敗失敗
1015
		#如果解密失敗失敗
1016
		if($base64UrlDecode["status"]==="false"){
1016
		if($base64UrlDecode["status"]==="false"){
1017
		
1017
 
1018
			#設置錯誤訊息
1018
			#設置錯誤訊息
1019
			$result["error"]=$base64UrlDecode;
1019
			$result["error"]=$base64UrlDecode;
1020
			
1020
 
1021
			#設置檢查不通過
1021
			#設置檢查不通過
1022
			$result["status"]="false";
1022
			$result["status"]="false";
1023
		
1023
 
1024
			#回傳結果
1024
			#回傳結果
1025
			return $result;
1025
			return $result;
1026
		
1026
 
1027
			}#if end
1027
			}#if end
1028
		
1028
 
1029
		#取得header物件
1029
		#取得header物件
1030
		$headObj=json_decode($base64UrlDecode["content"]);
1030
		$headObj=json_decode($base64UrlDecode["content"]);
1031
		
1031
 
1032
		#取得內文
1032
		#取得內文
1033
		$body=$spiltString["dataArray"][1];
1033
		$body=$spiltString["dataArray"][1];
1034
		
1034
 
1035
		#函式說明:
1035
		#函式說明:
1036
		#base64UrlEncode https://jwt.io/ 中base64UrlEncode解码实现
1036
		#base64UrlEncode https://jwt.io/ 中base64UrlEncode解码实现
1037
		#回傳結果:
1037
		#回傳結果:
1038
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
1038
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
1039
		#$result["error"],錯誤訊息陣列.
1039
		#$result["error"],錯誤訊息陣列.
Line 1048... Line 1048...
1048
		#https://zhuanlan.zhihu.com/p/94747540
1048
		#https://zhuanlan.zhihu.com/p/94747540
1049
		#備註:
1049
		#備註:
1050
		#無.
1050
		#無.
1051
		$base64UrlDecode=jwt::base64UrlDecode($conf["jwt::base64UrlDecode"]);
1051
		$base64UrlDecode=jwt::base64UrlDecode($conf["jwt::base64UrlDecode"]);
1052
		unset($conf["jwt::base64UrlDecode"]);
1052
		unset($conf["jwt::base64UrlDecode"]);
1053
		
1053
 
1054
		#如果解密失敗失敗
1054
		#如果解密失敗失敗
1055
		if($base64UrlDecode["status"]==="false"){
1055
		if($base64UrlDecode["status"]==="false"){
1056
		
1056
 
1057
			#設置錯誤訊息
1057
			#設置錯誤訊息
1058
			$result["error"]=$base64UrlDecode;
1058
			$result["error"]=$base64UrlDecode;
1059
			
1059
 
1060
			#設置檢查不通過
1060
			#設置檢查不通過
1061
			$result["status"]="false";
1061
			$result["status"]="false";
1062
		
1062
 
1063
			#回傳結果
1063
			#回傳結果
1064
			return $result;
1064
			return $result;
1065
		
1065
 
1066
			}#if end
1066
			}#if end
1067
		
1067
 
1068
		#取得body物件		
1068
		#取得body物件
1069
		$bodyObj=json_decode($base64UrlDecode["content"]);
1069
		$bodyObj=json_decode($base64UrlDecode["content"]);
1070
		
1070
 
1071
		#取得簽章
1071
		#取得簽章
1072
		$sign=$spiltString["dataArray"][2];
1072
		$sign=$spiltString["dataArray"][2];
1073
		
1073
 
1074
		#驗證簽章
1074
		#驗證簽章
1075
		#函式說明:
1075
		#函式說明:
1076
		#產生 HMACSHA256签名  https://jwt.io/ 中HMACSHA256签名实现
1076
		#產生 HMACSHA256签名  https://jwt.io/ 中HMACSHA256签名实现
1077
		#回傳結果:
1077
		#回傳結果:
1078
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
1078
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
Line 1089... Line 1089...
1089
		#https://www.php.net/manual/en/function.hash-hmac.php
1089
		#https://www.php.net/manual/en/function.hash-hmac.php
1090
		#備註:
1090
		#備註:
1091
		#無.
1091
		#無.
1092
		$signature=jwt::signature($conf["jwt::signature"]);
1092
		$signature=jwt::signature($conf["jwt::signature"]);
1093
		unset($conf["jwt::signature"]);
1093
		unset($conf["jwt::signature"]);
1094
		
1094
 
1095
		#如果產生signature失敗
1095
		#如果產生signature失敗
1096
		if($signature["status"]==="false"){
1096
		if($signature["status"]==="false"){
1097
		
1097
 
1098
			#設置錯誤訊息
1098
			#設置錯誤訊息
1099
			$result["error"]=$signature;
1099
			$result["error"]=$signature;
1100
			
1100
 
1101
			#設置檢查不通過
1101
			#設置檢查不通過
1102
			$result["status"]="false";
1102
			$result["status"]="false";
1103
		
1103
 
1104
			#回傳結果
1104
			#回傳結果
1105
			return $result;
1105
			return $result;
1106
		
1106
 
1107
			}#if end		
1107
			}#if end
1108
		
1108
 
1109
		#取得簽章
1109
		#取得簽章
1110
		$expectedSign=$signature["content"];
1110
		$expectedSign=$signature["content"];
1111
				
1111
 
1112
		#簽章要base64Url加密
1112
		#簽章要base64Url加密
1113
		#函式說明:
1113
		#函式說明:
1114
		#base64UrlEncode  https://jwt.io/ 中base64UrlEncode编码实现.
1114
		#base64UrlEncode  https://jwt.io/ 中base64UrlEncode编码实现.
1115
		#回傳結果:
1115
		#回傳結果:
1116
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
1116
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
1117
		#$result["error"],錯誤訊息陣列
1117
		#$result["error"],錯誤訊息陣列
1118
		#$result["function"],當前函數執行的名稱
1118
		#$result["function"],當前函數執行的名稱
1119
		#$result["content"],base64UrlEncode编码後的內容。	
1119
		#$result["content"],base64UrlEncode编码後的內容。
1120
		#必填參數:
1120
		#必填參數:
1121
		#$conf["input"],字串,需要編碼的字串.
1121
		#$conf["input"],字串,需要編碼的字串.
1122
		$conf["jwt::base64UrlEncode"]["input"]=$expectedSign;
1122
		$conf["jwt::base64UrlEncode"]["input"]=$expectedSign;
1123
		#可省略參數:
1123
		#可省略參數:
1124
		#無
1124
		#無
1125
		#參考資料:
1125
		#參考資料:
1126
		#https://zhuanlan.zhihu.com/p/94747540
1126
		#https://zhuanlan.zhihu.com/p/94747540
1127
		#備註:
1127
		#備註:
1128
		#無.
1128
		#無.
1129
		$base64UrlEncode=jwt::base64UrlEncode($conf["jwt::base64UrlEncode"]);
1129
		$base64UrlEncode=jwt::base64UrlEncode($conf["jwt::base64UrlEncode"]);
1130
		
1130
 
1131
		#如加密失敗
1131
		#如加密失敗
1132
		if($base64UrlEncode["status"]==="false"){
1132
		if($base64UrlEncode["status"]==="false"){
1133
		
1133
 
1134
			#設置錯誤訊息
1134
			#設置錯誤訊息
1135
			$result["error"]=$base64UrlEncode;
1135
			$result["error"]=$base64UrlEncode;
1136
			
1136
 
1137
			#設置檢查不通過
1137
			#設置檢查不通過
1138
			$result["status"]="false";
1138
			$result["status"]="false";
1139
		
1139
 
1140
			#回傳結果
1140
			#回傳結果
1141
			return $result;
1141
			return $result;
1142
		
1142
 
1143
			}#if end	
1143
			}#if end
1144
		
1144
 
1145
		#取得加密後的簽章
1145
		#取得加密後的簽章
1146
		$expectedSign=$base64UrlEncode["content"];		
1146
		$expectedSign=$base64UrlEncode["content"];
1147
				
1147
 
1148
		#預設未通過驗證
1148
		#預設未通過驗證
1149
		$passed=false;
1149
		$passed=false;
1150
		
1150
 
1151
		#如果簽證一致
1151
		#如果簽證一致
1152
		if($sign===$expectedSign){
1152
		if($sign===$expectedSign){
1153
		
1153
 
1154
			#設置通過驗證
1154
			#設置通過驗證
1155
			$passed=true;
1155
			$passed=true;
1156
		
1156
 
1157
			}#if end
1157
			}#if end
1158
		
1158
 
1159
		#資料來源可信
1159
		#資料來源可信
1160
				
1160
 
1161
		#預設有限期為現今時間加一天
1161
		#預設有限期為現今時間加一天
1162
		$exp=time()+86400;
1162
		$exp=time()+86400;
1163
		
1163
 
1164
		#如果有有效期限
1164
		#如果有有效期限
1165
		if(isset($bodyObj->exp)){
1165
		if(isset($bodyObj->exp)){
1166
		
1166
 
1167
			#有效期限
1167
			#有效期限
1168
			$exp=$bodyObj->exp;
1168
			$exp=$bodyObj->exp;
1169
		
1169
 
1170
			}#if end
1170
			}#if end
1171
		
1171
 
1172
		#預設發證時間為現在.
1172
		#預設發證時間為現在.
1173
		$iat=time();
1173
		$iat=time();
1174
		
1174
 
1175
		#如果有發證的時間
1175
		#如果有發證的時間
1176
		if(isset($bodyObj->iat)){
1176
		if(isset($bodyObj->iat)){
1177
		
1177
 
1178
			#發證的時間
1178
			#發證的時間
1179
			$iat=$bodyObj->iat;
1179
			$iat=$bodyObj->iat;
1180
		
1180
 
1181
			}#if end
1181
			}#if end
1182
				
1182
 
1183
		#如果現在時間大於過期時間
1183
		#如果現在時間大於過期時間
1184
		if(time()>$exp){
1184
		if(time()>$exp){
1185
		
1185
 
1186
			#debug
1186
			#debug
1187
			if($conf["debug"]==="true"){
1187
			if($conf["debug"]==="true"){
1188
			
1188
 
1189
				#設置錯誤訊息
1189
				#設置錯誤訊息
1190
				$result["error"][]="有效期限過期";
1190
				$result["error"][]="有效期限過期";
1191
			
1191
 
1192
				}#if end
1192
				}#if end
1193
					
1193
 
1194
			#設置檢查不通過
1194
			#設置檢查不通過
1195
			$result["status"]="false";
1195
			$result["status"]="false";
1196
		
1196
 
1197
			#只允許 JWT token
1197
			#只允許 JWT token
1198
			return $result;
1198
			return $result;
1199
					
1199
 
1200
			}#if end
1200
			}#if end
1201
		
1201
 
1202
		#如果過期
1202
		#如果過期
1203
		if($exp<$iat){
1203
		if($exp<$iat){
1204
		
1204
 
1205
			#debug
1205
			#debug
1206
			if($conf["debug"]==="true"){
1206
			if($conf["debug"]==="true"){
1207
			
1207
 
1208
				#設置錯誤訊息
1208
				#設置錯誤訊息
1209
				$result["error"][]="簽章過期";
1209
				$result["error"][]="簽章過期";
1210
			
1210
 
1211
				}#if end
1211
				}#if end
1212
					
1212
 
1213
			#設置檢查不通過
1213
			#設置檢查不通過
1214
			$result["status"]="false";
1214
			$result["status"]="false";
1215
		
1215
 
1216
			#只允許 JWT token
1216
			#只允許 JWT token
1217
			return $result;
1217
			return $result;
1218
		
1218
 
1219
			}#if end
1219
			}#if end
1220
		
1220
 
1221
		#設置通過驗證
1221
		#設置通過驗證
1222
		$result["status"]="true";
1222
		$result["status"]="true";
1223
		
1223
 
1224
		#設置要回傳的內容
1224
		#設置要回傳的內容
1225
		$result["content"]=array("head"=>$headObj,"body"=>$bodyObj);
1225
		$result["content"]=array("head"=>$headObj,"body"=>$bodyObj);
1226
		
1226
 
1227
		#回傳結果
1227
		#回傳結果
1228
		return $result;
1228
		return $result;
1229
	
1229
 
1230
		}#function verifyJWT end
1230
		}#function verifyJWT end
1231
 
1231
 
1232
	}#class jwt end
1232
	}#class jwt end
1233
 
1233
 
1234
?>
1234
?>