Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in
Toggle navigation
M
MultipleSourceSecurity
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
周宗顺
MultipleSourceSecurity
Commits
36767de3
Commit
36767de3
authored
Oct 30, 2025
by
Allen Chen
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
commit
parent
e48f183c
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
182 additions
and
21 deletions
+182
-21
pom.xml
PddServer/pom.xml
+0
-6
PddOpenController.java
...n/java/org/ta/pddserver/controller/PddOpenController.java
+11
-1
IdentityErrorType.java
.../java/org/ta/pddserver/model/enums/IdentityErrorType.java
+1
-0
ImageUtils.java
...rver/src/main/java/org/ta/pddserver/utils/ImageUtils.java
+34
-14
WorldexUtil.java
...ver/src/main/java/org/ta/pddserver/utils/WorldexUtil.java
+102
-0
WordexAPITest.java
PddServer/src/test/java/org/ta/pddserver/WordexAPITest.java
+34
-0
No files found.
PddServer/pom.xml
View file @
36767de3
...
@@ -73,12 +73,6 @@
...
@@ -73,12 +73,6 @@
<artifactId>
thumbnailator
</artifactId>
<artifactId>
thumbnailator
</artifactId>
<version>
0.4.19
</version>
<version>
0.4.19
</version>
</dependency>
</dependency>
<!-- HTTP请求工具(用于下载网络图片,也可使用Spring自带RestTemplate) -->
<dependency>
<groupId>
org.apache.httpcomponents.client5
</groupId>
<artifactId>
httpclient5
</artifactId>
<version>
5.3.1
</version>
</dependency>
<dependency>
<dependency>
<groupId>
org.springframework.boot
</groupId>
<groupId>
org.springframework.boot
</groupId>
...
...
PddServer/src/main/java/org/ta/pddserver/controller/PddOpenController.java
View file @
36767de3
...
@@ -8,6 +8,7 @@ import lombok.extern.slf4j.Slf4j;
...
@@ -8,6 +8,7 @@ import lombok.extern.slf4j.Slf4j;
import
org.springframework.util.StringUtils
;
import
org.springframework.util.StringUtils
;
import
org.springframework.web.bind.annotation.*
;
import
org.springframework.web.bind.annotation.*
;
import
org.ta.pddserver.entity.*
;
import
org.ta.pddserver.entity.*
;
import
org.ta.pddserver.model.enums.IdentityErrorType
;
import
org.ta.pddserver.model.pddjy.request.JYBaseRequestModel
;
import
org.ta.pddserver.model.pddjy.request.JYBaseRequestModel
;
import
org.ta.pddserver.model.pddjy.request.*
;
import
org.ta.pddserver.model.pddjy.request.*
;
import
org.ta.pddserver.model.pddlg.common.TraceObject
;
import
org.ta.pddserver.model.pddlg.common.TraceObject
;
...
@@ -18,6 +19,7 @@ import org.ta.pddserver.service.impl.*;
...
@@ -18,6 +19,7 @@ import org.ta.pddserver.service.impl.*;
import
org.ta.pddserver.utils.JsonResponse
;
import
org.ta.pddserver.utils.JsonResponse
;
import
org.ta.pddserver.utils.PddJYPriceTool
;
import
org.ta.pddserver.utils.PddJYPriceTool
;
import
org.ta.pddserver.utils.PddSignTool
;
import
org.ta.pddserver.utils.PddSignTool
;
import
org.ta.pddserver.utils.WorldexUtil
;
import
java.io.BufferedReader
;
import
java.io.BufferedReader
;
import
java.io.IOException
;
import
java.io.IOException
;
...
@@ -210,7 +212,15 @@ public class PddOpenController {
...
@@ -210,7 +212,15 @@ public class PddOpenController {
PddServiceConsoUserIdentifyRequest
identifyRequest
=
JSON
.
parseObject
(
body
,
PddServiceConsoUserIdentifyRequest
.
class
);
PddServiceConsoUserIdentifyRequest
identifyRequest
=
JSON
.
parseObject
(
body
,
PddServiceConsoUserIdentifyRequest
.
class
);
UserIdentify
(
identifyRequest
);
UserIdentify
(
identifyRequest
);
log
.
info
(
"pdd.service.conso.user.identify"
);
log
.
info
(
"pdd.service.conso.user.identify"
);
// todo 不需特殊回复,但是code区分状态码
IdentityErrorType
errorType
=
WorldexUtil
.
verifyIdentity
(
identifyRequest
.
getName
(),
identifyRequest
.
getMobileNo
(),
identifyRequest
.
getIdNumber
());
if
(!
errorType
.
equals
(
IdentityErrorType
.
Correct
))
{
JSONObject
jsonObject
=
new
JSONObject
();
jsonObject
.
put
(
"success"
,
false
);
jsonObject
.
put
(
"code"
,
errorType
.
getValue
());
jsonObject
.
put
(
"message"
,
errorType
.
getDesc
());
return
jsonObject
;
}
}
}
break
;
break
;
default
:
{
default
:
{
...
...
PddServer/src/main/java/org/ta/pddserver/model/enums/IdentityErrorType.java
View file @
36767de3
...
@@ -3,6 +3,7 @@ package org.ta.pddserver.model.enums;
...
@@ -3,6 +3,7 @@ package org.ta.pddserver.model.enums;
import
lombok.Getter
;
import
lombok.Getter
;
public
enum
IdentityErrorType
{
public
enum
IdentityErrorType
{
Correct
(
1
,
"正确"
),
TelephoneWrong
(
302
,
"用户用的是护照号,校验失败(手机号格式有问题)"
),
TelephoneWrong
(
302
,
"用户用的是护照号,校验失败(手机号格式有问题)"
),
NameWrong
(
303
,
"用户用的是护照号,校验失败(姓名格式有问题)"
),
NameWrong
(
303
,
"用户用的是护照号,校验失败(姓名格式有问题)"
),
UnknownWrong
(
306
,
"其它网络类可以重试的未知错误(如依赖下游不可用或超时)"
),
UnknownWrong
(
306
,
"其它网络类可以重试的未知错误(如依赖下游不可用或超时)"
),
...
...
PddServer/src/main/java/org/ta/pddserver/utils/ImageUtils.java
View file @
36767de3
package
org
.
ta
.
pddserver
.
utils
;
package
org
.
ta
.
pddserver
.
utils
;
import
net.coobird.thumbnailator.Thumbnails
;
import
net.coobird.thumbnailator.Thumbnails
;
import
org.
apache.hc.client5.http.classic.HttpClient
;
import
org.
springframework.http.HttpEntity
;
import
org.
apache.hc.client5.http.classic.methods.HttpGet
;
import
org.
springframework.http.HttpHeaders
;
import
org.
apache.hc.client5.http.impl.classic.HttpClients
;
import
org.
springframework.http.HttpMethod
;
import
org.
apache.hc.core5.http.io.entity.EntityUtils
;
import
org.
springframework.http.ResponseEntity
;
import
org.springframework.stereotype.Component
;
import
org.springframework.stereotype.Component
;
import
org.springframework.web.client.RestClientException
;
import
org.springframework.web.client.RestTemplate
;
import
java.io.ByteArrayInputStream
;
import
java.io.ByteArrayInputStream
;
import
java.io.ByteArrayOutputStream
;
import
java.io.ByteArrayOutputStream
;
...
@@ -46,16 +48,34 @@ public class ImageUtils {
...
@@ -46,16 +48,34 @@ public class ImageUtils {
*/
*/
private
byte
[]
downloadImage
(
String
imageUrl
)
throws
IOException
{
private
byte
[]
downloadImage
(
String
imageUrl
)
throws
IOException
{
try
{
try
{
HttpClient
httpClient
=
HttpClients
.
createDefault
();
HttpHeaders
headers
=
new
HttpHeaders
();
HttpGet
httpGet
=
new
HttpGet
(
imageUrl
);
headers
.
add
(
"User-Agent"
,
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36"
);
// 发送请求并获取响应(设置超时时间,避免阻塞)
HttpEntity
<
Void
>
requestEntity
=
new
HttpEntity
<>(
headers
);
return
httpClient
.
execute
(
httpGet
,
response
->
{
if
(
response
.
getCode
()
!=
200
)
{
// 2. RestTemplate 发送GET请求,获取图片二进制数据( ResponseEntity<byte[]> 接收二进制响应)
throw
new
IOException
(
"图片下载失败,HTTP状态码:"
+
response
.
getCode
());
ResponseEntity
<
byte
[]>
response
;
}
try
{
// 响应体转字节数组
response
=
new
RestTemplate
().
exchange
(
return
EntityUtils
.
toByteArray
(
response
.
getEntity
());
imageUrl
,
});
HttpMethod
.
GET
,
requestEntity
,
byte
[].
class
// 响应体类型:字节数组(直接接收图片二进制)
);
}
catch
(
RestClientException
e
)
{
throw
new
RestClientException
(
"图片下载失败,URL:"
+
imageUrl
+
",原因:"
+
e
.
getMessage
());
}
// 3. 校验响应是否成功(HTTP 200 OK)
if
(!
response
.
getStatusCode
().
is2xxSuccessful
())
{
throw
new
RestClientException
(
"图片下载失败,HTTP状态码:"
+
response
.
getStatusCode
()
+
",URL:"
+
imageUrl
);
}
// 4. 提取图片二进制数据
byte
[]
imageBytes
=
response
.
getBody
();
if
(
imageBytes
==
null
||
imageBytes
.
length
==
0
)
{
throw
new
IllegalArgumentException
(
"下载的图片为空,URL:"
+
imageUrl
);
}
return
imageBytes
;
}
catch
(
Exception
e
)
{
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
e
.
printStackTrace
();
}
}
...
...
PddServer/src/main/java/org/ta/pddserver/utils/WorldexUtil.java
0 → 100644
View file @
36767de3
package
org
.
ta
.
pddserver
.
utils
;
import
com.alibaba.fastjson.JSONObject
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.http.HttpEntity
;
import
org.springframework.http.HttpHeaders
;
import
org.springframework.http.HttpMethod
;
import
org.springframework.http.ResponseEntity
;
import
org.springframework.web.client.RestTemplate
;
import
org.ta.pddserver.model.enums.IdentityErrorType
;
import
java.util.HashMap
;
import
java.util.Map
;
@Slf4j
public
class
WorldexUtil
{
private
static
final
String
URL
=
"https://api.worldex.kr"
;
private
static
String
token
=
""
;
private
static
Long
timeout
=
0L
;
public
static
JSONObject
login
()
{
Map
<
String
,
String
>
map
=
new
HashMap
<
String
,
String
>();
map
.
put
(
"userName"
,
"hjpddjy"
);
map
.
put
(
"password"
,
"hjpddjy123"
);
String
resp
=
WorldexUtil
.
sendJsonPost
(
"/api/user/signIn"
,
map
,
null
);
log
.
info
(
"resp = {}"
,
resp
);
JSONObject
json
=
JSONObject
.
parseObject
(
resp
);
if
(
json
.
getInteger
(
"code"
)
==
2000
)
{
return
json
.
getJSONObject
(
"data"
);
}
return
null
;
}
public
static
IdentityErrorType
verifyIdentity
(
String
name
,
String
phone
,
String
code
)
{
Map
<
String
,
String
>
map
=
new
HashMap
<
String
,
String
>();
map
.
put
(
"name"
,
name
);
map
.
put
(
"mobile_phone_no"
,
phone
);
map
.
put
(
"customs_clearance_code"
,
code
);
String
token
=
WorldexUtil
.
getToken
();
String
resp
=
WorldexUtil
.
sendJsonPost
(
"/api/worldex/retrievePersEcm"
,
map
,
token
);
log
.
info
(
"resp = {}"
,
resp
);
JSONObject
json
=
JSONObject
.
parseObject
(
resp
);
if
(
json
.
getInteger
(
"code"
)
==
2000
)
{
JSONObject
data
=
json
.
getJSONObject
(
"data"
);
if
(
data
.
getInteger
(
"tCnt"
).
intValue
()
==
1
)
{
return
IdentityErrorType
.
Correct
;
}
String
errMsgCn
=
data
.
getJSONObject
(
"persEcmQryRtnErrInfoVo"
).
getString
(
"errMsgCn"
);
if
(
errMsgCn
==
null
)
{
return
IdentityErrorType
.
UnknownWrong
;
}
if
(
errMsgCn
.
startsWith
(
"입력하신 납세의무자명"
)
&&
errMsgCn
.
contains
(
"이 개인통관고유부호의 성명과 일치하지 않습니다"
))
{
return
IdentityErrorType
.
CodeNameInconsistency
;
}
if
(
errMsgCn
.
startsWith
(
"납세의무자 휴대전화번호가 일치하지 않습니다"
))
{
return
IdentityErrorType
.
CodeTelephoneInconsistency
;
}
if
(
errMsgCn
.
startsWith
(
"납세의무자 개인통관고유부호가 존재하지 않습니다"
))
{
return
IdentityErrorType
.
CodeUnused
;
}
return
IdentityErrorType
.
InformationInconsistency
;
}
return
null
;
}
private
static
String
getToken
()
{
long
now
=
System
.
currentTimeMillis
()
/
1000
-
100
;
if
(
token
.
isEmpty
()
||
timeout
<
now
)
{
String
newToken
=
WorldexUtil
.
requestToken
();
if
(
newToken
!=
null
)
{
token
=
newToken
;
timeout
=
now
+
24
*
60
*
60
;
}
}
return
token
;
}
private
static
String
requestToken
()
{
JSONObject
jsonObject
=
WorldexUtil
.
login
();
if
(
jsonObject
!=
null
)
{
String
token
=
jsonObject
.
getString
(
"token"
);
log
.
info
(
"token:{}"
,
token
);
return
token
;
}
log
.
error
(
"login failed"
);
return
""
;
}
public
static
String
sendJsonPost
(
String
url
,
Object
requestObj
,
String
token
)
{
// 自动序列化 requestObj 为 JSON,并设置 Content-Type: application/json
RestTemplate
restTemplate
=
new
RestTemplate
();
HttpHeaders
httpHeaders
=
new
HttpHeaders
();
httpHeaders
.
set
(
"Accept-Language"
,
"zh-cn"
);
httpHeaders
.
set
(
"token"
,
token
);
HttpEntity
<
Object
>
httpEntity
=
new
HttpEntity
<
Object
>(
requestObj
,
httpHeaders
);
ResponseEntity
<
String
>
resp
=
restTemplate
.
exchange
(
URL
+
url
,
HttpMethod
.
POST
,
httpEntity
,
String
.
class
);
// ResponseEntity<String> resp = restTemplate.postForEntity(URL + url, requestObj, String.class, headers);
return
resp
.
getBody
();
}
}
PddServer/src/test/java/org/ta/pddserver/WordexAPITest.java
0 → 100644
View file @
36767de3
package
org
.
ta
.
pddserver
;
import
com.alibaba.fastjson.JSONObject
;
import
lombok.extern.slf4j.Slf4j
;
import
org.junit.jupiter.api.Test
;
import
org.ta.pddserver.model.enums.IdentityErrorType
;
import
org.ta.pddserver.utils.WorldexUtil
;
import
java.util.HashMap
;
import
java.util.Map
;
@Slf4j
public
class
WordexAPITest
{
private
static
final
String
token
=
"eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzUxMiIsImtpZCI6ImtleUlkIn0.eyJpc3MiOiJhcGkud29ybGRleC5rciIsImF1ZCI6InVzZXIiLCJzdWIiOiJ0b2tlbiIsImp0aSI6ImhqcGRkankiLCJpYXQiOjE3NjE4MTI0ODEsIm5iZiI6MTc2MTgxMjQyMSwiZXhwIjoxNzYxODg0NDgxfQ.xeukpmS86euu44XzyQ8USM2tMCdXIqCXhjoe1QrpgcB2O5dHkY3_ixAWNmL2c7SnDOWL0kHanLX-h668zDQiHQ"
;
@Test
public
void
testLogin
()
{
JSONObject
jsonObject
=
WorldexUtil
.
login
();
if
(
jsonObject
!=
null
)
{
String
token
=
jsonObject
.
getString
(
"token"
);
log
.
info
(
"token:{}"
,
token
);
return
;
}
log
.
error
(
"login failed"
);
//
}
@Test
public
void
verify
()
{
org
.
ta
.
pddserver
.
model
.
enums
.
IdentityErrorType
type
=
WorldexUtil
.
verifyIdentity
(
"nanjiexi"
,
"P11111111"
,
"01099999999"
);
log
.
info
(
"type:{}"
,
type
);
}
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment