Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
S
sb_h5
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
data_server
sb_h5
Commits
8b6483ad
Commit
8b6483ad
authored
Apr 09, 2019
by
高诸锋
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
【fix】
parent
fab7e5d5
Pipeline
#5752
passed with stage
in 2 seconds
Changes
7
Pipelines
1
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
64 additions
and
128 deletions
+64
-128
order.js
app/controller/order.js
+0
-2
partner.js
app/controller/partner.js
+24
-6
task.js
app/controller/task.js
+19
-4
token.js
app/controller/token.js
+0
-13
scripts.js
app/service/scripts.js
+19
-0
signature.js
app/service/signature.js
+1
-59
task.js
app/service/task.js
+1
-44
No files found.
app/controller/order.js
View file @
8b6483ad
...
...
@@ -17,7 +17,6 @@ class OrderController extends Controller {
message
:
'订单号格式错误'
,
},
};
this
.
showRule
=
{
sign
:
'string'
,
params
:
{
...
...
@@ -31,7 +30,6 @@ class OrderController extends Controller {
},
},
};
this
.
fetchRule
=
{
sign
:
{
type
:
'string'
,
required
:
true
},
params
:
{
...
...
app/controller/partner.js
View file @
8b6483ad
...
...
@@ -17,6 +17,16 @@ class PartnerController extends Controller {
},
},
};
this
.
createRule
=
{
sign
:
'string'
,
params
:
{
type
:
'object'
,
rule
:
{
appKey
:
'string'
,
timestamp
:
'string'
,
},
},
};
}
async
show
()
{
...
...
@@ -32,18 +42,26 @@ class PartnerController extends Controller {
async
getToken
()
{
const
{
ctx
,
service
}
=
this
;
ctx
.
status
=
200
;
try
{
ctx
.
validate
(
this
.
createRule
);
const
token
=
await
service
.
signature
.
createTokenForPartner
(
ctx
.
request
.
body
);
ctx
.
body
=
{
code
:
0
,
data
:
token
};
const
token
=
await
service
.
signature
.
createToken
(
ctx
.
request
.
body
);
ctx
.
body
=
{
code
:
0
,
data
:
{
token
},
msg
:
''
,
};
}
catch
(
err
)
{
ctx
.
logger
.
error
(
'partnerCreate'
,
JSON
.
stringify
(
err
));
ctx
.
status
=
200
;
if
(
err
.
code
===
'invalid_param'
)
{
ctx
.
body
=
{
code
:
-
1
,
m
essage
:
err
.
message
||
'
'
};
ctx
.
body
=
{
code
:
-
1
,
m
sg
:
'请求参数有误
'
};
return
;
}
ctx
.
body
=
{
code
:
err
.
code
||
-
1
,
message
:
err
.
message
||
''
};
return
;
if
(
/
[
a-zA-Z
]
+/
.
test
(
err
.
message
))
{
ctx
.
body
=
{
code
:
err
.
code
||
-
1
,
msg
:
'系统错误, 请稍后再试'
};
return
;
}
ctx
.
body
=
{
code
:
err
.
code
||
-
1
,
msg
:
err
.
message
||
''
};
}
}
...
...
app/controller/task.js
View file @
8b6483ad
...
...
@@ -10,17 +10,14 @@ class TaskController extends Controller {
orderId
:
{
type
:
'string'
,
required
:
true
},
userId
:
{
type
:
'string'
,
required
:
false
},
};
this
.
submitRule
=
{
phone
:
{
type
:
'string'
,
format
:
/^1
\d{10}
$/
,
required
:
false
},
ID
:
{
type
:
'string'
,
format
:
/^
\d{14}(\d{3})?[\d
Xx
]
$/
,
required
:
false
},
email
:
{
type
:
'email'
,
required
:
false
},
};
this
.
fetchCaptureRule
=
{
type
:
{
type
:
'enum'
,
values
:
[
'code'
,
'phone_code'
]
},
};
this
.
taskIdRule
=
{
taskId
:
{
type
:
'string'
,
format
:
/
\d
+/
},
};
...
...
@@ -146,7 +143,25 @@ class TaskController extends Controller {
}
async
fetchCityConfig
()
{
const
{
ctx
,
service
}
=
this
;
try
{
ctx
.
validate
(
this
.
cityListRule
);
// await service.signature.signatureCheck(ctx.request.body);
const
result
=
await
service
.
scripts
.
getCityList
(
ctx
.
request
.
body
);
ctx
.
body
=
result
;
return
;
}
catch
(
err
)
{
ctx
.
status
=
200
;
if
(
err
.
code
===
'invalid_param'
)
{
ctx
.
body
=
{
code
:
-
1
,
msg
:
'请求参数有误'
};
return
;
}
if
(
/
[
a-zA-Z
]
+/
.
test
(
err
.
message
))
{
ctx
.
body
=
{
code
:
err
.
code
||
-
1
,
msg
:
'系统错误, 请稍后再试'
};
return
;
}
ctx
.
body
=
{
code
:
err
.
code
||
-
1
,
msg
:
err
.
message
||
''
};
}
}
}
...
...
app/controller/token.js
View file @
8b6483ad
...
...
@@ -23,19 +23,6 @@ class TokenController extends Controller {
const
token
=
await
service
.
signature
.
createToken
(
ctx
.
request
.
body
);
ctx
.
success
({
data
:
token
});
}
// 处理响应状态码的问题
async
createForPartner
()
{
const
{
ctx
,
service
}
=
this
;
try
{
ctx
.
validate
(
this
.
createRule
);
}
catch
(
e
)
{
ctx
.
body
=
{
code
:
101
,
msg
:
e
.
errors
};
return
;
}
const
token
=
await
service
.
signature
.
createTokenForPartner
(
ctx
.
request
.
body
);
ctx
.
body
=
{
code
:
0
,
data
:
token
};
}
}
module
.
exports
=
TokenController
;
app/service/scripts.js
View file @
8b6483ad
...
...
@@ -15,6 +15,7 @@ class ScriptsService extends Service {
this
.
fetchHelpUrl
=
scriptsAPI
.
fetchHelpUrl
;
this
.
redisScriptsKey
=
scriptsAPI
.
redisScriptsKey
;
this
.
redisParamsKey
=
scriptsAPI
.
redisParamsKey
;
this
.
cityListUrl
=
scriptsAPI
.
cityListUrl
;
}
async
fetchScripts
()
{
...
...
@@ -171,6 +172,24 @@ class ScriptsService extends Service {
const
scriptList
=
await
this
.
fetchScriptByCityName
(
city
);
return
scriptList
;
}
async
getCityList
(
params
)
{
try
{
const
{
cityListUrl
,
ctx
}
=
this
;
const
result
=
await
ctx
.
curl
(
cityListUrl
,
{
charset
:
'utf-8'
,
timeout
:
[
'30s'
,
'30s'
],
dataType
:
'json'
,
contentType
:
'json'
,
method
:
'POST'
,
data
:
params
,
});
return
result
.
data
;
}
catch
(
err
)
{
this
.
ctx
.
logger
.
error
(
err
);
return
{
code
:
-
1
,
msg
:
'系统错误,请稍后重试'
};
}
}
}
module
.
exports
=
ScriptsService
;
app/service/signature.js
View file @
8b6483ad
...
...
@@ -2,32 +2,17 @@
const
Service
=
require
(
'egg'
).
Service
;
const
LOCK_SCRIPT
=
'return redis.call("set", KEYS[1], ARGV[1], "NX", "EX", ARGV[2])'
;
const
UNLOCK_SCRIPT
=
'if redis.call("get", KEYS[1]) == ARGV[1] then return redis.call("del", KEYS[1]) else return 0 end'
;
class
SignatureService
extends
Service
{
constructor
(
ctx
)
{
super
(
ctx
);
const
{
config
}
=
this
;
const
{
signatureAPI
,
lockKeys
}
=
config
;
const
{
signatureAPI
}
=
config
;
this
.
baseURL
=
signatureAPI
.
host
;
this
.
fetchTokenUrl
=
signatureAPI
.
fetchTokenUrl
;
this
.
fetchOrderIdUrl
=
signatureAPI
.
fetchOrderIdUrl
;
this
.
signatureUrl
=
signatureAPI
.
signatureUrl
;
this
.
signatureType
=
signatureAPI
.
signatureType
;
this
.
LOCK_KEY
=
lockKeys
.
fecteToken
;
this
.
SCRIPTS_KEY
=
lockKeys
.
token
;
ctx
.
app
.
redis
.
defineCommand
(
'lock'
,
{
numberOfKeys
:
1
,
lua
:
LOCK_SCRIPT
,
});
ctx
.
app
.
redis
.
defineCommand
(
'unlock'
,
{
numberOfKeys
:
1
,
lua
:
UNLOCK_SCRIPT
,
});
}
_request
(
url
,
opts
)
{
...
...
@@ -89,49 +74,6 @@ class SignatureService extends Service {
return
result
.
data
.
data
;
}
// 临时文件
async
getToken
()
{
const
{
app
,
ctx
,
LOCK_KEY
,
SCRIPTS_KEY
}
=
this
;
const
{
redis
}
=
app
;
const
result
=
await
redis
.
get
(
SCRIPTS_KEY
);
if
(
result
)
{
return
result
;
}
const
lockVal
=
ctx
.
helper
.
genRandomStr
(
16
);
const
locked
=
await
redis
.
lock
(
LOCK_KEY
,
lockVal
,
60
);
if
(
locked
)
{
const
signParams
=
ctx
.
helper
.
buildRequestBody
();
const
token
=
await
this
.
createToken
(
signParams
);
await
redis
.
set
(
SCRIPTS_KEY
,
token
,
'EX'
,
7150
);
await
redis
.
unlock
(
LOCK_KEY
,
lockVal
);
return
token
;
}
this
.
getToken
();
}
async
_checkSuccessForPartner
(
result
)
{
if
(
result
.
status
!==
200
)
{
const
errorMsg
=
result
.
data
&&
result
.
data
.
error_msg
?
result
.
data
.
error_msg
:
'unknown error'
;
this
.
ctx
.
throw
(
result
.
status
,
errorMsg
);
}
if
(
result
.
data
.
code
!==
0
)
{
this
.
ctx
.
throw
(
200
,
{
message
:
result
.
data
.
msg
,
code
:
result
.
data
.
code
});
}
}
// 给合作方创建token
async
createTokenForPartner
(
params
)
{
const
{
fetchTokenUrl
,
ctx
}
=
this
;
const
result
=
await
this
.
_request
(
fetchTokenUrl
,
{
method
:
'post'
,
data
:
params
,
contentType
:
'json'
,
});
ctx
.
logger
.
info
(
'【Signature】createToken params'
,
params
,
'result:'
,
result
.
data
);
this
.
_checkSuccessForPartner
(
result
);
return
result
.
data
.
data
.
token
;
}
}
module
.
exports
=
SignatureService
;
app/service/task.js
View file @
8b6483ad
...
...
@@ -2,28 +2,14 @@
const
Service
=
require
(
'egg'
).
Service
;
const
LOCK_SCRIPT
=
'return redis.call("set", KEYS[1], ARGV[1], "NX", "EX", ARGV[2])'
;
const
UNLOCK_SCRIPT
=
'if redis.call("get", KEYS[1]) == ARGV[1] then return redis.call("del", KEYS[1]) else return 0 end'
;
class
TaskService
extends
Service
{
constructor
(
ctx
)
{
super
(
ctx
);
const
{
config
:
{
taskAPI
,
LOCK_KEY
}
}
=
this
;
const
{
config
:
{
taskAPI
}
}
=
this
;
this
.
taskAPI
=
taskAPI
;
this
.
baseURL
=
taskAPI
.
host
;
this
.
LOCK_KEY
=
LOCK_KEY
;
ctx
.
app
.
redis
.
defineCommand
(
'lock'
,
{
numberOfKeys
:
1
,
lua
:
LOCK_SCRIPT
,
});
ctx
.
app
.
redis
.
defineCommand
(
'unlock'
,
{
numberOfKeys
:
1
,
lua
:
UNLOCK_SCRIPT
,
});
}
_request
(
url
,
opts
)
{
const
{
ctx
,
baseURL
}
=
this
;
url
=
`
${
baseURL
}${
url
}
`
;
...
...
@@ -102,35 +88,6 @@ class TaskService extends Service {
ctx
.
logger
.
info
(
`【Task】fetchTask
${
fetchTaskUrl
}
params`
,
data
,
result
.
data
);
return
result
.
data
;
}
// async _fetchScripts() {
// const { taskAPI } = this;
// const { fecthHubsUrl } = taskAPI;
// const result = await this._request(fecthHubsUrl, {
// method: 'get',
// contentType: 'json',
// });
// return result;
// }
// async fetchScripts() {
// const { app, ctx, LOCK_KEY, SCRIPTS_KEY } = this;
// const { redis } = app;
// const result = await redis.get(SCRIPTS_KEY);
// if (result) {
// return JSON.parse(result);
// }
// const lockVal = ctx.helper.genRandomStr(16);
// const locked = await redis.lock(LOCK_KEY, lockVal, 60);
// if (locked) {
// const scripts = await this._fetchScripts();
// await redis.set(SCRIPTS_KEY, JSON.stringify(scripts), 'EX', 300);
// await redis.unlock(LOCK_KEY, lockVal);
// return scripts;
// }
// this.fetchScripts();
// }
}
module
.
exports
=
TaskService
;
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment