Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
S
services
Overview
Overview
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
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
tencent
services
Commits
538cd6e9
Commit
538cd6e9
authored
Dec 31, 2019
by
xmy
Browse files
Options
Browse Files
Download
Plain Diff
Merge remote-tracking branch 'origin/ft-oem' into ft-oem
parents
9c17cbfc
fd43c955
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
157 additions
and
120 deletions
+157
-120
src/Common/Config/CfgCenter.php
+151
-116
src/Common/Entity/User.php
+5
-0
src/Common/Lib/Xcrypt.php
+1
-4
No files found.
src/Common/Config/CfgCenter.php
View file @
538cd6e9
...
...
@@ -7,155 +7,161 @@ use Swoft\App;
class
CfgCenter
{
const
COS
=
'cos'
;
//腾讯云存储
const
CLS
=
'cls'
;
//腾讯云日志服务
const
CMQ
=
'cmq'
;
//腾讯云cmq订阅消息
const
ENCRYPT_KEY
=
'encrypt_key'
;
//数据加密的key
const
BACKEND_WEAPP
=
'backend_weapp'
;
//蓝猫小程序配置
const
FRONTEND_WEAPP
=
'frontend_weapp'
;
//橙猫小程序配置
const
ALIYUN_SMS
=
'aliyun_sms'
;
//阿里云短信
const
TENCENT_SMS
=
'tencent_sms'
;
//腾讯云短信
const
MP
=
'mp'
;
//公众号-用于H5公众号登录和发送公众号通知
const
PAY
=
'pay'
;
//支付配置
const
PAY_KUANYUAN
=
'pay_kuanyuan'
;
//宽元的支付平台配置
const
PAY_YUNMAI_ISP
=
'pay_yunmai_isp'
;
//云脉的支付服务商配置,用于托管子商户
const
PAY_ZHIMEI
=
'pay_zhimei'
;
//致美的支付配置
const
SELLER_DISTRIBUTION
=
'seller_distribution'
;
//卖家分销配置
/**
* 读取指定的配置项 - 返回对象格式
* (所有配置项,需预先添加到数据库中)
* 方法一:
* $value = CfgCenter::get('qCloud>Weapp>Region');
* var_dump($value); // 输出:ap-shanghai
* 方法二:
* $cfgdata = CfgCenter::get('qCloud');
* var_dump($cfgdata->Weapp->Region); // 输出:ap-shanghai
*
* @param string $keyStr
* @param string $default 默认返回值
* 根据用户token获取配置, 优先使用此方法读取配置
* 用法:
* $cfgdata = CfgCenter::getByUser(CfgCenter::COS, $this->user);
* var_dump($cfgdata['Region']); // 输出:ap-shanghai
* @param string $keyName
* @param \Hdll\Services\Common\Entity\User $user 用户token的实例对象
* @return mixed
*/
public
static
function
get
(
$keyStr
,
$default
=
''
,
$oemId
=
1
)
public
static
function
get
ByUser
(
$keyName
,
\Hdll\Services\Common\Entity\User
$user
)
{
$data
=
self
::
_get
(
$keyStr
,
$oemId
);
if
(
$data
==
''
)
{
return
$default
;
if
(
is_numeric
(
$user
->
getOemId
())
)
{
// oemId有可能等于0
return
self
::
getByOemId
(
$keyName
,
$user
->
getOemId
());
}
else
if
(
$user
->
getStoreId
())
{
return
self
::
getByStoreId
(
$keyName
,
$user
->
getStoreId
());
}
else
if
(
$user
->
getUnionid
())
{
return
self
::
getByUnionId
(
$keyName
,
$user
->
getUnionid
());
}
return
$data
;
}
/**
* 读取指定的配置项 - 返回数组格式
* (所有配置项,需预先添加到数据库中)
* 方法一:
* $value = CfgCenter::get('qCloud>Weapp>Region');
* var_dump($value); // 输出:ap-shanghai
* 方法二:
* $cfgdata = CfgCenter::get('qCloud');
* var_dump($cfgdata['Weapp']['Region']); // 输出:ap-shanghai
*
* @param string $keyStr
* @param string $default 默认返回值
* @param int $oemId
* 根据oemId读取指定的配置项 - 返回数组格式
* @param string $keyName
* @param int $oemId oemId==0表示是活动啦啦
* @return mixed
*/
public
static
function
get
Array
(
$keyStr
,
$default
=
''
,
$oemId
=
1
)
public
static
function
get
ByOemId
(
$keyName
,
int
$oemId
)
{
$data
=
self
::
_get
(
$keyStr
,
$oemId
);
if
(
$data
==
''
)
{
return
$default
;
}
if
(
is_object
(
$data
))
{
return
json_decode
(
json_encode
(
$data
),
true
);
}
return
$data
;
return
self
::
_get
(
$keyName
,
$oemId
);
}
public
function
getByUnionId
(
$keyStr
,
$unionId
)
/**
* 如果有oemId,尽量使用方法getByOemId()读取配置
* 根据storeId获取所属OEM平台的配置
*
* @param string $keyName
* @param string $storeId
* @return mixed
*/
public
static
function
getByStoreId
(
$keyName
,
int
$storeId
)
{
$dbConn
=
self
::
dbConnect
();
$result
=
$dbConn
->
select
(
"seller"
,
[
'oemId'
],
[
'unionId'
=>
$union
Id
]);
return
self
::
_get
(
$key
Str
,
$result
[
'oemId'
]);
$dbConn
=
self
::
dbConnect
(
'seller'
);
$result
=
$dbConn
->
get
(
"seller"
,
[
'oemId'
],
[
'storeId'
=>
$store
Id
]);
return
self
::
_get
(
$key
Name
,
(
int
)
$result
[
'oemId'
]);
}
public
function
getByStoreId
(
$keyStr
,
$storeId
)
/**
* 如果有oemId,尽量使用方法getByOemId()读取配置
* 根据sellerId获取所属OEM平台的配置
*
* @param string $keyName
* @param string $sellerId
* @return mixed
*/
public
static
function
getBySellerId
(
$keyName
,
int
$sellerId
)
{
$dbConn
=
self
::
dbConnect
();
$result
=
$dbConn
->
select
(
"seller"
,
[
'oemId'
],
[
'storeId'
=>
$store
Id
]);
return
self
::
_get
(
$key
Str
,
$result
[
'oemId'
]);
$dbConn
=
self
::
dbConnect
(
'seller'
);
$result
=
$dbConn
->
get
(
"seller"
,
[
'oemId'
],
[
'sellerId'
=>
$seller
Id
]);
return
self
::
_get
(
$key
Name
,
(
int
)
$result
[
'oemId'
]);
}
public
function
getBySellerId
(
$keyStr
,
$sellerId
)
/**
* 如果有oemId,尽量使用方法getByOemId()读取配置
* 根据unionId获取所属OEM平台的配置
*
* @param string $keyName
* @param string $unionId
* @return mixed
*/
public
static
function
getByUnionId
(
$keyName
,
string
$unionId
)
{
$dbConn
=
self
::
dbConnect
();
$result
=
$dbConn
->
select
(
"seller"
,
[
'oemId'
],
[
'sellerId'
=>
$seller
Id
]);
return
self
::
_get
(
$key
Str
,
$result
[
'oemId'
]);
$dbConn
=
self
::
dbConnect
(
'seller'
);
$result
=
$dbConn
->
get
(
"seller"
,
[
'oemId'
],
[
'unionId'
=>
$union
Id
]);
return
self
::
_get
(
$key
Name
,
(
int
)
$result
[
'oemId'
]);
}
private
static
function
_get
(
$keyStr
,
$oemId
=
1
)
{
$keyArr
=
self
::
parseKeyStr
(
$keyStr
);
$rkey
=
implode
(
":"
,
$keyArr
);
$redis
=
App
::
getBean
(
Redis
::
class
);
$data
=
$redis
->
get
(
"CONFIG_CENTER:
$oemId
:"
.
$rkey
);
if
(
$data
===
null
)
{
$res
=
self
::
dbFetch
(
$keyStr
,
$oemId
);
if
(
$res
)
{
if
(
is_object
(
$res
[
1
]))
{
$val
=
json_encode
(
$res
[
1
]);
}
else
{
$val
=
$res
[
1
];
}
$redis
->
set
(
"CONFIG_CENTER:"
.
$res
[
0
],
$val
,
3600
);
return
$res
[
1
];
}
}
$obj
=
json_decode
(
$data
);
if
(
$obj
&&
is_object
(
$obj
))
{
return
$obj
;
/**
* 如果有oemId,尽量使用方法getCertByOemId()读取证书
* 根据店铺id获取支付证书
*
* @param integer $storeId
* @return array
*/
public
static
function
getCertByStoreId
(
$keyName
,
$storeId
)
{
$dbConn
=
self
::
dbConnect
(
'seller'
);
$result
=
$dbConn
->
get
(
"seller"
,
[
'oemId'
],
[
'storeId'
=>
$storeId
]);
$oemId
=
(
int
)
$result
[
'oemId'
];
$dbConn
=
self
::
dbConnect
();
//连接配置库
// 注意,需要返回oemId字段
$result
=
$dbConn
->
get
(
"config"
,
[
'oemId'
,
'certPem'
,
'keyPem'
],
[
'oemId'
=>
$oemId
,
'name'
=>
$keyName
]);
return
$result
;
}
return
$data
;
/**
* 根据oemId获取支付证书
*
* @param integer $oemId
* @return array
*/
public
static
function
getCertByOemId
(
$keyName
,
int
$oemId
)
{
$dbConn
=
self
::
dbConnect
();
//连接配置库
// 注意,需要返回oemId字段
$result
=
$dbConn
->
get
(
"config"
,
[
'oemId'
,
'certPem'
,
'keyPem'
],
[
'oemId'
=>
$oemId
,
'name'
=>
$keyName
]);
return
$result
;
}
protected
static
function
dbFetch
(
$keyStr
,
$oemId
)
/**
* 根据mchId获取对应的支付配置
*
* @param string $mchId
* @return mixed
*/
public
static
function
getByMchId
(
int
$mchId
)
{
$keyArr
=
self
::
parseKeyStr
(
$keyStr
);
$name
=
array_shift
(
$keyArr
);
$dbConn
=
self
::
dbConnect
();
$result
=
$dbConn
->
select
(
"config"
,
[
'name'
,
'value'
],
[
'name'
=>
$name
,
'oemId'
=>
$oemId
]);
if
(
!
isset
(
$result
[
0
][
'value'
]))
{
return
;
}
$valObj
=
json_decode
(
$result
[
0
][
'value'
]);
if
(
!
is_object
(
$valObj
))
{
return
[
$name
,
$result
[
0
][
'value'
]];
}
$keys
=
''
;
foreach
(
$keyArr
as
$key
)
{
if
(
!
isset
(
$valObj
->
$key
))
{
return
;
}
$keys
.=
$key
.
':'
;
$valObj
=
$valObj
->
$key
;
}
$rkey
=
$name
.
':'
.
trim
(
$keys
,
':'
);
return
[
trim
(
$rkey
,
':'
),
$valObj
];
$dbConn
=
self
::
dbConnect
();
//连接配置库
$result
=
$dbConn
->
get
(
"config"
,
[
'value'
],
[
'mchId'
=>
$mchId
]);
$resArr
=
json_decode
(
$result
[
'value'
],
true
);
return
is_array
(
$resArr
)
?
$resArr
:
$result
[
'value'
];
}
public
static
function
dbConnect
()
public
static
function
dbConnect
(
$database
=
''
)
{
if
(
$database
==
''
)
{
$database
=
'config_center'
;
}
if
(
\env
(
'ENVIRONMENT'
,
''
)
==
''
)
{
// 返回线上数据库连接
return
new
\Medoo\Medoo
([
'database_type'
=>
'mysql'
,
'database_name'
=>
'config_center'
,
'database_name'
=>
$database
,
'server'
=>
'172.21.0.12'
,
'username'
=>
'configer'
,
'password'
=>
'Cfgsu#2390f*_'
,
'charset'
=>
'utf8'
]);
}
elseif
(
\env
(
'ENVIRONMENT'
,
''
)
==
'pre'
)
{
// 返回测试数据库连接
return
new
\Medoo\Medoo
([
'database_type'
=>
'mysql'
,
'database_name'
=>
'config_center'
,
'server'
=>
'192.168.3.201'
,
'username'
=>
'hdller'
,
'password'
=>
'Hdlltest999'
,
'charset'
=>
'utf8'
]);
}
else
{
// 返回测试数据库连接
return
new
\Medoo\Medoo
([
'database_type'
=>
'mysql'
,
'database_name'
=>
'config_center'
,
'database_name'
=>
$database
,
'server'
=>
'192.168.3.202'
,
'username'
=>
'hdller'
,
'password'
=>
'Hdlltest888'
,
...
...
@@ -164,21 +170,50 @@ class CfgCenter
}
}
protected
static
function
parseKeyStr
(
$keyStr
)
private
static
function
_get
(
$keyName
,
int
$oemId
=
1
)
{
$prefix
=
"CONFIG_CENTER:oemid_
$oemId
:"
;
$redis
=
App
::
getBean
(
Redis
::
class
);
$data
=
$redis
->
get
(
$prefix
.
$keyName
);
if
(
$data
)
{
$result
=
json_decode
(
$data
,
true
);
return
is_array
(
$result
)
?
$result
:
$data
;
}
// 没有缓存则从数据库读取:
$valArr
=
self
::
_getConfigFromDb
(
$keyName
,
$oemId
);
if
(
$valArr
)
{
//有内容时进行redis缓存
if
(
is_array
(
$valArr
))
{
$valArr
[
'oemId'
]
=
$oemId
;
//需要将oemId加入配置返回
$redis
->
set
(
$prefix
.
$keyName
,
json_encode
(
$valArr
),
3600
);
}
else
{
$redis
->
set
(
$prefix
.
$keyName
,
$valArr
,
3600
);
}
}
return
$valArr
;
}
private
static
function
_getConfigFromDb
(
$keyName
,
$oemId
)
{
$keyArr
=
explode
(
">"
,
trim
(
$keyStr
,
'>'
));
foreach
(
$keyArr
as
$k
=>
$v
)
{
$v
=
trim
(
$v
);
if
(
$v
==
""
)
{
unset
(
$keyArr
[
$k
]);
$dbConn
=
self
::
dbConnect
();
$result
=
$dbConn
->
select
(
"config"
,
[
'value'
],
[
'oemId'
=>
$oemId
,
'name'
=>
$keyName
]);
if
(
!
isset
(
$result
[
0
][
'value'
]))
{
if
(
$oemId
>
0
)
{
// 如果指定的oemId查找不到,则使用活动啦啦(oemId==0)的配置
$result
=
$dbConn
->
select
(
"config"
,
[
'value'
],
[
'oemId'
=>
0
,
'name'
=>
$keyName
]);
if
(
!
isset
(
$result
[
0
][
'value'
]))
{
return
;
}
}
else
{
$keyArr
[
$k
]
=
$v
;
return
;
}
}
if
(
empty
(
$keyArr
))
{
throw
new
\Exception
(
"[CfgCenter]未指定合法的Key"
);
$valArr
=
json_decode
(
$result
[
0
][
'value'
],
true
);
if
(
!
is_array
(
$valArr
))
{
return
$result
[
0
][
'value'
];
}
return
$
key
Arr
;
return
$
val
Arr
;
}
}
src/Common/Entity/User.php
View file @
538cd6e9
...
...
@@ -37,6 +37,11 @@ class User
return
$this
->
getValue
(
'id'
);
}
public
function
getOemId
()
{
return
$this
->
getValue
(
'oemId'
);
}
public
function
setTestFlag
()
{
$this
->
setValue
(
'testFlag'
,
TestEnum
::
TEST_STORE_ID
);
...
...
src/Common/Lib/Xcrypt.php
View file @
538cd6e9
...
...
@@ -8,9 +8,6 @@ use Swoft\Redis\Redis;
class
Xcrypt
{
const
CRYPT
=
'cryptKey'
;
public
static
function
encrypt
(
string
$str
,
$key
=
''
)
{
$str
=
serialize
(
$str
);
...
...
@@ -42,7 +39,7 @@ class Xcrypt
}
private
static
function
getKey
(){
$key
=
CfgCenter
::
get
(
self
::
CRYPT
);
$key
=
CfgCenter
::
get
Array
(
CfgCenter
::
ENCRYPT_KEY
);
if
(
empty
(
$key
)){
throw
new
\Exception
(
'加密密钥获取失败!'
);
}
...
...
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