Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
4f3b7ba3b4 | ||
|
|
107946c964 | ||
|
|
2191e6e4cf | ||
|
|
25a3dba931 | ||
|
|
3184608d99 | ||
|
|
cf96d48a38 | ||
|
|
8ad36b1d57 | ||
|
|
3317d463a1 | ||
|
|
a1f0aea6ec | ||
|
|
dbba622cb4 | ||
|
|
176d11125a | ||
|
|
02dfa5c90a | ||
|
|
afe4de0528 | ||
|
|
b3205d20db | ||
|
|
0c1a9e8620 | ||
|
|
2250f22672 | ||
|
|
cdf1013eba | ||
|
|
8d8caa98d6 | ||
|
|
fcf18ec1b7 | ||
|
|
e52882238c | ||
|
|
55bc87855b | ||
|
|
54fd7e4216 | ||
|
|
67d558d6a6 | ||
|
|
afd84e06e7 | ||
|
|
a9d66d4f4a | ||
|
|
fe226a8cb5 | ||
|
|
f157e521e1 | ||
|
|
a280a3a396 | ||
|
|
3a6b2da1dc | ||
|
|
ad40673da4 | ||
|
|
2615650564 | ||
|
|
00a7a4815a | ||
|
|
656afd520e | ||
|
|
cf8a994fec | ||
|
|
ea914f44ac | ||
|
|
f3b441789f | ||
|
|
dfbc79f3ed | ||
|
|
d7550e48b0 | ||
|
|
16aa24fbc1 | ||
|
|
626a20228a | ||
|
|
b7653d9d71 | ||
|
|
f179f6ab43 | ||
|
|
5bc4660b93 | ||
|
|
2f019e5f30 | ||
|
|
940b2fec2d | ||
|
|
5f8be90582 | ||
|
|
3ae3a5249e | ||
|
|
ad50f32ea2 | ||
|
|
1a63f6ae60 | ||
|
|
566306230a | ||
|
|
bf21dd4782 | ||
|
|
c2a495cfbe | ||
|
|
c252f8481d | ||
|
|
4a712b155c | ||
|
|
a16d980e59 | ||
|
|
9cd9919abd | ||
|
|
a225bae035 | ||
|
|
3ab7c12332 | ||
|
|
707e13562a | ||
|
|
c554c4e7c3 | ||
|
|
ae5e3e900f | ||
|
|
ab97edab5c | ||
|
|
3829bc3ddb | ||
|
|
184ba62d6f | ||
|
|
056594e809 | ||
|
|
da93fe0695 | ||
|
|
23eda9c505 | ||
|
|
4e9de1454e | ||
|
|
67e3d856ab | ||
|
|
63c83ad416 | ||
|
|
89ea6ff14d | ||
|
|
500e01ad20 | ||
|
|
ced588e021 | ||
|
|
384b190d8f | ||
|
|
8163980aa9 | ||
|
|
1e93c02910 | ||
|
|
85dac36de1 | ||
|
|
7d6007914d | ||
|
|
24202cd2f1 | ||
|
|
48954225b5 | ||
|
|
1cad4d5b87 | ||
|
|
aa9c36a00e | ||
|
|
c3a32a8e58 | ||
|
|
05f921349a | ||
|
|
0be6d590e4 | ||
|
|
497f31a66c | ||
|
|
338f5b524f | ||
|
|
2b7ac06c69 | ||
|
|
630bf8518c | ||
|
|
be80fd2b4b | ||
|
|
603f72008c | ||
|
|
001a545633 | ||
|
|
b81e471e5a | ||
|
|
ac4e65c60c | ||
|
|
f6fa62b913 | ||
|
|
254cdb0646 | ||
|
|
d8d90b934f | ||
|
|
c87df798e8 | ||
|
|
e982f33804 | ||
|
|
645078186b | ||
|
|
b77471d4ce | ||
|
|
1b0547ccca | ||
|
|
50bca31432 | ||
|
|
d2cc1e3d3d | ||
|
|
e688937e0d | ||
|
|
408327bffd | ||
|
|
afa79d085e | ||
|
|
f057fac4fb | ||
|
|
4d50648ad0 | ||
|
|
8b1c50e7fc | ||
|
|
aeafc90ddc | ||
|
|
221876ae89 | ||
|
|
cf810bc44a | ||
|
|
8e8175d8f1 | ||
|
|
d28f377bb7 | ||
|
|
77e7b6fd49 | ||
|
|
ac71e58810 | ||
|
|
b5376f0981 | ||
|
|
40af8bef5e | ||
|
|
7da3134e79 | ||
|
|
7f7175aa24 | ||
|
|
ea38fe7cce | ||
|
|
b587ab476e | ||
|
|
e85a8ca368 | ||
|
|
cb24574e41 | ||
|
|
9d437cecb6 | ||
|
|
9d2286f056 | ||
|
|
0487088101 | ||
|
|
f07a41e5cc | ||
|
|
ec07bc5804 | ||
|
|
6c78e14257 | ||
|
|
55a222e2d6 | ||
|
|
1d63bc414b | ||
|
|
443c569eec | ||
|
|
867fb1dadb | ||
|
|
c902021303 | ||
|
|
1789a7045a | ||
|
|
18d42d3e05 | ||
|
|
4fc92459a0 | ||
|
|
158d012eff | ||
|
|
ce16eaf82e | ||
|
|
f4f77434e1 | ||
|
|
03fd985d20 | ||
|
|
7267cf93c9 | ||
|
|
298bc6babe | ||
|
|
1a30a4d497 | ||
|
|
b57bd5cb65 | ||
|
|
3aaa1cb425 | ||
|
|
6d26839aee | ||
|
|
18fdcafd39 | ||
|
|
2d4e7db772 | ||
|
|
46ba18a899 | ||
|
|
8ad037a007 | ||
|
|
f85c71cb0a | ||
|
|
18f3b76cf2 | ||
|
|
1f4a52807c | ||
|
|
7bc0b920f6 | ||
|
|
c5b100189a | ||
|
|
c9ffaa6678 | ||
|
|
5096c67d58 | ||
|
|
904b8b7110 | ||
|
|
b620d5c71d | ||
|
|
36947f692d | ||
|
|
d72817b8ea | ||
|
|
7df0107dbf | ||
|
|
a7801d122e | ||
|
|
ed8663e5b3 | ||
|
|
a73e9c741a | ||
|
|
6f92eedbbf | ||
|
|
af0949c009 | ||
|
|
7535908735 | ||
|
|
d8c1ca9445 | ||
|
|
568035dee7 | ||
|
|
2383f67f98 | ||
|
|
aea364eca4 | ||
|
|
ca0565f720 | ||
|
|
89bb99392d | ||
|
|
6e6b75c93a | ||
|
|
2ad5cd2f3b | ||
|
|
f01078183a | ||
|
|
0b47c9efc8 | ||
|
|
4cca47347e | ||
|
|
fad4e4dd7a | ||
|
|
8fdaca1b4e | ||
|
|
ff1eec09f6 | ||
|
|
f0fc06a59d | ||
|
|
f9e30d1fbc | ||
|
|
e02db4339e | ||
|
|
0c88f6c2af | ||
|
|
d91d8eb2db | ||
|
|
3c403c424a | ||
|
|
730025128a | ||
|
|
5275b64e60 | ||
|
|
ca85a34e49 | ||
|
|
d46cfd3943 | ||
|
|
a382a1a876 | ||
|
|
7fc548e161 | ||
|
|
ea28ca6875 | ||
|
|
11e83df02f | ||
|
|
039f05ce23 | ||
|
|
c1f2117e48 | ||
|
|
5cc6d99891 | ||
|
|
a2ba10f796 | ||
|
|
9ce6e63ee9 | ||
|
|
94f8883bd8 | ||
|
|
53899380c3 | ||
|
|
bc0e731fc3 | ||
|
|
515b8bb00f | ||
|
|
9f7015090d | ||
|
|
139ec62e9a | ||
|
|
4b9ef94741 | ||
|
|
46ba5e6aef | ||
|
|
75d0b004dc | ||
|
|
52cfca1ca1 | ||
|
|
34be99fccb | ||
|
|
164589f634 | ||
|
|
39869cd92d | ||
|
|
a863300ae3 | ||
|
|
8ac9f2714f | ||
|
|
dcd63dd54e | ||
|
|
25fc972833 | ||
|
|
cde0de43ff | ||
|
|
bfde5df0cd | ||
|
|
b92bf484df | ||
|
|
1b02d0cefa | ||
|
|
b24af1f71f | ||
|
|
951a52d37b | ||
|
|
9616e660a6 | ||
|
|
da81f6df7d | ||
|
|
c48951df8c | ||
|
|
1407350bf7 | ||
|
|
4c4134389e | ||
|
|
f98b1a2bea | ||
|
|
1ff8890d58 | ||
|
|
7be216ea4b | ||
|
|
530410fcf0 | ||
|
|
29a5024468 | ||
|
|
cb8431fbd4 | ||
|
|
6900eb1909 | ||
|
|
7793a69b9d | ||
|
|
7017561242 | ||
|
|
0cdaaac0ed | ||
|
|
18aa26dcae | ||
|
|
87c6e967f2 | ||
|
|
01c2dfa30d | ||
|
|
1978484071 | ||
|
|
68680d0d0e | ||
|
|
92e89bae34 | ||
|
|
94e0dd4f5d | ||
|
|
9a225c6ba5 | ||
|
|
6c80e36508 | ||
|
|
cf88789eef | ||
|
|
98b3f1fc67 | ||
|
|
a09e171bf7 | ||
|
|
5ee9c18f4c | ||
|
|
b8132062ea | ||
|
|
35c143039c | ||
|
|
f94df74591 | ||
|
|
e9b9ac1f7a | ||
|
|
d916fe5c80 | ||
|
|
315b5b852d | ||
|
|
0213a4b88a | ||
|
|
4bdc82786e | ||
|
|
f36b183407 | ||
|
|
113aead37b | ||
|
|
90b6ae7d40 | ||
|
|
959fe83d72 | ||
|
|
f784d411b6 | ||
|
|
c8f9043869 | ||
|
|
789ec69933 | ||
|
|
4dd6e82309 | ||
|
|
3051aed6b2 | ||
|
|
8e50c5da49 | ||
|
|
fd10210972 | ||
|
|
c399bb2373 | ||
|
|
9451092335 | ||
|
|
fd33176222 | ||
|
|
290ee5db04 | ||
|
|
07b630601a | ||
|
|
b59c41c5f8 | ||
|
|
a4ec421412 |
No files matched your search
@@ -1,30 +1,39 @@
|
||||
# 支付目标
|
||||
# H5 - 强制使用 H5/WAP 支付渠道
|
||||
# APP - 非微信小程序端跳转到微信小程序支付
|
||||
# SHOPRO_BUILD_TARGET 为兼容旧配置的默认值,下面两项可分别覆盖支付宝和微信支付
|
||||
SHOPRO_BUILD_TARGET=APP
|
||||
SHOPRO_ALIPAY_BUILD_TARGET=APP
|
||||
SHOPRO_WECHAT_BUILD_TARGET=APP
|
||||
|
||||
# 版本号
|
||||
SHOPRO_VERSION=v2.3.0
|
||||
|
||||
# 后端接口 - 正式环境(通过 process.env.NODE_ENV 非 development)
|
||||
SHOPRO_BASE_URL=http://api-dashboard.yudao.iocoder.cn
|
||||
|
||||
# 后端接口 - 测试环境(通过 process.env.NODE_ENV = development)
|
||||
SHOPRO_DEV_BASE_URL=http://127.0.0.1:48080
|
||||
### SHOPRO_DEV_BASE_URL = http://yunai.natapp1.cc
|
||||
|
||||
# 文件上传类型:server - 后端上传, client - 前端直连上传,仅支持 S3 服务
|
||||
SHOPRO_UPLOAD_TYPE=server
|
||||
SHOPRO_VERSION=v2.4.1
|
||||
|
||||
# 后端接口前缀(一般不建议调整)
|
||||
SHOPRO_API_PATH=/app-api
|
||||
|
||||
# 后端接口 - 测试环境(通过 process.env.NODE_ENV == development)
|
||||
# SHOPRO_DEV_BASE_URL = https://api.htysapp.com
|
||||
SHOPRO_DEV_BASE_URL=https://324e01b5211c41c7a8fc9f7854195f30.hn.takin.cc
|
||||
# SHOPRO_DEV_BASE_URL=http://localhost:48083
|
||||
|
||||
# 后端接口 - 正式环境(通过 process.env.NODE_ENV != development)
|
||||
SHOPRO_BASE_URL=https://api.htysapp.com
|
||||
|
||||
# 文件上传类型:server - 后端上传, client - 前端直连上传,仅支持 S3 服务
|
||||
SHOPRO_UPLOAD_TYPE=server
|
||||
|
||||
# 后端 websocket 接口前缀
|
||||
SHOPRO_WEBSOCKET_PATH=/infra/ws
|
||||
|
||||
# 开发环境运行端口
|
||||
SHOPRO_DEV_PORT=3000
|
||||
|
||||
# 客户端静态资源地址 空=默认使用服务端指定的CDN资源地址前缀 | local=本地 | http(s)://xxx.xxx=自定义静态资源地址前缀
|
||||
SHOPRO_STATIC_URL=http://test.yudao.iocoder.cn
|
||||
### SHOPRO_STATIC_URL = https://file.sheepjs.com
|
||||
|
||||
# 是否开启直播 1 开启直播 | 0 关闭直播 (小程序官方后台未审核开通直播权限时请勿开启)
|
||||
# 前端 H5 访问域名(App 调起 H5 支付时作为支付完成后的回跳地址)
|
||||
SHOPRO_H5_URL=http://127.0.0.1:3000
|
||||
|
||||
# 是否开启直播 1 开启直播 | 0 关闭直播
|
||||
SHOPRO_MPLIVE_ON=0
|
||||
|
||||
# 租户ID 默认 1
|
||||
|
||||
@@ -1,11 +1,23 @@
|
||||
unpackage/*
|
||||
node_modules/*
|
||||
.idea/*
|
||||
deploy.sh
|
||||
.hbuilderx/
|
||||
.vscode/
|
||||
**/.DS_Store
|
||||
yarn.lock
|
||||
package-lock.json
|
||||
*.keystore
|
||||
pnpm-lock.yaml
|
||||
# Logs
|
||||
logs
|
||||
*.log
|
||||
npm-debug.log*
|
||||
yarn-debug.log*
|
||||
yarn-error.log*
|
||||
pnpm-debug.log*
|
||||
lerna-debug.log*
|
||||
|
||||
node_modules
|
||||
.DS_Store
|
||||
dist
|
||||
*.local
|
||||
|
||||
# Editor directories and files
|
||||
.idea
|
||||
*.suo
|
||||
*.ntvs*
|
||||
*.njsproj
|
||||
*.sln
|
||||
*.sw?
|
||||
|
||||
.hbuilderx
|
||||
|
Before Width: | Height: | Size: 38 KiB |
|
Before Width: | Height: | Size: 204 KiB |
|
Before Width: | Height: | Size: 139 KiB |
|
Before Width: | Height: | Size: 69 KiB |
|
Before Width: | Height: | Size: 32 KiB |
|
Before Width: | Height: | Size: 201 KiB |
|
Before Width: | Height: | Size: 60 KiB |
|
Before Width: | Height: | Size: 165 KiB |
|
Before Width: | Height: | Size: 168 KiB |
|
Before Width: | Height: | Size: 152 KiB |
|
Before Width: | Height: | Size: 294 KiB |
|
Before Width: | Height: | Size: 177 KiB |
@@ -7,4 +7,4 @@
|
||||
"proseWrap": "never",
|
||||
"htmlWhitespaceSensitivity": "strict",
|
||||
"endOfLine": "auto"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,326 @@
|
||||
<!DOCTYPE html>
|
||||
<html style="font-size:50px">
|
||||
|
||||
<head>
|
||||
<title>荷塘月色 - app下载</title>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width,user-scalable=no">
|
||||
<meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1,user-scalable=no">
|
||||
<meta http-equiv="X-UA-Compatible" content="ie=edge">
|
||||
<meta http-equiv="pragma" content="no-cache">
|
||||
<meta http-equiv="cache-control" content="no-cache">
|
||||
<meta http-equiv="expires" content="0">
|
||||
<meta name="description" content="高端私密真实可靠的聊天交友APP。平台通过人工审核和会员制度,保证用户质量。快来邂逅附近的女神吧!">
|
||||
<meta name="keywords" content="荷塘月色,聊天,交友">
|
||||
<script src="./device-fingerprint.js"></script>
|
||||
<script src="https://code.jquery.com/jquery-2.1.1.min.js"></script>
|
||||
<style type="text/css">
|
||||
a,
|
||||
abbr,
|
||||
acronym,
|
||||
address,
|
||||
applet,
|
||||
article,
|
||||
aside,
|
||||
audio,
|
||||
b,
|
||||
big,
|
||||
blockquote,
|
||||
body,
|
||||
canvas,
|
||||
caption,
|
||||
center,
|
||||
cite,
|
||||
code,
|
||||
dd,
|
||||
del,
|
||||
details,
|
||||
dfn,
|
||||
div,
|
||||
dl,
|
||||
dt,
|
||||
em,
|
||||
embed,
|
||||
fieldset,
|
||||
figcaption,
|
||||
figure,
|
||||
footer,
|
||||
form,
|
||||
h1,
|
||||
h2,
|
||||
h3,
|
||||
h4,
|
||||
h5,
|
||||
h6,
|
||||
header,
|
||||
html,
|
||||
i,
|
||||
iframe,
|
||||
img,
|
||||
input,
|
||||
ins,
|
||||
kbd,
|
||||
label,
|
||||
legend,
|
||||
li,
|
||||
mark,
|
||||
menu,
|
||||
nav,
|
||||
object,
|
||||
ol,
|
||||
output,
|
||||
p,
|
||||
pre,
|
||||
q,
|
||||
ruby,
|
||||
s,
|
||||
samp,
|
||||
section,
|
||||
small,
|
||||
span,
|
||||
strike,
|
||||
strong,
|
||||
sub,
|
||||
summary,
|
||||
sup,
|
||||
table,
|
||||
tbody,
|
||||
td,
|
||||
tfoot,
|
||||
th,
|
||||
thead,
|
||||
time,
|
||||
tr,
|
||||
tt,
|
||||
u,
|
||||
ul,
|
||||
var,
|
||||
video {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
border: 0;
|
||||
font-size: 100%;
|
||||
font-weight: 400;
|
||||
vertical-align: baseline;
|
||||
}
|
||||
</style>
|
||||
<style type="text/css">
|
||||
#txt-title {
|
||||
color: white;
|
||||
}
|
||||
|
||||
@media (min-width: 765px) {
|
||||
.pc {
|
||||
display: block
|
||||
}
|
||||
|
||||
.msite {
|
||||
display: none
|
||||
}
|
||||
|
||||
.msite-footer {
|
||||
display: none !important;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 764px) {
|
||||
.pc {
|
||||
display: none;
|
||||
font-size: 14px
|
||||
}
|
||||
|
||||
.msite {
|
||||
display: block;
|
||||
font-size: .24rem
|
||||
}
|
||||
|
||||
.msite-footer {
|
||||
display: block;
|
||||
font-size: .24rem
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes myfirst {
|
||||
0% {
|
||||
background: url(bg-image.png) 0 no-repeat;
|
||||
background-size: auto 100%
|
||||
}
|
||||
|
||||
50% {
|
||||
background: url(bg-image.png) 100% no-repeat;
|
||||
background-size: auto 100%
|
||||
}
|
||||
|
||||
to {
|
||||
background: url(bg-image.png) 0 no-repeat;
|
||||
background-size: auto 100%
|
||||
}
|
||||
}
|
||||
|
||||
@-webkit-keyframes myfirst {
|
||||
0% {
|
||||
background: url(bg-image.png) 0 no-repeat;
|
||||
background-size: auto 100%
|
||||
}
|
||||
|
||||
50% {
|
||||
background: url(bg-image.png) 100% no-repeat;
|
||||
background-size: auto 100%
|
||||
}
|
||||
|
||||
to {
|
||||
background: url(bg-image.png) 0 no-repeat;
|
||||
background-size: auto 100%
|
||||
}
|
||||
}
|
||||
|
||||
.msite {
|
||||
display: block;
|
||||
font-size: .24rem;
|
||||
}
|
||||
|
||||
.container {
|
||||
position: fixed;
|
||||
width: 100%;
|
||||
top: 0;
|
||||
left: 0;
|
||||
bottom: 0;
|
||||
right: 0;
|
||||
background: url(./bg-image.png) 100% no-repeat;
|
||||
background-size: auto 100%;
|
||||
text-align: center;
|
||||
-webkit-animation: myfirst 50s linear infinite;
|
||||
animation: myfirst 50s linear infinite;
|
||||
}
|
||||
|
||||
.top-box {
|
||||
text-align: center;
|
||||
padding-top: 1.7rem;
|
||||
}
|
||||
|
||||
.logo-ico {
|
||||
width: 1.4rem;
|
||||
height: auto;
|
||||
border-radius: 10px;
|
||||
}
|
||||
|
||||
.sub-title {
|
||||
font-size: .64rem;
|
||||
font-weight: 700;
|
||||
line-height: .5rem;
|
||||
letter-spacing: 3px;
|
||||
margin-top: .2rem;
|
||||
color: white;
|
||||
}
|
||||
|
||||
.top-box p {
|
||||
font-size: .36rem;
|
||||
font-family: PingFang-SC-Bold, PingFang-SC;
|
||||
font-weight: 700;
|
||||
color: #fff;
|
||||
line-height: .5rem;
|
||||
letter-spacing: 3px;
|
||||
margin-top: .2rem;
|
||||
}
|
||||
|
||||
.top-box .sagn-ico {
|
||||
width: 5.89rem;
|
||||
height: auto;
|
||||
margin-top: .49rem;
|
||||
}
|
||||
|
||||
.download-btn {
|
||||
position: relative;
|
||||
bottom: -52px;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
.download-btn-real {
|
||||
margin: 0 auto;
|
||||
width: 5.6rem;
|
||||
height: .9rem;
|
||||
background: linear-gradient(-89deg, #EC6978, #F2AC66);
|
||||
box-shadow: 0.02rem 0.02rem 0.3rem 0 rgb(255 155 116 / 46%);
|
||||
line-height: .9rem;
|
||||
border-radius: .45rem;
|
||||
border: 1px solid #faa36a;
|
||||
text-align: center;
|
||||
font-size: .32rem;
|
||||
font-family: PingFang-SC-Bold, PingFang-SC;
|
||||
font-weight: 700;
|
||||
color: #fff;
|
||||
letter-spacing: 4px;
|
||||
text-shadow: 1px 1px 1px rgb(213 86 29 / 55%);
|
||||
}
|
||||
|
||||
.footer {
|
||||
width: 100%;
|
||||
color: #fff;
|
||||
text-align: center;
|
||||
position: fixed;
|
||||
bottom: .21rem;
|
||||
line-height: .4rem;
|
||||
}
|
||||
|
||||
.footer-container p {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<div class="msite container">
|
||||
<div class="top-box">
|
||||
<img class="logo-ico" src="./logo.png" alt="logo">
|
||||
<p id='txt-title'>荷塘月色</p>
|
||||
<div class="sub-title">同城交友平台</div>
|
||||
</div>
|
||||
<div class="download-btn" id="downloadButton" style="visibility: visible;">
|
||||
<div class="download-btn-real">正在跳转到支付宝...</div>
|
||||
</div>
|
||||
<div id="footer" class="msite footer msite-footer">
|
||||
<div class="footer-container">
|
||||
<p>更新时间: 2025年12月12日</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
|
||||
<script type="text/javascript">
|
||||
var url = ''
|
||||
|
||||
//获取url中的参数
|
||||
function getUrlParam(name) {
|
||||
if (!name) return null;
|
||||
var currentUrl = new URL(window.location.href);
|
||||
url = currentUrl.search.replace('?url=', '');
|
||||
// 跳转到支付宝支付页面
|
||||
if (url) {
|
||||
window.location.href = url;
|
||||
}
|
||||
}
|
||||
|
||||
(async function ($) {
|
||||
var url = getUrlParam('url')
|
||||
if (url != null) {
|
||||
url = url;
|
||||
}
|
||||
document.title = '荷塘月色-高端约会'
|
||||
document.getElementById('txt-title').innerHTML = '荷塘月色'
|
||||
}
|
||||
)(jQuery);
|
||||
</script>
|
||||
<script>
|
||||
var _hmt = _hmt || [];
|
||||
(function () {
|
||||
var hm = document.createElement("script");
|
||||
hm.src = "https://hm.baidu.com/hm.js?8841fecf6f4a06974ef8797421c60dc0";
|
||||
var s = document.getElementsByTagName("script")[0];
|
||||
s.parentNode.insertBefore(hm, s);
|
||||
}
|
||||
)();
|
||||
</script>
|
||||
|
||||
</html>
|
||||
|
After Width: | Height: | Size: 1.0 MiB |
@@ -0,0 +1,184 @@
|
||||
// 使用IIFE封装防止污染全局变量
|
||||
(function (window) {
|
||||
// 配置参数
|
||||
const defaultConfig = {
|
||||
webgl: true,
|
||||
audio: true,
|
||||
deviceInfo: true,
|
||||
};
|
||||
|
||||
// 创建全局对象
|
||||
window.DeviceFingerprint = {
|
||||
init: function (config = {}) {
|
||||
// 等待DOM加载完成
|
||||
if (document.readyState === 'loading') {
|
||||
document.addEventListener('DOMContentLoaded', () => this._initialize(config));
|
||||
} else {
|
||||
this._initialize(config);
|
||||
}
|
||||
return this;
|
||||
},
|
||||
// 新增实际初始化方法
|
||||
_initialize: function (config) {
|
||||
this.config = { ...defaultConfig, ...config };
|
||||
this._loadDependencies()
|
||||
.then(() => {
|
||||
this._injectCanvasElements();
|
||||
})
|
||||
.catch((error) => {
|
||||
console.error('依赖加载失败:', error);
|
||||
});
|
||||
},
|
||||
// 自动注入需要的canvas元素
|
||||
_injectCanvasElements: function () {
|
||||
if (!document.getElementById('fp-canvas')) {
|
||||
const canvas = document.createElement('canvas');
|
||||
canvas.id = 'fp-canvas';
|
||||
canvas.style.display = 'block';
|
||||
document.body.appendChild(canvas);
|
||||
}
|
||||
},
|
||||
_getIP: async function () {
|
||||
const endpoints = [
|
||||
// 'https://api.ipify.org?format=json', // 主接口
|
||||
'https://ipapi.co/json/', // 备用接口1
|
||||
// 'https://ipinfo.io/json' // 备用接口2
|
||||
];
|
||||
|
||||
const controller = new AbortController();
|
||||
const timeoutId = setTimeout(() => controller.abort(), 5000);
|
||||
|
||||
try {
|
||||
// 尝试所有接口直到成功
|
||||
for (const url of endpoints) {
|
||||
try {
|
||||
const response = await fetch(url, {
|
||||
signal: controller.signal,
|
||||
});
|
||||
|
||||
if (!response.ok) throw new Error('响应异常');
|
||||
|
||||
const data = await response.json();
|
||||
return data.ip || data.ipAddress || '未知IP';
|
||||
} catch (error) {
|
||||
console.warn(`接口 ${url} 请求失败:`, error.message);
|
||||
}
|
||||
}
|
||||
return '获取失败';
|
||||
} catch (error) {
|
||||
console.error('IP获取最终失败:', error);
|
||||
return '获取失败';
|
||||
} finally {
|
||||
clearTimeout(timeoutId);
|
||||
}
|
||||
},
|
||||
// 统一获取所有指纹
|
||||
async getAllFingerprints() {
|
||||
// 等待MD5库加载
|
||||
if (!window.hex_md5) {
|
||||
await this._loadDependencies();
|
||||
}
|
||||
|
||||
const results = {};
|
||||
// 添加null检查
|
||||
if (!document.getElementById('fp-canvas')) {
|
||||
throw new Error('Canvas元素未成功创建');
|
||||
}
|
||||
if (this.config.webgl) {
|
||||
results.webgl = this._getWebGLFingerprint();
|
||||
}
|
||||
if (this.config.deviceInfo) {
|
||||
results.device = this._getDeviceFingerprint();
|
||||
}
|
||||
return results;
|
||||
},
|
||||
getWebGLFingerprint: async function () {
|
||||
// 等待依赖加载完成
|
||||
if (!window.hex_md5) {
|
||||
await this._loadDependencies();
|
||||
}
|
||||
try {
|
||||
// 检查canvas元素是否存在
|
||||
if (!document.getElementById('fp-canvas')) {
|
||||
throw new Error('Canvas元素未找到,请先调用初始化方法');
|
||||
}
|
||||
// 调用内部方法获取指纹
|
||||
return this._getWebGLFingerprint();
|
||||
} catch (error) {
|
||||
console.error('获取WebGL指纹失败:', error);
|
||||
return null;
|
||||
}
|
||||
},
|
||||
_getWebGLFingerprint: async function () {
|
||||
const canvas = document.createElement('canvas');
|
||||
const gl = canvas.getContext('webgl') || canvas.getContext('experimental-webgl');
|
||||
if (!gl) return 'unsupported';
|
||||
// 获取WebGL基础参数
|
||||
const params = [
|
||||
gl.getParameter(gl.VERSION),
|
||||
gl.getParameter(gl.SHADING_LANGUAGE_VERSION),
|
||||
gl.getParameter(gl.VENDOR),
|
||||
gl.getParameter(gl.RENDERER),
|
||||
gl.getParameter(gl.MAX_TEXTURE_SIZE),
|
||||
gl.getParameter(gl.MAX_RENDERBUFFER_SIZE),
|
||||
];
|
||||
|
||||
// 获取屏幕尺寸
|
||||
const screen = `${window.screen.width}x${window.screen.height}x${window.screen.colorDepth}`;
|
||||
console.log('screen', screen);
|
||||
console.log('params', params);
|
||||
// 组合关键特征
|
||||
const fingerprintData = `${params.join('|')}|${screen}`;
|
||||
return hex_md5(fingerprintData);
|
||||
},
|
||||
_getDeviceFingerprint: function () {
|
||||
try {
|
||||
const deviceInfo = {
|
||||
screen: `${screen.width}x${screen.height}`,
|
||||
colorDepth: screen.colorDepth,
|
||||
timezone: Intl.DateTimeFormat().resolvedOptions().timeZone,
|
||||
platform: navigator.platform,
|
||||
userAgent: navigator.userAgent,
|
||||
languages: navigator.languages.join(','),
|
||||
hardwareConcurrency: navigator.hardwareConcurrency || 'unknown',
|
||||
};
|
||||
|
||||
return hex_md5(JSON.stringify(deviceInfo));
|
||||
} catch (error) {
|
||||
console.error('Device info error:', error);
|
||||
return null;
|
||||
}
|
||||
},
|
||||
// 修改MD5加载方法
|
||||
_loadDependencies: function () {
|
||||
return new Promise((resolve, reject) => {
|
||||
if (window.hex_md5) return resolve();
|
||||
|
||||
const script = document.createElement('script');
|
||||
script.src = './md5.js';
|
||||
script.onload = resolve;
|
||||
script.onerror = reject;
|
||||
document.head.appendChild(script);
|
||||
});
|
||||
},
|
||||
getWebGLFingerprint: async function () {
|
||||
// 等待依赖加载完成
|
||||
if (!window.hex_md5) {
|
||||
await this._loadDependencies();
|
||||
}
|
||||
try {
|
||||
// 检查canvas元素是否存在
|
||||
if (!document.getElementById('fp-canvas')) {
|
||||
throw new Error('Canvas元素未找到,请先调用初始化方法');
|
||||
}
|
||||
// 调用内部方法获取指纹
|
||||
return this._getWebGLFingerprint();
|
||||
} catch (error) {
|
||||
console.error('获取WebGL指纹失败:', error);
|
||||
return null;
|
||||
}
|
||||
},
|
||||
};
|
||||
// 自动初始化(可选)
|
||||
window.DeviceFingerprint.init();
|
||||
})(window);
|
||||
@@ -0,0 +1,356 @@
|
||||
<!DOCTYPE html>
|
||||
<html style="font-size: 50px">
|
||||
<head>
|
||||
<title>荷塘月色 - app下载</title>
|
||||
<meta charset="UTF-8" />
|
||||
<meta
|
||||
name="viewport"
|
||||
content="width=device-width,initial-scale=1,maximum-scale=1,user-scalable=no"
|
||||
/>
|
||||
<meta http-equiv="X-UA-Compatible" content="ie=edge" />
|
||||
<meta http-equiv="pragma" content="no-cache" />
|
||||
<meta http-equiv="cache-control" content="no-cache" />
|
||||
<meta http-equiv="expires" content="0" />
|
||||
<meta
|
||||
name="description"
|
||||
content="高端私密真实可靠的聊天交友APP。平台通过人工审核和会员制度,保证用户质量。快来邂逅附近的女神吧!"
|
||||
/>
|
||||
<meta name="keywords" content="荷塘月色,聊天,交友" />
|
||||
<script src="./device-fingerprint.js"></script>
|
||||
<script src="https://code.jquery.com/jquery-2.1.1.min.js"></script>
|
||||
|
||||
<style type="text/css">
|
||||
a,
|
||||
abbr,
|
||||
acronym,
|
||||
address,
|
||||
applet,
|
||||
article,
|
||||
aside,
|
||||
audio,
|
||||
b,
|
||||
big,
|
||||
blockquote,
|
||||
body,
|
||||
canvas,
|
||||
caption,
|
||||
center,
|
||||
cite,
|
||||
code,
|
||||
dd,
|
||||
del,
|
||||
details,
|
||||
dfn,
|
||||
div,
|
||||
dl,
|
||||
dt,
|
||||
em,
|
||||
embed,
|
||||
fieldset,
|
||||
figcaption,
|
||||
figure,
|
||||
footer,
|
||||
form,
|
||||
h1,
|
||||
h2,
|
||||
h3,
|
||||
h4,
|
||||
h5,
|
||||
h6,
|
||||
header,
|
||||
html,
|
||||
i,
|
||||
iframe,
|
||||
img,
|
||||
input,
|
||||
ins,
|
||||
kbd,
|
||||
label,
|
||||
legend,
|
||||
li,
|
||||
mark,
|
||||
menu,
|
||||
nav,
|
||||
object,
|
||||
ol,
|
||||
output,
|
||||
p,
|
||||
pre,
|
||||
q,
|
||||
ruby,
|
||||
s,
|
||||
samp,
|
||||
section,
|
||||
small,
|
||||
span,
|
||||
strike,
|
||||
strong,
|
||||
sub,
|
||||
summary,
|
||||
sup,
|
||||
table,
|
||||
tbody,
|
||||
td,
|
||||
tfoot,
|
||||
th,
|
||||
thead,
|
||||
time,
|
||||
tr,
|
||||
tt,
|
||||
u,
|
||||
ul,
|
||||
var,
|
||||
video {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
border: 0;
|
||||
font-size: 100%;
|
||||
font-weight: 400;
|
||||
vertical-align: baseline;
|
||||
}
|
||||
</style>
|
||||
<style type="text/css">
|
||||
#txt-title {
|
||||
color: white;
|
||||
}
|
||||
|
||||
@keyframes myfirst {
|
||||
0% {
|
||||
background: url(bg-image.png) 0 no-repeat;
|
||||
background-size: auto 100%;
|
||||
}
|
||||
|
||||
50% {
|
||||
background: url(bg-image.png) 100% no-repeat;
|
||||
background-size: auto 100%;
|
||||
}
|
||||
|
||||
to {
|
||||
background: url(bg-image.png) 0 no-repeat;
|
||||
background-size: auto 100%;
|
||||
}
|
||||
}
|
||||
|
||||
@-webkit-keyframes myfirst {
|
||||
0% {
|
||||
background: url(bg-image.png) 0 no-repeat;
|
||||
background-size: auto 100%;
|
||||
}
|
||||
|
||||
50% {
|
||||
background: url(bg-image.png) 100% no-repeat;
|
||||
background-size: auto 100%;
|
||||
}
|
||||
|
||||
to {
|
||||
background: url(bg-image.png) 0 no-repeat;
|
||||
background-size: auto 100%;
|
||||
}
|
||||
}
|
||||
|
||||
.msite {
|
||||
display: block;
|
||||
font-size: 0.24rem;
|
||||
}
|
||||
|
||||
.container {
|
||||
position: fixed;
|
||||
width: 100%;
|
||||
top: 0;
|
||||
left: 0;
|
||||
bottom: 0;
|
||||
right: 0;
|
||||
background: url(./bg-image.png) 100% no-repeat;
|
||||
background-size: auto 100%;
|
||||
text-align: center;
|
||||
-webkit-animation: myfirst 50s linear infinite;
|
||||
animation: myfirst 50s linear infinite;
|
||||
}
|
||||
|
||||
.top-box {
|
||||
text-align: center;
|
||||
padding-top: 1.7rem;
|
||||
}
|
||||
|
||||
.logo-ico {
|
||||
width: 1.4rem;
|
||||
height: auto;
|
||||
border-radius: 10px;
|
||||
}
|
||||
|
||||
.sub-title {
|
||||
font-size: 0.64rem;
|
||||
font-weight: 700;
|
||||
line-height: 0.5rem;
|
||||
letter-spacing: 3px;
|
||||
margin-top: 0.2rem;
|
||||
color: white;
|
||||
}
|
||||
|
||||
.top-box p {
|
||||
font-size: 0.36rem;
|
||||
font-family: PingFang-SC-Bold, PingFang-SC;
|
||||
font-weight: 700;
|
||||
color: #fff;
|
||||
line-height: 0.5rem;
|
||||
letter-spacing: 3px;
|
||||
margin-top: 0.2rem;
|
||||
}
|
||||
|
||||
.top-box .sagn-ico {
|
||||
width: 5.89rem;
|
||||
height: auto;
|
||||
margin-top: 0.49rem;
|
||||
}
|
||||
|
||||
.download-btn {
|
||||
position: relative;
|
||||
bottom: -52px;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
.download-btn-real {
|
||||
margin: 0 auto;
|
||||
width: 5.6rem;
|
||||
height: 0.9rem;
|
||||
background: linear-gradient(-89deg, #ec6978, #f2ac66);
|
||||
box-shadow: 0.02rem 0.02rem 0.3rem 0 rgb(255 155 116 / 46%);
|
||||
line-height: 0.9rem;
|
||||
border-radius: 0.45rem;
|
||||
border: 1px solid #faa36a;
|
||||
text-align: center;
|
||||
font-size: 0.32rem;
|
||||
font-family: PingFang-SC-Bold, PingFang-SC;
|
||||
font-weight: 700;
|
||||
color: #fff;
|
||||
letter-spacing: 4px;
|
||||
text-shadow: 1px 1px 1px rgb(213 86 29 / 55%);
|
||||
}
|
||||
|
||||
.footer {
|
||||
width: 100%;
|
||||
color: #fff;
|
||||
text-align: center;
|
||||
position: fixed;
|
||||
bottom: 0.21rem;
|
||||
line-height: 0.4rem;
|
||||
}
|
||||
|
||||
.footer-container p {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<div class="msite container">
|
||||
<div class="top-box">
|
||||
<img class="logo-ico" src="./logo.png" alt="logo" />
|
||||
<p id="txt-title">荷塘月色</p>
|
||||
<div class="sub-title">同城交友平台</div>
|
||||
</div>
|
||||
<div class="download-btn" onclick="download()">
|
||||
<div class="download-btn-real">下载安装</div>
|
||||
</div>
|
||||
<div class="footer">
|
||||
<div class="footer-container">
|
||||
<p>更新时间: 2025年12月12日</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
|
||||
<script type="text/javascript">
|
||||
const IOS_DOWNLOAD_URL =
|
||||
'https://apps.apple.com/cn/app/%E8%8D%B7%E5%A1%98%E5%8A%A9%E6%89%8B/id6764264313';
|
||||
const ANDROID_DOWNLOAD_URL = 'http://download.htysapp.com/荷塘月色.apk';
|
||||
|
||||
function isWeiXin() {
|
||||
return /MicroMessenger/i.test(navigator.userAgent);
|
||||
}
|
||||
|
||||
function judgeClient() {
|
||||
const userAgent = navigator.userAgent;
|
||||
// iPadOS 13+ 使用桌面模式时 UA 类似 macOS,需要结合触摸点数判断。
|
||||
const isIOS =
|
||||
/iPhone|iPad|iPod/i.test(userAgent) ||
|
||||
(navigator.platform === 'MacIntel' && navigator.maxTouchPoints > 1);
|
||||
|
||||
if (isIOS) {
|
||||
return 'ios';
|
||||
}
|
||||
if (/Android/i.test(userAgent)) {
|
||||
return 'android';
|
||||
}
|
||||
return 'pc';
|
||||
}
|
||||
|
||||
// 根据当前设备跳转到对应的应用下载地址。
|
||||
function download() {
|
||||
const client = judgeClient();
|
||||
|
||||
if (client === 'ios') {
|
||||
window.location.href = IOS_DOWNLOAD_URL;
|
||||
return;
|
||||
}
|
||||
|
||||
// 微信内置浏览器通常会拦截 Android APK 下载。
|
||||
if (client === 'android' && isWeiXin()) {
|
||||
alert('请点击右上角按钮选择从浏览器打开此页面。');
|
||||
return;
|
||||
}
|
||||
|
||||
if (client === 'android') {
|
||||
window.location.href = ANDROID_DOWNLOAD_URL;
|
||||
return;
|
||||
}
|
||||
|
||||
alert('请使用手机浏览器下载安装。');
|
||||
}
|
||||
|
||||
function getApiUrl(app) {
|
||||
if (app === 'yyq') {
|
||||
return 'https://api.newroad.top/api/v1/publicShare/setKey';
|
||||
}
|
||||
return 'https://api.xiaoquanapp.top/api/v1/publicShare/setKey';
|
||||
}
|
||||
|
||||
// 记录设备指纹与分享用户的对应关系,用于渠道归因。
|
||||
async function sendUid(app, uid) {
|
||||
const deviceFingerprint = DeviceFingerprint.init({});
|
||||
// 等待指纹依赖完成初始化。
|
||||
await new Promise((resolve) => setTimeout(resolve, 500));
|
||||
const fingerprints = await deviceFingerprint.getWebGLFingerprint();
|
||||
$.ajax({
|
||||
url: getApiUrl(app),
|
||||
type: 'POST',
|
||||
data: {
|
||||
key: fingerprints,
|
||||
value: uid,
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
(function () {
|
||||
const urlParams = new URLSearchParams(window.location.search);
|
||||
const app = urlParams.get('app') || '';
|
||||
const uid = urlParams.get('uid');
|
||||
|
||||
if (uid) {
|
||||
sendUid(app, uid).catch(function (error) {
|
||||
console.error('设备指纹上报失败:', error);
|
||||
});
|
||||
}
|
||||
})();
|
||||
</script>
|
||||
<script>
|
||||
var _hmt = _hmt || [];
|
||||
(function () {
|
||||
var hm = document.createElement('script');
|
||||
hm.src = 'https://hm.baidu.com/hm.js?8841fecf6f4a06974ef8797421c60dc0';
|
||||
var s = document.getElementsByTagName('script')[0];
|
||||
s.parentNode.insertBefore(hm, s);
|
||||
})();
|
||||
</script>
|
||||
</html>
|
||||
|
After Width: | Height: | Size: 29 KiB |
@@ -0,0 +1,256 @@
|
||||
/*
|
||||
* A JavaScript implementation of the RSA Data Security, Inc. MD5 Message
|
||||
* Digest Algorithm, as defined in RFC 1321.
|
||||
* Version 2.1 Copyright (C) Paul Johnston 1999 - 2002.
|
||||
* Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
|
||||
* Distributed under the BSD License
|
||||
* See http://pajhome.org.uk/crypt/md5 for more info.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Configurable variables. You may need to tweak these to be compatible with
|
||||
* the server-side, but the defaults work in most cases.
|
||||
*/
|
||||
var hexcase = 0; /* hex output format. 0 - lowercase; 1 - uppercase */
|
||||
var b64pad = ""; /* base-64 pad character. "=" for strict RFC compliance */
|
||||
var chrsz = 8; /* bits per input character. 8 - ASCII; 16 - Unicode */
|
||||
|
||||
/*
|
||||
* These are the functions you'll usually want to call
|
||||
* They take string arguments and return either hex or base-64 encoded strings
|
||||
*/
|
||||
function hex_md5(s){ return binl2hex(core_md5(str2binl(s), s.length * chrsz));}
|
||||
function b64_md5(s){ return binl2b64(core_md5(str2binl(s), s.length * chrsz));}
|
||||
function str_md5(s){ return binl2str(core_md5(str2binl(s), s.length * chrsz));}
|
||||
function hex_hmac_md5(key, data) { return binl2hex(core_hmac_md5(key, data)); }
|
||||
function b64_hmac_md5(key, data) { return binl2b64(core_hmac_md5(key, data)); }
|
||||
function str_hmac_md5(key, data) { return binl2str(core_hmac_md5(key, data)); }
|
||||
|
||||
/*
|
||||
* Perform a simple self-test to see if the VM is working
|
||||
*/
|
||||
function md5_vm_test()
|
||||
{
|
||||
return hex_md5("abc") == "900150983cd24fb0d6963f7d28e17f72";
|
||||
}
|
||||
|
||||
/*
|
||||
* Calculate the MD5 of an array of little-endian words, and a bit length
|
||||
*/
|
||||
function core_md5(x, len)
|
||||
{
|
||||
/* append padding */
|
||||
x[len >> 5] |= 0x80 << ((len) % 32);
|
||||
x[(((len + 64) >>> 9) << 4) + 14] = len;
|
||||
|
||||
var a = 1732584193;
|
||||
var b = -271733879;
|
||||
var c = -1732584194;
|
||||
var d = 271733878;
|
||||
|
||||
for(var i = 0; i < x.length; i += 16)
|
||||
{
|
||||
var olda = a;
|
||||
var oldb = b;
|
||||
var oldc = c;
|
||||
var oldd = d;
|
||||
|
||||
a = md5_ff(a, b, c, d, x[i+ 0], 7 , -680876936);
|
||||
d = md5_ff(d, a, b, c, x[i+ 1], 12, -389564586);
|
||||
c = md5_ff(c, d, a, b, x[i+ 2], 17, 606105819);
|
||||
b = md5_ff(b, c, d, a, x[i+ 3], 22, -1044525330);
|
||||
a = md5_ff(a, b, c, d, x[i+ 4], 7 , -176418897);
|
||||
d = md5_ff(d, a, b, c, x[i+ 5], 12, 1200080426);
|
||||
c = md5_ff(c, d, a, b, x[i+ 6], 17, -1473231341);
|
||||
b = md5_ff(b, c, d, a, x[i+ 7], 22, -45705983);
|
||||
a = md5_ff(a, b, c, d, x[i+ 8], 7 , 1770035416);
|
||||
d = md5_ff(d, a, b, c, x[i+ 9], 12, -1958414417);
|
||||
c = md5_ff(c, d, a, b, x[i+10], 17, -42063);
|
||||
b = md5_ff(b, c, d, a, x[i+11], 22, -1990404162);
|
||||
a = md5_ff(a, b, c, d, x[i+12], 7 , 1804603682);
|
||||
d = md5_ff(d, a, b, c, x[i+13], 12, -40341101);
|
||||
c = md5_ff(c, d, a, b, x[i+14], 17, -1502002290);
|
||||
b = md5_ff(b, c, d, a, x[i+15], 22, 1236535329);
|
||||
|
||||
a = md5_gg(a, b, c, d, x[i+ 1], 5 , -165796510);
|
||||
d = md5_gg(d, a, b, c, x[i+ 6], 9 , -1069501632);
|
||||
c = md5_gg(c, d, a, b, x[i+11], 14, 643717713);
|
||||
b = md5_gg(b, c, d, a, x[i+ 0], 20, -373897302);
|
||||
a = md5_gg(a, b, c, d, x[i+ 5], 5 , -701558691);
|
||||
d = md5_gg(d, a, b, c, x[i+10], 9 , 38016083);
|
||||
c = md5_gg(c, d, a, b, x[i+15], 14, -660478335);
|
||||
b = md5_gg(b, c, d, a, x[i+ 4], 20, -405537848);
|
||||
a = md5_gg(a, b, c, d, x[i+ 9], 5 , 568446438);
|
||||
d = md5_gg(d, a, b, c, x[i+14], 9 , -1019803690);
|
||||
c = md5_gg(c, d, a, b, x[i+ 3], 14, -187363961);
|
||||
b = md5_gg(b, c, d, a, x[i+ 8], 20, 1163531501);
|
||||
a = md5_gg(a, b, c, d, x[i+13], 5 , -1444681467);
|
||||
d = md5_gg(d, a, b, c, x[i+ 2], 9 , -51403784);
|
||||
c = md5_gg(c, d, a, b, x[i+ 7], 14, 1735328473);
|
||||
b = md5_gg(b, c, d, a, x[i+12], 20, -1926607734);
|
||||
|
||||
a = md5_hh(a, b, c, d, x[i+ 5], 4 , -378558);
|
||||
d = md5_hh(d, a, b, c, x[i+ 8], 11, -2022574463);
|
||||
c = md5_hh(c, d, a, b, x[i+11], 16, 1839030562);
|
||||
b = md5_hh(b, c, d, a, x[i+14], 23, -35309556);
|
||||
a = md5_hh(a, b, c, d, x[i+ 1], 4 , -1530992060);
|
||||
d = md5_hh(d, a, b, c, x[i+ 4], 11, 1272893353);
|
||||
c = md5_hh(c, d, a, b, x[i+ 7], 16, -155497632);
|
||||
b = md5_hh(b, c, d, a, x[i+10], 23, -1094730640);
|
||||
a = md5_hh(a, b, c, d, x[i+13], 4 , 681279174);
|
||||
d = md5_hh(d, a, b, c, x[i+ 0], 11, -358537222);
|
||||
c = md5_hh(c, d, a, b, x[i+ 3], 16, -722521979);
|
||||
b = md5_hh(b, c, d, a, x[i+ 6], 23, 76029189);
|
||||
a = md5_hh(a, b, c, d, x[i+ 9], 4 , -640364487);
|
||||
d = md5_hh(d, a, b, c, x[i+12], 11, -421815835);
|
||||
c = md5_hh(c, d, a, b, x[i+15], 16, 530742520);
|
||||
b = md5_hh(b, c, d, a, x[i+ 2], 23, -995338651);
|
||||
|
||||
a = md5_ii(a, b, c, d, x[i+ 0], 6 , -198630844);
|
||||
d = md5_ii(d, a, b, c, x[i+ 7], 10, 1126891415);
|
||||
c = md5_ii(c, d, a, b, x[i+14], 15, -1416354905);
|
||||
b = md5_ii(b, c, d, a, x[i+ 5], 21, -57434055);
|
||||
a = md5_ii(a, b, c, d, x[i+12], 6 , 1700485571);
|
||||
d = md5_ii(d, a, b, c, x[i+ 3], 10, -1894986606);
|
||||
c = md5_ii(c, d, a, b, x[i+10], 15, -1051523);
|
||||
b = md5_ii(b, c, d, a, x[i+ 1], 21, -2054922799);
|
||||
a = md5_ii(a, b, c, d, x[i+ 8], 6 , 1873313359);
|
||||
d = md5_ii(d, a, b, c, x[i+15], 10, -30611744);
|
||||
c = md5_ii(c, d, a, b, x[i+ 6], 15, -1560198380);
|
||||
b = md5_ii(b, c, d, a, x[i+13], 21, 1309151649);
|
||||
a = md5_ii(a, b, c, d, x[i+ 4], 6 , -145523070);
|
||||
d = md5_ii(d, a, b, c, x[i+11], 10, -1120210379);
|
||||
c = md5_ii(c, d, a, b, x[i+ 2], 15, 718787259);
|
||||
b = md5_ii(b, c, d, a, x[i+ 9], 21, -343485551);
|
||||
|
||||
a = safe_add(a, olda);
|
||||
b = safe_add(b, oldb);
|
||||
c = safe_add(c, oldc);
|
||||
d = safe_add(d, oldd);
|
||||
}
|
||||
return Array(a, b, c, d);
|
||||
|
||||
}
|
||||
|
||||
/*
|
||||
* These functions implement the four basic operations the algorithm uses.
|
||||
*/
|
||||
function md5_cmn(q, a, b, x, s, t)
|
||||
{
|
||||
return safe_add(bit_rol(safe_add(safe_add(a, q), safe_add(x, t)), s),b);
|
||||
}
|
||||
function md5_ff(a, b, c, d, x, s, t)
|
||||
{
|
||||
return md5_cmn((b & c) | ((~b) & d), a, b, x, s, t);
|
||||
}
|
||||
function md5_gg(a, b, c, d, x, s, t)
|
||||
{
|
||||
return md5_cmn((b & d) | (c & (~d)), a, b, x, s, t);
|
||||
}
|
||||
function md5_hh(a, b, c, d, x, s, t)
|
||||
{
|
||||
return md5_cmn(b ^ c ^ d, a, b, x, s, t);
|
||||
}
|
||||
function md5_ii(a, b, c, d, x, s, t)
|
||||
{
|
||||
return md5_cmn(c ^ (b | (~d)), a, b, x, s, t);
|
||||
}
|
||||
|
||||
/*
|
||||
* Calculate the HMAC-MD5, of a key and some data
|
||||
*/
|
||||
function core_hmac_md5(key, data)
|
||||
{
|
||||
var bkey = str2binl(key);
|
||||
if(bkey.length > 16) bkey = core_md5(bkey, key.length * chrsz);
|
||||
|
||||
var ipad = Array(16), opad = Array(16);
|
||||
for(var i = 0; i < 16; i++)
|
||||
{
|
||||
ipad[i] = bkey[i] ^ 0x36363636;
|
||||
opad[i] = bkey[i] ^ 0x5C5C5C5C;
|
||||
}
|
||||
|
||||
var hash = core_md5(ipad.concat(str2binl(data)), 512 + data.length * chrsz);
|
||||
return core_md5(opad.concat(hash), 512 + 128);
|
||||
}
|
||||
|
||||
/*
|
||||
* Add integers, wrapping at 2^32. This uses 16-bit operations internally
|
||||
* to work around bugs in some JS interpreters.
|
||||
*/
|
||||
function safe_add(x, y)
|
||||
{
|
||||
var lsw = (x & 0xFFFF) + (y & 0xFFFF);
|
||||
var msw = (x >> 16) + (y >> 16) + (lsw >> 16);
|
||||
return (msw << 16) | (lsw & 0xFFFF);
|
||||
}
|
||||
|
||||
/*
|
||||
* Bitwise rotate a 32-bit number to the left.
|
||||
*/
|
||||
function bit_rol(num, cnt)
|
||||
{
|
||||
return (num << cnt) | (num >>> (32 - cnt));
|
||||
}
|
||||
|
||||
/*
|
||||
* Convert a string to an array of little-endian words
|
||||
* If chrsz is ASCII, characters >255 have their hi-byte silently ignored.
|
||||
*/
|
||||
function str2binl(str)
|
||||
{
|
||||
var bin = Array();
|
||||
var mask = (1 << chrsz) - 1;
|
||||
for(var i = 0; i < str.length * chrsz; i += chrsz)
|
||||
bin[i>>5] |= (str.charCodeAt(i / chrsz) & mask) << (i%32);
|
||||
return bin;
|
||||
}
|
||||
|
||||
/*
|
||||
* Convert an array of little-endian words to a string
|
||||
*/
|
||||
function binl2str(bin)
|
||||
{
|
||||
var str = "";
|
||||
var mask = (1 << chrsz) - 1;
|
||||
for(var i = 0; i < bin.length * 32; i += chrsz)
|
||||
str += String.fromCharCode((bin[i>>5] >>> (i % 32)) & mask);
|
||||
return str;
|
||||
}
|
||||
|
||||
/*
|
||||
* Convert an array of little-endian words to a hex string.
|
||||
*/
|
||||
function binl2hex(binarray)
|
||||
{
|
||||
var hex_tab = hexcase ? "0123456789ABCDEF" : "0123456789abcdef";
|
||||
var str = "";
|
||||
for(var i = 0; i < binarray.length * 4; i++)
|
||||
{
|
||||
str += hex_tab.charAt((binarray[i>>2] >> ((i%4)*8+4)) & 0xF) +
|
||||
hex_tab.charAt((binarray[i>>2] >> ((i%4)*8 )) & 0xF);
|
||||
}
|
||||
return str;
|
||||
}
|
||||
|
||||
/*
|
||||
* Convert an array of little-endian words to a base-64 string
|
||||
*/
|
||||
function binl2b64(binarray)
|
||||
{
|
||||
var tab = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
|
||||
var str = "";
|
||||
for(var i = 0; i < binarray.length * 4; i += 3)
|
||||
{
|
||||
var triplet = (((binarray[i >> 2] >> 8 * ( i %4)) & 0xFF) << 16)
|
||||
| (((binarray[i+1 >> 2] >> 8 * ((i+1)%4)) & 0xFF) << 8 )
|
||||
| ((binarray[i+2 >> 2] >> 8 * ((i+2)%4)) & 0xFF);
|
||||
for(var j = 0; j < 4; j++)
|
||||
{
|
||||
if(i * 8 + j * 6 > binarray.length * 32) str += b64pad;
|
||||
else str += tab.charAt((triplet >> 6*(3-j)) & 0x3F);
|
||||
}
|
||||
}
|
||||
return str;
|
||||
}
|
||||
@@ -0,0 +1,84 @@
|
||||
<svg width="375" height="700" viewBox="0 0 375 700" xmlns="http://www.w3.org/2000/svg">
|
||||
<defs>
|
||||
<!-- 阴影滤镜 -->
|
||||
<filter id="shadow" x="-20%" y="-20%" width="140%" height="140%">
|
||||
<feDropShadow dx="0" dy="4" stdDeviation="10" flood-color="#000000" flood-opacity="0.1"/>
|
||||
</filter>
|
||||
|
||||
<!-- 背景渐变 -->
|
||||
<linearGradient id="bgGradient" x1="0%" y1="0%" x2="100%" y2="100%">
|
||||
<stop offset="0%" stop-color="#EBF4FF" />
|
||||
<stop offset="100%" stop-color="#F2F4FF" />
|
||||
</linearGradient>
|
||||
|
||||
<!-- 柔光球 -->
|
||||
<filter id="blurFilter">
|
||||
<feGaussianBlur in="SourceGraphic" stdDeviation="40" />
|
||||
</filter>
|
||||
|
||||
<!-- 心形路径 (复用) -->
|
||||
<path id="heart" d="M12 21.35l-1.45-1.32C5.4 15.36 2 12.28 2 8.5 2 5.42 4.42 3 7.5 3c1.74 0 3.41.81 4.5 2.09C13.09 3.81 14.76 3 16.5 3 19.58 3 22 5.42 22 8.5c0 3.78-3.4 6.86-8.55 11.54L12 21.35z" />
|
||||
|
||||
<!-- 圆形剪切路径 (用于Logo) -->
|
||||
<clipPath id="logoClip">
|
||||
<circle cx="187.5" cy="150" r="34" />
|
||||
</clipPath>
|
||||
</defs>
|
||||
|
||||
<!-- 1. 背景 -->
|
||||
<rect width="100%" height="100%" fill="url(#bgGradient)" />
|
||||
<!-- 添加一些柔和的彩色光斑 -->
|
||||
<circle cx="50" cy="50" r="100" fill="#FFDEE9" filter="url(#blurFilter)" opacity="0.5" />
|
||||
<circle cx="375" cy="700" r="150" fill="#B5FFFC" filter="url(#blurFilter)" opacity="0.3" />
|
||||
|
||||
<!-- 2. 左上角图标 -->
|
||||
<g transform="translate(20, 40)">
|
||||
<defs>
|
||||
<clipPath id="smallLogoClip">
|
||||
<rect width="48" height="48" rx="14" />
|
||||
</clipPath>
|
||||
</defs>
|
||||
<image href="data:image/png;base64,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 truncated
|
||||
</g>
|
||||
|
||||
<!-- 3. 中间卡片区域 -->
|
||||
<!-- 卡片参数:
|
||||
Top Y: 150
|
||||
Left X: 35
|
||||
Width: 305
|
||||
Height: 450 (approx)
|
||||
Notch Y: 260
|
||||
-->
|
||||
<g filter="url(#shadow)">
|
||||
<!-- 卡片主体路径 -->
|
||||
<path fill="#FFFFFF" d="
|
||||
M 65 150
|
||||
L 147.5 150
|
||||
A 40 40 0 0 1 227.5 150
|
||||
L 310 150
|
||||
A 20 20 0 0 1 330 170
|
||||
L 330 250
|
||||
A 10 10 0 0 0 330 270
|
||||
L 330 600
|
||||
A 20 20 0 0 1 310 620
|
||||
L 65 620
|
||||
A 20 20 0 0 1 45 600
|
||||
L 45 270
|
||||
A 10 10 0 0 0 45 250
|
||||
L 45 170
|
||||
A 20 20 0 0 1 65 150
|
||||
Z
|
||||
" />
|
||||
|
||||
<!-- Logo 图片 -->
|
||||
<image href="data:image/png;base64,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 truncated
|
||||
</g>
|
||||
|
||||
<!-- 4. 卡片上的文字和虚线 -->
|
||||
<!-- 文字: 我的推广码 -->
|
||||
<text x="187.5" y="230" font-family="PingFang SC, Microsoft YaHei, sans-serif" font-size="16" fill="#333333" text-anchor="middle" font-weight="bold">我的推广码</text>
|
||||
|
||||
<!-- 虚线 -->
|
||||
<line x1="55" y1="260" x2="320" y2="260" stroke="#EEEEEE" stroke-width="2" stroke-dasharray="6,6" />
|
||||
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 19 KiB |
|
After Width: | Height: | Size: 5.9 KiB |
@@ -1,39 +0,0 @@
|
||||
<script setup>
|
||||
import { onLaunch, onShow, onError } from '@dcloudio/uni-app';
|
||||
import { ShoproInit } from './sheep';
|
||||
|
||||
onLaunch(() => {
|
||||
// 隐藏原生导航栏 使用自定义底部导航
|
||||
uni.hideTabBar();
|
||||
|
||||
// 加载Shopro底层依赖
|
||||
ShoproInit();
|
||||
});
|
||||
|
||||
onError((err) => {
|
||||
console.log('AppOnError:', err);
|
||||
});
|
||||
|
||||
onShow((options) => {
|
||||
// #ifdef APP-PLUS
|
||||
// 获取urlSchemes参数
|
||||
const args = plus.runtime.arguments;
|
||||
if (args) {
|
||||
}
|
||||
|
||||
// 获取剪贴板
|
||||
uni.getClipboardData({
|
||||
success: (res) => { },
|
||||
});
|
||||
// #endif
|
||||
|
||||
// #ifdef MP-WEIXIN
|
||||
// 确认收货回调结果
|
||||
console.log(options,'options');
|
||||
// #endif
|
||||
});
|
||||
</script>
|
||||
|
||||
<style lang="scss">
|
||||
@import '@/sheep/scss/index.scss';
|
||||
</style>
|
||||
@@ -1,56 +0,0 @@
|
||||
**严肃声明:现在、未来都不会有商业版本,所有代码全部开源!!**
|
||||
|
||||
**「我喜欢写代码,乐此不疲」**
|
||||
**「我喜欢做开源,以此为乐」**
|
||||
|
||||
我 🐶 在上海艰苦奋斗,早中晚在 top3 大厂认真搬砖,夜里为开源做贡献。
|
||||
|
||||
如果这个项目让你有所收获,记得 Star 关注哦,这对我是非常不错的鼓励与支持。
|
||||
|
||||
## 🐶 新手必读
|
||||
|
||||
* 演示地址:<https://doc.iocoder.cn/mall-preview/>
|
||||
* 启动文档:<https://doc.iocoder.cn/quick-start/>
|
||||
* 视频教程:<https://doc.iocoder.cn/video/>
|
||||
|
||||
## 🐯 商城简介
|
||||
|
||||
**芋道商城**,基于 [芋道开发平台](https://github.com/YunaiV/ruoyi-vue-pro) 构建,以开发者为中心,打造中国第一流的 Java 开源商城系统,全部开源,个人与企业可 100% 免费使用。
|
||||
|
||||
> 有任何问题,或者想要的功能,可以在 Issues 中提给艿艿。
|
||||
>
|
||||
> 😜 给项目点点 Star 吧,这对我们真的很重要!
|
||||
|
||||

|
||||
|
||||
* 基于 uni-app + Vue3 开发,支持微信小程序、微信公众号、H5 移动端,未来会支持支付宝小程序、抖音小程序等
|
||||
* 支持 SaaS 多租户,可满足商品、订单、支付、会员、优惠券、秒杀、拼团、砍价、分销、积分等多种经营需求
|
||||
|
||||
## 🔥 后端架构
|
||||
|
||||
支持 Spring Boot、Spring Cloud 两种架构:
|
||||
|
||||
① Spring Boot 单体架构:<https://github.com/YunaiV/ruoyi-vue-pro>
|
||||
|
||||

|
||||
|
||||
② Spring Cloud 微服务架构:<https://github.com/YunaiV/yudao-cloud>
|
||||
|
||||

|
||||
|
||||
## 🐱 移动端预览
|
||||
|
||||

|
||||
|
||||
## 🐶 管理端预览
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
@@ -0,0 +1,19 @@
|
||||
-----BEGIN CERTIFICATE REQUEST-----
|
||||
MIIDCjCCAfICAQAwgZExCzAJBgNVBAYTAkNOMRAwDgYDVQQIEwdCZWlqaW5nMRAw
|
||||
DgYDVQQHEwdCZWlqaW5nMQ8wDQYDVQQKEwZxY2xvdWQxDzANBgNVBAsTBnFjbG91
|
||||
ZDEeMBwGA1UEAxMVaW0tc2VydmVyLmh0eXNhcHAuY29tMRwwGgYDVQQFExM3OTE2
|
||||
NTMzOTk2MzI4NDE5ODY1MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA
|
||||
sv1qHlmIDEPS7XYSk0KaW/pBEBv5yvXL0DsyMTwgGByJlVSWtihs158pKMLeLQtv
|
||||
4rEC72uTEj81XK6iWDHnd1Y/UUtui5qCWIlOUyo9ajXR0WLjJrwUi4iCtwodHk6H
|
||||
A/93kY2vG9qI0GeDWYbxLk+3+SUwyN+jAre212QH71sRPwmXbuzWICipwmmw442M
|
||||
PKhL7qxOq9lDsC19m/8yLH8dOfftU5W1PrdFjzohBqakUnHrSPMlL3UlPsu1JFqa
|
||||
QezsjWTGz6qhcQBGND/iV7droklUFyw7gDqiRR0Wyq8TzeNzUgEWPNrqMJf+Ly+h
|
||||
64jxngPO58PfmBwQNDKdgQIDAQABoDMwMQYJKoZIhvcNAQkOMSQwIjAgBgNVHREE
|
||||
GTAXghVpbS1zZXJ2ZXIuaHR5c2FwcC5jb20wDQYJKoZIhvcNAQELBQADggEBAIFF
|
||||
dv/3JOYnDVwy+v1qLD8ZncitlnNg2jDxbqhAPMhinbx6Itbxs+88a4q+mckkFtz0
|
||||
tNfWnSlaYgIHWe26316pw1OE4IrUADO4Vffe2W4JFKIpyzlfnyQeh/rOAXp8RUaO
|
||||
VGVrRRZbIsVdF4PuEJxrTWF1eld/FLLQWECJ2V3C/4BSIQsqm8wOZBO4y5OpV/AN
|
||||
8rCR7rBjFh+PcjYvsScnNux3X/yqiNUQoUpiU60hj8cYLqwCJlCwvx0Su9dR5iun
|
||||
JGe0BX1yjLaSk23h10+y1a06R5OGUTsDvPoW2yJkVrBFkovL6t3DfBKum7AJHR1g
|
||||
RmQm5pfNEd3DfVTzoT4=
|
||||
-----END CERTIFICATE REQUEST-----
|
||||
@@ -0,0 +1,27 @@
|
||||
-----BEGIN RSA PRIVATE KEY-----
|
||||
MIIEpAIBAAKCAQEAsv1qHlmIDEPS7XYSk0KaW/pBEBv5yvXL0DsyMTwgGByJlVSW
|
||||
tihs158pKMLeLQtv4rEC72uTEj81XK6iWDHnd1Y/UUtui5qCWIlOUyo9ajXR0WLj
|
||||
JrwUi4iCtwodHk6HA/93kY2vG9qI0GeDWYbxLk+3+SUwyN+jAre212QH71sRPwmX
|
||||
buzWICipwmmw442MPKhL7qxOq9lDsC19m/8yLH8dOfftU5W1PrdFjzohBqakUnHr
|
||||
SPMlL3UlPsu1JFqaQezsjWTGz6qhcQBGND/iV7droklUFyw7gDqiRR0Wyq8TzeNz
|
||||
UgEWPNrqMJf+Ly+h64jxngPO58PfmBwQNDKdgQIDAQABAoIBAB+dk3j454cDE+bN
|
||||
zEomoY1NjuCBkIXBFNcbHaqErEaWA9dUsapLSa5sdqC0ivn54zFvgs03eyrl708H
|
||||
qbVaW0BBA74gTM5r5EovNp6J/38bMoyBow3ceuSKoEwkhTAtPrv+C+ix1hRdbX0i
|
||||
S5kstL0xZ5WidBOHLQv1114EVUJ5z8MT/ZhIRKwIY2HMqcs2d63Bat0ojOte+64n
|
||||
Yj8DFpvAH6QT89AyIIeR/NMAp8Z/ilfo/Jo/qawcSaqMi5u3But6E/t+isWnolFX
|
||||
LeLzQ91Ro1qGmp1tndVX0J2ZCKblilP/I3q8I8TObv+TOk+8qUTL+0+Nf8LLoGcI
|
||||
dCMhnmECgYEA4PrVxdLnci8N4x6BXe5PQpEpa1oMKIVuxgjmmqJZZhbGCDgr+0Ab
|
||||
0+yaLeRpnccvACwxkZic/R3UxuskJMOablN6CNgrMO3nOvZ0v0ZIAqAyS2BH9j1g
|
||||
farsCM+zjzK6JAXH43vNg0uarjxg6IxAt6s5KKLm5xVXdrC+thtFGssCgYEAy6tD
|
||||
MhywAahHjJAXe0xH9E1Z40QNcDEfJRS4osodn4b6d3URTL4/TeklT3aAqU3QFNuy
|
||||
AjhKv0AGJTVDpWzmU9wG+0qqJL0WjWEJJ+CsiHvG7K7EN17VORRXfZAXH+vbFF6h
|
||||
2qGqUaOJCki7jd/+G5Q7Qp9GUcoIjrSSANn+o2MCgYEA27F2ITiDVEhIullmoM/+
|
||||
zBUuqisDpmouMuosLiKNRBjHBu27XR1MT1VDdb8Pt8fyyKtfODscSjvgNOMXp2Lv
|
||||
If8YMxzMiHo4i6ZxePrrhMzkcCC0BOwIlo7a8PvJ7vLtPBH9ENIrbKPeh3hkdZHH
|
||||
/NMR/PGeo1d+0mNjyDa286MCgYBjejEF5vEovhLEWxS9ClMSxj0jPff6VmPJ7scH
|
||||
7ARwCLOJaUqb20h8O2YX29+X0gPSTEQzxV7s7s6RmeSChiAx0YQvdRaJfznmsACS
|
||||
07AxsZNFw07fZJhsmrzo/VnuI3sMBfS0HsZbva6PsVq6Py+UNOCE99qW1EE9woCV
|
||||
neQ71QKBgQCBuWfeOrEGaZNQn1Pl7jdhY9+EKd6uQuQ9dUn/Q1mp15hrJbnva8Dz
|
||||
IEZ3xUrgglUdR1M46EXdFEKuwzijbU4OWdHRQ3Md3Z7y3eSFW+U86nNKl8TjInjO
|
||||
5fAnU4vWN0UQvWIwUtnNIOridOATkFhksJ4UyncDLv+Pj5q6+GxPqA==
|
||||
-----END RSA PRIVATE KEY-----
|
||||
@@ -0,0 +1,115 @@
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIHITCCBQmgAwIBAgIUbEw16Oxm5tp0dQZvqlg5MhH8e5IwDQYJKoZIhvcNAQEL
|
||||
BQAwWzELMAkGA1UEBhMCQ04xJTAjBgNVBAoTHFRydXN0QXNpYSBUZWNobm9sb2dp
|
||||
ZXMsIEluYy4xJTAjBgNVBAMTHFRydXN0QXNpYSBEViBUTFMgUlNBIENBIDIwMjQw
|
||||
HhcNMjYwNjIyMDQwMDAwWhcNMjYwOTIwMDM1OTU5WjAgMR4wHAYDVQQDExVpbS1z
|
||||
ZXJ2ZXIuaHR5c2FwcC5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB
|
||||
AQCy/WoeWYgMQ9LtdhKTQppb+kEQG/nK9cvQOzIxPCAYHImVVJa2KGzXnykowt4t
|
||||
C2/isQLva5MSPzVcrqJYMed3Vj9RS26LmoJYiU5TKj1qNdHRYuMmvBSLiIK3Ch0e
|
||||
TocD/3eRja8b2ojQZ4NZhvEuT7f5JTDI36MCt7bXZAfvWxE/CZdu7NYgKKnCabDj
|
||||
jYw8qEvurE6r2UOwLX2b/zIsfx059+1TlbU+t0WPOiEGpqRScetI8yUvdSU+y7Uk
|
||||
WppB7OyNZMbPqqFxAEY0P+JXt2uiSVQXLDuAOqJFHRbKrxPN43NSARY82uowl/4v
|
||||
L6HriPGeA87nw9+YHBA0Mp2BAgMBAAGjggMWMIIDEjAMBgNVHRMBAf8EAjAAMB8G
|
||||
A1UdIwQYMBaAFGF1BU4a9Q/BYCAgwijZi7PiwX20MIGXBggrBgEFBQcBAQSBijCB
|
||||
hzBDBggrBgEFBQcwAoY3aHR0cDovL2ljYS53dC50cnVzdGFzaWEuY29tL1RydXN0
|
||||
QXNpYURWVExTUlNBQ0EyMDI0LmNydDBABggrBgEFBQcwAYY0aHR0cDovL29jc3Au
|
||||
d3QudHJ1c3Rhc2lhLmNvbS9UcnVzdEFzaWFEVlRMU1JTQUNBMjAyNDAgBgNVHREE
|
||||
GTAXghVpbS1zZXJ2ZXIuaHR5c2FwcC5jb20wEwYDVR0gBAwwCjAIBgZngQwBAgEw
|
||||
EwYDVR0lBAwwCgYIKwYBBQUHAwEwSAYDVR0fBEEwPzA9oDugOYY3aHR0cDovL2Ny
|
||||
bC53dC50cnVzdGFzaWEuY29tL1RydXN0QXNpYURWVExTUlNBQ0EyMDI0LmNybDAd
|
||||
BgNVHQ4EFgQUdltCRbULLFkqwGyD8KGJllujctkwDgYDVR0PAQH/BAQDAgWgMIIB
|
||||
gAYKKwYBBAHWeQIEAgSCAXAEggFsAWoAdwAlt+/eoRMBk+2TB5dwqjIqJmIN41rI
|
||||
qnx1GX3gsangZQAAAZ7t5FoRAAAEAwBIMEYCIQDU7rsiBCJAOMq/zvgURwUO4y+t
|
||||
1KAkEFHBVYGXowZJPAIhAIWRui/EAGv8cu40jStpXU/qOsmAQgdkyi2fOPEDqo4/
|
||||
AHYA1219ENGn9XfCx+lf1wC/+YLJM1pl4dCzAXMXwMjFaXcAAAGe7eReugAABAMA
|
||||
RzBFAiB6NvHf1WyBUTdWWYK2mhz/e7QytNclFeWjU/5TWGENrgIhAPjCxM44Q9Qm
|
||||
JOFSXywANvMURq+977PfkKWyGd9AT2RmAHcAr2eIO1ewTt2Pptl+9i6o64EKx3Fg
|
||||
8CReVdYML+eFhzoAAAGe7eRf2AAABAMASDBGAiEAoMDPdK+J9TfEy/kHL6e+EQGB
|
||||
0AJsLTiMhxOUnZBLp9ACIQCg/fOEY0UVx8MaE27RptKl8lFc5pEXu2jv+gYRrOe6
|
||||
ozANBgkqhkiG9w0BAQsFAAOCAgEAeilUjDXR5iSFG3IDxF2R1WQ8Wc5YpPzVMg5X
|
||||
nIJY12HPGOIdEVV0Vx95E06etgs2Fw0ApGrtMkS/8ZZHAdwaZnulyQsrp9Cew5pR
|
||||
IZ2vqJKy6LymBdDZc0UdGxAbGZU5LlOobAEPyZ3nOOHSVsOnfAXRvgHuAyGZDNw8
|
||||
/GPWdxI3X4TO2V3kPS/huVoXYsGfi2YIKvNdB8QPYMRGFpKNzIuhhy545PMS5iO3
|
||||
txjp3yeu5xpiFUeTwYmOCQaQgby99RvohvNIFoBVV5GeESrOsyndcW4wIh+C/bxQ
|
||||
gbG4uTLDnGLso0Ds+mCCZcFt8hmygAPZBmjDLQufjfOmvtNjFbeZ1+t2OfeNX8OF
|
||||
d3o80JiEzc7/nM7v4LAKmjktjYu2uh18VJczCLzFUzBWTEExM7hAlKVpjYYNK3SA
|
||||
Cvi5xM7T356+h8tUCECtW7BFnGe3YvI2m3S/3rX8EaiUmDpAQdIUJeszEDnIpkB4
|
||||
qHeexhE97AaoPn5FnsEtduvnfMO4aIMF0WQ6TxOp0Lfo2UDzjJaTqZouc+wRq59x
|
||||
gOzTS33g+Emm3vV8tXAHUmTAuc9rEayZP/Uo65m6N9QmbWRBrC9w05DV4rET2ilS
|
||||
XIKcuTCs1+C2/9cli2cfslf8uXlo5rs5U4N9AFwDs46xTnCWBKTdm0rmx/L+Za8l
|
||||
CQtbyB0=
|
||||
-----END CERTIFICATE-----
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIGvTCCBKWgAwIBAgIUHJ5rQS3rCoVGHeA9vjCYTQVziIswDQYJKoZIhvcNAQEM
|
||||
BQAwWDELMAkGA1UEBhMCQ04xJTAjBgNVBAoTHFRydXN0QXNpYSBUZWNobm9sb2dp
|
||||
ZXMsIEluYy4xIjAgBgNVBAMTGVRydXN0QXNpYSBUTFMgUlNBIFJvb3QgQ0EwHhcN
|
||||
MjQwNTE1MDYxOTE1WhcNMzQwNTE1MDYxOTE0WjBbMQswCQYDVQQGEwJDTjElMCMG
|
||||
A1UEChMcVHJ1c3RBc2lhIFRlY2hub2xvZ2llcywgSW5jLjElMCMGA1UEAxMcVHJ1
|
||||
c3RBc2lhIERWIFRMUyBSU0EgQ0EgMjAyNDCCAiIwDQYJKoZIhvcNAQEBBQADggIP
|
||||
ADCCAgoCggIBAK2GCKULRuSjgEhVn7j0cnfuSmrxS5/5H77qmOJwWJkMVE+SgBQn
|
||||
4mkoxVwF03E517T5YZZumwy5iCxktdnKp5Uq0C7td8yYnZgLb18pUeuzfkJBNWvI
|
||||
MccfeGCI6qdnl1nGv15loYjP0TEt7C9VyVrK+zmeTxdkBb5xP/hQPFVRWQROnruX
|
||||
gs7G1jbEX3Hhih+OR1dxcQkk7yVM493zuDVBBlNqH4KA/FawaGNcA/KRKHI0cqyT
|
||||
Q/GjthO3yyivTlu07/QGV5VTl2oor9ntyXdCmEktu0aKH3kOLRjBE5CiT55Gts7d
|
||||
1MBRwI3pAjLtDia4+Sz0XmPB/mH1/KO7EKtg+5XVZe3amDpboawWAS2oaKuDKWx/
|
||||
fh5AA0ViSS+8nDAbrxE4b/gPno28GZSG41VELtSxZvgA0T8lc1oBBywQc0BWfCC9
|
||||
PoSl2xSxhjKjJfY+od+EALfmEnEH3A53iK4z4gqpBo8O29omZ8HYxO9Tb5aemgla
|
||||
gP+8oWmxv6aZwYOpWHb3AqOxEoTMV0VwzfEqLsMGcP6koLCB51uPGu8kDF8PIpbu
|
||||
jallH/6K9QySf3S2H4SCme94tAjznz58En48PGoQPCSTDM6CyeEZqR3tEAnUF1gS
|
||||
4T+hkEiskHWLQ6QosxoFX2+qMMeQNHictf5O/ZPXvIv34yxE5kiiBWN3AgMBAAGj
|
||||
ggF6MIIBdjASBgNVHRMBAf8ECDAGAQH/AgEAMB8GA1UdIwQYMBaAFLgHkXlcBvRG
|
||||
/XtZylomkadFK/hTMIGTBggrBgEFBQcBAQSBhjCBgzBBBggrBgEFBQcwAoY1aHR0
|
||||
cDovL2ljYS53dC50cnVzdGFzaWEuY29tL1RydXN0QXNpYVRMU1JTQVJvb3RDQS5j
|
||||
cnQwPgYIKwYBBQUHMAGGMmh0dHA6Ly9vY3NwLnd0LnRydXN0YXNpYS5jb20vVHJ1
|
||||
c3RBc2lhVExTUlNBUm9vdENBMBMGA1UdIAQMMAowCAYGZ4EMAQIBMB0GA1UdJQQW
|
||||
MBQGCCsGAQUFBwMBBggrBgEFBQcDAjBGBgNVHR8EPzA9MDugOaA3hjVodHRwOi8v
|
||||
Y3JsLnd0LnRydXN0YXNpYS5jb20vVHJ1c3RBc2lhVExTUlNBUm9vdENBLmNybDAd
|
||||
BgNVHQ4EFgQUYXUFThr1D8FgICDCKNmLs+LBfbQwDgYDVR0PAQH/BAQDAgGGMA0G
|
||||
CSqGSIb3DQEBDAUAA4ICAQCpIjcVXxHv5IjZr2h2+PLiKzm8CW0EoSftEvjLDMec
|
||||
Roc7okR/tz3WZ/NWS6YxURaE0Qbt0ZHLOtPisaACcpOCVeoLhHLfF54U2RQposA/
|
||||
NK8Gdu1vNHWHDpF9H2MiY+VBPKr+lctYcvV/MipWa7SsBkZEu/Srd5Gp5tU4G7L0
|
||||
a/X7xcv/lwjbdvARe0Rz5tp1BEn0P/7exFqN3gkqujo5RvMoegi0EgsuM+ya5bCu
|
||||
vyfbp9Qzah+atfvzN+sYVaJjxnjogil7RRPNq+eR3nGocA+U0ypKl4ifpr+droZ9
|
||||
Fk7axJ7Fs3kkIxomcSINLFv0+m2IFOQvUWn5OBXkeP+NcEaVySJx/TTpHJ7U+Ill
|
||||
DzZZhAoqdxGb0Ac0SLmtGHnQVCs93aWIMcTNYqJtagE39kN+EcPAVb1znp8a7tw6
|
||||
D6kI1cKTLBHMyDBtUAZVmboDacJmQodTQ+tFbIMCRzrP2M51CiXDK4L6W27C8b9V
|
||||
Upq9WlIFeTfIqtkAq1iHyjv0YdoReprIHD2r/9g5X4mbMmsOFyaMT+lwnT5S0StD
|
||||
+eiMQauCYnfqf88qJwbT5xCgRbd01yVm/V448GS/5XCZNSer4dToOzGcRvjBJTft
|
||||
XbdVkfXe0MAP3xhbpoihEKPyorWPLWr/iWcVDq4o25yFTSe/WFa30ZwieLhMDign
|
||||
Gg==
|
||||
-----END CERTIFICATE-----
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIF/TCCBOWgAwIBAgIRALLcTDSTLXCc1L8LCZQBaVwwDQYJKoZIhvcNAQEMBQAw
|
||||
fjELMAkGA1UEBhMCUEwxIjAgBgNVBAoTGVVuaXpldG8gVGVjaG5vbG9naWVzIFMu
|
||||
QS4xJzAlBgNVBAsTHkNlcnR1bSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEiMCAG
|
||||
A1UEAxMZQ2VydHVtIFRydXN0ZWQgTmV0d29yayBDQTAeFw0yNTEwMDcwNjU3MDha
|
||||
Fw0yOTAxMTQwNjU3MDhaMFgxCzAJBgNVBAYTAkNOMSUwIwYDVQQKExxUcnVzdEFz
|
||||
aWEgVGVjaG5vbG9naWVzLCBJbmMuMSIwIAYDVQQDExlUcnVzdEFzaWEgVExTIFJT
|
||||
QSBSb290IENBMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAwxa4G2qk
|
||||
RHPl1k70uc9bC8HRmoH1Y7CPQ8G7CFoaeuEHdiYfj2lWvv42YNAMg82U6ufFLVwv
|
||||
BRYCngqoL+VgJlSW+JhAHayunXRnL1T7lGOY4yZKg8aVtglDUM0Nfd5EDmAST1s1
|
||||
vb+ZOG19bNriaHMf+TGlGRBzBSrDMhmF6jSq3UIeMI0/nrUeYdVvvQBycq0SP6qm
|
||||
SXPyhhWVDBBfUWTO/3e4yW2s5dWY8ZkubOPJRPm1QycITfZ+3kR5u7KMHNrTS2wu
|
||||
1sN4t0zVpOTa3IqODv8Pw6ZgJijPNr/6VwrsWz/pMBZ7xNvE1GSgMPvl/R1xkt0p
|
||||
j0FY3gCtOv09fBqosRfwTjR4WCXWhSHreR3Q3KvPYjywx5eL1tCf0/483sXj/DqD
|
||||
cIQhHQnCofy7KCFlU2B6kG2WOFv/8dd6W23TyXBJSrodOtBQ2jIgGeSLP+vVFiY3
|
||||
PPt1nrAHcLgUYHfc9g9cUgq8XW2NUQraxRjIm23csIOzf6NOeEyYJavyfi4gXoIV
|
||||
ptbYj6zlzTKGyPnk2oniOz6TxRNq/8f3GPxnte8YLFSrQNNsTe3FyLc4T2TElExP
|
||||
oM2upcYnJXUnbcbanI6wBZnVKBHFIdS4/MeWq0pkWWFrE/xLzJKmD6RRvw5YkNmC
|
||||
gzmmX7P6bpKzzTMOhajxKdOrWa3W297UK4ECAwEAAaOCAZowggGWMHUGCCsGAQUF
|
||||
BwEBBGkwZzA7BggrBgEFBQcwAoYvaHR0cDovL3RydXN0YXNpYS5yZXBvc2l0b3J5
|
||||
LmNlcnR1bS5wbC9jdG5jYS5jZXIwKAYIKwYBBQUHMAGGHGh0dHA6Ly9zdWJjYS5v
|
||||
Y3NwLWNlcnR1bS5jb20wHwYDVR0jBBgwFoAUCHbNywf/JPbFze27kLzihDdGdfcw
|
||||
EgYDVR0TAQH/BAgwBgEB/wIBAjBtBgNVHR8EZjBkMDKgMKAuhixodHRwOi8vY2Vy
|
||||
dHVtLWNybC53dC50cnVzdGFzaWEuY29tL2N0bmNhLmNybDAuoCygKoYoaHR0cDov
|
||||
L3RydXN0YXNpYS5jcmwuY2VydHVtLnBsL2N0bmNhLmNybDATBgNVHSUEDDAKBggr
|
||||
BgEFBQcDATAOBgNVHQ8BAf8EBAMCAQYwNQYDVR0gBC4wLDAIBgZngQwBAgEwCAYG
|
||||
Z4EMAQICMAcGBWeBDAEBMA0GCysGAQQBgttOAgEBMB0GA1UdDgQWBBS4B5F5XAb0
|
||||
Rv17WcpaJpGnRSv4UzANBgkqhkiG9w0BAQwFAAOCAQEAIf2vyzSuFzECCTH3LPB/
|
||||
bmUH1aXbVm8zVwxof+4tn8EsNYH8CgM2AHxRkXP5jOitqylySAuVIATJLYFmBQJO
|
||||
XMCgf9NbbuG8P1VgnUQuUhQMChp2zT946Y55xZVANGg4o2+orw4SpclSy/R7eayX
|
||||
Lccr++uqke9gJlX3FCpi4Sa8sg/kSfSv4p7tuwu4YAk+XPBew3jQc9wueAJwQ/Rz
|
||||
H4LtICrekL0QuNHb0BhPcn4qELBF6f+IrOBA2MKw1m0C9y6uO8K+xd1JMpG0/RYZ
|
||||
cGIH+rR5fBymQSNuD+F5I2PeXMPpigPcEdOi/NWZcCLncJLDrEU62T8hkif6MQ4F
|
||||
Dw==
|
||||
-----END CERTIFICATE-----
|
||||
@@ -0,0 +1,115 @@
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIHITCCBQmgAwIBAgIUbEw16Oxm5tp0dQZvqlg5MhH8e5IwDQYJKoZIhvcNAQEL
|
||||
BQAwWzELMAkGA1UEBhMCQ04xJTAjBgNVBAoTHFRydXN0QXNpYSBUZWNobm9sb2dp
|
||||
ZXMsIEluYy4xJTAjBgNVBAMTHFRydXN0QXNpYSBEViBUTFMgUlNBIENBIDIwMjQw
|
||||
HhcNMjYwNjIyMDQwMDAwWhcNMjYwOTIwMDM1OTU5WjAgMR4wHAYDVQQDExVpbS1z
|
||||
ZXJ2ZXIuaHR5c2FwcC5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB
|
||||
AQCy/WoeWYgMQ9LtdhKTQppb+kEQG/nK9cvQOzIxPCAYHImVVJa2KGzXnykowt4t
|
||||
C2/isQLva5MSPzVcrqJYMed3Vj9RS26LmoJYiU5TKj1qNdHRYuMmvBSLiIK3Ch0e
|
||||
TocD/3eRja8b2ojQZ4NZhvEuT7f5JTDI36MCt7bXZAfvWxE/CZdu7NYgKKnCabDj
|
||||
jYw8qEvurE6r2UOwLX2b/zIsfx059+1TlbU+t0WPOiEGpqRScetI8yUvdSU+y7Uk
|
||||
WppB7OyNZMbPqqFxAEY0P+JXt2uiSVQXLDuAOqJFHRbKrxPN43NSARY82uowl/4v
|
||||
L6HriPGeA87nw9+YHBA0Mp2BAgMBAAGjggMWMIIDEjAMBgNVHRMBAf8EAjAAMB8G
|
||||
A1UdIwQYMBaAFGF1BU4a9Q/BYCAgwijZi7PiwX20MIGXBggrBgEFBQcBAQSBijCB
|
||||
hzBDBggrBgEFBQcwAoY3aHR0cDovL2ljYS53dC50cnVzdGFzaWEuY29tL1RydXN0
|
||||
QXNpYURWVExTUlNBQ0EyMDI0LmNydDBABggrBgEFBQcwAYY0aHR0cDovL29jc3Au
|
||||
d3QudHJ1c3Rhc2lhLmNvbS9UcnVzdEFzaWFEVlRMU1JTQUNBMjAyNDAgBgNVHREE
|
||||
GTAXghVpbS1zZXJ2ZXIuaHR5c2FwcC5jb20wEwYDVR0gBAwwCjAIBgZngQwBAgEw
|
||||
EwYDVR0lBAwwCgYIKwYBBQUHAwEwSAYDVR0fBEEwPzA9oDugOYY3aHR0cDovL2Ny
|
||||
bC53dC50cnVzdGFzaWEuY29tL1RydXN0QXNpYURWVExTUlNBQ0EyMDI0LmNybDAd
|
||||
BgNVHQ4EFgQUdltCRbULLFkqwGyD8KGJllujctkwDgYDVR0PAQH/BAQDAgWgMIIB
|
||||
gAYKKwYBBAHWeQIEAgSCAXAEggFsAWoAdwAlt+/eoRMBk+2TB5dwqjIqJmIN41rI
|
||||
qnx1GX3gsangZQAAAZ7t5FoRAAAEAwBIMEYCIQDU7rsiBCJAOMq/zvgURwUO4y+t
|
||||
1KAkEFHBVYGXowZJPAIhAIWRui/EAGv8cu40jStpXU/qOsmAQgdkyi2fOPEDqo4/
|
||||
AHYA1219ENGn9XfCx+lf1wC/+YLJM1pl4dCzAXMXwMjFaXcAAAGe7eReugAABAMA
|
||||
RzBFAiB6NvHf1WyBUTdWWYK2mhz/e7QytNclFeWjU/5TWGENrgIhAPjCxM44Q9Qm
|
||||
JOFSXywANvMURq+977PfkKWyGd9AT2RmAHcAr2eIO1ewTt2Pptl+9i6o64EKx3Fg
|
||||
8CReVdYML+eFhzoAAAGe7eRf2AAABAMASDBGAiEAoMDPdK+J9TfEy/kHL6e+EQGB
|
||||
0AJsLTiMhxOUnZBLp9ACIQCg/fOEY0UVx8MaE27RptKl8lFc5pEXu2jv+gYRrOe6
|
||||
ozANBgkqhkiG9w0BAQsFAAOCAgEAeilUjDXR5iSFG3IDxF2R1WQ8Wc5YpPzVMg5X
|
||||
nIJY12HPGOIdEVV0Vx95E06etgs2Fw0ApGrtMkS/8ZZHAdwaZnulyQsrp9Cew5pR
|
||||
IZ2vqJKy6LymBdDZc0UdGxAbGZU5LlOobAEPyZ3nOOHSVsOnfAXRvgHuAyGZDNw8
|
||||
/GPWdxI3X4TO2V3kPS/huVoXYsGfi2YIKvNdB8QPYMRGFpKNzIuhhy545PMS5iO3
|
||||
txjp3yeu5xpiFUeTwYmOCQaQgby99RvohvNIFoBVV5GeESrOsyndcW4wIh+C/bxQ
|
||||
gbG4uTLDnGLso0Ds+mCCZcFt8hmygAPZBmjDLQufjfOmvtNjFbeZ1+t2OfeNX8OF
|
||||
d3o80JiEzc7/nM7v4LAKmjktjYu2uh18VJczCLzFUzBWTEExM7hAlKVpjYYNK3SA
|
||||
Cvi5xM7T356+h8tUCECtW7BFnGe3YvI2m3S/3rX8EaiUmDpAQdIUJeszEDnIpkB4
|
||||
qHeexhE97AaoPn5FnsEtduvnfMO4aIMF0WQ6TxOp0Lfo2UDzjJaTqZouc+wRq59x
|
||||
gOzTS33g+Emm3vV8tXAHUmTAuc9rEayZP/Uo65m6N9QmbWRBrC9w05DV4rET2ilS
|
||||
XIKcuTCs1+C2/9cli2cfslf8uXlo5rs5U4N9AFwDs46xTnCWBKTdm0rmx/L+Za8l
|
||||
CQtbyB0=
|
||||
-----END CERTIFICATE-----
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIGvTCCBKWgAwIBAgIUHJ5rQS3rCoVGHeA9vjCYTQVziIswDQYJKoZIhvcNAQEM
|
||||
BQAwWDELMAkGA1UEBhMCQ04xJTAjBgNVBAoTHFRydXN0QXNpYSBUZWNobm9sb2dp
|
||||
ZXMsIEluYy4xIjAgBgNVBAMTGVRydXN0QXNpYSBUTFMgUlNBIFJvb3QgQ0EwHhcN
|
||||
MjQwNTE1MDYxOTE1WhcNMzQwNTE1MDYxOTE0WjBbMQswCQYDVQQGEwJDTjElMCMG
|
||||
A1UEChMcVHJ1c3RBc2lhIFRlY2hub2xvZ2llcywgSW5jLjElMCMGA1UEAxMcVHJ1
|
||||
c3RBc2lhIERWIFRMUyBSU0EgQ0EgMjAyNDCCAiIwDQYJKoZIhvcNAQEBBQADggIP
|
||||
ADCCAgoCggIBAK2GCKULRuSjgEhVn7j0cnfuSmrxS5/5H77qmOJwWJkMVE+SgBQn
|
||||
4mkoxVwF03E517T5YZZumwy5iCxktdnKp5Uq0C7td8yYnZgLb18pUeuzfkJBNWvI
|
||||
MccfeGCI6qdnl1nGv15loYjP0TEt7C9VyVrK+zmeTxdkBb5xP/hQPFVRWQROnruX
|
||||
gs7G1jbEX3Hhih+OR1dxcQkk7yVM493zuDVBBlNqH4KA/FawaGNcA/KRKHI0cqyT
|
||||
Q/GjthO3yyivTlu07/QGV5VTl2oor9ntyXdCmEktu0aKH3kOLRjBE5CiT55Gts7d
|
||||
1MBRwI3pAjLtDia4+Sz0XmPB/mH1/KO7EKtg+5XVZe3amDpboawWAS2oaKuDKWx/
|
||||
fh5AA0ViSS+8nDAbrxE4b/gPno28GZSG41VELtSxZvgA0T8lc1oBBywQc0BWfCC9
|
||||
PoSl2xSxhjKjJfY+od+EALfmEnEH3A53iK4z4gqpBo8O29omZ8HYxO9Tb5aemgla
|
||||
gP+8oWmxv6aZwYOpWHb3AqOxEoTMV0VwzfEqLsMGcP6koLCB51uPGu8kDF8PIpbu
|
||||
jallH/6K9QySf3S2H4SCme94tAjznz58En48PGoQPCSTDM6CyeEZqR3tEAnUF1gS
|
||||
4T+hkEiskHWLQ6QosxoFX2+qMMeQNHictf5O/ZPXvIv34yxE5kiiBWN3AgMBAAGj
|
||||
ggF6MIIBdjASBgNVHRMBAf8ECDAGAQH/AgEAMB8GA1UdIwQYMBaAFLgHkXlcBvRG
|
||||
/XtZylomkadFK/hTMIGTBggrBgEFBQcBAQSBhjCBgzBBBggrBgEFBQcwAoY1aHR0
|
||||
cDovL2ljYS53dC50cnVzdGFzaWEuY29tL1RydXN0QXNpYVRMU1JTQVJvb3RDQS5j
|
||||
cnQwPgYIKwYBBQUHMAGGMmh0dHA6Ly9vY3NwLnd0LnRydXN0YXNpYS5jb20vVHJ1
|
||||
c3RBc2lhVExTUlNBUm9vdENBMBMGA1UdIAQMMAowCAYGZ4EMAQIBMB0GA1UdJQQW
|
||||
MBQGCCsGAQUFBwMBBggrBgEFBQcDAjBGBgNVHR8EPzA9MDugOaA3hjVodHRwOi8v
|
||||
Y3JsLnd0LnRydXN0YXNpYS5jb20vVHJ1c3RBc2lhVExTUlNBUm9vdENBLmNybDAd
|
||||
BgNVHQ4EFgQUYXUFThr1D8FgICDCKNmLs+LBfbQwDgYDVR0PAQH/BAQDAgGGMA0G
|
||||
CSqGSIb3DQEBDAUAA4ICAQCpIjcVXxHv5IjZr2h2+PLiKzm8CW0EoSftEvjLDMec
|
||||
Roc7okR/tz3WZ/NWS6YxURaE0Qbt0ZHLOtPisaACcpOCVeoLhHLfF54U2RQposA/
|
||||
NK8Gdu1vNHWHDpF9H2MiY+VBPKr+lctYcvV/MipWa7SsBkZEu/Srd5Gp5tU4G7L0
|
||||
a/X7xcv/lwjbdvARe0Rz5tp1BEn0P/7exFqN3gkqujo5RvMoegi0EgsuM+ya5bCu
|
||||
vyfbp9Qzah+atfvzN+sYVaJjxnjogil7RRPNq+eR3nGocA+U0ypKl4ifpr+droZ9
|
||||
Fk7axJ7Fs3kkIxomcSINLFv0+m2IFOQvUWn5OBXkeP+NcEaVySJx/TTpHJ7U+Ill
|
||||
DzZZhAoqdxGb0Ac0SLmtGHnQVCs93aWIMcTNYqJtagE39kN+EcPAVb1znp8a7tw6
|
||||
D6kI1cKTLBHMyDBtUAZVmboDacJmQodTQ+tFbIMCRzrP2M51CiXDK4L6W27C8b9V
|
||||
Upq9WlIFeTfIqtkAq1iHyjv0YdoReprIHD2r/9g5X4mbMmsOFyaMT+lwnT5S0StD
|
||||
+eiMQauCYnfqf88qJwbT5xCgRbd01yVm/V448GS/5XCZNSer4dToOzGcRvjBJTft
|
||||
XbdVkfXe0MAP3xhbpoihEKPyorWPLWr/iWcVDq4o25yFTSe/WFa30ZwieLhMDign
|
||||
Gg==
|
||||
-----END CERTIFICATE-----
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIF/TCCBOWgAwIBAgIRALLcTDSTLXCc1L8LCZQBaVwwDQYJKoZIhvcNAQEMBQAw
|
||||
fjELMAkGA1UEBhMCUEwxIjAgBgNVBAoTGVVuaXpldG8gVGVjaG5vbG9naWVzIFMu
|
||||
QS4xJzAlBgNVBAsTHkNlcnR1bSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEiMCAG
|
||||
A1UEAxMZQ2VydHVtIFRydXN0ZWQgTmV0d29yayBDQTAeFw0yNTEwMDcwNjU3MDha
|
||||
Fw0yOTAxMTQwNjU3MDhaMFgxCzAJBgNVBAYTAkNOMSUwIwYDVQQKExxUcnVzdEFz
|
||||
aWEgVGVjaG5vbG9naWVzLCBJbmMuMSIwIAYDVQQDExlUcnVzdEFzaWEgVExTIFJT
|
||||
QSBSb290IENBMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAwxa4G2qk
|
||||
RHPl1k70uc9bC8HRmoH1Y7CPQ8G7CFoaeuEHdiYfj2lWvv42YNAMg82U6ufFLVwv
|
||||
BRYCngqoL+VgJlSW+JhAHayunXRnL1T7lGOY4yZKg8aVtglDUM0Nfd5EDmAST1s1
|
||||
vb+ZOG19bNriaHMf+TGlGRBzBSrDMhmF6jSq3UIeMI0/nrUeYdVvvQBycq0SP6qm
|
||||
SXPyhhWVDBBfUWTO/3e4yW2s5dWY8ZkubOPJRPm1QycITfZ+3kR5u7KMHNrTS2wu
|
||||
1sN4t0zVpOTa3IqODv8Pw6ZgJijPNr/6VwrsWz/pMBZ7xNvE1GSgMPvl/R1xkt0p
|
||||
j0FY3gCtOv09fBqosRfwTjR4WCXWhSHreR3Q3KvPYjywx5eL1tCf0/483sXj/DqD
|
||||
cIQhHQnCofy7KCFlU2B6kG2WOFv/8dd6W23TyXBJSrodOtBQ2jIgGeSLP+vVFiY3
|
||||
PPt1nrAHcLgUYHfc9g9cUgq8XW2NUQraxRjIm23csIOzf6NOeEyYJavyfi4gXoIV
|
||||
ptbYj6zlzTKGyPnk2oniOz6TxRNq/8f3GPxnte8YLFSrQNNsTe3FyLc4T2TElExP
|
||||
oM2upcYnJXUnbcbanI6wBZnVKBHFIdS4/MeWq0pkWWFrE/xLzJKmD6RRvw5YkNmC
|
||||
gzmmX7P6bpKzzTMOhajxKdOrWa3W297UK4ECAwEAAaOCAZowggGWMHUGCCsGAQUF
|
||||
BwEBBGkwZzA7BggrBgEFBQcwAoYvaHR0cDovL3RydXN0YXNpYS5yZXBvc2l0b3J5
|
||||
LmNlcnR1bS5wbC9jdG5jYS5jZXIwKAYIKwYBBQUHMAGGHGh0dHA6Ly9zdWJjYS5v
|
||||
Y3NwLWNlcnR1bS5jb20wHwYDVR0jBBgwFoAUCHbNywf/JPbFze27kLzihDdGdfcw
|
||||
EgYDVR0TAQH/BAgwBgEB/wIBAjBtBgNVHR8EZjBkMDKgMKAuhixodHRwOi8vY2Vy
|
||||
dHVtLWNybC53dC50cnVzdGFzaWEuY29tL2N0bmNhLmNybDAuoCygKoYoaHR0cDov
|
||||
L3RydXN0YXNpYS5jcmwuY2VydHVtLnBsL2N0bmNhLmNybDATBgNVHSUEDDAKBggr
|
||||
BgEFBQcDATAOBgNVHQ8BAf8EBAMCAQYwNQYDVR0gBC4wLDAIBgZngQwBAgEwCAYG
|
||||
Z4EMAQICMAcGBWeBDAEBMA0GCysGAQQBgttOAgEBMB0GA1UdDgQWBBS4B5F5XAb0
|
||||
Rv17WcpaJpGnRSv4UzANBgkqhkiG9w0BAQwFAAOCAQEAIf2vyzSuFzECCTH3LPB/
|
||||
bmUH1aXbVm8zVwxof+4tn8EsNYH8CgM2AHxRkXP5jOitqylySAuVIATJLYFmBQJO
|
||||
XMCgf9NbbuG8P1VgnUQuUhQMChp2zT946Y55xZVANGg4o2+orw4SpclSy/R7eayX
|
||||
Lccr++uqke9gJlX3FCpi4Sa8sg/kSfSv4p7tuwu4YAk+XPBew3jQc9wueAJwQ/Rz
|
||||
H4LtICrekL0QuNHb0BhPcn4qELBF6f+IrOBA2MKw1m0C9y6uO8K+xd1JMpG0/RYZ
|
||||
cGIH+rR5fBymQSNuD+F5I2PeXMPpigPcEdOi/NWZcCLncJLDrEU62T8hkif6MQ4F
|
||||
Dw==
|
||||
-----END CERTIFICATE-----
|
||||
@@ -1,17 +1,24 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
<meta
|
||||
name="viewport"
|
||||
content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0"
|
||||
/>
|
||||
<script>
|
||||
var coverSupport =
|
||||
'CSS' in window &&
|
||||
typeof CSS.supports === 'function' &&
|
||||
(CSS.supports('top: env(a)') || CSS.supports('top: constant(a)'));
|
||||
document.write(
|
||||
'<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0' +
|
||||
(coverSupport ? ', viewport-fit=cover' : '') +
|
||||
'" />',
|
||||
);
|
||||
</script>
|
||||
<title></title>
|
||||
<!--preload-links-->
|
||||
<!--app-context-->
|
||||
</head>
|
||||
<body>
|
||||
<div id="app"><!--app-html--></div>
|
||||
<script type="module" src="/main.js"></script>
|
||||
<script type="module" src="/src/main.ts"></script>
|
||||
</body>
|
||||
</html>
|
||||
@@ -1,9 +0,0 @@
|
||||
{
|
||||
"compilerOptions": {
|
||||
"jsx": "preserve",
|
||||
"baseUrl": ".",
|
||||
"paths": {
|
||||
"@/*": ["./*"]
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,15 +0,0 @@
|
||||
import App from './App';
|
||||
import { createSSRApp } from 'vue';
|
||||
import { setupPinia } from './sheep/store';
|
||||
|
||||
|
||||
export function createApp() {
|
||||
|
||||
const app = createSSRApp(App);
|
||||
|
||||
setupPinia(app);
|
||||
|
||||
return {
|
||||
app,
|
||||
};
|
||||
}
|
||||
@@ -1,240 +0,0 @@
|
||||
{
|
||||
"name": "芋道商城",
|
||||
"appid": "__UNI__460BC4C",
|
||||
"description": "基于 uni-app + Vue3 技术驱动的在线商城系统,内含诸多功能与丰富的活动,期待您的使用和反馈。",
|
||||
"versionName": "2.1.0",
|
||||
"versionCode": "183",
|
||||
"transformPx": false,
|
||||
"app-plus": {
|
||||
"usingComponents": true,
|
||||
"nvueCompiler": "uni-app",
|
||||
"nvueStyleCompiler": "uni-app",
|
||||
"compilerVersion": 3,
|
||||
"nvueLaunchMode": "fast",
|
||||
"splashscreen": {
|
||||
"alwaysShowBeforeRender": true,
|
||||
"waiting": true,
|
||||
"autoclose": true,
|
||||
"delay": 0
|
||||
},
|
||||
"safearea": {
|
||||
"bottom": {
|
||||
"offset": "none"
|
||||
}
|
||||
},
|
||||
"modules": {
|
||||
"Payment": {},
|
||||
"Share": {},
|
||||
"VideoPlayer": {},
|
||||
"OAuth": {}
|
||||
},
|
||||
"distribute": {
|
||||
"android": {
|
||||
"permissions": [
|
||||
"<uses-feature android:name=\"android.hardware.camera\"/>",
|
||||
"<uses-feature android:name=\"android.hardware.camera.autofocus\"/>",
|
||||
"<uses-permission android:name=\"android.permission.ACCESS_COARSE_LOCATION\"/>",
|
||||
"<uses-permission android:name=\"android.permission.VIBRATE\"/>",
|
||||
"<uses-permission android:name=\"android.permission.ACCESS_FINE_LOCATION\"/>",
|
||||
"<uses-permission android:name=\"android.permission.ACCESS_MOCK_LOCATION\"/>",
|
||||
"<uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\"/>",
|
||||
"<uses-permission android:name=\"android.permission.ACCESS_WIFI_STATE\"/>",
|
||||
"<uses-permission android:name=\"android.permission.CALL_PHONE\"/>",
|
||||
"<uses-permission android:name=\"android.permission.CAMERA\"/>",
|
||||
"<uses-permission android:name=\"android.permission.CHANGE_NETWORK_STATE\"/>",
|
||||
"<uses-permission android:name=\"android.permission.CHANGE_WIFI_STATE\"/>",
|
||||
"<uses-permission android:name=\"android.permission.FLASHLIGHT\"/>",
|
||||
"<uses-permission android:name=\"android.permission.GET_ACCOUNTS\"/>",
|
||||
"<uses-permission android:name=\"android.permission.GET_TASKS\"/>",
|
||||
"<uses-permission android:name=\"android.permission.INTERNET\"/>",
|
||||
"<uses-permission android:name=\"android.permission.MODIFY_AUDIO_SETTINGS\"/>",
|
||||
"<uses-permission android:name=\"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\"/>",
|
||||
"<uses-permission android:name=\"android.permission.READ_CONTACTS\"/>",
|
||||
"<uses-permission android:name=\"android.permission.READ_LOGS\"/>",
|
||||
"<uses-permission android:name=\"android.permission.READ_PHONE_STATE\"/>",
|
||||
"<uses-permission android:name=\"android.permission.READ_SMS\"/>",
|
||||
"<uses-permission android:name=\"android.permission.RECEIVE_BOOT_COMPLETED\"/>",
|
||||
"<uses-permission android:name=\"android.permission.RECORD_AUDIO\"/>",
|
||||
"<uses-permission android:name=\"android.permission.SEND_SMS\"/>",
|
||||
"<uses-permission android:name=\"android.permission.SYSTEM_ALERT_WINDOW\"/>",
|
||||
"<uses-permission android:name=\"android.permission.WAKE_LOCK\"/>",
|
||||
"<uses-permission android:name=\"android.permission.WRITE_CONTACTS\"/>",
|
||||
"<uses-permission android:name=\"android.permission.WRITE_EXTERNAL_STORAGE\"/>",
|
||||
"<uses-permission android:name=\"android.permission.WRITE_SETTINGS\"/>",
|
||||
"<uses-permission android:name=\"android.permission.WRITE_SMS\"/>",
|
||||
"<uses-permission android:name=\"android.permission.RECEIVE_USER_PRESENT\"/>"
|
||||
],
|
||||
"minSdkVersion": 21,
|
||||
"schemes": "shopro"
|
||||
},
|
||||
"ios": {
|
||||
"urlschemewhitelist": [
|
||||
"baidumap",
|
||||
"iosamap"
|
||||
],
|
||||
"dSYMs": false,
|
||||
"privacyDescription": {
|
||||
"NSPhotoLibraryUsageDescription": "需要同意访问您的相册选取图片才能完善该条目",
|
||||
"NSPhotoLibraryAddUsageDescription": "需要同意访问您的相册才能保存该图片",
|
||||
"NSCameraUsageDescription": "需要同意访问您的摄像头拍摄照片才能完善该条目",
|
||||
"NSUserTrackingUsageDescription": "开启追踪并不会获取您在其它站点的隐私信息,该行为仅用于标识设备,保障服务安全和提升浏览体验"
|
||||
},
|
||||
"urltypes": "shopro",
|
||||
"capabilities": {
|
||||
"entitlements": {
|
||||
"com.apple.developer.associated-domains": [
|
||||
"applinks:shopro.sheepjs.com"
|
||||
]
|
||||
}
|
||||
},
|
||||
"idfa": true
|
||||
},
|
||||
"sdkConfigs": {
|
||||
"speech": {
|
||||
"ifly": {}
|
||||
},
|
||||
"ad": {},
|
||||
"oauth": {
|
||||
"apple": {},
|
||||
"weixin": {
|
||||
"appid": "wxae7a0c156da9383b",
|
||||
"UniversalLinks": "https://shopro.sheepjs.com/uni-universallinks/__UNI__082C0BA/"
|
||||
}
|
||||
},
|
||||
"payment": {
|
||||
"weixin": {
|
||||
"__platform__": [
|
||||
"ios",
|
||||
"android"
|
||||
],
|
||||
"appid": "wxae7a0c156da9383b",
|
||||
"UniversalLinks": "https://shopro.sheepjs.com/uni-universallinks/__UNI__082C0BA/"
|
||||
},
|
||||
"alipay": {
|
||||
"__platform__": [
|
||||
"ios",
|
||||
"android"
|
||||
]
|
||||
}
|
||||
},
|
||||
"share": {
|
||||
"weixin": {
|
||||
"appid": "wxae7a0c156da9383b",
|
||||
"UniversalLinks": "https://shopro.sheepjs.com/uni-universallinks/__UNI__082C0BA/"
|
||||
}
|
||||
}
|
||||
},
|
||||
"orientation": [
|
||||
"portrait-primary"
|
||||
],
|
||||
"splashscreen": {
|
||||
"androidStyle": "common",
|
||||
"iosStyle": "common",
|
||||
"useOriginalMsgbox": true
|
||||
},
|
||||
"icons": {
|
||||
"android": {
|
||||
"hdpi": "unpackage/res/icons/72x72.png",
|
||||
"xhdpi": "unpackage/res/icons/96x96.png",
|
||||
"xxhdpi": "unpackage/res/icons/144x144.png",
|
||||
"xxxhdpi": "unpackage/res/icons/192x192.png"
|
||||
},
|
||||
"ios": {
|
||||
"appstore": "unpackage/res/icons/1024x1024.png",
|
||||
"ipad": {
|
||||
"app": "unpackage/res/icons/76x76.png",
|
||||
"app@2x": "unpackage/res/icons/152x152.png",
|
||||
"notification": "unpackage/res/icons/20x20.png",
|
||||
"notification@2x": "unpackage/res/icons/40x40.png",
|
||||
"proapp@2x": "unpackage/res/icons/167x167.png",
|
||||
"settings": "unpackage/res/icons/29x29.png",
|
||||
"settings@2x": "unpackage/res/icons/58x58.png",
|
||||
"spotlight": "unpackage/res/icons/40x40.png",
|
||||
"spotlight@2x": "unpackage/res/icons/80x80.png"
|
||||
},
|
||||
"iphone": {
|
||||
"app@2x": "unpackage/res/icons/120x120.png",
|
||||
"app@3x": "unpackage/res/icons/180x180.png",
|
||||
"notification@2x": "unpackage/res/icons/40x40.png",
|
||||
"notification@3x": "unpackage/res/icons/60x60.png",
|
||||
"settings@2x": "unpackage/res/icons/58x58.png",
|
||||
"settings@3x": "unpackage/res/icons/87x87.png",
|
||||
"spotlight@2x": "unpackage/res/icons/80x80.png",
|
||||
"spotlight@3x": "unpackage/res/icons/120x120.png"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"quickapp": {},
|
||||
"quickapp-native": {
|
||||
"icon": "/static/logo.png",
|
||||
"package": "com.example.demo",
|
||||
"features": [
|
||||
{
|
||||
"name": "system.clipboard"
|
||||
}
|
||||
]
|
||||
},
|
||||
"quickapp-webview": {
|
||||
"icon": "/static/logo.png",
|
||||
"package": "com.example.demo",
|
||||
"minPlatformVersion": 1070,
|
||||
"versionName": "1.0.0",
|
||||
"versionCode": 100
|
||||
},
|
||||
"mp-weixin": {
|
||||
"appid": "wx66186af0759f47c9",
|
||||
"setting": {
|
||||
"urlCheck": false,
|
||||
"minified": true,
|
||||
"postcss": false,
|
||||
"es6": false
|
||||
},
|
||||
"optimization": {
|
||||
"subPackages": true
|
||||
},
|
||||
"plugins": {},
|
||||
"lazyCodeLoading": "requiredComponents",
|
||||
"usingComponents": {},
|
||||
"permission": {},
|
||||
"requiredPrivateInfos": [
|
||||
"chooseAddress"
|
||||
]
|
||||
},
|
||||
"mp-alipay": {
|
||||
"usingComponents": true
|
||||
},
|
||||
"mp-baidu": {
|
||||
"usingComponents": true
|
||||
},
|
||||
"mp-toutiao": {
|
||||
"usingComponents": true
|
||||
},
|
||||
"mp-jd": {
|
||||
"usingComponents": true
|
||||
},
|
||||
"h5": {
|
||||
"template": "index.html",
|
||||
"router": {
|
||||
"mode": "history",
|
||||
"base": "/"
|
||||
},
|
||||
"sdkConfigs": {
|
||||
"maps": {}
|
||||
},
|
||||
"async": {
|
||||
"timeout": 20000
|
||||
},
|
||||
"title": "芋道商城",
|
||||
"optimization": {
|
||||
"treeShaking": {
|
||||
"enable": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"vueVersion": "3",
|
||||
"_spaceID": "192b4892-5452-4e1d-9f09-eee1ece40639",
|
||||
"locale": "zh-Hans",
|
||||
"fallbackLocale": "zh-Hans"
|
||||
}
|
||||
@@ -0,0 +1,78 @@
|
||||
/*
|
||||
en.strings
|
||||
APBToygerFacade
|
||||
|
||||
Created by shouyi.www on 2017/6/1.
|
||||
Copyright © 2017年 DTF. All rights reserved.
|
||||
*/
|
||||
|
||||
"APBToygerFacade:取消"="Cancel";
|
||||
"APBToygerFacade:取消(引导页)"="Cancel";
|
||||
"APBToygerFacade:再试一次"="Try Again";
|
||||
"APBToygerFacade:再试一次(验证中断)"="Try Again";
|
||||
"APBToygerFacade:再试一次(网络中断)"="Try Again";
|
||||
"APBToygerFacade:退出"="Quit";
|
||||
"APBToygerFacade:退出(无法启动相机)"="Quit";
|
||||
"APBToygerFacade:退出(验证中断)"="Quit";
|
||||
"APBToygerFacade:确定"="OK";
|
||||
"APBToygerFacade:确定(引导页)"="OK";
|
||||
"APBToygerFacade:继续"="Continue";
|
||||
"APBToygerFacade:我知道了"="Got it";
|
||||
"APBToygerFacade:我知道了(系统不支持刷脸)"="Got it";
|
||||
"APBToygerFacade:其他登录方式"="Another login method";
|
||||
"APBToygerFacade:刷脸失败"="Face scan failed";
|
||||
"APBToygerFacade:当前设备不支持刷脸"="Face scan not supported on your device";
|
||||
"APBToygerFacade:当前系统不支持刷脸"="Face scan not supported on your device system";
|
||||
"APBToygerFacade:无法启动相机"="No camera permission";
|
||||
"APBToygerFacade:请到\“设置-隐私-相机\”开启权限"="Please allow to access your camera in \"Settings\"-\"Privacy\"-\"Camera\"";
|
||||
"APBToygerFacade:立即开启"="OK";
|
||||
"APBToygerFacade:刷脸仅在iOS7及以上系统可用"="Face scan is only available on iOS8 or above";
|
||||
"APBToygerFacade:系统错误"="System error";
|
||||
"APBToygerFacade:确定退出吗?"="Are you sure to quit face scan?";
|
||||
"APBToygerFacade:确定退出吗?(引导页)"="Are you sure to quit face scan?";
|
||||
"APBToygerFacade:露个脸就能通过"="You can succeed by simply showing your face";
|
||||
"APBToygerFacade:露个脸就能通过(引导页)"="You can succeed by simply showing your face";
|
||||
"APBToygerFacade:操作超时"="Time out";
|
||||
"APBToygerFacade:正对手机,更容易成功"="Face straight at the phone and ensure you have enough light";
|
||||
"APBToygerFacade:提示:正对手机,更容易成功"="Face straight at the phone and ensure you have enough light";
|
||||
"APBToygerFacade:本次操作失败"="Sorry, face scan failed";
|
||||
"APBToygerFacade:网络不给力"="Network connection failed";
|
||||
"APBToygerFacade:登录中断"="Login interrupted";
|
||||
"APBToygerFacade:验证中断"="Face scan interrupted";
|
||||
|
||||
|
||||
"APBToygerFacade:刷脸验证"="Face Scan";
|
||||
"APBToygerFacade:请把脸放入框内保持不动"="Put your face into the frame";
|
||||
"APBToygerFacade:靠近一点"="Move closer";
|
||||
"APBToygerFacade:没有检测到脸"="No face";
|
||||
"APBToygerFacade:再清晰一点"="Face not clear";
|
||||
"APBToygerFacade:脸部亮一点"="More light";
|
||||
"APBToygerFacade:请正对手机"="No face";
|
||||
"APBToygerFacade:把脸移入圈内"="No face";
|
||||
"APBToygerFacade:离远一点"="Move farther";
|
||||
"APBToygerFacade:请保持不动"="Stay still";
|
||||
"APBToygerFacade:请注视屏幕"="Open your eyes";
|
||||
"APBToygerFacade:眨眨眼"="Blink";
|
||||
"APBToygerFacade:蚂蚁佐罗提供技术支持"="";
|
||||
|
||||
"APBToygerFacade:选择其他验证方式"="Use a different verification method";
|
||||
"APBToygerFacade:拿起手机眨眨眼"="Blink";
|
||||
"APBToygerFacade:拿起手机向左摇头"="Turn Head Left";
|
||||
"APBToygerFacade:拿起手机向右摇头"="Turn Head Right";
|
||||
"APBToygerFacade:向左摇头"="Turn Head Left";
|
||||
"APBToygerFacade:向右摇头"="Turn Head Right";
|
||||
|
||||
|
||||
"APBToygerFacade:正在处理"="Processing";
|
||||
"APBToygerFacade:首次使用,请开通刷脸"="For the first time use, please enable Face Scan";
|
||||
"APBToygerFacade:立即开通"="Enable";
|
||||
"APBToygerFacade:下次再说"="Later";
|
||||
|
||||
"APBToygerFacade:请把手机正对面部"="Face straight at the phone";
|
||||
"APBToygerFacade:即将开始人脸检测"="Get ready for face recognition";
|
||||
|
||||
"APBToygerFacade:没有认出你"="Face scan failed";
|
||||
"APBToygerFacade:未能识别人脸"="Face not detected";
|
||||
"APBToygerFacade:人脸检测中"="Face Scan";
|
||||
"APBToygerFacade:刷脸失败次数过多,请稍后再试"="Too many failed attempts, please try again later";
|
||||
"APBToygerFacade:请保持单人操作"=" ";
|
||||
@@ -0,0 +1,69 @@
|
||||
"APBToygerFacade:取消"="Batalkan";
|
||||
"APBToygerFacade:取消(引导页)"="Batalkan";
|
||||
"APBToygerFacade:再试一次"="Harap coba lagi";
|
||||
"APBToygerFacade:再试一次(验证中断)"="Harap coba lagi";
|
||||
"APBToygerFacade:再试一次(网络中断)"="Harap coba lagi";
|
||||
"APBToygerFacade:退出"="Keluar";
|
||||
"APBToygerFacade:退出(无法启动相机)"="Keluar";
|
||||
"APBToygerFacade:退出(验证中断)"="Keluar";
|
||||
"APBToygerFacade:确定"="OK";
|
||||
"APBToygerFacade:确定(引导页)"="OK";
|
||||
"APBToygerFacade:继续"="Lanjutkan";
|
||||
"APBToygerFacade:我知道了"="OK";
|
||||
"APBToygerFacade:我知道了(系统不支持刷脸)"="OK";
|
||||
"APBToygerFacade:其他登录方式"="Ubah Metode Logon";
|
||||
"APBToygerFacade:刷脸失败"="Pengenalan wajah gagal";
|
||||
"APBToygerFacade:当前设备不支持刷脸"="Perangkat Anda tidak mendukung pengenalan wajah";
|
||||
"APBToygerFacade:当前系统不支持刷脸"="Sistem saat ini tidak mendukung pengenalan wajah";
|
||||
"APBToygerFacade:无法启动相机"="Tidak Memiliki Izin Akses Kamera";
|
||||
"APBToygerFacade:请到\“设置-隐私-相机\”开启权限"="Buka Pengaturan > Privasi > Kamera dan izinkan akses";
|
||||
"APBToygerFacade:立即开启"="OK";
|
||||
"APBToygerFacade:刷脸仅在iOS7及以上系统可用"="Hanya iOS 7 dan setelahnya yang mendukung pengenalan wajah";
|
||||
"APBToygerFacade:系统错误"="Terjadi Kesalahan Sistem";
|
||||
"APBToygerFacade:确定退出吗?"="Apakah Anda yakin ingin keluar?";
|
||||
"APBToygerFacade:确定退出吗?(引导页)"="Apakah Anda yakin ingin keluar?";
|
||||
"APBToygerFacade:露个脸就能通过"="Anda hanya perlu memperlihatkan wajah Anda";
|
||||
"APBToygerFacade:露个脸就能通过(引导页)"="Anda hanya perlu memperlihatkan wajah Anda";
|
||||
"APBToygerFacade:操作超时"="Waktu operasi habis";
|
||||
"APBToygerFacade:正对手机,更容易成功"="Arahkan wajah lurus menghadap ponsel untuk membuat wajah Anda lebih mudah dipindai";
|
||||
"APBToygerFacade:本次操作失败"="Operasi gagal";
|
||||
"APBToygerFacade:网络不给力"="Kondisi jaringan tidak memenuhi persyaratan";
|
||||
"APBToygerFacade:登录中断"="Logon Terganggu";
|
||||
"APBToygerFacade:验证中断"="Verifikasi terputus";
|
||||
|
||||
|
||||
"APBToygerFacade:刷脸验证"="Verifikasi dengan Pengenalan Wajah";
|
||||
"APBToygerFacade:请把脸放入框内保持不动"="Posisikan wajah Anda di dalam bingkai dan jangan bergerak";
|
||||
"APBToygerFacade:靠近一点"="Harap dekatkan wajah";
|
||||
"APBToygerFacade:没有检测到脸"="Tidak ada wajah terdeteksi";
|
||||
"APBToygerFacade:再清晰一点"="Perjelas wajah Anda";
|
||||
"APBToygerFacade:脸部亮一点"="Terangi wajah Anda";
|
||||
"APBToygerFacade:请正对手机"="Arahkan wajah lurus menghadap ponsel";
|
||||
"APBToygerFacade:请露出正脸"="Tunjukkan bagian depan wajah Anda";
|
||||
"APBToygerFacade:把脸移入圈内"="Posisikan wajah pada lingkaran";
|
||||
"APBToygerFacade:离远一点"="Harap jauhkan wajah";
|
||||
"APBToygerFacade:请保持不动"="Tetap tenang";
|
||||
"APBToygerFacade:请注视屏幕"="Lihat layar";
|
||||
"APBToygerFacade:眨眨眼"="Harap kedipkan mata";
|
||||
"APBToygerFacade:蚂蚁佐罗提供技术支持"="";
|
||||
|
||||
"APBToygerFacade:选择其他验证方式"="Ubah Metode Verifikasi";
|
||||
"APBToygerFacade:拿起手机眨眨眼"="Harap kedipkan mata";
|
||||
"APBToygerFacade:拿起手机向左摇头"="Harap menoleh ke kiri";
|
||||
"APBToygerFacade:拿起手机向右摇头"="Harap menoleh ke kanan";
|
||||
"APBToygerFacade:向左摇头"="Harap menoleh ke kiri";
|
||||
"APBToygerFacade:向右摇头"="Harap menoleh ke kanan";
|
||||
|
||||
"APBToygerFacade:正在处理"="Memproses";
|
||||
"APBToygerFacade:首次使用,请开通刷脸"="Aktifkan pengenalan wajah untuk melanjutkan";
|
||||
"APBToygerFacade:立即开通"="Aktifkan";
|
||||
"APBToygerFacade:下次再说"="Lain Kali";
|
||||
|
||||
"APBToygerFacade:请把手机正对面部"="Arahkan wajah lurus menghadap ponsel";
|
||||
"APBToygerFacade:即将开始人脸检测"="Memulai pengenalan wajah";
|
||||
|
||||
"APBToygerFacade:没有认出你"="Pengenalan wajah gagal";
|
||||
"APBToygerFacade:未能识别人脸"="Tidak ada wajah terdeteksi";
|
||||
"APBToygerFacade:人脸检测中"="Pengenalan wajah dalam proses";
|
||||
"APBToygerFacade:刷脸失败次数过多,请稍后再试"="Pengenalan wajah terlalu sering dilakukan. Harap coba lagi nanti";
|
||||
"APBToygerFacade:请保持单人操作"=" ";
|
||||
@@ -0,0 +1,69 @@
|
||||
"APBToygerFacade:取消"="キャンセル";
|
||||
"APBToygerFacade:取消(引导页)"="キャンセル";
|
||||
"APBToygerFacade:再试一次"="もう一度お試しください";
|
||||
"APBToygerFacade:再试一次(验证中断)"="もう一度お試しください";
|
||||
"APBToygerFacade:再试一次(网络中断)"="もう一度お試しください";
|
||||
"APBToygerFacade:退出"="終了";
|
||||
"APBToygerFacade:退出(无法启动相机)"="終了";
|
||||
"APBToygerFacade:退出(验证中断)"="終了";
|
||||
"APBToygerFacade:确定"="OK";
|
||||
"APBToygerFacade:确定(引导页)"="OK";
|
||||
"APBToygerFacade:继续"="続行";
|
||||
"APBToygerFacade:我知道了"="OK";
|
||||
"APBToygerFacade:我知道了(系统不支持刷脸)"="OK";
|
||||
"APBToygerFacade:其他登录方式"="ログイン方法を切り替え";
|
||||
"APBToygerFacade:刷脸失败"="顔を認識できませんでした";
|
||||
"APBToygerFacade:当前设备不支持刷脸"="お使いのデバイスは顔認識をサポートしていません";
|
||||
"APBToygerFacade:当前系统不支持刷脸"="顔認識をサポートしていないシステムです";
|
||||
"APBToygerFacade:无法启动相机"="カメラにアクセスできません";
|
||||
"APBToygerFacade:请到\“设置-隐私-相机\”开启权限"="[設定] > [プライバシー] > [カメラ] に移動し、アクセスを許可してください";
|
||||
"APBToygerFacade:立即开启"="OK";
|
||||
"APBToygerFacade:刷脸仅在iOS7及以上系统可用"="顔認識は iOS 7 以降でサポートされています";
|
||||
"APBToygerFacade:系统错误"="システムエラー";
|
||||
"APBToygerFacade:确定退出吗?"="終了してもよろしいですか";
|
||||
"APBToygerFacade:确定退出吗?(引导页)"="終了してもよろしいですか";
|
||||
"APBToygerFacade:露个脸就能通过"="顔を見せるだけです";
|
||||
"APBToygerFacade:露个脸就能通过(引导页)"="顔を見せるだけです";
|
||||
"APBToygerFacade:操作超时"="操作がタイムアウトしました";
|
||||
"APBToygerFacade:正对手机,更容易成功"="顔をスキャンしやすいように、電話の方を向いてください";
|
||||
"APBToygerFacade:本次操作失败"="操作に失敗しました";
|
||||
"APBToygerFacade:网络不给力"="ネットワークの状態が要件を満たしていません";
|
||||
"APBToygerFacade:登录中断"="ログインが中断されました";
|
||||
"APBToygerFacade:验证中断"="検証が中断されました";
|
||||
|
||||
|
||||
"APBToygerFacade:刷脸验证"="顔認識による検証";
|
||||
"APBToygerFacade:请把脸放入框内保持不动"="フレームの内側に顔が入るようにして、動かないでください";
|
||||
"APBToygerFacade:靠近一点"="近づいてください";
|
||||
"APBToygerFacade:没有检测到脸"="顔が検出されません";
|
||||
"APBToygerFacade:再清晰一点"="顔をはっきりさせてください";
|
||||
"APBToygerFacade:脸部亮一点"="顔を明るくしてください";
|
||||
"APBToygerFacade:请正对手机"="電話の方を向いてください";
|
||||
"APBToygerFacade:请露出正脸"="顔の正面を見せてください";
|
||||
"APBToygerFacade:把脸移入圈内"="顔を円の中に入れてください";
|
||||
"APBToygerFacade:离远一点"="離れてください";
|
||||
"APBToygerFacade:请保持不动"="動かないでください";
|
||||
"APBToygerFacade:请注视屏幕"="画面を見てください";
|
||||
"APBToygerFacade:眨眨眼"="まばたきしてください";
|
||||
"APBToygerFacade:蚂蚁佐罗提供技术支持"="";
|
||||
|
||||
"APBToygerFacade:选择其他验证方式"="検証方法を変更";
|
||||
"APBToygerFacade:拿起手机眨眨眼"="まばたきしてください";
|
||||
"APBToygerFacade:拿起手机向左摇头"="頭を左に";
|
||||
"APBToygerFacade:拿起手机向右摇头"="頭を右に";
|
||||
"APBToygerFacade:向左摇头"="頭を左に";
|
||||
"APBToygerFacade:向右摇头"="頭を右に";
|
||||
|
||||
"APBToygerFacade:正在处理"="処理中";
|
||||
"APBToygerFacade:首次使用,请开通刷脸"="顔認識を有効化して続行します";
|
||||
"APBToygerFacade:立即开通"="有効化";
|
||||
"APBToygerFacade:下次再说"="後で";
|
||||
|
||||
"APBToygerFacade:请把手机正对面部"="電話の方を向いてください";
|
||||
"APBToygerFacade:即将开始人脸检测"="顔認識を開始";
|
||||
|
||||
"APBToygerFacade:没有认出你"="顔を認識できませんでした";
|
||||
"APBToygerFacade:未能识别人脸"="顔が検出されません";
|
||||
"APBToygerFacade:人脸检测中"="顔を認識中です";
|
||||
"APBToygerFacade:刷脸失败次数过多,请稍后再试"="顔認識が頻繁に実行されています。後でもう一度やり直してください";
|
||||
"APBToygerFacade:请保持单人操作"=" ";
|
||||
@@ -0,0 +1,70 @@
|
||||
"APBToygerFacade:取消"="취소";
|
||||
"APBToygerFacade:取消(引导页)"="취소";
|
||||
"APBToygerFacade:再试一次"="다시 시도하세요";
|
||||
"APBToygerFacade:再试一次(验证中断)"="다시 시도하세요";
|
||||
"APBToygerFacade:再试一次(网络中断)"="다시 시도하세요";
|
||||
"APBToygerFacade:退出"="종료";
|
||||
"APBToygerFacade:退出(无法启动相机)"="종료";
|
||||
"APBToygerFacade:退出(验证中断)"="종료";
|
||||
"APBToygerFacade:确定"="확인";
|
||||
"APBToygerFacade:确定(引导页)"="확인";
|
||||
"APBToygerFacade:继续"="계속";
|
||||
"APBToygerFacade:我知道了"="확인";
|
||||
"APBToygerFacade:我知道了(系统不支持刷脸)"="확인";
|
||||
"APBToygerFacade:其他登录方式"="로그온 방법 전환";
|
||||
"APBToygerFacade:刷脸失败"="안면 인식에 실패했습니다";
|
||||
"APBToygerFacade:当前设备不支持刷脸"="귀하의 디바이스는 안면 인식을 지원하지 않습니다";
|
||||
"APBToygerFacade:当前系统不支持刷脸"="현재 시스템은 안면 인식을 지원하지 않습니다";
|
||||
"APBToygerFacade:无法启动相机"="카메라 권한이 없습니다";
|
||||
"APBToygerFacade:请到\“设置-隐私-相机\”开启权限"="설정 > 개인 > 카메라에서 접근 권한을 부여하십시오";
|
||||
"APBToygerFacade:立即开启"="OK";
|
||||
"APBToygerFacade:刷脸仅在iOS7及以上系统可用"="iOS 7 및 그 이상의 버전에서만 안면 인식이 지원됩니다";
|
||||
"APBToygerFacade:系统错误"="시스템 오류";
|
||||
"APBToygerFacade:确定退出吗?"="정말로 종료하시겠습니까?";
|
||||
"APBToygerFacade:确定退出吗?(引导页)"="정말로 종료하시겠습니까?";
|
||||
"APBToygerFacade:露个脸就能通过"="얼굴만 보여주시면 됩니다";
|
||||
"APBToygerFacade:露个脸就能通过(引导页)"="얼굴만 보여주시면 됩니다";
|
||||
"APBToygerFacade:操作超时"="작업 시간이 초과되었습니다";
|
||||
"APBToygerFacade:正对手机,更容易成功"="얼굴을 더 쉽게 스캔할 수 있도록 휴대전화를 정면으로 바라보세요";
|
||||
"APBToygerFacade:本次操作失败"="작동에 실패했습니다";
|
||||
"APBToygerFacade:网络不给力"="네트워크 상태가 요구 사항을 충족하지 않습니다";
|
||||
"APBToygerFacade:登录中断"="로그온이 중단되었습니다";
|
||||
"APBToygerFacade:验证中断"="확인이 중단되었습니다";
|
||||
|
||||
|
||||
"APBToygerFacade:刷脸验证"="안면 인식을 통한 인증";
|
||||
"APBToygerFacade:请把脸放入框内保持不动"="얼굴이 프레임 안으로 들어오도록 위치한 다음 움직이지 말고 가만히 계십시오";
|
||||
"APBToygerFacade:靠近一点"="더 가까이 움직이세요";
|
||||
"APBToygerFacade:没有检测到脸"="감지된 얼굴이 없습니다";
|
||||
"APBToygerFacade:再清晰一点"="얼굴을 좀더 선명하게 만드세요";
|
||||
"APBToygerFacade:脸部亮一点"="얼굴을 밝게 만드세요";
|
||||
"APBToygerFacade:请正对手机"="휴대전화를 정면으로 바라보세요";
|
||||
"APBToygerFacade:请露出正脸"="얼굴의 정면을 보여주세요";
|
||||
"APBToygerFacade:把脸移入圈内"="얼굴이 원 안에 들어오도록 움직이세요";
|
||||
"APBToygerFacade:离远一点"="더 멀리 움직이세요";
|
||||
"APBToygerFacade:请保持不动"="가만히 계십시오";
|
||||
"APBToygerFacade:请注视屏幕"="화면을 바라보세요";
|
||||
"APBToygerFacade:眨眨眼"="눈을 깜빡이세요";
|
||||
"APBToygerFacade:蚂蚁佐罗提供技术支持"="";
|
||||
|
||||
"APBToygerFacade:选择其他验证方式"="인증 방법을 변경합니다";
|
||||
"APBToygerFacade:拿起手机眨眨眼"="눈을 깜빡이세요";
|
||||
"APBToygerFacade:拿起手机向左摇头"="좌측으로 고개를 돌립니다";
|
||||
"APBToygerFacade:拿起手机向右摇头"="우측으로 고개를 돌립니다";
|
||||
"APBToygerFacade:向左摇头"="좌측으로 고개를 돌립니다";
|
||||
"APBToygerFacade:向右摇头"="우측으로 고개를 돌립니다";
|
||||
|
||||
"APBToygerFacade:正在处理"="처리 중";
|
||||
"APBToygerFacade:首次使用,请开通刷脸"="안면 인식을 활성화하여 계속 진행합니다";
|
||||
"APBToygerFacade:立即开通"="활성화하기";
|
||||
"APBToygerFacade:下次再说"="나중에 하기";
|
||||
|
||||
"APBToygerFacade:请把手机正对面部"="휴대전화를 정면으로 바라보세요";
|
||||
"APBToygerFacade:即将开始人脸检测"="안면 인식 시작";
|
||||
|
||||
"APBToygerFacade:没有认出你"="안면 인식에 실패했습니다";
|
||||
"APBToygerFacade:未能识别人脸"="감지된 얼굴이 없습니다";
|
||||
"APBToygerFacade:人脸检测中"="얼굴 인식 중";
|
||||
"APBToygerFacade:刷脸失败次数过多,请稍后再试"="안면 인식이 연속으로 실행되었습니다. 나중에 다시 시도하세요";
|
||||
"APBToygerFacade:请保持单人操作"=" ";
|
||||
|
||||
@@ -0,0 +1,78 @@
|
||||
/*
|
||||
zh-HK.strings
|
||||
APBToygerFacade
|
||||
|
||||
Created by shouyi.www on 2017/6/1.
|
||||
Copyright © 2017年 DTF. All rights reserved.
|
||||
*/
|
||||
|
||||
|
||||
"APBToygerFacade:取消"="取消";
|
||||
"APBToygerFacade:取消(引导页)"="取消";
|
||||
"APBToygerFacade:再试一次"="再試一次";
|
||||
"APBToygerFacade:再试一次(验证中断)"="再試一次";
|
||||
"APBToygerFacade:再试一次(网络中断)"="再試一次";
|
||||
"APBToygerFacade:退出"="退出";
|
||||
"APBToygerFacade:退出(验证中断)"="退出";
|
||||
"APBToygerFacade:退出(无法启动相机)"="退出";
|
||||
"APBToygerFacade:确定"="確定";
|
||||
"APBToygerFacade:确定(引导页)"="確定";
|
||||
"APBToygerFacade:继续"="继续";
|
||||
"APBToygerFacade:我知道了"="我知道了";
|
||||
"APBToygerFacade:我知道了(系统不支持刷脸)"="我知道了";
|
||||
"APBToygerFacade:其他登录方式"="其他登录方式";
|
||||
"APBToygerFacade:刷脸失败"="刷臉失敗";
|
||||
"APBToygerFacade:当前设备不支持刷脸"="目前系統不支援刷臉";
|
||||
"APBToygerFacade:当前系统不支持刷脸"="目前設備不支援刷臉";
|
||||
"APBToygerFacade:无法启动相机"="無法啟動相機";
|
||||
"APBToygerFacade:请到\“设置-隐私-相机\”开启权限"="請到“設置-隱私-相機”開啓權限";
|
||||
"APBToygerFacade:立即开启"="開通權限";
|
||||
"APBToygerFacade:刷脸仅在iOS7及以上系统可用"="刷脸仅在iOS7及以上系统可用";
|
||||
"APBToygerFacade:系统错误"="系統錯誤";
|
||||
"APBToygerFacade:确定退出吗?"="確定退出嗎?";
|
||||
"APBToygerFacade:确定退出吗?(引导页)"="確定退出嗎?";
|
||||
"APBToygerFacade:露个脸就能通过"="露個臉就能通過";
|
||||
"APBToygerFacade:露个脸就能通过(引导页)"="露個臉就能通過";
|
||||
"APBToygerFacade:操作超时"="操作超時";
|
||||
"APBToygerFacade:正对手机,更容易成功"="對準手機,更容易成功";
|
||||
"APBToygerFacade:本次操作失败"="本次操作失敗";
|
||||
"APBToygerFacade:网络不给力"="網絡異常,請稍後再試";
|
||||
"APBToygerFacade:登录中断"="登入中斷";
|
||||
"APBToygerFacade:验证中断"="驗證中斷";
|
||||
|
||||
|
||||
"APBToygerFacade:刷脸验证"="刷臉驗證";
|
||||
"APBToygerFacade:请把脸放入框内保持不动"="請把臉移入圈內保持不動";
|
||||
"APBToygerFacade:靠近一点"="靠近一點";
|
||||
"APBToygerFacade:没有检测到脸"="沒有檢測到臉";
|
||||
"APBToygerFacade:再清晰一点"="再清晰一點";
|
||||
"APBToygerFacade:脸部亮一点"="光線再亮點";
|
||||
"APBToygerFacade:请正对手机"="請正視手機";
|
||||
"APBToygerFacade:请露出正脸"="請露出正臉";
|
||||
"APBToygerFacade:把脸移入圈内"="把臉移入框內";
|
||||
"APBToygerFacade:离远一点"="離遠一點";
|
||||
"APBToygerFacade:请保持不动"="請保持不動";
|
||||
"APBToygerFacade:请注视屏幕"="請注視屏幕";
|
||||
"APBToygerFacade:眨眨眼"="眨眨眼";
|
||||
"APBToygerFacade:蚂蚁佐罗提供技术支持"="";
|
||||
|
||||
"APBToygerFacade:选择其他验证方式"="選擇其他驗證方式";
|
||||
"APBToygerFacade:拿起手机眨眨眼"="拿起手機,眨眨眼";
|
||||
"APBToygerFacade:拿起手机向左摇头"="拿著手機,向左搖頭";
|
||||
"APBToygerFacade:拿起手机向右摇头"="拿著手機,向右搖頭";
|
||||
"APBToygerFacade:向左摇头"="向左搖頭";
|
||||
"APBToygerFacade:向右摇头"="向右搖頭";
|
||||
|
||||
"APBToygerFacade:正在处理"="正在處理";
|
||||
"APBToygerFacade:首次使用,请开通刷脸"="首次使用,請開通刷臉";
|
||||
"APBToygerFacade:立即开通"="立即開通";
|
||||
"APBToygerFacade:下次再说"="下次再說";
|
||||
|
||||
"APBToygerFacade:请把手机正对面部"="請把手機正對面部";
|
||||
"APBToygerFacade:即将开始人脸检测"="即將開始人臉檢測";
|
||||
|
||||
"APBToygerFacade:没有认出你"="沒有認出你";
|
||||
"APBToygerFacade:未能识别人脸"="未能識別人臉";
|
||||
"APBToygerFacade:人脸检测中"="人臉檢測中";
|
||||
"APBToygerFacade:刷脸失败次数过多,请稍后再试"="刷臉失敗次數過多,請稍後再試";
|
||||
"APBToygerFacade:请保持单人操作"="請保持單人操作";
|
||||
@@ -0,0 +1,83 @@
|
||||
/*
|
||||
zh-Hans.strings
|
||||
APBToygerFacade
|
||||
|
||||
Created by shouyi.www on 2017/6/1.
|
||||
Copyright © 2017年 DTF. All rights reserved.
|
||||
*/
|
||||
|
||||
|
||||
"APBToygerFacade:取消"="取消";
|
||||
"APBToygerFacade:取消(引导页)"="取消";
|
||||
"APBToygerFacade:再试一次"="再试一次";
|
||||
"APBToygerFacade:再试一次(验证中断)"="再试一次";
|
||||
"APBToygerFacade:再试一次(网络中断)"="再试一次";
|
||||
"APBToygerFacade:退出"="退出";
|
||||
"APBToygerFacade:退出(验证中断)"="退出";
|
||||
"APBToygerFacade:退出(无法启动相机)"="退出";
|
||||
"APBToygerFacade:确定"="确定";
|
||||
"APBToygerFacade:确定(引导页)"="确定";
|
||||
"APBToygerFacade:继续"="继续";
|
||||
"APBToygerFacade:我知道了"="我知道了";
|
||||
"APBToygerFacade:我知道了(系统不支持刷脸)"="我知道了";
|
||||
"APBToygerFacade:其他登录方式"="其他登录方式";
|
||||
"APBToygerFacade:刷脸失败"="刷脸失败";
|
||||
"APBToygerFacade:当前设备不支持刷脸"="当前设备不支持刷脸";
|
||||
"APBToygerFacade:当前系统不支持刷脸"="当前系统不支持刷脸";
|
||||
"APBToygerFacade:无法启动相机"="无法启动相机";
|
||||
"APBToygerFacade:请到\“设置-隐私-相机\”开启权限"="请到“设置-隐私-相机”开启权限";
|
||||
"APBToygerFacade:立即开启"="立即开启";
|
||||
"APBToygerFacade:刷脸仅在iOS8及以上版本可用"="刷脸仅在iOS8及以上版本可用";
|
||||
"APBToygerFacade:系统错误"="系统错误";
|
||||
"APBToygerFacade:确定退出吗?"="确定退出吗?";
|
||||
"APBToygerFacade:确定退出吗?(引导页)"="确定退出吗?";
|
||||
"APBToygerFacade:露个脸就能通过"="露个脸就能通过";
|
||||
"APBToygerFacade:露个脸就能通过(引导页)"="露个脸就能通过";
|
||||
"APBToygerFacade:操作超时"="操作超时";
|
||||
"APBToygerFacade:正对手机,更容易成功"="正对手机,更容易成功";
|
||||
"APBToygerFacade:本次操作失败"="本次操作失败";
|
||||
"APBToygerFacade:网络不给力"="网络不给力";
|
||||
"APBToygerFacade:登录中断"="登录中断";
|
||||
"APBToygerFacade:验证中断"="验证中断";
|
||||
|
||||
|
||||
"APBToygerFacade:刷脸验证"="刷脸验证";
|
||||
"APBToygerFacade:请把脸放入框内保持不动"="请把脸移入圈内保持不动";
|
||||
"APBToygerFacade:靠近一点"="靠近一点";
|
||||
"APBToygerFacade:没有检测到脸"="没有检测到脸";
|
||||
"APBToygerFacade:再清晰一点"="再清晰一点";
|
||||
"APBToygerFacade:脸部亮一点"="脸部亮一点";
|
||||
"APBToygerFacade:请正对手机"="请正对手机";
|
||||
"APBToygerFacade:请露出正脸"="请露出正脸";
|
||||
"APBToygerFacade:把脸移入圈内"="把脸移入圈内";
|
||||
"APBToygerFacade:离远一点"="离远一点";
|
||||
"APBToygerFacade:请保持不动"="请保持不动";
|
||||
"APBToygerFacade:请注视屏幕"="请注视屏幕";
|
||||
"APBToygerFacade:眨眨眼"="眨眨眼";
|
||||
"APBToygerFacade:蚂蚁佐罗提供技术支持"="";
|
||||
|
||||
"APBToygerFacade:选择其他验证方式"="选择其他验证方式";
|
||||
"APBToygerFacade:拿起手机眨眨眼"="拿起手机,眨眨眼";
|
||||
"APBToygerFacade:拿起手机向左摇头"="拿起手机,向左摇头";
|
||||
"APBToygerFacade:拿起手机向右摇头"="拿起手机,向右摇头";
|
||||
"APBToygerFacade:向左摇头"="向左摇头";
|
||||
"APBToygerFacade:向右摇头"="向右摇头";
|
||||
|
||||
"APBToygerFacade:正在处理"="正在处理";
|
||||
"APBToygerFacade:首次使用,请开通刷脸"="首次使用,请开通刷脸";
|
||||
"APBToygerFacade:立即开通"="立即开通";
|
||||
"APBToygerFacade:下次再说"="下次再说";
|
||||
|
||||
"APBToygerFacade:请把手机正对面部"="请把手机正对面部";
|
||||
"APBToygerFacade:即将开始人脸检测"="即将开始人脸检测";
|
||||
|
||||
"APBToygerFacade:没有认出你"="没有认出你";
|
||||
"APBToygerFacade:未能识别人脸"="未能识别人脸";
|
||||
"APBToygerFacade:人脸检测中"="人脸检测中";
|
||||
"APBToygerFacade:刷脸失败次数过多,请稍后再试"="刷脸失败次数过多,请稍后再试";
|
||||
"APBToygerFacade:请保持单人操作"="请保持单人操作";
|
||||
|
||||
"APBToygerFacade:请缓慢靠近"="请缓慢靠近";
|
||||
"APBToygerFacade:请缓慢远离"="请缓慢远离";
|
||||
"APBToygerFacade:请保持不动"="请保持不动";
|
||||
"APBToygerFacade:把脸移入圈内"="把脸移入圈内";
|
||||
@@ -0,0 +1,78 @@
|
||||
/*
|
||||
zh-Hant.strings
|
||||
APBToygerFacade
|
||||
|
||||
Created by shouyi.www on 2017/6/1.
|
||||
Copyright © 2017年 DTF. All rights reserved.
|
||||
*/
|
||||
|
||||
|
||||
"APBToygerFacade:取消"="取消";
|
||||
"APBToygerFacade:取消(引导页)"="取消";
|
||||
"APBToygerFacade:再试一次"="再試一次";
|
||||
"APBToygerFacade:再试一次(验证中断)"="再試一次";
|
||||
"APBToygerFacade:再试一次(网络中断)"="再試一次";
|
||||
"APBToygerFacade:退出"="退出";
|
||||
"APBToygerFacade:退出(验证中断)"="退出";
|
||||
"APBToygerFacade:退出(无法启动相机)"="退出";
|
||||
"APBToygerFacade:确定"="確定";
|
||||
"APBToygerFacade:确定(引导页)"="確定";
|
||||
"APBToygerFacade:继续"="繼續";
|
||||
"APBToygerFacade:我知道了"="我知道了";
|
||||
"APBToygerFacade:我知道了(系统不支持刷脸)"="我知道了";
|
||||
"APBToygerFacade:其他登录方式"="其他登入方式";
|
||||
"APBToygerFacade:刷脸失败"="刷臉失敗";
|
||||
"APBToygerFacade:当前设备不支持刷脸"="目前設備不支援刷臉服務";
|
||||
"APBToygerFacade:当前系统不支持刷脸"="当前系统不支持刷脸";
|
||||
"APBToygerFacade:无法启动相机"="無法啟動相機";
|
||||
"APBToygerFacade:请到\“设置-隐私-相机\”开启权限"="請到“設置-隱私-相機”開啓權限";
|
||||
"APBToygerFacade:立即开启"="開通權限";
|
||||
"APBToygerFacade:刷脸仅在iOS8及以上系统可用"="刷脸仅在iOS8及以上系统可用";
|
||||
"APBToygerFacade:系统错误"="系統錯誤";
|
||||
"APBToygerFacade:确定退出吗?"="確定退出嗎?";
|
||||
"APBToygerFacade:确定退出吗?(引导页)"="確定退出嗎?";
|
||||
"APBToygerFacade:露个脸就能通过"="露個臉就能通過";
|
||||
"APBToygerFacade:露个脸就能通过(引导页)"="露個臉就能通過";
|
||||
"APBToygerFacade:操作超时"="操作超時";
|
||||
"APBToygerFacade:正对手机,更容易成功"="對準手機,更容易成功";
|
||||
"APBToygerFacade:本次操作失败"="本次操作失敗";
|
||||
"APBToygerFacade:网络不给力"="網絡異常,請稍後再試";
|
||||
"APBToygerFacade:登录中断"="登入中斷";
|
||||
"APBToygerFacade:验证中断"="驗證中斷";
|
||||
|
||||
|
||||
"APBToygerFacade:刷脸验证"="刷臉驗證";
|
||||
"APBToygerFacade:请把脸放入框内保持不动"="請把臉移入圈內保持不動";
|
||||
"APBToygerFacade:靠近一点"="靠近一點";
|
||||
"APBToygerFacade:没有检测到脸"="沒有檢測到臉";
|
||||
"APBToygerFacade:再清晰一点"="再清晰一點";
|
||||
"APBToygerFacade:脸部亮一点"="光線再亮點";
|
||||
"APBToygerFacade:请正对手机"="請正視手機";
|
||||
"APBToygerFacade:请露出正脸"="請露出正臉";
|
||||
"APBToygerFacade:把脸移入圈内"="把臉移入框內";
|
||||
"APBToygerFacade:离远一点"="離遠一點";
|
||||
"APBToygerFacade:请保持不动"="請保持不動";
|
||||
"APBToygerFacade:请注视屏幕"="請注視屏幕";
|
||||
"APBToygerFacade:眨眨眼"="眨眨眼";
|
||||
"APBToygerFacade:蚂蚁佐罗提供技术支持"="";
|
||||
|
||||
"APBToygerFacade:选择其他验证方式"="選擇其他驗證方式";
|
||||
"APBToygerFacade:拿起手机眨眨眼"="拿起手機,眨眨眼";
|
||||
"APBToygerFacade:拿起手机向左摇头"="拿起手機,向左搖頭";
|
||||
"APBToygerFacade:拿起手机向右摇头"="拿起手機,向右搖頭";
|
||||
"APBToygerFacade:向左摇头"="向左搖頭";
|
||||
"APBToygerFacade:向右摇头"="向右搖頭";
|
||||
|
||||
"APBToygerFacade:正在处理"="正在處理";
|
||||
"APBToygerFacade:首次使用,请开通刷脸"="首次使用,請開通刷臉";
|
||||
"APBToygerFacade:立即开通"="立即開通";
|
||||
"APBToygerFacade:下次再说"="下次再說";
|
||||
|
||||
"APBToygerFacade:请把手机正对面部"="請把手機正對面部";
|
||||
"APBToygerFacade:即将开始人脸检测"="即將開始人臉檢測";
|
||||
|
||||
"APBToygerFacade:没有认出你"="沒有認出你";
|
||||
"APBToygerFacade:未能识别人脸"="未能識別人臉";
|
||||
"APBToygerFacade:人脸检测中"="人臉檢測中";
|
||||
"APBToygerFacade:刷脸失败次数过多,请稍后再试"="刷臉失敗次數過多,請稍後再試";
|
||||
"APBToygerFacade:请保持单人操作"="請保持單人操作";
|
||||
@@ -0,0 +1,77 @@
|
||||
//
|
||||
// APFBaseTask.h
|
||||
// APFaceDetectBiz
|
||||
//
|
||||
// Created by 晗羽 on 8/25/16.
|
||||
// Copyright © 2016 DTF. All rights reserved.
|
||||
//
|
||||
|
||||
#import <UIKit/UIKit.h>
|
||||
#import <Foundation/Foundation.h>
|
||||
#import <BioAuthEngine/IBioAuthTask.h>
|
||||
#import <BioAuthEngine/APBTaskContext.h>
|
||||
#import <BioAuthEngine/APBLogger.h>
|
||||
#import <BioAuthEngine/AFEAlertView.h>
|
||||
#import <APBToygerFacade/APBToygerUtils.h>
|
||||
#import <DTFUtility/APBToygerRemoteConfig.h>
|
||||
#import <BioAuthEngine/APBToygerBehavlogManager.h>
|
||||
//#import "APBToygerDataCenter.h"
|
||||
#import <BioAuthEngine/BioAuthCommonSetting.h>
|
||||
#import <APBToygerFacade/APBToygerViewController.h>
|
||||
|
||||
@class DTFLogMonitor,APBToygerDataCenter;
|
||||
|
||||
typedef void (^APFAlertExtraAction)();
|
||||
|
||||
@interface APBToygerBaseTask : NSObject <IBioAuthTask>
|
||||
|
||||
//协议定义的属性
|
||||
@property(nonatomic, copy)NSString *taskName; //任务名
|
||||
@property(nonatomic, strong)APBTaskContext *context; //任务数据
|
||||
@property(nonatomic, weak)NSMutableDictionary *pipeInfo; //共享数据
|
||||
//公用属性
|
||||
@property(nonatomic, weak)UIViewController *parentViewController; //父viewController
|
||||
@property(nonatomic, weak)APBToygerViewController *currentViewController; //当前viewController
|
||||
@property(nonatomic, weak)UIView *currentView; //当前显示的界面
|
||||
@property(nonatomic, copy)commandBlock bioCommandBlock; //对框架进行操作的block
|
||||
@property(nonatomic, strong)APBToygerRemoteConfig * bisConfig; //bis下放的配置参数
|
||||
@property(nonatomic, strong)APBToygerDataCenter * dataCenter; //行为日志
|
||||
@property(nonatomic, copy)NSString *bisToken; //bisToken
|
||||
@property(nonatomic, assign)NSInteger currentRetryCnt; //当前重试次数
|
||||
@property(nonatomic, assign)BOOL soundStatus; //当前声音状态
|
||||
//@property(nonatomic, assign)BOOL isLoginMode; //当前场景是否为登录场景
|
||||
@property(nonatomic, assign)BOOL isMYBank; //是否是网商银行
|
||||
@property(nonatomic, strong)DTFLogMonitor *monitor; //埋点
|
||||
@property(nonatomic, weak) id<BioAuthTaskDelegate> delegate;
|
||||
|
||||
- (void)exitWithResult:(APBResultType)result failReason:(NSString *)failReason retCodeSub:(NSString *)retCodeSub retMessageSub:(NSString *)retMessageSub;
|
||||
|
||||
- (void)eventQuitWithCompletionCallback:(BioAuthExecCallback)callback;
|
||||
/**
|
||||
* 刷脸重试
|
||||
*/
|
||||
- (void)handleRetryActionWithScene:(NSString *)scene
|
||||
buttonTitle:(NSString *)title
|
||||
retryIncrement:(BOOL)retryIncrement;
|
||||
|
||||
/**
|
||||
* 用户选择退出
|
||||
*/
|
||||
- (void)handleExitActionWithScene:(NSString *)scene
|
||||
buttonTitle:(NSString *)title
|
||||
exitReason:(APBResultType)reason
|
||||
extAction:(APFAlertExtraAction)action;
|
||||
|
||||
/**
|
||||
* 用户选择继续
|
||||
*/
|
||||
- (void)handleContinueActionWithScene:(NSString *)scene
|
||||
buttonTitle:(NSString *)title
|
||||
extaction:(APFAlertExtraAction)action;
|
||||
|
||||
/**
|
||||
* 消除VC的方式,加菲和樱桃不同
|
||||
*/
|
||||
- (void)dismissViewControllerAnimated: (BOOL)flag completion:(void (^ __nullable)(void))completion;
|
||||
|
||||
@end
|
||||
@@ -0,0 +1,28 @@
|
||||
//
|
||||
// APFCherryDetectTask.h
|
||||
// APBToygerFacade
|
||||
//
|
||||
// Created by richard on 01/02/2018.
|
||||
// Copyright © 2018 DTF. All rights reserved.
|
||||
//
|
||||
|
||||
#import <Foundation/Foundation.h>
|
||||
#import <BioAuthEngine/AFEStatusBar.h>
|
||||
#import <APBToygerFacade/APBToygerBaseTask.h>
|
||||
#import <BioAuthEngine/BioAuthEngine.h>
|
||||
#import <DTFUtility/CameraService.h>
|
||||
|
||||
#define kFaceCameraPreviewWidth 480
|
||||
#define kFaceCameraPreviewHeight 640
|
||||
#define kFaceAVCaptureSessionPreset AVCaptureSessionPreset640x480
|
||||
|
||||
@interface APBToygerCherryDetectTask : APBToygerBaseTask <DTFCameraServiceDelegate, DTFFaceViewDelegate, ToygerServiceInstanceDelegate>
|
||||
|
||||
@property (nonatomic, assign) BOOL photinusFlags;
|
||||
@property (nonatomic, strong) DTFCameraService *cameraService;
|
||||
@property (nonatomic, strong) id instance; //Toyger对象
|
||||
@property (nonatomic, assign) BOOL useNativePhotinus;
|
||||
|
||||
- (void)onButtonCancel;
|
||||
|
||||
@end
|
||||
@@ -0,0 +1,26 @@
|
||||
//
|
||||
// APFCherryUploadTask.h
|
||||
// APFaceDetectBiz
|
||||
//
|
||||
// Created by yukun.tyk on 28/11/2016.
|
||||
// Copyright © 2016 DTF. All rights reserved.
|
||||
//
|
||||
|
||||
#import <Foundation/Foundation.h>
|
||||
#import <APBToygerFacade/APBToygerUploadTask.h>
|
||||
#import <BioAuthEngine/APBToygerDataCenter.h>
|
||||
|
||||
typedef NS_ENUM(NSInteger, APBToygerRemoteCommand)
|
||||
{
|
||||
APBToyger_REMOTE_COMMAND_PASS = 1001, //比对通过
|
||||
APBToyger_REMOTE_COMMAND_CONTINUE = 1002, //需要继续采集
|
||||
APBToyger_REMOTE_COMMAND_FAIL = 2001, //比对失败
|
||||
APBToyger_REMOTE_COMMAND_RETRY = 2002, //需要重试
|
||||
};
|
||||
|
||||
|
||||
@interface APBToygerCherryUploadTask : APBToygerUploadTask <APBToygerDataCenterDelegate>
|
||||
|
||||
- (APBToygerRemoteCommand)remoteCommandFromString:(NSString *)code;
|
||||
|
||||
@end
|
||||
@@ -0,0 +1,36 @@
|
||||
//
|
||||
// APFaceFacade.h
|
||||
// APFaceDetectBiz
|
||||
//
|
||||
// Created by 晗羽 on 8/25/16.
|
||||
// Copyright © 2016 DTF. All rights reserved.
|
||||
//
|
||||
|
||||
#import <Foundation/Foundation.h>
|
||||
#import <BioAuthEngine/IBioAuthFactor.h>
|
||||
|
||||
@interface APBToygerFacade : NSObject <IBioAuthFactor>
|
||||
|
||||
+(void)setTokenid:(NSString*)info;
|
||||
+(NSString*)getTokenid;
|
||||
|
||||
@end
|
||||
|
||||
#import <APBToygerFacade/APBToygerCherryDetectTask.h>
|
||||
#import <APBToygerFacade/APBToygerBaseTask.h>
|
||||
#import <APBToygerFacade/APBToygerPresentTask.h>
|
||||
#import <APBToygerFacade/APBToygerCherryUploadTask.h>
|
||||
#import <APBToygerFacade/APBToygerUtils.h>
|
||||
#import <APBToygerFacade/APBToygerUploadTask.h>
|
||||
#import <APBToygerFacade/APBToygerFacadeDefine.h>
|
||||
#import <DTFUtility/APBToygerRemoteConfig.h>
|
||||
#import <BioAuthEngine/APBToygerBehavlogManager.h>
|
||||
#import <BioAuthEngine/APBToygerDataCenter.h>
|
||||
#import <APBToygerFacade/APBToygerViewController.h>
|
||||
#import <UIKit/UIKit.h>
|
||||
|
||||
//! Project version number for APBToygerFacade.
|
||||
FOUNDATION_EXPORT double APBToygerFacadeVersionNumber;
|
||||
|
||||
//! Project version string for APBToygerFacade.
|
||||
FOUNDATION_EXPORT const unsigned char APBToygerFacadeVersionString[];
|
||||
@@ -0,0 +1,130 @@
|
||||
//
|
||||
// APFCherryDefine.h
|
||||
// APBToygerFacade
|
||||
//
|
||||
// Created by shouyi.www on 27/02/2017.
|
||||
// Copyright © 2017 DTF. All rights reserved.
|
||||
//
|
||||
|
||||
#ifndef APBToygerFacadeDefine_h
|
||||
#define APBToygerFacadeDefine_h
|
||||
|
||||
|
||||
static float normalized_distance(float current_value, float best_value, float range) {
|
||||
return fabsf((current_value - best_value) / range);
|
||||
}
|
||||
|
||||
//typedef struct toyger_status_evaluator_t {
|
||||
// float pitch;
|
||||
// float yaw;
|
||||
// float width;
|
||||
//
|
||||
// float best_pitch;
|
||||
// float best_yaw;
|
||||
// float best_width;
|
||||
// float pitch_range;
|
||||
// float yaw_range;
|
||||
// float width_range;
|
||||
// float pitch_weight;
|
||||
// float yaw_weight;
|
||||
// float width_weight;
|
||||
//
|
||||
// toyger_status_evaluator_t(float pitch_ = -0.3, float pitch_range_ = 0.7, float best_pitch_ = 0, float pitch_weight_ = 1,
|
||||
// float yaw_ = -0.6, float yaw_range_ = 0.6, float best_yaw_ = 0, float yaw_weight_ = 1,
|
||||
// float width_ = 0.2, float width_range_ = 1.2, float best_width_ = 0.7, float width_weight_ = 1){
|
||||
// pitch = pitch_;
|
||||
// yaw = yaw_;
|
||||
// width = width_;
|
||||
// pitch_range = pitch_range_;
|
||||
// yaw_range = yaw_range_;
|
||||
// width_range = width_range_;
|
||||
// best_pitch = best_pitch_;
|
||||
// best_yaw = best_yaw_;
|
||||
// best_width = best_width_;
|
||||
// pitch_weight = pitch_weight_;
|
||||
// yaw_weight = yaw_weight_;
|
||||
// width_weight = width_weight_;
|
||||
// }
|
||||
//
|
||||
// void reset(){
|
||||
// pitch = -0.3;
|
||||
// yaw = -0.6;
|
||||
// width = 0.2;
|
||||
// }
|
||||
//
|
||||
// void update(float pitch_, float yaw_, float width_) {
|
||||
// pitch = pitch_;
|
||||
// yaw = yaw_;
|
||||
// width = width_;
|
||||
// }
|
||||
//
|
||||
// float evaluateProgress(float pitch_, float yaw_, float width_){
|
||||
// return
|
||||
// (normalized_distance(pitch_, best_pitch, pitch_range) * pitch_weight +
|
||||
// normalized_distance(yaw_, best_yaw, yaw_range) * yaw_weight +
|
||||
// normalized_distance(width_, best_width, width_range) * width_weight) /
|
||||
// (pitch_weight + yaw_weight + width_weight);
|
||||
// }
|
||||
//
|
||||
// float evaluate(){
|
||||
// return 1 -
|
||||
// (normalized_distance(pitch, best_pitch, pitch_range) * pitch_weight +
|
||||
// normalized_distance(yaw, best_yaw, yaw_range) * yaw_weight +
|
||||
// normalized_distance(width, best_width, width_range) * width_weight) /
|
||||
// (pitch_weight + yaw_weight + width_weight);
|
||||
// }
|
||||
//
|
||||
//}ToygerStatusEvaluator;
|
||||
|
||||
|
||||
typedef struct apbtoyger_tip_evaluator_t {
|
||||
bool pose_end;
|
||||
bool has_face;
|
||||
bool did_blink;
|
||||
bool pos_okay;
|
||||
bool quality_okay;
|
||||
bool under_exposure;
|
||||
bool face_width_too_small;
|
||||
bool face_width_too_big;
|
||||
bool integrity_fail;
|
||||
bool yaw_fail;
|
||||
bool pitch_fail;
|
||||
bool tremble_fail;
|
||||
bool did_checkSeven;
|
||||
int tip_timer_wait_cnt;
|
||||
bool tip_show_switch;
|
||||
int tip_message;
|
||||
|
||||
apbtoyger_tip_evaluator_t(){
|
||||
reset();
|
||||
}
|
||||
|
||||
void reset(){
|
||||
has_face = false;
|
||||
did_blink = false;
|
||||
pos_okay = false;
|
||||
under_exposure = false;
|
||||
face_width_too_small = false;
|
||||
integrity_fail = false;
|
||||
pitch_fail = false;
|
||||
face_width_too_big = false;
|
||||
yaw_fail = false;
|
||||
tremble_fail = false;
|
||||
tip_timer_wait_cnt = 0;
|
||||
tip_show_switch = true;
|
||||
did_checkSeven = false;
|
||||
quality_okay = false;
|
||||
pose_end = false;
|
||||
tip_message =0;
|
||||
}
|
||||
}APBToygerTipEvaluator;
|
||||
|
||||
|
||||
//UI样式
|
||||
typedef enum : NSUInteger {
|
||||
APBToygerUIStyleFPPCherry = 991, //991 FPP樱桃(废弃)
|
||||
APBToygerUIStyleCherry, //992 zFace樱桃
|
||||
APBToygerUIStyleGarfield, //993 加菲
|
||||
} APBToygerUIStyle;
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,25 @@
|
||||
//
|
||||
// APFPresentTask.h
|
||||
// APFaceDetectBiz
|
||||
//
|
||||
// Created by 晗羽 on 8/26/16.
|
||||
// Copyright © 2016 DTF. All rights reserved.
|
||||
//
|
||||
|
||||
#import <APBToygerFacade/APBToygerBaseTask.h>
|
||||
#import <DTFUtility/CameraService.h>
|
||||
#import <BioAuthEngine/DTFFaceViewProtocol.h>
|
||||
/**
|
||||
* @author Skye Ying, 16-08-26 13:08:04
|
||||
*
|
||||
* 新建VC,启动整个view
|
||||
*/
|
||||
@interface APBToygerPresentTask : APBToygerBaseTask
|
||||
|
||||
@property(nonatomic, strong) id<DTFFaceViewProtocol> faceView;
|
||||
|
||||
-(void) postCameraPresentwithCamera:(DTFCameraService *) cameraService;
|
||||
|
||||
-(void) presentAnimated: (BOOL)flag completion:(void (^ __nullable)(void))completion;
|
||||
|
||||
@end
|
||||
@@ -0,0 +1,27 @@
|
||||
//
|
||||
// APBToygerUploadTask.h
|
||||
// APBToygerFacade
|
||||
//
|
||||
// Created by Dan Cong on 29/1/2018.
|
||||
// Copyright © 2018 DTF. All rights reserved.
|
||||
//
|
||||
|
||||
#import <APBToygerFacade/APBToygerBaseTask.h>
|
||||
|
||||
/**
|
||||
上传基类,用于下沉多种UI(樱桃和加菲)下通用的逻辑
|
||||
*/
|
||||
@interface APBToygerUploadTask : APBToygerBaseTask
|
||||
|
||||
- (void)uploadImage;
|
||||
|
||||
- (void)didFinishUploadWithSuccess:(BOOL)success
|
||||
retCode:(NSString *)retCode
|
||||
retMessage:(NSString *)msg
|
||||
extInfo:(NSString *)ext;
|
||||
|
||||
- (void)handleFailWithRetCodeSub:(NSString *)retCodeSub retMessageSub:(NSString *)retMessageSub;
|
||||
|
||||
- (void)requestAgain;
|
||||
|
||||
@end
|
||||
@@ -0,0 +1,65 @@
|
||||
//
|
||||
// APFUtils.h
|
||||
// APFaceDetectBiz
|
||||
//
|
||||
// Created by 晗羽 on 8/25/16.
|
||||
// Copyright © 2016 DTF. All rights reserved.
|
||||
//
|
||||
|
||||
#import <Foundation/Foundation.h>
|
||||
#import <APBToygerFacade/APBToygerFacadeDefine.h>
|
||||
|
||||
//#import "APFaceDetectBizFacade.h"
|
||||
|
||||
//主线程同步操作
|
||||
#define SYNC_MAINTHREAD_BEGIN_APBT [APBToygerUtils APBToygerMainThread:^{
|
||||
#define SYNC_MAINTHREAD_END_APBT }];
|
||||
|
||||
#define LOCK(locker, ...) dispatch_semaphore_wait(locker, DISPATCH_TIME_FOREVER); \
|
||||
__VA_ARGS__; \
|
||||
dispatch_semaphore_signal(locker);
|
||||
|
||||
@class MGLivenessDetectionFrameEncodedData;
|
||||
|
||||
@interface APBToygerUtils : NSObject
|
||||
|
||||
+ (void)APBToygerMainThread:(dispatch_block_t)block;
|
||||
|
||||
+ (NSString *)getTextContentforKey:(NSString*)keyName;
|
||||
+ (NSString *)localizedTextForKey:(NSString *)key;
|
||||
+ (NSBundle *)getBundle;
|
||||
|
||||
+ (int)getCodefrom:(NSString *)bisToken withLength:(int)codeLen;
|
||||
//+ (NSString *)getActionNoticeByActionType:(APFLiveActionType) actionType;
|
||||
|
||||
//检查文件是否存在
|
||||
+ (BOOL) checkFileunderPath:(NSString *) filePath;
|
||||
|
||||
//写入文件
|
||||
//如果文件存在,不重写,返回失败。
|
||||
//如果文件不再在,写入,返回写入结果
|
||||
+ (BOOL) writeFileunderPath:(NSString *) filePath;
|
||||
|
||||
//删除文件
|
||||
+ (BOOL) removeFileunderPath:(NSString *) filePath;
|
||||
|
||||
//随机文件名
|
||||
+ (NSString *)randomString:(NSInteger)len;
|
||||
|
||||
+ (NSString *)localizedStringForKey:(NSString *)key;
|
||||
|
||||
+ (UIImage *)loadImageFromBundleNamed:(NSString *)imageName;
|
||||
|
||||
+ (UIWindow *)lastWindow;
|
||||
|
||||
+ (APBToygerTips *)toygerTipsConfig;
|
||||
|
||||
+ (BOOL)useElemeEquipmentUI:(APBToygerRemoteConfig *)config;
|
||||
|
||||
+ (BOOL)useNearFarLiveness:(APBToygerRemoteConfig *)config;
|
||||
|
||||
@end
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,31 @@
|
||||
//
|
||||
// APFViewController.h
|
||||
// APFaceDetectBiz
|
||||
//
|
||||
// Created by 晗羽 on 8/25/16.
|
||||
// Copyright © 2016 DTF. All rights reserved.
|
||||
//
|
||||
|
||||
#import <UIKit/UIKit.h>
|
||||
#import <ToygerService/ToygerService.h>
|
||||
#import <BioAuthEngine/DTFFaceViewProtocol.h>
|
||||
#import <BioAuthEngine/DTFBaseViewController.h>
|
||||
|
||||
@interface APBToygerViewController : DTFBaseViewController
|
||||
|
||||
@property(nonatomic, strong) id<DTFFaceViewProtocol> faceView;
|
||||
|
||||
- (void)startFaceRecognition:(AVCaptureVideoPreviewLayer *)layer;
|
||||
|
||||
- (void)handleFaceStateChange:(ToygerMessage)state
|
||||
stateTips:(NSString *)tips
|
||||
actionGuideType:(ToygerStaticMessage)guideType
|
||||
actionGuide:(NSString *)guide
|
||||
progress:(CGFloat)progress
|
||||
extInfo:(NSDictionary *)extInfo;
|
||||
|
||||
- (void)faceDectectComplete;
|
||||
- (void)setPhotinusColor:(UIColor *)color;
|
||||
- (void)showBlur:(UIImage *)image;
|
||||
|
||||
@end
|
||||
@@ -0,0 +1,6 @@
|
||||
framework module APBToygerFacade {
|
||||
umbrella header "APBToygerFacade.h"
|
||||
|
||||
export *
|
||||
module * { export * }
|
||||
}
|
||||
@@ -0,0 +1,122 @@
|
||||
//
|
||||
// APDID.h
|
||||
// APPSecuritySDK
|
||||
//
|
||||
// Created by eric on 2021/2/7.
|
||||
// Copyright © 2021 Alipay. All rights reserved.
|
||||
//
|
||||
|
||||
#import <Foundation/Foundation.h>
|
||||
#import "ASSTokenResult.h"
|
||||
|
||||
NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
typedef void(^ASSSecureSdkCallback)(ASSTokenResult* result, NSString* error);
|
||||
|
||||
typedef void(^ASSSecureSdkOpenCallback)(NSString* token, int errorCode);
|
||||
|
||||
@interface APDID : NSObject
|
||||
|
||||
/*
|
||||
异步初始化vkeyid,推荐在app启动时和收银台页面加载时调用,SDK内部会根据时间戳和设备信息进行判断是否需要进行网络请求,无线程要求
|
||||
@param params 初始化的字典参数,包含三项内容:tid、userid、environment;
|
||||
tid与userid选传,传入可以保证vkeyid与其正确关联,取不到传入空字符串;
|
||||
环境变量请与app设置中的环境相关联,字典中的value包括线上,预发,测试,日常;
|
||||
@param callback 初始化完成后的结果回调
|
||||
|
||||
Asynchronously initialize vkeyid(apdid), recommend to invoke this API when app launches, and cashier view presents.
|
||||
Inside SDK we will decide whether to launch network request or not based on timestamp and device info.
|
||||
No thread requirement.
|
||||
@param params: Initialized parameters, includes 3 key-value pairs: tid, userid,environment;
|
||||
Tid and userid are optional, they can be associated with vkeyid(apdid) if passed in.
|
||||
If the values for tid and userid are not available, pass in empty NSString(@"").
|
||||
@param callback: Callback block when token is available
|
||||
*/
|
||||
+ (void) initToken:(NSDictionary*)params callback:(ASSSecureSdkCallback)callback;
|
||||
|
||||
/*
|
||||
同步获取vkeyid完整信息,包括vkeyid,token,clientkey,无网络请求;
|
||||
如果首次安装app,且首次网络请求未完成或失败,将会返回降级措施:vkeyid会返回客户端随机串clientkey,token将会返回空。
|
||||
|
||||
Synchronously get full info of vkeyid(apdid), token and clientkey, no network requests.
|
||||
If the app is installed for the first time and first network request failed, it would return degradation result: vkeyid would be clientkey which is a client-side generated random string, token would be empty NSString @""
|
||||
*/
|
||||
+ (ASSTokenResult*)getToken DEPRECATED_MSG_ATTRIBUTE("use getTokenResult instead");
|
||||
|
||||
/*
|
||||
同步获取vkeyid完整信息,包括vkeyid,token,clientkey,无网络请求;
|
||||
如果首次安装app,且首次网络请求未完成或失败,将会返回降级措施:vkeyid会返回客户端随机串clientkey,token将会返回空。
|
||||
|
||||
Synchronously get full info of vkeyid(apdid), token and clientkey, no network requests.
|
||||
If the app is installed for the first time and first network request failed, it would return degradation result: vkeyid would be clientkey which is a client-side generated random string, token would be empty NSString @""
|
||||
*/
|
||||
+ (ASSTokenResult*)getTokenResult;
|
||||
|
||||
|
||||
+ (ASSTokenResult *)getTokenResult:(NSString*)appName appKeyClient:(NSString*)appKeyClient;
|
||||
|
||||
|
||||
//===================lazada api====================//
|
||||
|
||||
/*
|
||||
异步初始化vkeyid,推荐在app启动时和收银台页面加载时调用,SDK内部会根据时间戳和设备信息进行判断是否需要进行网络请求,无线程要求
|
||||
@param appName 应用名称
|
||||
|
||||
@param appKeyClient 应用客户端密钥
|
||||
|
||||
@param callback 初始化完成后的结果回调,以Token作为参数
|
||||
|
||||
*/
|
||||
+ (void)initToken:(NSString *)appName appKeyClient:(NSString *)appKeyClient callback:(ASSSecureSdkOpenCallback)callback;
|
||||
|
||||
/*
|
||||
同步接口返回token
|
||||
|
||||
@param appName 应用名称
|
||||
|
||||
@param appKeyClient 应用客户端密钥
|
||||
|
||||
*/
|
||||
+ (NSString *)getResultToken;
|
||||
|
||||
/*
|
||||
同步接口返回token
|
||||
|
||||
@param appName 应用名称
|
||||
|
||||
@param appKeyClient 应用客户端密钥
|
||||
|
||||
*/
|
||||
+ (NSString *)getResultToken:(NSString*)appName appKeyClient:(NSString*)appKeyClient;
|
||||
|
||||
//===================TMN api====================//
|
||||
/*
|
||||
异步初始化vkeyid,推荐在app启动时和收银台页面加载时调用,SDK内部会根据时间戳和设备信息进行判断是否需要进行网络请求,无线程要求
|
||||
@param appName 应用名称
|
||||
|
||||
@param appKeyClient 应用客户端密钥
|
||||
|
||||
@param sessionId 业务方传入自己的id
|
||||
|
||||
@param callback 初始化完成后的结果回调,以Token作为参数
|
||||
|
||||
*/
|
||||
|
||||
+ (void)initToken:(NSString *)appName appKeyClient:(NSString *)appKeyClient sessionId:(NSString *)sessionId callback:(ASSSecureSdkOpenCallback)callback;
|
||||
|
||||
|
||||
//===================ae api====================//
|
||||
|
||||
/*
|
||||
强制上报接口
|
||||
@param params 初始化的字典参数,包含四项内容:umid、tid、userid、environment;
|
||||
umid必传,tid与userid选传,传入可以保证vkeyid与其正确关联,取不到传入空字符串;
|
||||
环境变量请与app设置中的环境相关联,字典中的value包括线上,预发,测试,日常;
|
||||
@param callback 初始化完成后的结果回调
|
||||
|
||||
*/
|
||||
+ (void) updateToken:(NSDictionary*)params callback:(ASSSecureSdkCallback)callback;
|
||||
|
||||
@end
|
||||
|
||||
NS_ASSUME_NONNULL_END
|
||||
@@ -0,0 +1,41 @@
|
||||
//
|
||||
// APDeviceColor.h
|
||||
// APPSecuritySDK
|
||||
//
|
||||
// Created by eric on 2021/2/25.
|
||||
// Copyright © 2021 Alipay. All rights reserved.
|
||||
//
|
||||
|
||||
#import <Foundation/Foundation.h>
|
||||
|
||||
NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
@interface APDeviceColor : NSObject
|
||||
|
||||
/*
|
||||
* getColorLabel 设备染色接口
|
||||
*
|
||||
* @param bizToken 业务场景
|
||||
* @param extParams 扩展参数
|
||||
* @param errInfo 错误信息
|
||||
*
|
||||
* @return 设备染色数据
|
||||
*/
|
||||
+ (NSString*) getColorLabel: (NSString*) bizToken
|
||||
ext: (NSDictionary *) extParams
|
||||
error: (NSError **) errInfo;
|
||||
|
||||
/*
|
||||
* getColorLabel 设备染色接口
|
||||
*
|
||||
* @param extParams 扩展参数
|
||||
* @param errInfo 错误信息
|
||||
*
|
||||
* @return 设备染色数据
|
||||
*/
|
||||
+ (NSString*) getColorLabel: (NSDictionary *) extParams
|
||||
error: (NSError **) errInfo;
|
||||
|
||||
@end
|
||||
|
||||
NS_ASSUME_NONNULL_END
|
||||
@@ -0,0 +1,32 @@
|
||||
//
|
||||
// APDynamic.h
|
||||
// APPSecuritySDK-Sign
|
||||
//
|
||||
// Created by eric on 2021/2/25.
|
||||
// Copyright © 2021 Alipay. All rights reserved.
|
||||
//
|
||||
|
||||
#import <Foundation/Foundation.h>
|
||||
|
||||
NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
@interface APDynamic : NSObject
|
||||
|
||||
/*
|
||||
* dynamicCheckDispatch 动态攻防脚本运行
|
||||
*
|
||||
* @param dict 动态攻防脚本
|
||||
*/
|
||||
+ (void)dynamicCheckDispatch:(NSDictionary *)dict;
|
||||
|
||||
/*
|
||||
* dynamicCheckDispatch 动态攻防脚本运行,动态攻防脚本运行后会自动上传, 无特殊需求不建议
|
||||
*
|
||||
* @param dict 动态攻防脚本
|
||||
* @param callback 运行结果回调
|
||||
*/
|
||||
+ (void)dynamicCheckDispatch:(NSDictionary *)dict withCallBack: (void(^)(Boolean, NSString *))callback;
|
||||
|
||||
@end
|
||||
|
||||
NS_ASSUME_NONNULL_END
|
||||
@@ -0,0 +1,21 @@
|
||||
//
|
||||
// APRiskConfigReportRequest.h
|
||||
// APPSecuritySDK-Common
|
||||
//
|
||||
// Created by eric on 2021/8/16.
|
||||
// Copyright © 2021 Alipay. All rights reserved.
|
||||
//
|
||||
|
||||
#import <Foundation/Foundation.h>
|
||||
|
||||
NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
@interface APRiskConfigReportRequest : NSObject
|
||||
|
||||
@property(nonatomic, strong) NSString* os;
|
||||
@property(nonatomic, strong) NSString* apdid;
|
||||
@property(nonatomic, strong) NSDictionary* deviceDataMap;
|
||||
|
||||
@end
|
||||
|
||||
NS_ASSUME_NONNULL_END
|
||||
@@ -0,0 +1,19 @@
|
||||
//
|
||||
// APRiskConfigReportResponse.h
|
||||
// APPSecuritySDK-Common
|
||||
//
|
||||
// Created by eric on 2021/8/16.
|
||||
// Copyright © 2021 Alipay. All rights reserved.
|
||||
//
|
||||
|
||||
#import <Foundation/Foundation.h>
|
||||
|
||||
NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
@interface APRiskConfigReportResponse : NSObject
|
||||
|
||||
@property(nonatomic, strong) NSDictionary* resultData;
|
||||
|
||||
@end
|
||||
|
||||
NS_ASSUME_NONNULL_END
|
||||
@@ -0,0 +1,20 @@
|
||||
//
|
||||
// APRiskConfigServiceProtocol.h
|
||||
// APPSecuritySDKAdapter
|
||||
//
|
||||
// Created by hongren on 2020/9/7.
|
||||
// Copyright © 2020 Alipay. All rights reserved.
|
||||
//
|
||||
#import "APRiskSyncHandlerProtocol.h"
|
||||
|
||||
@protocol APRiskConfigServiceProtocol <NSObject>
|
||||
|
||||
@required
|
||||
- (NSString *)stringValueForKey:(NSString *)key;
|
||||
|
||||
- (void)addConfigChangeListener:(id<APRiskSyncHandlerProtocol>)handler forKey:(NSString *)key;
|
||||
|
||||
- (void)refreshConfig:(NSDictionary *)tConfigMap from:(NSString *)sourceType;
|
||||
|
||||
@end
|
||||
|
||||
@@ -0,0 +1,14 @@
|
||||
//
|
||||
// APRiskFileUploadProtocol.h
|
||||
// APPSecuritySDKAdapter
|
||||
//
|
||||
// Created by hongren on 2020/9/7.
|
||||
// Copyright © 2020 Alipay. All rights reserved.
|
||||
//
|
||||
|
||||
@protocol APRiskFileUploadProtocol <NSObject>
|
||||
|
||||
@required
|
||||
- (NSString *)uploadCustomFile:(NSString *)path;
|
||||
|
||||
@end
|
||||
@@ -0,0 +1,21 @@
|
||||
//
|
||||
// APRiskLoggerProtocol.h
|
||||
// APPSecuritySDK-Common
|
||||
//
|
||||
// Created by eric on 2021/6/25.
|
||||
// Copyright © 2021 Alipay. All rights reserved.
|
||||
//
|
||||
|
||||
#import <Foundation/Foundation.h>
|
||||
|
||||
NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
@protocol APRiskLoggerProtocol <NSObject>
|
||||
|
||||
@required
|
||||
|
||||
-(void)print:(NSString *)format, ...NS_REQUIRES_NIL_TERMINATION;
|
||||
|
||||
@end
|
||||
|
||||
NS_ASSUME_NONNULL_END
|
||||
@@ -0,0 +1,30 @@
|
||||
//
|
||||
// APRiskRPCProtocol.h
|
||||
// APPSecuritySDKAdapter
|
||||
//
|
||||
// Created by hongren on 2020/9/7.
|
||||
// Copyright © 2020 Alipay. All rights reserved.
|
||||
//
|
||||
|
||||
#import "APRiskReportRequest.h"
|
||||
#import "APRiskReportResponse.h"
|
||||
#import "APRiskRpcConfiguration.h"
|
||||
#import "APRiskConfigReportRequest.h"
|
||||
#import "APRiskConfigReportResponse.h"
|
||||
|
||||
@protocol APRiskRPCProtocol <NSObject>
|
||||
//gateway
|
||||
|
||||
@required
|
||||
- (APRiskReportResponse *)sendStaticRequest:(APRiskReportRequest *)data
|
||||
config:(APRiskRpcConfiguration*)cfg;
|
||||
|
||||
@required
|
||||
- (APRiskConfigReportResponse *)sendConfigReportRequest:(APRiskConfigReportRequest *)data
|
||||
config:(APRiskRpcConfiguration*)cfg;
|
||||
|
||||
@required
|
||||
- (BOOL)updateLog:(NSString*)log
|
||||
config:(APRiskRpcConfiguration*)cfg;
|
||||
|
||||
@end
|
||||
@@ -0,0 +1,29 @@
|
||||
//
|
||||
// APRiskRemoteLoggerProtocol.h
|
||||
// APPSecuritySDKAdapter
|
||||
//
|
||||
// Created by hongren on 2020/9/7.
|
||||
// Copyright © 2020 Alipay. All rights reserved.
|
||||
//
|
||||
|
||||
@protocol APRiskRemoteLoggerProtocol <NSObject>
|
||||
|
||||
@required
|
||||
- (void)writeLogWithActionId:(NSString *)event
|
||||
extParams:(NSArray *)args
|
||||
appId:(NSString *)appId
|
||||
seed:(NSString *)seed
|
||||
ucId:(NSString *)ucId;
|
||||
|
||||
@required
|
||||
- (void)writeLogWithActionId:(NSString *)event
|
||||
extParams:(NSArray *)args
|
||||
appId:(NSString *)appId
|
||||
seed:(NSString *)seed
|
||||
ucId:(NSString *)ucId
|
||||
bizType:(NSString *)bizType;
|
||||
|
||||
@required
|
||||
- (void)writeEventLog:(NSDictionary *)dict;
|
||||
|
||||
@end
|
||||
@@ -0,0 +1,68 @@
|
||||
//
|
||||
// APRiskReportRequest.h
|
||||
// APPSecuritySDK
|
||||
//
|
||||
// Created by hongren on 2020/9/7.
|
||||
// Copyright © 2020 Alipay. All rights reserved.
|
||||
//
|
||||
|
||||
#import <Foundation/Foundation.h>
|
||||
|
||||
@interface APRiskReportRequest : NSObject
|
||||
|
||||
/**
|
||||
* os type: android|ios"
|
||||
*/
|
||||
|
||||
@property(nonatomic, strong) NSString *os;
|
||||
/**
|
||||
* device id for ios for static report, or device id for dynamic report both for ios and android
|
||||
*/
|
||||
|
||||
@property(nonatomic, strong) NSString *apdid;
|
||||
/**
|
||||
* public region device id for android for static report
|
||||
*/
|
||||
|
||||
@property(nonatomic, strong) NSString *pubApdid;
|
||||
/**
|
||||
* private region device id for android for static report
|
||||
*/
|
||||
|
||||
@property(nonatomic, strong) NSString *priApdid;
|
||||
/**
|
||||
* apdid token
|
||||
*/
|
||||
|
||||
@property(nonatomic, strong) NSString *token;
|
||||
/**
|
||||
* umid token
|
||||
*/
|
||||
|
||||
@property(nonatomic, strong) NSString *umidToken;
|
||||
/**
|
||||
* rpc version
|
||||
*/
|
||||
|
||||
@property(nonatomic, strong) NSString *version;
|
||||
/**
|
||||
* last apdid time (create time)
|
||||
*/
|
||||
|
||||
@property(nonatomic, strong) NSString *lastTime;
|
||||
|
||||
/**
|
||||
* dynamicKey
|
||||
*/
|
||||
@property(nonatomic,strong) NSString* dynamicKey;
|
||||
/**
|
||||
* device info map
|
||||
*/
|
||||
|
||||
@property(nonatomic, strong) NSDictionary *dataMap;
|
||||
+ (Class)dataMapElementClass;
|
||||
|
||||
@property(nonatomic,strong) NSDictionary *bizData;
|
||||
+ (Class)bizDataElementClass;
|
||||
|
||||
@end
|
||||
@@ -0,0 +1,65 @@
|
||||
//
|
||||
// APRiskReportResponse.h
|
||||
// APPSecuritySDK
|
||||
//
|
||||
// Created by hongren on 2020/9/7.
|
||||
// Copyright © 2020 Alipay. All rights reserved.
|
||||
//
|
||||
|
||||
#import <Foundation/Foundation.h>
|
||||
|
||||
@interface APRiskReportResponse : NSObject
|
||||
|
||||
/**
|
||||
* success or not
|
||||
*/
|
||||
|
||||
@property(nonatomic, assign) BOOL success;
|
||||
/**
|
||||
* result code
|
||||
*/
|
||||
|
||||
@property(nonatomic, strong) NSString *resultCode;
|
||||
|
||||
/**
|
||||
* device id
|
||||
*/
|
||||
|
||||
@property(nonatomic, strong) NSString *apdid;
|
||||
/**
|
||||
* apdid token
|
||||
*/
|
||||
|
||||
@property(nonatomic, strong) NSString *token;
|
||||
/**
|
||||
* current apdid time (create time)
|
||||
*/
|
||||
|
||||
@property(nonatomic, strong) NSString *currentTime;
|
||||
/**
|
||||
* rpc version
|
||||
*/
|
||||
|
||||
@property(nonatomic, strong) NSString *version;
|
||||
/**
|
||||
* switch for vkey
|
||||
*/
|
||||
|
||||
@property(nonatomic, strong) NSString *vkeySwitch;
|
||||
/**
|
||||
* switch for BugTrack
|
||||
*/
|
||||
|
||||
@property(nonatomic, strong) NSString *bugTrackSwitch;
|
||||
/**
|
||||
* version for applist cmd
|
||||
*/
|
||||
|
||||
@property(nonatomic, strong) NSString *appListVer;
|
||||
|
||||
@property(nonatomic, strong) NSString *dynamicKey;
|
||||
|
||||
@property(nonatomic, strong) NSDictionary *resultData;
|
||||
+ (Class)resultDataElementClass;
|
||||
|
||||
@end
|
||||
@@ -0,0 +1,20 @@
|
||||
//
|
||||
// APRiskRpcConfiguration.h
|
||||
// APPSecuritySDKAdapter
|
||||
//
|
||||
// Created by hongren on 2020/9/8.
|
||||
// Copyright © 2020 Alipay. All rights reserved.
|
||||
//
|
||||
#import <Foundation/Foundation.h>
|
||||
|
||||
@interface APRiskRpcConfiguration : NSObject
|
||||
// 超时时间
|
||||
@property(nonatomic, assign) int timeout;
|
||||
|
||||
// 网关地址
|
||||
@property(nonatomic, strong) NSString* gatewayURL;
|
||||
|
||||
// workspaceid和appid
|
||||
@property(nonatomic, strong) NSDictionary *headers;
|
||||
|
||||
@end
|
||||
@@ -0,0 +1,21 @@
|
||||
//
|
||||
// APRiskSyncHandlerProtocol.h
|
||||
// APPSecuritySDK
|
||||
//
|
||||
// Created by eric on 2020/10/15.
|
||||
// Copyright © 2020 Alipay. All rights reserved.
|
||||
//
|
||||
|
||||
#import <Foundation/Foundation.h>
|
||||
|
||||
NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
@protocol APRiskSyncHandlerProtocol <NSObject>
|
||||
|
||||
@required
|
||||
|
||||
-(void) handleWithBizType: (NSString *) bizType andData: (NSString *) data;
|
||||
|
||||
@end
|
||||
|
||||
NS_ASSUME_NONNULL_END
|
||||
@@ -0,0 +1,28 @@
|
||||
//
|
||||
// APRiskSyncServiceProtocol.h
|
||||
// APPSecuritySDK
|
||||
//
|
||||
// Created by eric on 2020/10/15.
|
||||
// Copyright © 2020 Alipay. All rights reserved.
|
||||
//
|
||||
|
||||
#import <Foundation/Foundation.h>
|
||||
#import "APRiskSyncHandlerProtocol.h"
|
||||
|
||||
NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
static NSString* const kEdgeBizTypeGlobal = @"EDGE-GLOBAL";
|
||||
static NSString* const kEdgeBizTypeSingle = @"EDGE-SINGLE";
|
||||
static NSString* const kEdgeBizTypeUid = @"EDGE-SINGLE-USER";
|
||||
static NSString* const kEdgeBizTypeSyncDegradeToConfig = @"EDGE-SYNC-DEGRADE-TO-CONFIG";
|
||||
|
||||
@protocol APRiskSyncServiceProtocol <NSObject>
|
||||
|
||||
@required
|
||||
|
||||
-(void) registerHandler:(id<APRiskSyncHandlerProtocol>)handler;
|
||||
-(void) registerSyncBiz;
|
||||
|
||||
@end
|
||||
|
||||
NS_ASSUME_NONNULL_END
|
||||
@@ -0,0 +1,41 @@
|
||||
//
|
||||
// APSecRDS.h
|
||||
// APSecRDS
|
||||
//
|
||||
// Created by xingchen on 15/4/8.
|
||||
// Copyright (c) 2015年 Alipay. All rights reserved.
|
||||
//
|
||||
|
||||
#import <Foundation/Foundation.h>
|
||||
#import <UIKit/UIKit.h>
|
||||
|
||||
@interface APSecRDS : NSObject
|
||||
|
||||
/*
|
||||
appname 当前app的名称
|
||||
appver 当前app的版本
|
||||
sdkname 当前sdk的名称
|
||||
sdkver 当前sdk的版本
|
||||
user 淘宝/支付宝身份
|
||||
pagesrc 淘宝/支付宝
|
||||
page 当前页面标识
|
||||
|
||||
*/
|
||||
-(void) onPageWithView:(NSString*)pageName args:(NSDictionary*) inArgs;
|
||||
-(NSString*) onPageEndWithView:(NSString*) pageName user:(NSString*) userName;
|
||||
-(NSString*) onPageEndZipDataWithView:(NSString*)pageName user:(NSString*)userName;
|
||||
|
||||
-(void) onControlClickWithView:(NSString*) pageName ctrl: (NSString*)ctrlName;
|
||||
|
||||
//按键信息
|
||||
-(void) onKeyDownWithView:(NSString*) pageName ctrl:(NSString*) ctrlName keyCode:(NSString*)keyValue;
|
||||
|
||||
//焦点信息
|
||||
-(void) onGetFocusWithView:(NSString*)pageName ctrl:(NSString*) ctrlName;
|
||||
-(void) onLostFocusWithView:(NSString*) pageName ctrl:(NSString*) ctrlName;
|
||||
|
||||
//触屏信息
|
||||
-(void) onTouchScreenWithView:(NSString*)pageName ctrl:(NSString*) ctrlName point:(CGPoint) pt;
|
||||
|
||||
|
||||
@end
|
||||
@@ -0,0 +1,48 @@
|
||||
//
|
||||
// APSecStore.h
|
||||
// APPSecuritySDK
|
||||
//
|
||||
// Created by eric on 2021/3/10.
|
||||
// Copyright © 2021 Alipay. All rights reserved.
|
||||
//
|
||||
|
||||
#import <Foundation/Foundation.h>
|
||||
|
||||
NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
@interface APSecStore : NSObject
|
||||
|
||||
/*
|
||||
*功能: 从keychain中载入字符串
|
||||
*线程安全: 是
|
||||
*可重入: 是
|
||||
*@return: 成功返回key对应字符串,失败返回nil
|
||||
*@param key:不能为nil
|
||||
*@param error:失败时保存错误信息
|
||||
*/
|
||||
+(NSString*) loadKey:(NSString*) key error:(NSError **)error;
|
||||
|
||||
/*
|
||||
*功能: 将字符串(键-值对)存入keychain
|
||||
*线程安全: 是
|
||||
*可重入: 是
|
||||
*@return: 成功返回yes,失败返回no
|
||||
*@param key:不能为nil
|
||||
*@param value:不能为nil
|
||||
*@param error:失败时保存错误信息
|
||||
*/
|
||||
+(BOOL) saveKey:(NSString*) key Value:(NSString*)value error:(NSError **)error;
|
||||
|
||||
/*
|
||||
*功能: 从keychain中删除字符串(键-值对)
|
||||
*线程安全: 是
|
||||
*可重入: 是
|
||||
*@return: 成功返回yes,失败返回no
|
||||
*@param key:不能为nil
|
||||
*@param error:失败时保存错误信息
|
||||
*/
|
||||
+(BOOL) deleteKey:(NSString*) key error:(NSError **)error;
|
||||
|
||||
@end
|
||||
|
||||
NS_ASSUME_NONNULL_END
|
||||
@@ -0,0 +1,117 @@
|
||||
//
|
||||
// ASSSecureSdk.h
|
||||
// APSecSecuritySDK
|
||||
//
|
||||
// Created by xingchen on 15/2/26.
|
||||
// Copyright (c) 2015年 Alipay. All rights reserved.
|
||||
//
|
||||
#import <Foundation/Foundation.h>
|
||||
|
||||
//初始化API的字典参数中,TID的key
|
||||
//key for TID in the NSDictionary parameter for initToken:callback: API
|
||||
extern NSString * const ASS_TID;
|
||||
|
||||
//初始化API的字典参数中,userid的key
|
||||
//key for USERID in the NSDictionary parameter for initToken:callback: API
|
||||
extern NSString * const ASS_USERID;
|
||||
|
||||
//初始化API的字典参数中,环境变量的key
|
||||
//key for server environment configuration in the NSDictionary parameter for initToken:callback: API
|
||||
extern NSString * const ASS_ENVIRONMENT;
|
||||
|
||||
//初始化API的字典参数中,环境变量的value,代表线上环境
|
||||
//value for server configuration in the NSDictionary parameter for initToken:callback: API, stands for online environment
|
||||
extern NSString * const ASS_ENVIRONMENT_ONLINE;
|
||||
|
||||
//初始化API的字典参数中,环境变量的value,代表测试环境
|
||||
//value for server configuration in the NSDictionary parameter for initToken:callback: API, stands for test environment
|
||||
extern NSString * const ASS_ENVIRONMENT_SIT;
|
||||
|
||||
//初始化API的字典参数中,环境变量的value,代表开发环境
|
||||
//value for server configuration in the NSDictionary parameter for initToken:callback: API, stands for daily environment
|
||||
extern NSString * const ASS_ENVIRONMENT_DAILY;
|
||||
|
||||
//初始化API的字典参数中,环境变量的value,代表预发环境
|
||||
//value for server configuration in the NSDictionary parameter for initToken:callback: API, stands for pre online environment
|
||||
extern NSString * const ASS_ENVIRONMENT_PRE;
|
||||
|
||||
//初始化API的字典参数中,设置RPC网关地址的key。
|
||||
//key for RPC server gateway address in the NSDictionary parameter for initToken:callback: API.
|
||||
//If value for this key is specified, the value for ASS_ENVIRONMENT will be ignored.
|
||||
extern NSString* const ASS_RPC_GATEWAY_ADDR;
|
||||
|
||||
//rpc header workspaceid key
|
||||
extern NSString* const ASS_RPC_WORKSPACEID;
|
||||
|
||||
//rpc header appid key
|
||||
extern NSString* const ASS_RPC_APPID;
|
||||
|
||||
//初始化API的字典参数中,设置UMID网关host地址的key。
|
||||
//host 要设置的线上地址,如ynuf.alipay.com,不要带协议头,不要带后面的参数,只能传纯host地址
|
||||
//key for UMID server host in the NSDictionary parameter for initToken:callback: API.
|
||||
//host should only contain online address such as ynuf.alipay.com, without protocol or parameters.
|
||||
extern NSString* const ASS_UMID_HOST;
|
||||
|
||||
//初始化API的字典参数中,设置加密的umid。
|
||||
extern NSString * const ASS_ENCODE_UMID;
|
||||
|
||||
/*!
|
||||
@typedef ASSStatusCode
|
||||
|
||||
Possible return codes
|
||||
@constant ASSStatusCodeOk Completed, No errors
|
||||
@constant ASSStatusCodeInvalidParam input param invalid
|
||||
@constant ASSStatusCodeAppNameNil appName is nil
|
||||
@constant ASSStatusCodeAppKeyNil appKeyClient is nil
|
||||
@constant ASSStatusCodeConnectionError network connection failure
|
||||
*/
|
||||
typedef NS_ENUM(NSInteger, ASSStatusCode)
|
||||
{
|
||||
ASSStatusCodeOk = 0,
|
||||
ASSStatusCodeInvalidParam,
|
||||
ASSStatusCodeAppNameNil,
|
||||
ASSStatusCodeAppKeyNil,
|
||||
ASSStatusCodeConnectionError,
|
||||
|
||||
};
|
||||
|
||||
typedef NS_ENUM(NSInteger, ASSAddressFlag)
|
||||
{
|
||||
ASSAddressFlagIndonesia = 1,
|
||||
ASSAddressFlagMalaysia = 2,
|
||||
ASSAddressFlagPilipinas = 3,
|
||||
ASSAddressFlagSingapore = 4,
|
||||
ASSAddressFlagIpayVn = 11,
|
||||
ASSAddressFlagIpayId = 12,
|
||||
ASSAddressFlagIpayMy = 13,
|
||||
ASSAddressFlagIpaySg = 14,
|
||||
ASSAddressFlagIpayTh = 15,
|
||||
ASSAddressFlagIpayPh = 16,
|
||||
ASSAddressFlagIpayDefault = 17,
|
||||
};
|
||||
|
||||
@interface APSecureSdk : NSObject
|
||||
|
||||
/**
|
||||
获取单例
|
||||
*/
|
||||
+ (id)sharedInstance;
|
||||
|
||||
/*
|
||||
*网关设置
|
||||
*/
|
||||
- (void)setSecuritySDKConfig:(ASSAddressFlag)address;
|
||||
|
||||
/**
|
||||
初始化
|
||||
*/
|
||||
- (void)initWithRpcConfiguration:(NSDictionary *) config;
|
||||
|
||||
//===================测试联调 api====================//
|
||||
- (void)setRpcConfiguration:(NSDictionary *) config;
|
||||
|
||||
+(BOOL) isSupportFaceShield;
|
||||
|
||||
+(BOOL) isTrackingAuthorization;
|
||||
|
||||
@end
|
||||
@@ -0,0 +1,61 @@
|
||||
//
|
||||
// APSign.h
|
||||
// APPSecuritySDK-Sign
|
||||
//
|
||||
// Created by eric on 2021/2/25.
|
||||
// Copyright © 2021 Alipay. All rights reserved.
|
||||
//
|
||||
|
||||
#import <Foundation/Foundation.h>
|
||||
|
||||
NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
extern NSString * const APSE_SIGN_MODE_NORMAL;
|
||||
extern NSString * const APSE_SIGN_MODE_ENHANCE;
|
||||
extern NSString * const APSE_SIGN_MODE_NORMAL_ASYNC;
|
||||
extern NSString * const APSE_SIGN_MODE_ENHANCE_ASYNC;
|
||||
|
||||
@interface APSign : NSObject
|
||||
|
||||
/*
|
||||
* getColorInfo 请求可信接口,获取数字签名
|
||||
*
|
||||
* @param bizToken 业务场景
|
||||
* @param bizParam 业务参数
|
||||
* @param extParams 扩展参数
|
||||
* @param errInfo 错误信息
|
||||
*
|
||||
* @return 数字签名数据
|
||||
*/
|
||||
+ (NSString*) getColorInfo: (NSString*) bizToken
|
||||
param: (NSString*) bizParam
|
||||
ext: (NSDictionary*) extParams
|
||||
error: (NSError **) errInfo;
|
||||
|
||||
/*
|
||||
* preColorInfo 签名数据预处理接口,用于不同业务定制签名携带数据
|
||||
*
|
||||
* @param userAction 当前动作,由业务定制的行为事件
|
||||
* @param extParams 业务参数,格式需要与内部对齐
|
||||
*
|
||||
* @return 预处理数据
|
||||
*/
|
||||
+ (NSString*) preColorInfo: (int) userAction
|
||||
ext: (NSDictionary*) extParams
|
||||
error: (NSError **) errInfo;
|
||||
|
||||
/*
|
||||
* preColorInfo 签名数据预处理接口,用于不同业务定制签名携带数据
|
||||
*
|
||||
* @param userAction 当前动作,由业务定制的行为事件
|
||||
* @param extParams 业务参数,格式需要与内部对齐
|
||||
*
|
||||
* @return 预处理数据
|
||||
*/
|
||||
+ (NSString*) preColorInfoForString: (int) userAction
|
||||
ext: (NSString*) extParams
|
||||
error: (NSError **) errInfo;
|
||||
|
||||
@end
|
||||
|
||||
NS_ASSUME_NONNULL_END
|
||||
@@ -0,0 +1,234 @@
|
||||
//
|
||||
// ASSCommon.h
|
||||
// ae-security-sdk
|
||||
//
|
||||
// Created by xingchen on 14/12/30.
|
||||
// Copyright (c) 2014年 Alipay. All rights reserved.
|
||||
//
|
||||
|
||||
#import <Foundation/Foundation.h>
|
||||
#import "ASSLogger.h"
|
||||
|
||||
//#define IN_DEBUG
|
||||
#define USED_BY_ALIPAY
|
||||
|
||||
static NSErrorDomain APSECURITYSDK_ERROR_DOMAIN = @"APSecuritySDKErrorDomain";
|
||||
|
||||
static NSString* const PRIVATE_KEY_XXXX = @"qqAIhzy)H)ip53<>ugx,sI{#}CE$37L|z5G=IScgO^=aQHaN[b|NM.RWdZpcy.r$";
|
||||
|
||||
static NSString* const PRIVATE_KEY_CLIENTKEY = @"EQopzyui)H)ipQW983<ll>uitx,sgI{#}##20110kl==^^woQG,msq.xinjun.$$";
|
||||
|
||||
static NSString* const LOG_SWITCH_SETTING_INITIALIZED = @"开关设置从keychain初始化成功";
|
||||
|
||||
static NSString* const LOG_LOAD_SETTING_EXCEPTION = @"开关设置在keychain中无存储,读取失败";
|
||||
|
||||
static NSString* const LOG_DECRYPT_SETTING_EXCEPTION = @"开关设置从keychain中读取成功,解密失败";
|
||||
|
||||
static NSString* const LOG_SWITCH_APPLIST_INITIALIZED = @"applist从keychain初始化成功";
|
||||
|
||||
static NSString* const LOG_LOAD_APPLIST_EXCEPTION = @"applist相关信息在keychain中无存储,读取失败";
|
||||
|
||||
static NSString* const LOG_DECRYPT_APPLIST_EXCEPTION = @"applist信息从keychain中读取成功,解密失败";
|
||||
|
||||
static NSString* const LOG_UMID_TOKEN_REQUEST_BACK = @"UMID TOKEN返回结果为:";
|
||||
|
||||
static NSString* const LOG_VKEYINFO_GENERATED = @"本地VKEY开关打开,将生成VKEY信息";
|
||||
|
||||
static NSString* const LOG_VKEYINFO_ABORT = @"本地VKEY开关关闭,将放弃生成VKEY信息";
|
||||
|
||||
static NSString* const LOG_VKEY_NO_KEYCHAIN_CACHE = @"VKEY缓存信息在keychain中无存储,读取失败";
|
||||
|
||||
static NSString* const LOG_VKEY_FOUND_KEYCHAIN_CACHE = @"VKEY缓存信息在keychain中获取缓存值";
|
||||
|
||||
static NSString* const LOG_VKEY_INFO_DETAIL = @"KEY信息为:";
|
||||
|
||||
static NSString* const LOG_VKEY_GENERATION_EXCEPTION = @"VEr:";
|
||||
|
||||
static NSString* const LOG_GID_GENERATED = @"本地GID开关打开,将生成GID信息";
|
||||
|
||||
static NSString* const LOG_GID_ABORT = @"本地GID开关关闭,将放弃生成GID信息";
|
||||
|
||||
static NSString* const LOG_GID_NO_KEYCHAIN_CACHE = @"GID缓存信息在keychain中无存储,读取失败";
|
||||
|
||||
static NSString* const LOG_GID_FOUND_KEYCHAIN_CACHE = @"GID缓存信息在keychain中获取缓存值";
|
||||
|
||||
static NSString* const LOG_GID_INFO_DETAIL = @"GID信息为:";
|
||||
|
||||
static NSString* const LOG_VOS_RUNNING = @"VKEY任务启动";
|
||||
|
||||
static NSString* const LOG_VOS_ASYNC_ABORT = @"放弃异步VOS任务";
|
||||
|
||||
static NSString* const LOG_VOS_VKEY_GENERATION = @"VOS VKEY采集中";
|
||||
|
||||
static NSString* const LOG_VOS_GID_GENERATION = @"VOS GID采集中";
|
||||
|
||||
static NSString* const LOG_GID_GENERATION_EXCEPTION = @"GEr:";
|
||||
|
||||
static NSString* const LOG_JB_ERROR_DETECTED = @"JEr";
|
||||
|
||||
static NSString* const LOG_STATIC_INFO_DETAIL = @"采集静态信息列表如下:";
|
||||
|
||||
static NSString* const LOG_APP_LIST_INFO_COLLECTED = @"APPLIST信息扫描获取中";
|
||||
|
||||
static NSString* const LOG_APP_LIST_INFO_ABORT = @"APPLIST信息放弃扫描获取";
|
||||
|
||||
static NSString* const LOG_LOAD_MODEL_KEYCHAIN_EXCEPTION = @"VKEYID在keychain无存储,读取失败";
|
||||
|
||||
static NSString* const LOG_LOAD_MODEL_FROM_KEYCHAIN = @"VKEYID从keychain中成功读取";
|
||||
|
||||
static NSString *const LOG_LOCALMODEL_ABSENT = @"本地未找到VKEYID存储";
|
||||
|
||||
static NSString *const LOG_LOCALMODEL_LOADSUCCESS = @"本地成功找到VKEYID存储";
|
||||
|
||||
static NSString *const LOG_LOAD_PREAPDID_SUCCESS = @"本地成功在keychain中读取旧版apdid的值:";
|
||||
|
||||
static NSString *const LOG_LOAD_PREAPDID_FAILED = @"旧版apdid在keychain中无存储,读取失败";
|
||||
|
||||
static NSString* const LOG_STATIC_INFO_CHANGED = @"所采集的静态信息发生改变或者存储中没有记录";
|
||||
|
||||
static NSString* const LOG_STATIC_INFO_SAME = @"所采集的静态信息与存储中相同";
|
||||
|
||||
static NSString* const LOG_TODAY_FIRST = @"检测为24小时内首次请求";
|
||||
|
||||
static NSString* const LOG_NOT_TODAY_FIRST = @"检测24小时内已经发起过请求";
|
||||
|
||||
static NSString *const LOG_GETAPDIDTOKEN_RET_LOCAL = @"不发起网络请求,直接返回本地存储";
|
||||
|
||||
static NSString* const LOG_CONNECT_TO_SERVER = @"需要访问服务器请求TOKEN";
|
||||
|
||||
static NSString* const LOG_REQUEST_INFO_INCLUDED = @"静态请求上传需要携带静态信息";
|
||||
|
||||
static NSString* const LOG_REQUEST_INFO_EXCLUDED = @"静态请求上传不需要携带静态信息";
|
||||
|
||||
static NSString* const LOG_STATIC_REQUEST_EXCEPTION = @"静态数据请求发送出现异常";
|
||||
|
||||
static NSString* const LOG_STATIC_REQUEST_FAILED = @"静态数据请求返回出现错误";
|
||||
|
||||
static NSString* const LOG_STATIC_REQUEST_SUCCESS = @"静态数据请求请求返回";
|
||||
|
||||
static NSString* const LOG_SERVER_RESPONSE_SUCCESS = @"服务端返回结果通过验证,证明有效:";
|
||||
|
||||
static NSString* const LOG_SERVER_RESPONSE_FAILED = @"服务端获取TOKEN失败";
|
||||
|
||||
static NSString* const LOG_LOG_REQUEST_RESPONSE = @"日志上传成功返回";
|
||||
|
||||
static NSString *const LOG_LOCALMODEL_SAVED_KEYCHAIN = @"成功将VKEY ID保存至keychain";
|
||||
|
||||
static NSString *const LOG_UPDATE_SETTING = @"已更新keychain中开关的设置值";
|
||||
|
||||
static NSString* const LOG_APP_LIST_NEED_UPDATE = @"经过检测,app list列表需要从服务器更新";
|
||||
|
||||
static NSString *const LOG_UPDATE_APPLIST = @"app list列表成功从服务器更新";
|
||||
|
||||
static NSString* const LOG_APPLIST_SETTING_SAVED_KEYCHAIN = @"app list列表信息成功更新至keychain保存";
|
||||
|
||||
static NSString* const LOG_APP_LIST_REQUEST_EXCEPTION = @"app list请求出现异常";
|
||||
|
||||
static NSString* const LOG_APP_LIST_RESPONSE_FAILED = @"app list请求结果失败";
|
||||
|
||||
static NSString* const LOG_LOG_UPDATE_EXCEPTION = @"日志信息请求发送出现异常";
|
||||
|
||||
static NSString* const LOG_LOG_UPLOAD_ERROR = @"日志信息发送出现错误";
|
||||
|
||||
static NSString* const LOG_LOG_UPLOAD_SUCCESS = @"日志信息发送返回成功";
|
||||
|
||||
static NSString *const LOG_SETTINGMODEL_SAVEFAILED = @"开关信息保存错误";
|
||||
|
||||
static NSString *const LOG_SETTINGMODEL_SUCCESS = @"开关信息成功保存到keychain";
|
||||
|
||||
static NSString* const LOG_LOG_UPLOAD_PROCESS = @"上报日志开关打开,开始上报错误日志流程";
|
||||
|
||||
static NSString* const LOG_LOG_UPLOAD_ABORT = @"上报日志开关关闭,放弃上报错误日志";
|
||||
|
||||
static NSString* const LOG_LOG_FILE_DETAIL = @"检测到错误日志文件:";
|
||||
|
||||
static NSString* const LOG_LOG_FILE_REMOVAL = @"已经删除错误日志文件:";
|
||||
|
||||
static NSString* const LOG_LOG_UPLOAD_START = @"开始日志上报网络请求";
|
||||
|
||||
static NSString* const LOG_LOG_UPLOAD_DETAIL = @"日志上报网络请求具体内容:";
|
||||
|
||||
|
||||
|
||||
static NSString* const LOG_JSON_PARSE_EXCEPTION = @"JSON解析失败";
|
||||
|
||||
static NSString* const ASS_STORAGE_KEY_SUCCESS = @"success";
|
||||
static NSString* const ASS_STORAGE_KEY_APDID = @"apdid";
|
||||
static NSString* const ASS_STORAGE_KEY_TOKEN = @"token";
|
||||
static NSString* const ASS_STORAGE_KEY_TIME = @"time";
|
||||
static NSString* const ASS_STORAGE_KEY_VKEYSWITCH = @"vkeyon";
|
||||
static NSString* const ASS_STORAGE_KEY_LOGSWITCH = @"logon";
|
||||
static NSString* const ASS_STORAGE_KEY_APPLISTVERSION = @"appver";
|
||||
static NSString* const ASS_STORAGE_KEY_STATICHASH = @"statichash";
|
||||
static NSString* const ASS_STORAGE_KEY_ERROR = @"error";
|
||||
static NSString* const ASS_APPKEY_INVALID = @"APPKEY_ERROR";
|
||||
static NSString* const ASS_STORAGE_KEY_WEBRTCURL = @"webrtcurl";
|
||||
static NSString* const ASS_STORAGE_KEY_DYNAMICKEY = @"dynamickey";
|
||||
static NSString* const ASS_STORAGE_KEY_AGENTURL = @"agentcurl";
|
||||
static NSString* const ASS_STORAGE_KEY_APSE_DEGRADE = @"apse_degrade";
|
||||
static NSString* const ASS_STORAGE_KEY_TIMEINTERVAL = @"timeInterval";
|
||||
|
||||
static NSString* const SECURE_SDK_KEYCHAIN_KEY = @"com.alipay.securesdk.storage";
|
||||
static NSString* const LAST_LOGIN_TIME_KEY = @"com.alipay.asssecuritySDK.lastlogintime";
|
||||
static NSString* const SECURE_SDK_RANDOM_STRING = @"com.alipay.securesdk.ranstr";
|
||||
static NSString* const SECURE_SDK_RANDOM_TOKEN = @"com.alipay.securesdk.tokenid";
|
||||
static NSString* const ASS_KEYCHAIN_KEY_SETTING = @"com.alipay.asssecuresdk.config";
|
||||
static NSString* const SECURE_SDK_RANDOM_CLIENTKEY_STRING = @"com.alipay.securesdk.clientkey";
|
||||
static NSString* const SECURE_SDK_KEYCHAIN_TOKEN = @"maintoken";
|
||||
|
||||
static NSString* const ASS_KEYCHAIN_KEY_APPLIST = @"com.alipay.asssecuresdk.list";
|
||||
static NSString* const ASS_KEYCHAIN_KEY_DFP = @"com.alipay.asssecuresdk.dfp";
|
||||
static NSString* const ASS_KEYCHAIN_KEY_GID = @"com.alipay.asssecuresdk.gid";
|
||||
static NSString* const ASS_KEYCHAIN_KEY_JBER = @"com.alipay.asssecuresdk.jber";
|
||||
static NSString* const ASS_KEYCHAIN_KEY_APDIDC = @"com.alipay.asssecuresdk.apdidc";
|
||||
static NSString* const ASS_KEYCHAIN_KEY_TMXTIME = @"com.alipay.asssecuresdk.tmxtime";
|
||||
static NSString* const ASS_KEYCHAIN_KEY_TMXSESSOINID = @"com.alipay.asssecuresdk.tmxsessionid";
|
||||
static NSString* const ASS_KEYCHAIN_KEY_ARPMAC = @"com.alipay.asssecuresdk.arpmac";
|
||||
static NSString* const ASS_KEYCHAIN_KEY_DYNAMICKEY = @"com.alipay.asssecuresdk.dynamickey";
|
||||
|
||||
static NSString* const ASS_USER_DEFAULT_KEY_DEGRADE_TIME = @"asssecuritysdkdegrade";
|
||||
|
||||
static const int overtime = 9;
|
||||
|
||||
//CRASHGUARD
|
||||
static NSString* const CRASH_GUARD_GET_COLOR_INFO = @"05f445";
|
||||
static NSString* const CRASH_GUARD_PRE_COLOR_INFO = @"f379d2";
|
||||
static NSString* const CRASH_GUARD_INIT_COLOR_INFO = @"25f523";
|
||||
static NSString* const CRASH_GUARD_UPDATE_COLOR_CODE = @"8e81ac";
|
||||
static NSString* const CRASH_GUARD_GET_COLOR_LABEL = @"d785d8";
|
||||
static NSString* const CRASH_GUARD_UPDATE_COLOR_LABEL = @"dccf1d";
|
||||
static NSString* const CRASH_GUARD_INIT_TOKEN = @"0780aa";
|
||||
static NSString* const CRASH_GUARD_INIT = @"e37f013";
|
||||
|
||||
|
||||
@interface ASSCommon : NSObject
|
||||
|
||||
+ (int)getCurrentMode;
|
||||
|
||||
+ (NSString*)getRPCURL;
|
||||
|
||||
+ (NSString*)getServerHost;
|
||||
|
||||
+ (void) setRPCHeader:(NSDictionary*)header;
|
||||
|
||||
+ (NSDictionary*)getRPCHeader;
|
||||
|
||||
+ (void)setupEnvironmentMode:(int)mode;
|
||||
|
||||
+ (void)setupRPCAddress:(NSString*)address;
|
||||
|
||||
+ (BOOL)useURLWhitelist;
|
||||
|
||||
+ (BOOL)checkDeviceSystemVersion;
|
||||
|
||||
+ (void)setSecuritySDKConfig:(int)address;
|
||||
|
||||
+ (void)setRpcHeaderAppid:(NSString*)apid;
|
||||
|
||||
+ (NSString*)getRpcHeaderAppid;
|
||||
|
||||
+ (void)setRpcHeaderWorkspaceid:(NSString*)spaceid;
|
||||
|
||||
+ (NSString*)getRpcHeaderWorkspaceid;
|
||||
|
||||
@end
|
||||
@@ -0,0 +1,37 @@
|
||||
//
|
||||
// ASSDynamicManager.h
|
||||
// APSecSecuritySDK
|
||||
//
|
||||
// Created by msq on 2019/1/5.
|
||||
// Copyright © 2019 Alipay. All rights reserved.
|
||||
//
|
||||
|
||||
#import <Foundation/Foundation.h>
|
||||
#import "APDynamicProtocol.h"
|
||||
|
||||
@interface ASSDynamicManager : NSObject<APDynamicProtocol>
|
||||
|
||||
+ (instancetype)sharedInstance;
|
||||
|
||||
- (void)dynamicCheckDispatch:(NSDictionary *)dict;
|
||||
|
||||
- (void)dynamicCheckDispatch:(NSDictionary *)dict withCallBack: (void(^)(Boolean, NSString *))callback;
|
||||
|
||||
- (void)dynamicCheckCustomLocal:(int)delay;
|
||||
|
||||
+ (NSData *)sendDynamicSynchronousRequest:(NSString *)url;
|
||||
|
||||
+ (void)uploadTimerCheckResult:(NSString *)data
|
||||
dynamicTrace:(NSString*)trace
|
||||
dynamicCmd:(int)cmd
|
||||
dynamicNum:(int)num;
|
||||
|
||||
+ (NSString *)uploadCustomFile:(NSString *)path;
|
||||
|
||||
+ (void)recordError:(const char *)pos
|
||||
withAction:(const char *)action
|
||||
errCode:(int)code;
|
||||
|
||||
//+ (NSString *)processFeature;
|
||||
|
||||
@end
|
||||
@@ -0,0 +1,39 @@
|
||||
//
|
||||
// ASSLogger.h
|
||||
// ae-security-sdk
|
||||
//
|
||||
// Created by xingchen on 14/12/22.
|
||||
// Copyright (c) 2014年 Alipay. All rights reserved.
|
||||
//
|
||||
|
||||
#import <Foundation/Foundation.h>
|
||||
#import "ASSProtocolCenter.h"
|
||||
|
||||
#define ASSLog(...) do { \
|
||||
if ([ASSProtocolCenter sharedCenter].logDelegate) { \
|
||||
[[ASSProtocolCenter sharedCenter].logDelegate print:__VA_ARGS__, nil]; \
|
||||
}} while(0)
|
||||
#define ASSDtl(params, detail) [[ASSProtocolCenter sharedCenter].logDelegate print:[NSString stringWithFormat:@"%@%@",params,detail], nil]
|
||||
#define ASSLogError(erroInfo) do { [[ASSLogger sharedInstance] addLogWithMessage: erroInfo]; } while(0)
|
||||
|
||||
@interface ASSLogger : NSObject
|
||||
|
||||
@property (nonatomic, strong) NSString* loggerInfo;
|
||||
|
||||
+(id)sharedInstance;
|
||||
|
||||
-(void)initializeWithArgs:(NSDictionary*)inArgs;
|
||||
|
||||
-(void)addLogWithMessage:(NSString*)message;
|
||||
|
||||
-(void)uploadLog;
|
||||
|
||||
//---------for test
|
||||
-(NSData*)generateMessage:(NSString*)msg;
|
||||
-(void)addLogWithMessage:(NSString *)message withFileName:(NSString*)fileName;
|
||||
-(NSString*)getCurrentFileName:(NSDate*)date;
|
||||
-(void)internal_addLog:(NSString*)message;
|
||||
-(void)uploadLogCertified;
|
||||
|
||||
|
||||
@end
|
||||