Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
C
cloud-platform
Project
Project
Details
Activity
Releases
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
youjj
cloud-platform
Commits
ff31eef4
Commit
ff31eef4
authored
Oct 16, 2019
by
周健威
Browse files
Options
Browse Files
Download
Plain Diff
Merge remote-tracking branch 'origin/dev' into dev
parents
5325f339
fbcd4355
Changes
20
Hide whitespace changes
Inline
Side-by-side
Showing
20 changed files
with
700 additions
and
31 deletions
+700
-31
WalletCathListDTO.java
.../github/wxiaoqi/security/admin/dto/WalletCathListDTO.java
+3
-1
AppUserAlipay.java
...m/github/wxiaoqi/security/admin/entity/AppUserAlipay.java
+7
-4
AppUserDetail.java
...m/github/wxiaoqi/security/admin/entity/AppUserDetail.java
+2
-0
MyWalletCath.java
...om/github/wxiaoqi/security/admin/entity/MyWalletCath.java
+3
-0
AppUserDTO.java
...m/github/wxiaoqi/security/admin/feign/dto/AppUserDTO.java
+1
-0
ApplyCathVo.java
...ava/com/github/wxiaoqi/security/admin/vo/ApplyCathVo.java
+3
-0
PayAccountVo.java
...va/com/github/wxiaoqi/security/admin/vo/PayAccountVo.java
+3
-1
WalletCathAdminVo.java
...m/github/wxiaoqi/security/admin/vo/WalletCathAdminVo.java
+1
-0
WalletCathVo.java
...va/com/github/wxiaoqi/security/admin/vo/WalletCathVo.java
+5
-0
AppUserAlipayBiz.java
...m/github/wxiaoqi/security/admin/biz/AppUserAlipayBiz.java
+130
-1
MyWalletBiz.java
...va/com/github/wxiaoqi/security/admin/biz/MyWalletBiz.java
+62
-7
MyWalletCathBiz.java
...om/github/wxiaoqi/security/admin/biz/MyWalletCathBiz.java
+14
-8
UserMemberLevelBiz.java
...github/wxiaoqi/security/admin/biz/UserMemberLevelBiz.java
+2
-0
AppUserAliPayController.java
.../wxiaoqi/security/admin/rest/AppUserAliPayController.java
+29
-0
MyWalletCathMapper.xml
...ce-admin/src/main/resources/mapper/MyWalletCathMapper.xml
+2
-1
ThirdFeign.java
...in/java/com/xxfc/platform/universal/feign/ThirdFeign.java
+4
-0
Base64.java
...c/main/java/com/xxfc/platform/universal/utils/Base64.java
+268
-0
SignUtils.java
...ain/java/com/xxfc/platform/universal/utils/SignUtils.java
+44
-0
OrderPayBiz.java
...ain/java/com/xxfc/platform/universal/biz/OrderPayBiz.java
+86
-8
UserInfoController.java
...xfc/platform/universal/controller/UserInfoController.java
+31
-0
No files found.
ace-modules/ace-admin-api/src/main/java/com/github/wxiaoqi/security/admin/dto/WalletCathListDTO.java
View file @
ff31eef4
...
@@ -51,6 +51,8 @@ public class WalletCathListDTO {
...
@@ -51,6 +51,8 @@ public class WalletCathListDTO {
@ApiModelProperty
(
"提现单号"
)
@ApiModelProperty
(
"提现单号"
)
private
String
orderNo
;
private
String
orderNo
;
@ApiModelProperty
(
value
=
"
用户账号
"
)
@ApiModelProperty
(
value
=
""
)
private
String
accountNumber
;
private
String
accountNumber
;
private
String
accountName
;
}
}
ace-modules/ace-admin-api/src/main/java/com/github/wxiaoqi/security/admin/entity/AppUserAlipay.java
View file @
ff31eef4
...
@@ -2,10 +2,8 @@ package com.github.wxiaoqi.security.admin.entity;
...
@@ -2,10 +2,8 @@ package com.github.wxiaoqi.security.admin.entity;
import
io.swagger.annotations.ApiModelProperty
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
import
lombok.Data
;
import
javax.persistence.Column
;
import
javax.persistence.GeneratedValue
;
import
javax.persistence.*
;
import
javax.persistence.Id
;
import
javax.persistence.Table
;
/**
/**
* 支付宝账号表
* 支付宝账号表
...
@@ -37,7 +35,12 @@ public class AppUserAlipay {
...
@@ -37,7 +35,12 @@ public class AppUserAlipay {
@Column
(
name
=
"is_del"
)
@Column
(
name
=
"is_del"
)
private
Integer
isDel
;
private
Integer
isDel
;
@ApiModelProperty
(
"昵称"
)
private
String
nickname
;
//类型 1、支付宝,2、微信
@Transient
private
Integer
type
;
}
}
\ No newline at end of file
ace-modules/ace-admin-api/src/main/java/com/github/wxiaoqi/security/admin/entity/AppUserDetail.java
View file @
ff31eef4
...
@@ -20,6 +20,8 @@ public class AppUserDetail {
...
@@ -20,6 +20,8 @@ public class AppUserDetail {
private
Integer
userid
;
private
Integer
userid
;
@Column
(
name
=
"is_member"
)
@Column
(
name
=
"is_member"
)
private
Integer
isMember
;
private
Integer
isMember
;
@Column
(
name
=
"wx_nickname"
)
private
String
wxNickname
;
private
String
nickname
;
private
String
nickname
;
private
String
realname
;
private
String
realname
;
private
String
headimgurl
;
private
String
headimgurl
;
...
...
ace-modules/ace-admin-api/src/main/java/com/github/wxiaoqi/security/admin/entity/MyWalletCath.java
View file @
ff31eef4
...
@@ -123,4 +123,7 @@ public class MyWalletCath implements Serializable {
...
@@ -123,4 +123,7 @@ public class MyWalletCath implements Serializable {
@Column
(
name
=
"order_no"
)
@Column
(
name
=
"order_no"
)
@ApiModelProperty
(
value
=
"第三方订单号:如微信,支付宝,银行卡等"
)
@ApiModelProperty
(
value
=
"第三方订单号:如微信,支付宝,银行卡等"
)
private
String
orderNo
;
private
String
orderNo
;
@Column
(
name
=
"account_name"
)
private
String
accountName
;
}
}
ace-modules/ace-admin-api/src/main/java/com/github/wxiaoqi/security/admin/feign/dto/AppUserDTO.java
View file @
ff31eef4
...
@@ -19,6 +19,7 @@ public class AppUserDTO {
...
@@ -19,6 +19,7 @@ public class AppUserDTO {
private
Integer
userid
;
private
Integer
userid
;
private
Integer
isMember
;
private
Integer
isMember
;
private
String
username
;
private
String
username
;
private
String
wxNickname
;
private
String
nickname
;
private
String
nickname
;
private
String
realname
;
private
String
realname
;
private
String
headimgurl
;
private
String
headimgurl
;
...
...
ace-modules/ace-admin-api/src/main/java/com/github/wxiaoqi/security/admin/vo/ApplyCathVo.java
View file @
ff31eef4
...
@@ -43,4 +43,7 @@ public class ApplyCathVo {
...
@@ -43,4 +43,7 @@ public class ApplyCathVo {
@ApiModelProperty
(
value
=
"支付类型"
)
@ApiModelProperty
(
value
=
"支付类型"
)
private
Integer
cathType
;
private
Integer
cathType
;
@ApiModelProperty
(
value
=
"账号名称"
)
private
String
accountName
;
}
}
ace-modules/ace-admin-api/src/main/java/com/github/wxiaoqi/security/admin/vo/PayAccountVo.java
View file @
ff31eef4
...
@@ -21,9 +21,11 @@ public class PayAccountVo {
...
@@ -21,9 +21,11 @@ public class PayAccountVo {
@ApiModelProperty
(
value
=
"微信用户名 | 支付宝帐号"
)
@ApiModelProperty
(
value
=
"微信用户名 | 支付宝帐号"
)
private
String
accountDesc
;
private
String
accountDesc
;
@ApiModelProperty
(
"微信用
户名 | 支付宝账号
"
)
@ApiModelProperty
(
"微信用
openid | 支付宝账号userid
"
)
private
String
account
;
private
String
account
;
@ApiModelProperty
(
value
=
"帐户类型 0:微信 1:支付宝 2:银行卡"
)
@ApiModelProperty
(
value
=
"帐户类型 0:微信 1:支付宝 2:银行卡"
)
private
Integer
accountType
;
private
Integer
accountType
;
private
String
nickName
;
}
}
ace-modules/ace-admin-api/src/main/java/com/github/wxiaoqi/security/admin/vo/WalletCathAdminVo.java
View file @
ff31eef4
...
@@ -53,4 +53,5 @@ public class WalletCathAdminVo {
...
@@ -53,4 +53,5 @@ public class WalletCathAdminVo {
@ApiModelProperty
(
value
=
"用户账号描述"
)
@ApiModelProperty
(
value
=
"用户账号描述"
)
private
String
accountNumberDesc
;
private
String
accountNumberDesc
;
private
String
accountName
;
}
}
ace-modules/ace-admin-api/src/main/java/com/github/wxiaoqi/security/admin/vo/WalletCathVo.java
View file @
ff31eef4
...
@@ -63,4 +63,9 @@ public class WalletCathVo {
...
@@ -63,4 +63,9 @@ public class WalletCathVo {
@ApiModelProperty
(
value
=
"审核日期"
)
@ApiModelProperty
(
value
=
"审核日期"
)
private
Long
finishTime
;
private
Long
finishTime
;
@ApiModelProperty
(
value
=
"用户账号描述"
)
private
String
accountNumberDesc
;
private
String
accountName
;
}
}
ace-modules/ace-admin/src/main/java/com/github/wxiaoqi/security/admin/biz/AppUserAlipayBiz.java
View file @
ff31eef4
package
com
.
github
.
wxiaoqi
.
security
.
admin
.
biz
;
package
com
.
github
.
wxiaoqi
.
security
.
admin
.
biz
;
import
cn.hutool.core.bean.BeanUtil
;
import
cn.hutool.core.bean.copier.CopyOptions
;
import
com.alibaba.fastjson.JSONObject
;
import
com.github.wxiaoqi.security.admin.entity.AppUserAlipay
;
import
com.github.wxiaoqi.security.admin.entity.AppUserAlipay
;
import
com.github.wxiaoqi.security.admin.entity.AppUserDetail
;
import
com.github.wxiaoqi.security.admin.entity.AppUserLogin
;
import
com.github.wxiaoqi.security.admin.entity.AppUserRelationTemp
;
import
com.github.wxiaoqi.security.admin.entity.AppUserRelationTemp
;
import
com.github.wxiaoqi.security.admin.mapper.AppUserAlipayMapper
;
import
com.github.wxiaoqi.security.admin.mapper.AppUserAlipayMapper
;
import
com.github.wxiaoqi.security.admin.mapper.AppUserRelationTempMapper
;
import
com.github.wxiaoqi.security.admin.mapper.AppUserRelationTempMapper
;
import
com.github.wxiaoqi.security.auth.client.config.UserAuthConfig
;
import
com.github.wxiaoqi.security.auth.client.jwt.UserAuthUtil
;
import
com.github.wxiaoqi.security.common.biz.BaseBiz
;
import
com.github.wxiaoqi.security.common.biz.BaseBiz
;
import
com.github.wxiaoqi.security.common.msg.ObjectRestResponse
;
import
com.github.wxiaoqi.security.common.util.process.ResultCode
;
import
com.xxfc.platform.universal.feign.ThirdFeign
;
import
com.xxfc.platform.vehicle.constant.ResCode.ResCode
;
import
lombok.extern.slf4j.Slf4j
;
import
org.apache.commons.lang3.StringUtils
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
org.springframework.stereotype.Service
;
import
tk.mybatis.mapper.entity.Example
;
import
tk.mybatis.mapper.entity.Example
;
import
javax.servlet.http.HttpServletRequest
;
import
java.util.ArrayList
;
import
java.util.Date
;
import
java.util.List
;
import
java.util.List
;
/**
/**
...
@@ -18,7 +35,23 @@ import java.util.List;
...
@@ -18,7 +35,23 @@ import java.util.List;
* @date 2019-07-03 16:36:44
* @date 2019-07-03 16:36:44
*/
*/
@Service
@Service
public
class
AppUserAlipayBiz
extends
BaseBiz
<
AppUserAlipayMapper
,
AppUserAlipay
>
{
@Slf4j
public
class
AppUserAlipayBiz
extends
BaseBiz
<
AppUserAlipayMapper
,
AppUserAlipay
>{
@Autowired
private
UserAuthUtil
userAuthUtil
;
@Autowired
private
UserAuthConfig
userAuthConfig
;
@Autowired
AppUserLoginBiz
appUserLoginBiz
;
@Autowired
AppUserDetailBiz
appUserDetailBiz
;
@Autowired
ThirdFeign
thirdFeign
;
//添加支付宝账号
//添加支付宝账号
public
void
addAlipay
(
Integer
userId
,
String
txAlipay
){
public
void
addAlipay
(
Integer
userId
,
String
txAlipay
){
...
@@ -44,4 +77,100 @@ public class AppUserAlipayBiz extends BaseBiz<AppUserAlipayMapper, AppUserAlipay
...
@@ -44,4 +77,100 @@ public class AppUserAlipayBiz extends BaseBiz<AppUserAlipayMapper, AppUserAlipay
}
}
//获取支付宝用户信息
public
List
<
AppUserAlipay
>
getByUserId
(
HttpServletRequest
request
){
Example
example
=
new
Example
(
AppUserAlipay
.
class
);
Integer
userId
=
null
;
try
{
String
username
=
userAuthUtil
.
getInfoFromToken
(
userAuthConfig
.
getToken
(
request
)).
getId
();
if
(
StringUtils
.
isNotBlank
(
username
))
{
userId
=
Integer
.
parseInt
(
username
);
example
.
createCriteria
().
andEqualTo
(
"userId"
,
userId
).
andEqualTo
(
"isDel"
,
0
);
}
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
}
example
.
setOrderByClause
(
"is_default desc"
);
AppUserAlipay
appUserAlipay
=
mapper
.
selectOneByExample
(
example
);
List
<
AppUserAlipay
>
appUserAlipays
=
new
ArrayList
<>();
//支付宝
if
(
appUserAlipay
!=
null
)
{
appUserAlipay
.
setType
(
1
);
appUserAlipays
.
add
(
appUserAlipay
);
}
//微信
AppUserLogin
appUserLogin
=
appUserLoginBiz
.
getUserById
(
userId
);
if
(
appUserLogin
!=
null
&&
StringUtils
.
isNotBlank
(
appUserLogin
.
getWxOpenid
()))
{
AppUserDetail
appUserDetail
=
appUserDetailBiz
.
getUserByUserid
(
userId
);
AppUserAlipay
wxAppUser
=
new
AppUserAlipay
();
wxAppUser
.
setType
(
2
);
wxAppUser
.
setUserId
(
userId
);
wxAppUser
.
setNickname
(
appUserDetail
.
getWxNickname
());
wxAppUser
.
setTxAlipay
(
appUserLogin
.
getWxOpenid
());
appUserAlipays
.
add
(
wxAppUser
);
}
return
appUserAlipays
;
}
public
void
save
(
AppUserAlipay
appUserAlipay
)
{
Example
example
=
new
Example
(
AppUserAlipay
.
class
);
example
.
createCriteria
().
andEqualTo
(
"userId"
,
appUserAlipay
.
getUserId
()).
andEqualTo
(
"isDel"
,
0
);
example
.
setOrderByClause
(
"is_default desc"
);
AppUserAlipay
oldValue
=
mapper
.
selectOneByExample
(
example
);
if
(
oldValue
!=
null
)
{
BeanUtil
.
copyProperties
(
appUserAlipay
,
oldValue
,
CopyOptions
.
create
().
setIgnoreNullValue
(
true
).
setIgnoreError
(
true
));
updateByIdRe
(
oldValue
);
}
else
{
insertSelectiveRe
(
appUserAlipay
);
}
}
/**
* 支付宝授权获取用户信息
* @param code
* @return
*/
public
ObjectRestResponse
getUserInfo
(
String
code
,
HttpServletRequest
request
)
{
String
username
=
null
;
AppUserAlipay
appUserAlipay
=
new
AppUserAlipay
();
try
{
username
=
userAuthUtil
.
getInfoFromToken
(
userAuthConfig
.
getToken
(
request
)).
getId
();
if
(
StringUtils
.
isBlank
(
username
))
{
return
ObjectRestResponse
.
createFailedResult
(
ResultCode
.
RSTOKEN_EXPIRED_CODE
,
ResultCode
.
getMsg
(
ResultCode
.
RSTOKEN_EXPIRED_CODE
));
}
else
{
appUserAlipay
.
setUserId
(
Integer
.
parseInt
(
username
));
}
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
}
if
(
StringUtils
.
isBlank
(
code
))
{
return
ObjectRestResponse
.
paramIsEmpty
();
}
String
result
=
thirdFeign
.
getAliPayUserInfo
(
code
).
getData
();
if
(
StringUtils
.
isNotBlank
(
result
))
{
log
.
info
(
"【支付宝】用户授权获取用户token, {}"
,
result
);
JSONObject
jsonObject
=
JSONObject
.
parseObject
(
result
);
if
(
jsonObject
.
getJSONObject
(
"error_response"
)
==
null
&&
jsonObject
.
getJSONObject
(
"alipay_user_info_share_response"
)
!=
null
)
{
JSONObject
responseObject
=
jsonObject
.
getJSONObject
(
"alipay_user_info_share_response"
);
String
account
=
responseObject
.
getString
(
"user_id"
);
if
(
account
!=
null
)
{
appUserAlipay
.
setTxAlipay
(
account
);
appUserAlipay
.
setCrtTime
(
new
Date
().
getTime
());
appUserAlipay
.
setIsDel
(
0
);
}
String
nickname
=
responseObject
.
getString
(
"nick_name"
);
if
(
nickname
!=
null
)
{
appUserAlipay
.
setNickname
(
nickname
);
}
log
.
info
(
"用户支付宝信息: {}"
,
appUserAlipay
.
toString
());
save
(
appUserAlipay
);
return
ObjectRestResponse
.
succ
();
}
else
{
return
ObjectRestResponse
.
createFailedResult
(
Integer
.
parseInt
(
jsonObject
.
getJSONObject
(
"error_response"
).
getString
(
"code"
)),
jsonObject
.
getJSONObject
(
"error_response"
).
getString
(
"sub_msg"
));
}
}
return
ObjectRestResponse
.
createDefaultFail
();
}
}
}
\ No newline at end of file
ace-modules/ace-admin/src/main/java/com/github/wxiaoqi/security/admin/biz/MyWalletBiz.java
View file @
ff31eef4
...
@@ -28,7 +28,6 @@ import com.xxfc.platform.universal.feign.ThirdFeign;
...
@@ -28,7 +28,6 @@ import com.xxfc.platform.universal.feign.ThirdFeign;
import
com.xxfc.platform.universal.vo.FundPayVo
;
import
com.xxfc.platform.universal.vo.FundPayVo
;
import
com.xxfc.platform.universal.weixin.constant.PaySubErrorCodeEnum
;
import
com.xxfc.platform.universal.weixin.constant.PaySubErrorCodeEnum
;
import
lombok.extern.slf4j.Slf4j
;
import
lombok.extern.slf4j.Slf4j
;
import
net.bytebuddy.implementation.bytecode.Throw
;
import
org.apache.commons.collections.CollectionUtils
;
import
org.apache.commons.collections.CollectionUtils
;
import
org.apache.commons.lang3.StringUtils
;
import
org.apache.commons.lang3.StringUtils
;
import
org.springframework.beans.BeanUtils
;
import
org.springframework.beans.BeanUtils
;
...
@@ -45,10 +44,10 @@ import tk.mybatis.mapper.entity.Example;
...
@@ -45,10 +44,10 @@ import tk.mybatis.mapper.entity.Example;
import
javax.servlet.http.HttpServletRequest
;
import
javax.servlet.http.HttpServletRequest
;
import
java.math.BigDecimal
;
import
java.math.BigDecimal
;
import
java.math.RoundingMode
;
import
java.math.RoundingMode
;
import
java.time.Instant
;
import
java.time.LocalDate
;
import
java.time.LocalDate
;
import
java.time.format.DateTimeFormatter
;
import
java.time.format.DateTimeFormatter
;
import
java.util.*
;
import
java.util.*
;
import
java.util.concurrent.Executors
;
import
java.util.stream.Collectors
;
import
java.util.stream.Collectors
;
/**
/**
...
@@ -93,6 +92,9 @@ public class MyWalletBiz extends BaseBiz<MyWalletMapper, MyWallet> implements In
...
@@ -93,6 +92,9 @@ public class MyWalletBiz extends BaseBiz<MyWalletMapper, MyWallet> implements In
private
DateTimeFormatter
dateTimeFormatter
;
private
DateTimeFormatter
dateTimeFormatter
;
private
static
final
Integer
WITHDRAW_ONLINE_WAY
=
1
;
private
static
final
Integer
WITHDRAW_OFFLINE_WAY
=
2
;
private
BCryptPasswordEncoder
encoder
=
new
BCryptPasswordEncoder
(
12
);
private
BCryptPasswordEncoder
encoder
=
new
BCryptPasswordEncoder
(
12
);
...
@@ -301,6 +303,12 @@ public class MyWalletBiz extends BaseBiz<MyWalletMapper, MyWallet> implements In
...
@@ -301,6 +303,12 @@ public class MyWalletBiz extends BaseBiz<MyWalletMapper, MyWallet> implements In
if
(
sumDto
==
null
)
{
if
(
sumDto
==
null
)
{
return
ObjectRestResponse
.
createFailedResult
(
ResultCode
.
NULL_CODE
,
"参数不能为空"
);
return
ObjectRestResponse
.
createFailedResult
(
ResultCode
.
NULL_CODE
,
"参数不能为空"
);
}
}
MyWalletCath
walletCath
=
new
MyWalletCath
();
walletCath
.
setCrtTime
(
Instant
.
now
().
toEpochMilli
());
WithDrawRuleVo
withDrawRule
=
configFeign
.
getWithDrawRule
();
Integer
withdrawWay
=
withDrawRule
.
getWithdrawWay
();
BigDecimal
commission
=
amount
.
multiply
(
sumDto
.
getProceduReates
()).
divide
(
new
BigDecimal
(
"100"
)).
setScale
(
2
,
RoundingMode
.
HALF_UP
);
BigDecimal
commission
=
amount
.
multiply
(
sumDto
.
getProceduReates
()).
divide
(
new
BigDecimal
(
"100"
)).
setScale
(
2
,
RoundingMode
.
HALF_UP
);
BigDecimal
balnece
=
sumDto
.
getBalance
();
BigDecimal
balnece
=
sumDto
.
getBalance
();
//到账金额
//到账金额
...
@@ -309,9 +317,35 @@ public class MyWalletBiz extends BaseBiz<MyWalletMapper, MyWallet> implements In
...
@@ -309,9 +317,35 @@ public class MyWalletBiz extends BaseBiz<MyWalletMapper, MyWallet> implements In
realAmount
=
balnece
.
subtract
(
commission
);
realAmount
=
balnece
.
subtract
(
commission
);
}
}
log
.
info
(
"-----提现申请-----proceduReates==="
+
sumDto
.
getProceduReates
()
+
"----commission===="
+
commission
+
"---realAmount==="
+
realAmount
);
log
.
info
(
"-----提现申请-----proceduReates==="
+
sumDto
.
getProceduReates
()
+
"----commission===="
+
commission
+
"---realAmount==="
+
realAmount
);
//添加账号
// alipayBiz.addAlipay(userId,accountNumber);
//线上自动提现
MyWalletCath
walletCath
=
new
MyWalletCath
();
if
(
WITHDRAW_ONLINE_WAY
.
equals
(
withdrawWay
)){
String
pay_no
;
String
cono
=
OrderUtil
.
GetOrderNumber
(
""
);
HttpServletRequest
request
=
((
ServletRequestAttributes
)
RequestContextHolder
.
getRequestAttributes
()).
getRequest
();
String
host
=
StringUtils
.
defaultIfBlank
(
request
.
getHeader
(
"userHost"
),
ClientUtil
.
getClientIp
(
request
));
FundPayVo
fundPayVo
=
FundPayVo
.
builder
()
.
amount
(
applyCathVo
.
getCathType
()
==
0
?
String
.
valueOf
(
realAmount
.
multiply
(
new
BigDecimal
(
100
)).
doubleValue
())
:
String
.
format
(
"%.2f"
,
realAmount
.
doubleValue
()))
.
outBizNo
(
cono
)
.
payeeAccount
(
applyCathVo
.
getAccountNumber
())
.
payerShowName
(
"欣新房车网络科技(广东)股份有限公司"
)
.
remark
(
"提现转账"
)
.
type
(
applyCathVo
.
getCathType
())
.
creatIp
(
host
)
.
build
();
try
{
//商户订单号
pay_no
=
thirdFeign
.
transferAccount
(
fundPayVo
);
walletCath
.
setStauts
(
1
);
walletCath
.
setCono
(
pay_no
);
walletCath
.
setFinishTime
(
Instant
.
now
().
toEpochMilli
());
}
catch
(
BaseException
baex
){
throw
new
BaseException
(
baex
.
getMessage
(),
400
);
}
catch
(
Exception
ex
){
throw
new
BaseException
((
applyCathVo
.
getCathType
()
==
0
?
"微信提现"
:
applyCathVo
.
getCathType
()
==
1
?
"支付宝提现"
:
"银行提现"
)+
"转账失败"
,
ex
);
}
}
//提现单号
//提现单号
String
orderNo
=
snowflake
.
nextIdStr
();
String
orderNo
=
snowflake
.
nextIdStr
();
orderNo
=
String
.
format
(
"%s%s"
,
dateTimeFormatter
.
format
(
LocalDate
.
now
()),
orderNo
);
orderNo
=
String
.
format
(
"%s%s"
,
dateTimeFormatter
.
format
(
LocalDate
.
now
()),
orderNo
);
...
@@ -319,6 +353,7 @@ public class MyWalletBiz extends BaseBiz<MyWalletMapper, MyWallet> implements In
...
@@ -319,6 +353,7 @@ public class MyWalletBiz extends BaseBiz<MyWalletMapper, MyWallet> implements In
walletCath
.
setUserId
(
userId
);
walletCath
.
setUserId
(
userId
);
walletCath
.
setBalance
(
balnece
);
walletCath
.
setBalance
(
balnece
);
walletCath
.
setCathType
(
cathType
);
walletCath
.
setCathType
(
cathType
);
walletCath
.
setAccountName
(
applyCathVo
.
getAccountName
());
walletCath
.
setAccountNumber
(
accountNumber
);
walletCath
.
setAccountNumber
(
accountNumber
);
walletCath
.
setAmount
(
amount
);
walletCath
.
setAmount
(
amount
);
walletCath
.
setCommission
(
commission
);
walletCath
.
setCommission
(
commission
);
...
@@ -335,6 +370,24 @@ public class MyWalletBiz extends BaseBiz<MyWalletMapper, MyWallet> implements In
...
@@ -335,6 +370,24 @@ public class MyWalletBiz extends BaseBiz<MyWalletMapper, MyWallet> implements In
myWallet
.
setWithdrawals
(
withdrawals
);
myWallet
.
setWithdrawals
(
withdrawals
);
myWallet
.
setVersion
(
sumDto
.
getVersion
());
myWallet
.
setVersion
(
sumDto
.
getVersion
());
mapper
.
updMyWater
(
myWallet
);
mapper
.
updMyWater
(
myWallet
);
//线上提现
if
(
WITHDRAW_ONLINE_WAY
.
equals
(
applyCathVo
.
getCathType
())){
MyWalletDetail
detail
=
new
MyWalletDetail
();
detail
.
setUserId
(
userId
);
detail
.
setItype
(
1
);
//设置提现单号
detail
.
setWithDrawOrderNo
(
orderNo
);
detail
.
setCono
(
walletCath
.
getId
().
intValue
());
detail
.
setBalance
(
balnece
.
add
(
withdrawals
));
detail
.
setAmount
(
realAmount
);
detail
.
setSource
(
10
);
myWalletDetailBiz
.
insertSelective
(
detail
);
detail
.
setId
(
null
);
detail
.
setSource
(
13
);
detail
.
setBalance
(
balnece
.
add
(
commission
));
detail
.
setAmount
(
commission
);
myWalletDetailBiz
.
insertSelective
(
detail
);
}
return
ObjectRestResponse
.
succ
(
walletCath
.
getId
());
return
ObjectRestResponse
.
succ
(
walletCath
.
getId
());
}
}
...
@@ -362,7 +415,7 @@ public class MyWalletBiz extends BaseBiz<MyWalletMapper, MyWallet> implements In
...
@@ -362,7 +415,7 @@ public class MyWalletBiz extends BaseBiz<MyWalletMapper, MyWallet> implements In
BigDecimal
realAmount
=
cath
.
getRealAmount
();
BigDecimal
realAmount
=
cath
.
getRealAmount
();
BigDecimal
commission
=
cath
.
getCommission
();
BigDecimal
commission
=
cath
.
getCommission
();
if
(
status
==
1
)
{
if
(
status
==
1
)
{
String
cono
=
StringUtil
.
isEmpty
(
cath
.
getCono
())
?
OrderUtil
.
GetOrderNumber
(
"
TX
"
):
cath
.
getCono
();
String
cono
=
StringUtil
.
isEmpty
(
cath
.
getCono
())
?
OrderUtil
.
GetOrderNumber
(
""
):
cath
.
getCono
();
HttpServletRequest
request
=
((
ServletRequestAttributes
)
RequestContextHolder
.
getRequestAttributes
()).
getRequest
();
HttpServletRequest
request
=
((
ServletRequestAttributes
)
RequestContextHolder
.
getRequestAttributes
()).
getRequest
();
String
host
=
StringUtils
.
defaultIfBlank
(
request
.
getHeader
(
"userHost"
),
ClientUtil
.
getClientIp
(
request
));
String
host
=
StringUtils
.
defaultIfBlank
(
request
.
getHeader
(
"userHost"
),
ClientUtil
.
getClientIp
(
request
));
FundPayVo
fundPayVo
=
FundPayVo
.
builder
()
FundPayVo
fundPayVo
=
FundPayVo
.
builder
()
...
@@ -444,6 +497,7 @@ public class MyWalletBiz extends BaseBiz<MyWalletMapper, MyWallet> implements In
...
@@ -444,6 +497,7 @@ public class MyWalletBiz extends BaseBiz<MyWalletMapper, MyWallet> implements In
PayAccountVo
alipayAccount
=
PayAccountVo
.
builder
()
PayAccountVo
alipayAccount
=
PayAccountVo
.
builder
()
.
account
(
appUserAlipay
.
getTxAlipay
())
.
account
(
appUserAlipay
.
getTxAlipay
())
.
accountType
(
1
)
.
accountType
(
1
)
.
nickName
(
appUserAlipay
.
getNickname
())
.
accountDesc
(
String
.
format
(
"%s%s%s"
,
"支付宝余额("
,
appUserAlipay
.
getTxAlipay
(),
")"
))
.
accountDesc
(
String
.
format
(
"%s%s%s"
,
"支付宝余额("
,
appUserAlipay
.
getTxAlipay
(),
")"
))
.
build
();
.
build
();
payAccountVos
.
add
(
alipayAccount
);
payAccountVos
.
add
(
alipayAccount
);
...
@@ -453,7 +507,8 @@ public class MyWalletBiz extends BaseBiz<MyWalletMapper, MyWallet> implements In
...
@@ -453,7 +507,8 @@ public class MyWalletBiz extends BaseBiz<MyWalletMapper, MyWallet> implements In
if
(!
org
.
springframework
.
util
.
StringUtils
.
isEmpty
(
appUserLogin
.
getOpenid
()))
{
if
(!
org
.
springframework
.
util
.
StringUtils
.
isEmpty
(
appUserLogin
.
getOpenid
()))
{
PayAccountVo
wxAccount
=
PayAccountVo
.
builder
()
PayAccountVo
wxAccount
=
PayAccountVo
.
builder
()
.
account
(
appUserLogin
.
getOpenid
())
.
account
(
appUserLogin
.
getOpenid
())
.
accountType
(
0
)
.
accountType
(
2
)
.
nickName
(
appUserDetail
.
getWxNickname
())
.
accountDesc
(
String
.
format
(
"%s%s%s"
,
"微信零钱("
,
appUserDetail
.
getNickname
(),
")"
))
.
accountDesc
(
String
.
format
(
"%s%s%s"
,
"微信零钱("
,
appUserDetail
.
getNickname
(),
")"
))
.
build
();
.
build
();
payAccountVos
.
add
(
wxAccount
);
payAccountVos
.
add
(
wxAccount
);
...
...
ace-modules/ace-admin/src/main/java/com/github/wxiaoqi/security/admin/biz/MyWalletCathBiz.java
View file @
ff31eef4
...
@@ -63,6 +63,14 @@ public class MyWalletCathBiz extends BaseBiz<MyWalletCathMapper, MyWalletCath> {
...
@@ -63,6 +63,14 @@ public class MyWalletCathBiz extends BaseBiz<MyWalletCathMapper, MyWalletCath> {
walletCathVo
=
new
WalletCathVo
();
walletCathVo
=
new
WalletCathVo
();
BeanUtils
.
copyProperties
(
walletCath
,
walletCathVo
);
BeanUtils
.
copyProperties
(
walletCath
,
walletCathVo
);
totalWithdraw
=
totalWithdraw
.
add
(
walletCathVo
.
getAmount
());
totalWithdraw
=
totalWithdraw
.
add
(
walletCathVo
.
getAmount
());
//微信
if
(
walletCath
.
getCathType
()==
0
){
walletCathVo
.
setAccountNumberDesc
(
String
.
format
(
"%s%s%s"
,
"提现到微信("
,
walletCath
.
getAccountName
(),
")"
));
}
//支付宝
if
(
walletCath
.
getCathType
()==
1
){
walletCathVo
.
setAccountNumberDesc
(
String
.
format
(
"%s%s%s"
,
"提现到支付宝("
,
walletCath
.
getAccountName
(),
")"
));
}
walletCatchPageVos
.
add
(
walletCathVo
);
walletCatchPageVos
.
add
(
walletCathVo
);
}
}
walletCathPageVo
.
setPageNum
(
walletCathPage
.
getPageNum
());
walletCathPageVo
.
setPageNum
(
walletCathPage
.
getPageNum
());
...
@@ -105,14 +113,7 @@ public class MyWalletCathBiz extends BaseBiz<MyWalletCathMapper, MyWalletCath> {
...
@@ -105,14 +113,7 @@ public class MyWalletCathBiz extends BaseBiz<MyWalletCathMapper, MyWalletCath> {
BeanUtils
.
copyProperties
(
walletCathListDTO
,
walletCathAdminVo
);
BeanUtils
.
copyProperties
(
walletCathListDTO
,
walletCathAdminVo
);
walletCathAdminVo
.
setUsername
(
StringUtils
.
isEmpty
(
walletCathListDTO
.
getRealname
())
?
walletCathListDTO
.
getNickname
()
:
walletCathListDTO
.
getRealname
());
walletCathAdminVo
.
setUsername
(
StringUtils
.
isEmpty
(
walletCathListDTO
.
getRealname
())
?
walletCathListDTO
.
getNickname
()
:
walletCathListDTO
.
getRealname
());
walletCathAdminVo
.
setPhone
(
walletCathListDTO
.
getUsername
());
walletCathAdminVo
.
setPhone
(
walletCathListDTO
.
getUsername
());
//微信
if
(
walletCathListDTO
.
getCathType
()==
0
){
walletCathAdminVo
.
setAccountNumberDesc
(
String
.
format
(
"%s%s%s"
,
"提现到微信("
,
walletCathListDTO
.
getAccountNumber
(),
")"
));
}
//支付宝
if
(
walletCathListDTO
.
getCathType
()==
1
){
walletCathAdminVo
.
setAccountNumberDesc
(
String
.
format
(
"%s%s%s"
,
"提现到支付宝("
,
walletCathListDTO
.
getAccountNumber
(),
")"
));
}
walletCathAdminVos
.
add
(
walletCathAdminVo
);
walletCathAdminVos
.
add
(
walletCathAdminVo
);
}
}
walletCathAdminVos
.
sort
(
Comparator
.
comparing
(
WalletCathAdminVo:
:
getCrtTime
).
reversed
());
walletCathAdminVos
.
sort
(
Comparator
.
comparing
(
WalletCathAdminVo:
:
getCrtTime
).
reversed
());
...
@@ -141,4 +142,9 @@ public class MyWalletCathBiz extends BaseBiz<MyWalletCathMapper, MyWalletCath> {
...
@@ -141,4 +142,9 @@ public class MyWalletCathBiz extends BaseBiz<MyWalletCathMapper, MyWalletCath> {
criteria
.
andIn
(
"userId"
,
userIds
);
criteria
.
andIn
(
"userId"
,
userIds
);
mapper
.
deleteByExample
(
example
);
mapper
.
deleteByExample
(
example
);
}
}
@Override
public
void
insertSelective
(
MyWalletCath
entity
)
{
mapper
.
insertSelective
(
entity
);
}
}
}
ace-modules/ace-admin/src/main/java/com/github/wxiaoqi/security/admin/biz/UserMemberLevelBiz.java
View file @
ff31eef4
package
com
.
github
.
wxiaoqi
.
security
.
admin
.
biz
;
package
com
.
github
.
wxiaoqi
.
security
.
admin
.
biz
;
import
com.ace.cache.annotation.Cache
;
import
com.ace.cache.annotation.Cache
;
import
com.ace.cache.annotation.CacheClear
;
import
com.github.wxiaoqi.security.admin.entity.BaseUserMemberLevel
;
import
com.github.wxiaoqi.security.admin.entity.BaseUserMemberLevel
;
import
com.github.wxiaoqi.security.admin.mapper.BaseUserMemberLevelMapper
;
import
com.github.wxiaoqi.security.admin.mapper.BaseUserMemberLevelMapper
;
import
com.github.wxiaoqi.security.common.biz.BaseBiz
;
import
com.github.wxiaoqi.security.common.biz.BaseBiz
;
...
@@ -52,6 +53,7 @@ public class UserMemberLevelBiz extends BaseBiz<BaseUserMemberLevelMapper,BaseUs
...
@@ -52,6 +53,7 @@ public class UserMemberLevelBiz extends BaseBiz<BaseUserMemberLevelMapper,BaseUs
return
levelAndDiscountMap
;
return
levelAndDiscountMap
;
}
}
@CacheClear
(
key
=
"member"
)
public
void
updateMemberBaseInfo
(
BaseUserMemberLevel
baseUserMemberLevel
)
{
public
void
updateMemberBaseInfo
(
BaseUserMemberLevel
baseUserMemberLevel
)
{
int
affectRows
=
mapper
.
updateByPrimaryKeySelective
(
baseUserMemberLevel
);
int
affectRows
=
mapper
.
updateByPrimaryKeySelective
(
baseUserMemberLevel
);
if
(
affectRows
==
0
){
if
(
affectRows
==
0
){
...
...
ace-modules/ace-admin/src/main/java/com/github/wxiaoqi/security/admin/rest/AppUserAliPayController.java
0 → 100644
View file @
ff31eef4
package
com
.
github
.
wxiaoqi
.
security
.
admin
.
rest
;
import
com.github.wxiaoqi.security.admin.biz.AppUserAlipayBiz
;
import
com.github.wxiaoqi.security.common.msg.ObjectRestResponse
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.web.bind.annotation.GetMapping
;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.bind.annotation.RestController
;
import
javax.servlet.http.HttpServletRequest
;
@RestController
@RequestMapping
(
"/alipay"
)
public
class
AppUserAliPayController
{
@Autowired
AppUserAlipayBiz
appUserAlipayBiz
;
@GetMapping
(
"/getUserInfo"
)
public
ObjectRestResponse
getUserInfo
(
String
code
,
HttpServletRequest
request
)
{
return
appUserAlipayBiz
.
getUserInfo
(
code
,
request
);
}
@GetMapping
(
"/get"
)
public
ObjectRestResponse
get
(
HttpServletRequest
request
)
{
return
ObjectRestResponse
.
succ
(
appUserAlipayBiz
.
getByUserId
(
request
));
}
}
ace-modules/ace-admin/src/main/resources/mapper/MyWalletCathMapper.xml
View file @
ff31eef4
...
@@ -16,7 +16,8 @@
...
@@ -16,7 +16,8 @@
wc.finish_time AS `finishTime`,
wc.finish_time AS `finishTime`,
wc.cono,
wc.cono,
wc.order_no AS `orderNo`,
wc.order_no AS `orderNo`,
wc.account_number AS `accountNumber`
wc.account_number AS `accountNumber`,
wc.account_name AS `accountName`
FROM
FROM
(SELECT * FROM `my_wallet_cath`
<if
test=
"state != null"
>
(SELECT * FROM `my_wallet_cath`
<if
test=
"state != null"
>
WHERE `stauts`=#{state}
WHERE `stauts`=#{state}
...
...
xx-universal/xx-universal-api/src/main/java/com/xxfc/platform/universal/feign/ThirdFeign.java
View file @
ff31eef4
...
@@ -83,4 +83,8 @@ public interface ThirdFeign {
...
@@ -83,4 +83,8 @@ public interface ThirdFeign {
/*************************************支付***************************************/
/*************************************支付***************************************/
@PostMapping
(
"/pay/app/unauth/transfer_account"
)
@PostMapping
(
"/pay/app/unauth/transfer_account"
)
String
transferAccount
(
@RequestBody
FundPayVo
fundPayVo
)
throws
Exception
;
String
transferAccount
(
@RequestBody
FundPayVo
fundPayVo
)
throws
Exception
;
@GetMapping
(
"/info/app/unauth/getAliPayUserInfo"
)
public
ObjectRestResponse
<
String
>
getAliPayUserInfo
(
@RequestParam
(
value
=
"code"
)
String
code
);
}
}
xx-universal/xx-universal-api/src/main/java/com/xxfc/platform/universal/utils/Base64.java
0 → 100644
View file @
ff31eef4
package
com
.
xxfc
.
platform
.
universal
.
utils
;
public
final
class
Base64
{
private
static
final
int
BASELENGTH
=
128
;
private
static
final
int
LOOKUPLENGTH
=
64
;
private
static
final
int
TWENTYFOURBITGROUP
=
24
;
private
static
final
int
EIGHTBIT
=
8
;
private
static
final
int
SIXTEENBIT
=
16
;
private
static
final
int
FOURBYTE
=
4
;
private
static
final
int
SIGN
=
-
128
;
private
static
char
PAD
=
'='
;
private
static
byte
[]
base64Alphabet
=
new
byte
[
BASELENGTH
];
private
static
char
[]
lookUpBase64Alphabet
=
new
char
[
LOOKUPLENGTH
];
static
{
for
(
int
i
=
0
;
i
<
BASELENGTH
;
++
i
)
{
base64Alphabet
[
i
]
=
-
1
;
}
for
(
int
i
=
'Z'
;
i
>=
'A'
;
i
--)
{
base64Alphabet
[
i
]
=
(
byte
)
(
i
-
'A'
);
}
for
(
int
i
=
'z'
;
i
>=
'a'
;
i
--)
{
base64Alphabet
[
i
]
=
(
byte
)
(
i
-
'a'
+
26
);
}
for
(
int
i
=
'9'
;
i
>=
'0'
;
i
--)
{
base64Alphabet
[
i
]
=
(
byte
)
(
i
-
'0'
+
52
);
}
base64Alphabet
[
'+'
]
=
62
;
base64Alphabet
[
'/'
]
=
63
;
for
(
int
i
=
0
;
i
<=
25
;
i
++)
{
lookUpBase64Alphabet
[
i
]
=
(
char
)
(
'A'
+
i
);
}
for
(
int
i
=
26
,
j
=
0
;
i
<=
51
;
i
++,
j
++)
{
lookUpBase64Alphabet
[
i
]
=
(
char
)
(
'a'
+
j
);
}
for
(
int
i
=
52
,
j
=
0
;
i
<=
61
;
i
++,
j
++)
{
lookUpBase64Alphabet
[
i
]
=
(
char
)
(
'0'
+
j
);
}
lookUpBase64Alphabet
[
62
]
=
(
char
)
'+'
;
lookUpBase64Alphabet
[
63
]
=
(
char
)
'/'
;
}
private
static
boolean
isWhiteSpace
(
char
octect
)
{
return
(
octect
==
0x20
||
octect
==
0xd
||
octect
==
0xa
||
octect
==
0x9
);
}
private
static
boolean
isPad
(
char
octect
)
{
return
(
octect
==
PAD
);
}
private
static
boolean
isData
(
char
octect
)
{
return
(
octect
<
BASELENGTH
&&
base64Alphabet
[
octect
]
!=
-
1
);
}
/**
* Encodes hex octects into Base64
*
* @param binaryData
* Array containing binaryData
* @return Encoded Base64 array
*/
public
static
String
encode
(
byte
[]
binaryData
)
{
if
(
binaryData
==
null
)
{
return
null
;
}
int
lengthDataBits
=
binaryData
.
length
*
EIGHTBIT
;
if
(
lengthDataBits
==
0
)
{
return
""
;
}
int
fewerThan24bits
=
lengthDataBits
%
TWENTYFOURBITGROUP
;
int
numberTriplets
=
lengthDataBits
/
TWENTYFOURBITGROUP
;
int
numberQuartet
=
fewerThan24bits
!=
0
?
numberTriplets
+
1
:
numberTriplets
;
char
encodedData
[]
=
null
;
encodedData
=
new
char
[
numberQuartet
*
4
];
byte
k
=
0
,
l
=
0
,
b1
=
0
,
b2
=
0
,
b3
=
0
;
int
encodedIndex
=
0
;
int
dataIndex
=
0
;
for
(
int
i
=
0
;
i
<
numberTriplets
;
i
++)
{
b1
=
binaryData
[
dataIndex
++];
b2
=
binaryData
[
dataIndex
++];
b3
=
binaryData
[
dataIndex
++];
l
=
(
byte
)
(
b2
&
0x0f
);
k
=
(
byte
)
(
b1
&
0x03
);
byte
val1
=
((
b1
&
SIGN
)
==
0
)
?
(
byte
)
(
b1
>>
2
)
:
(
byte
)
((
b1
)
>>
2
^
0xc0
);
byte
val2
=
((
b2
&
SIGN
)
==
0
)
?
(
byte
)
(
b2
>>
4
)
:
(
byte
)
((
b2
)
>>
4
^
0xf0
);
byte
val3
=
((
b3
&
SIGN
)
==
0
)
?
(
byte
)
(
b3
>>
6
)
:
(
byte
)
((
b3
)
>>
6
^
0xfc
);
encodedData
[
encodedIndex
++]
=
lookUpBase64Alphabet
[
val1
];
encodedData
[
encodedIndex
++]
=
lookUpBase64Alphabet
[
val2
|
(
k
<<
4
)];
encodedData
[
encodedIndex
++]
=
lookUpBase64Alphabet
[(
l
<<
2
)
|
val3
];
encodedData
[
encodedIndex
++]
=
lookUpBase64Alphabet
[
b3
&
0x3f
];
}
// form integral number of 6-bit groups
if
(
fewerThan24bits
==
EIGHTBIT
)
{
b1
=
binaryData
[
dataIndex
];
k
=
(
byte
)
(
b1
&
0x03
);
byte
val1
=
((
b1
&
SIGN
)
==
0
)
?
(
byte
)
(
b1
>>
2
)
:
(
byte
)
((
b1
)
>>
2
^
0xc0
);
encodedData
[
encodedIndex
++]
=
lookUpBase64Alphabet
[
val1
];
encodedData
[
encodedIndex
++]
=
lookUpBase64Alphabet
[
k
<<
4
];
encodedData
[
encodedIndex
++]
=
PAD
;
encodedData
[
encodedIndex
++]
=
PAD
;
}
else
if
(
fewerThan24bits
==
SIXTEENBIT
)
{
b1
=
binaryData
[
dataIndex
];
b2
=
binaryData
[
dataIndex
+
1
];
l
=
(
byte
)
(
b2
&
0x0f
);
k
=
(
byte
)
(
b1
&
0x03
);
byte
val1
=
((
b1
&
SIGN
)
==
0
)
?
(
byte
)
(
b1
>>
2
)
:
(
byte
)
((
b1
)
>>
2
^
0xc0
);
byte
val2
=
((
b2
&
SIGN
)
==
0
)
?
(
byte
)
(
b2
>>
4
)
:
(
byte
)
((
b2
)
>>
4
^
0xf0
);
encodedData
[
encodedIndex
++]
=
lookUpBase64Alphabet
[
val1
];
encodedData
[
encodedIndex
++]
=
lookUpBase64Alphabet
[
val2
|
(
k
<<
4
)];
encodedData
[
encodedIndex
++]
=
lookUpBase64Alphabet
[
l
<<
2
];
encodedData
[
encodedIndex
++]
=
PAD
;
}
return
new
String
(
encodedData
);
}
/**
* Decodes Base64 data into octects
*
* @param encoded
* string containing Base64 data
* @return Array containind decoded data.
*/
public
static
byte
[]
decode
(
String
encoded
)
{
if
(
encoded
==
null
)
{
return
null
;
}
char
[]
base64Data
=
encoded
.
toCharArray
();
// remove white spaces
int
len
=
removeWhiteSpace
(
base64Data
);
if
(
len
%
FOURBYTE
!=
0
)
{
return
null
;
// should be divisible by four
}
int
numberQuadruple
=
(
len
/
FOURBYTE
);
if
(
numberQuadruple
==
0
)
{
return
new
byte
[
0
];
}
byte
decodedData
[]
=
null
;
byte
b1
=
0
,
b2
=
0
,
b3
=
0
,
b4
=
0
;
char
d1
=
0
,
d2
=
0
,
d3
=
0
,
d4
=
0
;
int
i
=
0
;
int
encodedIndex
=
0
;
int
dataIndex
=
0
;
decodedData
=
new
byte
[(
numberQuadruple
)
*
3
];
for
(;
i
<
numberQuadruple
-
1
;
i
++)
{
if
(!
isData
((
d1
=
base64Data
[
dataIndex
++]))
||
!
isData
((
d2
=
base64Data
[
dataIndex
++]))
||
!
isData
((
d3
=
base64Data
[
dataIndex
++]))
||
!
isData
((
d4
=
base64Data
[
dataIndex
++])))
{
return
null
;
}
// if found "no data" just return null
b1
=
base64Alphabet
[
d1
];
b2
=
base64Alphabet
[
d2
];
b3
=
base64Alphabet
[
d3
];
b4
=
base64Alphabet
[
d4
];
decodedData
[
encodedIndex
++]
=
(
byte
)
(
b1
<<
2
|
b2
>>
4
);
decodedData
[
encodedIndex
++]
=
(
byte
)
(((
b2
&
0xf
)
<<
4
)
|
((
b3
>>
2
)
&
0xf
));
decodedData
[
encodedIndex
++]
=
(
byte
)
(
b3
<<
6
|
b4
);
}
if
(!
isData
((
d1
=
base64Data
[
dataIndex
++]))
||
!
isData
((
d2
=
base64Data
[
dataIndex
++])))
{
return
null
;
// if found "no data" just return null
}
b1
=
base64Alphabet
[
d1
];
b2
=
base64Alphabet
[
d2
];
d3
=
base64Data
[
dataIndex
++];
d4
=
base64Data
[
dataIndex
++];
if
(!
isData
((
d3
))
||
!
isData
((
d4
)))
{
// Check if they are PAD characters
if
(
isPad
(
d3
)
&&
isPad
(
d4
))
{
if
((
b2
&
0xf
)
!=
0
)
// last 4 bits should be zero
{
return
null
;
}
byte
[]
tmp
=
new
byte
[
i
*
3
+
1
];
System
.
arraycopy
(
decodedData
,
0
,
tmp
,
0
,
i
*
3
);
tmp
[
encodedIndex
]
=
(
byte
)
(
b1
<<
2
|
b2
>>
4
);
return
tmp
;
}
else
if
(!
isPad
(
d3
)
&&
isPad
(
d4
))
{
b3
=
base64Alphabet
[
d3
];
if
((
b3
&
0x3
)
!=
0
)
// last 2 bits should be zero
{
return
null
;
}
byte
[]
tmp
=
new
byte
[
i
*
3
+
2
];
System
.
arraycopy
(
decodedData
,
0
,
tmp
,
0
,
i
*
3
);
tmp
[
encodedIndex
++]
=
(
byte
)
(
b1
<<
2
|
b2
>>
4
);
tmp
[
encodedIndex
]
=
(
byte
)
(((
b2
&
0xf
)
<<
4
)
|
((
b3
>>
2
)
&
0xf
));
return
tmp
;
}
else
{
return
null
;
}
}
else
{
// No PAD e.g 3cQl
b3
=
base64Alphabet
[
d3
];
b4
=
base64Alphabet
[
d4
];
decodedData
[
encodedIndex
++]
=
(
byte
)
(
b1
<<
2
|
b2
>>
4
);
decodedData
[
encodedIndex
++]
=
(
byte
)
(((
b2
&
0xf
)
<<
4
)
|
((
b3
>>
2
)
&
0xf
));
decodedData
[
encodedIndex
++]
=
(
byte
)
(
b3
<<
6
|
b4
);
}
return
decodedData
;
}
/**
* remove WhiteSpace from MIME containing encoded Base64 data.
*
* @param data
* the byte array of base64 data (with WS)
* @return the new length
*/
private
static
int
removeWhiteSpace
(
char
[]
data
)
{
if
(
data
==
null
)
{
return
0
;
}
// count characters that's not whitespace
int
newSize
=
0
;
int
len
=
data
.
length
;
for
(
int
i
=
0
;
i
<
len
;
i
++)
{
if
(!
isWhiteSpace
(
data
[
i
]))
{
data
[
newSize
++]
=
data
[
i
];
}
}
return
newSize
;
}
}
xx-universal/xx-universal-api/src/main/java/com/xxfc/platform/universal/utils/SignUtils.java
0 → 100644
View file @
ff31eef4
package
com
.
xxfc
.
platform
.
universal
.
utils
;
import
java.security.KeyFactory
;
import
java.security.PrivateKey
;
import
java.security.spec.PKCS8EncodedKeySpec
;
public
class
SignUtils
{
private
static
final
String
ALGORITHM
=
"RSA"
;
private
static
final
String
SIGN_ALGORITHMS
=
"SHA1WithRSA"
;
private
static
final
String
SIGN_SHA256RSA_ALGORITHMS
=
"SHA256WithRSA"
;
private
static
final
String
DEFAULT_CHARSET
=
"UTF-8"
;
private
static
String
getAlgorithms
(
boolean
rsa2
)
{
return
rsa2
?
SIGN_SHA256RSA_ALGORITHMS
:
SIGN_ALGORITHMS
;
}
public
static
String
sign
(
String
content
,
String
privateKey
,
boolean
rsa2
)
{
try
{
PKCS8EncodedKeySpec
priPKCS8
=
new
PKCS8EncodedKeySpec
(
Base64
.
decode
(
privateKey
));
KeyFactory
keyf
=
KeyFactory
.
getInstance
(
ALGORITHM
);
PrivateKey
priKey
=
keyf
.
generatePrivate
(
priPKCS8
);
java
.
security
.
Signature
signature
=
java
.
security
.
Signature
.
getInstance
(
getAlgorithms
(
rsa2
));
signature
.
initSign
(
priKey
);
signature
.
update
(
content
.
getBytes
(
DEFAULT_CHARSET
));
byte
[]
signed
=
signature
.
sign
();
return
Base64
.
encode
(
signed
);
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
}
return
null
;
}
}
xx-universal/xx-universal-server/src/main/java/com/xxfc/platform/universal/biz/OrderPayBiz.java
View file @
ff31eef4
...
@@ -16,12 +16,14 @@ import com.github.wxiaoqi.security.common.exception.BaseException;
...
@@ -16,12 +16,14 @@ import com.github.wxiaoqi.security.common.exception.BaseException;
import
com.github.wxiaoqi.security.common.msg.ObjectRestResponse
;
import
com.github.wxiaoqi.security.common.msg.ObjectRestResponse
;
import
com.github.wxiaoqi.security.common.util.HTTPSUtils
;
import
com.github.wxiaoqi.security.common.util.HTTPSUtils
;
import
com.github.wxiaoqi.security.common.util.OrderUtil
;
import
com.github.wxiaoqi.security.common.util.OrderUtil
;
import
com.github.wxiaoqi.security.common.util.UUIDUtils
;
import
com.github.wxiaoqi.security.common.util.process.ResultCode
;
import
com.github.wxiaoqi.security.common.util.process.ResultCode
;
import
com.github.wxiaoqi.security.common.util.process.SystemConfig
;
import
com.github.wxiaoqi.security.common.util.process.SystemConfig
;
import
com.github.wxiaoqi.security.common.util.result.JsonResultUtil
;
import
com.github.wxiaoqi.security.common.util.result.JsonResultUtil
;
import
com.xxfc.platform.universal.entity.Dictionary
;
import
com.xxfc.platform.universal.entity.Dictionary
;
import
com.xxfc.platform.universal.entity.OrderPay
;
import
com.xxfc.platform.universal.entity.OrderPay
;
import
com.xxfc.platform.universal.mapper.OrderPayMapper
;
import
com.xxfc.platform.universal.mapper.OrderPayMapper
;
import
com.xxfc.platform.universal.utils.SignUtils
;
import
com.xxfc.platform.universal.vo.FundPayVo
;
import
com.xxfc.platform.universal.vo.FundPayVo
;
import
com.xxfc.platform.universal.vo.OrderPayVo
;
import
com.xxfc.platform.universal.vo.OrderPayVo
;
import
com.xxfc.platform.universal.weixin.api.*
;
import
com.xxfc.platform.universal.weixin.api.*
;
...
@@ -411,7 +413,7 @@ public class OrderPayBiz extends BaseBiz<OrderPayMapper, OrderPay> implements In
...
@@ -411,7 +413,7 @@ public class OrderPayBiz extends BaseBiz<OrderPayMapper, OrderPay> implements In
AlipayFundTransToaccountTransferRequest
request
=
new
AlipayFundTransToaccountTransferRequest
();
AlipayFundTransToaccountTransferRequest
request
=
new
AlipayFundTransToaccountTransferRequest
();
request
.
setBizContent
(
"{"
+
request
.
setBizContent
(
"{"
+
"\"out_biz_no\":\""
+
fundPayVo
.
getOutBizNo
()
+
"\","
+
"\"out_biz_no\":\""
+
fundPayVo
.
getOutBizNo
()
+
"\","
+
"\"payee_type\":\"ALIPAY_
LOGON
ID\","
+
"\"payee_type\":\"ALIPAY_
USER
ID\","
+
"\"payee_account\":\""
+
fundPayVo
.
getPayeeAccount
()
+
"\","
+
"\"payee_account\":\""
+
fundPayVo
.
getPayeeAccount
()
+
"\","
+
"\"amount\":\""
+
fundPayVo
.
getAmount
()
+
"\","
+
"\"amount\":\""
+
fundPayVo
.
getAmount
()
+
"\","
+
"\"payer_show_name\":\""
+
fundPayVo
.
getPayerShowName
()
+
"\","
+
"\"payer_show_name\":\""
+
fundPayVo
.
getPayerShowName
()
+
"\","
+
...
@@ -446,6 +448,83 @@ public class OrderPayBiz extends BaseBiz<OrderPayMapper, OrderPay> implements In
...
@@ -446,6 +448,83 @@ public class OrderPayBiz extends BaseBiz<OrderPayMapper, OrderPay> implements In
}
}
}
}
/**
* 支付宝授权获取用户信息
* @param code
* @return
* @throws AlipayApiException
*/
public
String
getAlipayToken
(
String
code
)
throws
AlipayApiException
{
AlipayClient
alipayClient
=
getAlipayClient
();
AlipaySystemOauthTokenRequest
request
=
new
AlipaySystemOauthTokenRequest
();
request
.
setGrantType
(
"authorization_code"
);
request
.
setCode
(
code
);
AlipaySystemOauthTokenResponse
response
=
alipayClient
.
execute
(
request
);
if
(
response
.
isSuccess
()){
log
.
info
(
"获取用户token调用成功,获取用户信息 {}"
,
response
.
getBody
());
if
(
response
.
getAccessToken
()
!=
null
)
{
AlipayUserInfoShareRequest
alipayUserInfoShareRequest
=
new
AlipayUserInfoShareRequest
();
AlipayUserInfoShareResponse
alipayUserInfoShareResponse
=
alipayClient
.
execute
(
alipayUserInfoShareRequest
,
response
.
getAccessToken
());
if
(
alipayUserInfoShareResponse
.
isSuccess
()){
log
.
info
(
"获取用户支付宝信息调用成功, {}"
,
alipayUserInfoShareResponse
.
getBody
());
return
alipayUserInfoShareResponse
.
getBody
();
}
else
{
log
.
info
(
"获取用户支付宝信息调用失败, {}"
,
alipayUserInfoShareResponse
.
getBody
());
}
}
}
else
{
log
.
info
(
"获取用户token调用失败, {}"
,
response
.
getBody
());
}
return
response
.
getBody
();
}
public
String
generateAliPayInfo
(
String
apiName
,
String
appName
)
{
//apiname=com.alipay.account.auth&app_id=xxxxx&app_name=mc&auth_type=AUTHACCOUNT&biz_type=openservice&method=alipay.open.auth.sdk.code.get&pid=xxxxx&product_id=APP_FAST_LOGIN&scope=kuaijie&sign_type=RSA2&target_id=20141225xxxx&sign=fMcp4GtiM6rxSIeFnJCVePJKV43eXrUP86CQgiLhDHH2u%2FdN75eEvmywc2ulkm7qKRetkU9fbVZtJIqFdMJcJ9Yp%2BJI%2FF%2FpESafFR6rB2fRjiQQLGXvxmDGVMjPSxHxVtIqpZy5FDoKUSjQ2%2FILDKpu3%2F%2BtAtm2jRw1rUoMhgt0%3D
StringBuilder
stringBuilder
=
new
StringBuilder
();
stringBuilder
.
append
(
"apiname="
);
stringBuilder
.
append
(
apiName
);
stringBuilder
.
append
(
"&app_id="
);
stringBuilder
.
append
(
SystemConfig
.
ALIPAY_APPID
);
stringBuilder
.
append
(
"&app_name="
);
stringBuilder
.
append
(
appName
);
stringBuilder
.
append
(
"&auth_type=AUTHACCOUNT"
);
stringBuilder
.
append
(
"&biz_type=openservice"
);
stringBuilder
.
append
(
"&method=alipay.open.auth.sdk.code.get"
);
stringBuilder
.
append
(
"&pid="
);
stringBuilder
.
append
(
SystemConfig
.
ALIPAY_PID
);
stringBuilder
.
append
(
"&product_id=APP_FAST_LOGIN"
);
stringBuilder
.
append
(
"&scope=kuaijie"
);
stringBuilder
.
append
(
"&sign_type=RSA2"
);
stringBuilder
.
append
(
"&target_id="
);
stringBuilder
.
append
(
UUIDUtils
.
generateShortUuid
());
String
sign
=
SignUtils
.
sign
(
stringBuilder
.
toString
(),
SystemConfig
.
ALIPAY_PRIVATE_KEY
,
true
);
stringBuilder
.
append
(
"&sign="
);
stringBuilder
.
append
(
sign
);
return
stringBuilder
.
toString
();
}
public
String
alipayUserAuth
()
throws
AlipayApiException
{
AlipayClient
alipayClient
=
getAlipayClient
();
AlipayUserInfoAuthRequest
request
=
new
AlipayUserInfoAuthRequest
();
request
.
setBizContent
(
"{"
+
" \"scopes\":["
+
" \"auth_base\""
+
" ],"
+
"\"state\":\"init\","
+
"\"is_mobile\":\"true\""
+
" }"
);
AlipayUserInfoAuthResponse
response
=
alipayClient
.
execute
(
request
);
if
(
response
.
isSuccess
()){
System
.
out
.
println
(
"调用成功"
);
}
else
{
System
.
out
.
println
(
"调用失败"
);
}
return
response
.
getBody
();
}
//解冻预授权
//解冻预授权
public
void
fundAuthOrderUnFreeze
(
AlipayClient
alipayClient
)
throws
AlipayApiException
{
public
void
fundAuthOrderUnFreeze
(
AlipayClient
alipayClient
)
throws
AlipayApiException
{
AlipayFundAuthOrderUnfreezeRequest
request
=
new
AlipayFundAuthOrderUnfreezeRequest
();
AlipayFundAuthOrderUnfreezeRequest
request
=
new
AlipayFundAuthOrderUnfreezeRequest
();
...
@@ -562,15 +641,14 @@ public class OrderPayBiz extends BaseBiz<OrderPayMapper, OrderPay> implements In
...
@@ -562,15 +641,14 @@ public class OrderPayBiz extends BaseBiz<OrderPayMapper, OrderPay> implements In
public
static
void
main
(
String
[]
args
)
{
public
static
void
main
(
String
[]
args
)
{
OrderPayBiz
orderPayBiz
=
new
OrderPayBiz
();
OrderPayBiz
orderPayBiz
=
new
OrderPayBiz
();
AlipayClient
alipayClient
=
orderPayBiz
.
getAlipayClient
();
FundPayVo
fundPayVo
=
new
FundPayVo
();
FundPayVo
fundPayVo
=
new
FundPayVo
();
fundPayVo
.
set
Amount
(
"0.50
"
);
fundPayVo
.
set
Remark
(
"转账
"
);
fundPayVo
.
setOutBizNo
(
"
2019101015543
"
);
fundPayVo
.
setOutBizNo
(
"
12345678
"
);
fundPayVo
.
set
PayeeAccount
(
"2724520350@qq.com
"
);
fundPayVo
.
set
Amount
(
"0.1
"
);
fundPayVo
.
setPaye
rShowName
(
"欣欣房车网络科技
"
);
fundPayVo
.
setPaye
eAccount
(
"2088212169302286
"
);
fundPayVo
.
setRemark
(
"测试转账"
);
AlipayClient
alipayClient
=
orderPayBiz
.
getAlipayClient
(
);
try
{
try
{
orderPayBiz
.
alipayfundTrans
(
alipayClient
,
fundPayVo
);
System
.
out
.
println
(
orderPayBiz
.
alipayfundTrans
(
alipayClient
,
fundPayVo
)
);
}
catch
(
AlipayApiException
e
)
{
}
catch
(
AlipayApiException
e
)
{
e
.
printStackTrace
();
e
.
printStackTrace
();
}
}
...
...
xx-universal/xx-universal-server/src/main/java/com/xxfc/platform/universal/controller/UserInfoController.java
View file @
ff31eef4
...
@@ -4,9 +4,11 @@ package com.xxfc.platform.universal.controller;
...
@@ -4,9 +4,11 @@ package com.xxfc.platform.universal.controller;
import
com.alibaba.fastjson.JSONObject
;
import
com.alibaba.fastjson.JSONObject
;
import
com.alipay.api.AlipayApiException
;
import
com.github.wxiaoqi.security.auth.client.annotation.IgnoreUserToken
;
import
com.github.wxiaoqi.security.auth.client.annotation.IgnoreUserToken
;
import
com.github.wxiaoqi.security.common.msg.ObjectRestResponse
;
import
com.github.wxiaoqi.security.common.msg.ObjectRestResponse
;
import
com.github.wxiaoqi.security.common.util.UserAgentUtil
;
import
com.github.wxiaoqi.security.common.util.UserAgentUtil
;
import
com.xxfc.platform.universal.biz.OrderPayBiz
;
import
com.xxfc.platform.universal.biz.WeixinService
;
import
com.xxfc.platform.universal.biz.WeixinService
;
import
lombok.extern.slf4j.Slf4j
;
import
lombok.extern.slf4j.Slf4j
;
import
org.apache.commons.lang3.StringUtils
;
import
org.apache.commons.lang3.StringUtils
;
...
@@ -28,6 +30,9 @@ public class UserInfoController {
...
@@ -28,6 +30,9 @@ public class UserInfoController {
@Autowired
@Autowired
WeixinService
weixinService
;
WeixinService
weixinService
;
@Autowired
OrderPayBiz
orderPayBiz
;
@Value
(
"${wx.sendUrl}"
)
@Value
(
"${wx.sendUrl}"
)
private
String
sendUrl
;
private
String
sendUrl
;
...
@@ -51,5 +56,31 @@ public class UserInfoController {
...
@@ -51,5 +56,31 @@ public class UserInfoController {
return
ObjectRestResponse
.
succ
();
return
ObjectRestResponse
.
succ
();
}
}
@GetMapping
(
"/app/unauth/getAliPayUserInfo"
)
public
ObjectRestResponse
<
String
>
getAliPayUserInfo
(
String
code
)
{
try
{
return
ObjectRestResponse
.
succ
(
orderPayBiz
.
getAlipayToken
(
code
));
}
catch
(
AlipayApiException
e
)
{
e
.
printStackTrace
();
}
return
ObjectRestResponse
.
createDefaultFail
();
}
@GetMapping
(
"/app/unauth/alipayUserAuth"
)
public
ObjectRestResponse
<
String
>
alipayUserAuth
()
{
try
{
JSONObject
jsonObject
=
JSONObject
.
parseObject
(
orderPayBiz
.
alipayUserAuth
());
return
ObjectRestResponse
.
succ
(
jsonObject
);
}
catch
(
AlipayApiException
e
)
{
e
.
printStackTrace
();
}
return
ObjectRestResponse
.
createDefaultFail
();
}
@GetMapping
(
"/app/unauth/getParam"
)
public
ObjectRestResponse
<
String
>
getParam
(
String
apiName
,
String
appName
)
{
return
ObjectRestResponse
.
succ
(
orderPayBiz
.
generateAliPayInfo
(
apiName
,
appName
));
}
}
}
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