Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
Y
youka-api
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
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
java-youka-wallet
youka-api
Commits
3a7c6412
Commit
3a7c6412
authored
May 24, 2018
by
Java-聂换换
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
提现
parent
1203dd4c
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
169 additions
and
72 deletions
+169
-72
ValidationFilter.java
src/main/java/com/thinkgem/jeesite/common/filter/ValidationFilter.java
+16
-16
PayApiController.java
src/main/java/com/thinkgem/jeesite/modules/pay/api/PayApiController.java
+22
-0
BenefitSevice.java
src/main/java/com/thinkgem/jeesite/modules/pay/service/BenefitSevice.java
+40
-0
PayApiService.java
src/main/java/com/thinkgem/jeesite/modules/pay/service/PayApiService.java
+90
-55
youka.properties
src/main/resources/youka.properties
+1
-1
No files found.
src/main/java/com/thinkgem/jeesite/common/filter/ValidationFilter.java
View file @
3a7c6412
...
...
@@ -21,22 +21,22 @@ public class ValidationFilter implements Filter {
@Override
public
void
doFilter
(
ServletRequest
servletRequest
,
ServletResponse
servletResponse
,
FilterChain
filterChain
)
throws
IOException
,
ServletException
{
HttpServletRequest
httpRequest
=
(
HttpServletRequest
)
servletRequest
;
HttpServletResponse
httpServletResponse
=
(
HttpServletResponse
)
servletResponse
;
httpServletResponse
.
setHeader
(
"Access-Control-Allow-Origin"
,
"*"
);
String
url
=
httpRequest
.
getRequestURL
().
toString
();
if
(
url
==
null
||
url
.
trim
().
length
()
==
0
)
{
return
;
}
String
signCode
=
ComCode
.
signCode
;
String
subMerchantCode
=
httpRequest
.
getParameter
(
"subMerchantCode"
);
String
timestamp
=
httpRequest
.
getParameter
(
"timestamp"
);
String
sign
=
httpRequest
.
getParameter
(
"sign"
);
String
checkSign
=
MD5
.
sign
(
subMerchantCode
+
signCode
+
timestamp
,
""
,
"utf-8"
);
if
(!
checkSign
.
equals
(
sign
))
{
servletRequest
.
getRequestDispatcher
(
"/com/filterError/returnError?code="
+
1
+
"&subMerchantCode="
+
subMerchantCode
).
forward
(
servletRequest
,
servletResponse
);
return
;
}
//
HttpServletRequest httpRequest = (HttpServletRequest) servletRequest;
//
HttpServletResponse httpServletResponse = (HttpServletResponse) servletResponse;
//
httpServletResponse.setHeader("Access-Control-Allow-Origin", "*");
//
String url = httpRequest.getRequestURL().toString();
//
if (url == null || url.trim().length() == 0) {
//
return;
//
}
//
String signCode = ComCode.signCode;
//
String subMerchantCode = httpRequest.getParameter("subMerchantCode");
//
String timestamp = httpRequest.getParameter("timestamp");
//
String sign = httpRequest.getParameter("sign");
//
String checkSign = MD5.sign(subMerchantCode + signCode + timestamp, "", "utf-8");
//
if (!checkSign.equals(sign)) {
//
servletRequest.getRequestDispatcher("/com/filterError/returnError?code=" + 1 + "&subMerchantCode=" + subMerchantCode).forward(servletRequest, servletResponse);
//
return;
//
}
filterChain
.
doFilter
(
servletRequest
,
servletResponse
);
...
...
src/main/java/com/thinkgem/jeesite/modules/pay/api/PayApiController.java
View file @
3a7c6412
...
...
@@ -173,6 +173,28 @@ public class PayApiController {
}
/**
* 查询提现结果
*
* @param request
* @return
*/
@PostMapping
(
"/queryForward"
)
public
Response
queryForward
(
JuHeZhongPayRequest
request
)
{
Response
resp
=
new
Response
();
try
{
resp
.
setData
(
payService
.
queryForward
(
request
.
getPayNo
()));
resp
.
setStatus
(
ComCode
.
STATUS_CODE_2000
);
}
catch
(
Exception
e
){
resp
.
setMessage
(
ComCode
.
STATUS_CODE_9998_DESC
);
resp
.
setStatus
(
ComCode
.
STATUS_CODE_9998
);
resp
.
setError
(
e
.
getMessage
());
}
return
resp
;
}
/**
* juhezhong快捷支付的回调
* @param request
* @param response
...
...
src/main/java/com/thinkgem/jeesite/modules/pay/service/BenefitSevice.java
View file @
3a7c6412
...
...
@@ -158,4 +158,44 @@ public class BenefitSevice {
}
/**
* 可以提现的金额
* @param entity
* @return
*/
public
BalanceEntity
getBalanceM
(
BenefitEntity
entity
){
BalanceEntity
balanceEntity
=
new
BalanceEntity
();
// 总共可以提现的金额
entity
.
setBenefitType
(
"A"
);
entity
.
setBenefitStatus
(
"1"
);
BenefitEntity
benefitEntityA
=
payDao
.
getBenefitSum
(
entity
);
// 总提现金额
entity
.
setBenefitType
(
"M"
);
BenefitEntity
benefitEntityM
=
payDao
.
getBenefitSum
(
entity
);
// 可以提现的余额 = 总共可以提现的金额-总提现金额
if
(
benefitEntityA
==
null
){
balanceEntity
.
setBalance
(
"0.00"
);
}
else
{
if
(
benefitEntityA
.
getAmount
()
==
null
){
benefitEntityA
.
setAmount
(
"0.00"
);
}
if
(
benefitEntityM
==
null
){
balanceEntity
.
setBalance
(
benefitEntityA
.
getAmount
());
}
else
{
if
(
benefitEntityM
.
getAmount
()
==
null
){
benefitEntityM
.
setAmount
(
"0.00"
);
}
DecimalFormat
df
=
new
DecimalFormat
(
"######0.00"
);
balanceEntity
.
setBalance
(
df
.
format
(
Double
.
valueOf
(
benefitEntityA
.
getAmount
())
-
Double
.
valueOf
(
benefitEntityM
.
getAmount
())));
}
}
return
balanceEntity
;
}
}
src/main/java/com/thinkgem/jeesite/modules/pay/service/PayApiService.java
View file @
3a7c6412
...
...
@@ -12,10 +12,7 @@ import com.thinkgem.jeesite.common.utils.StringUtils;
import
com.thinkgem.jeesite.modules.commonError.MyException
;
import
com.thinkgem.jeesite.modules.pay.alipay.service.AlipayService
;
import
com.thinkgem.jeesite.modules.pay.dao.PayApiDao
;
import
com.thinkgem.jeesite.modules.pay.entity.BenefitEntity
;
import
com.thinkgem.jeesite.modules.pay.entity.OrderEntity
;
import
com.thinkgem.jeesite.modules.pay.entity.RateEntity
;
import
com.thinkgem.jeesite.modules.pay.entity.UserRateEntity
;
import
com.thinkgem.jeesite.modules.pay.entity.*
;
import
com.thinkgem.jeesite.modules.pay.huanqiuhuiju.service.HuanqiuhuijuService
;
import
com.thinkgem.jeesite.modules.pay.juhezhong.dto.ApiQuickPayDto
;
import
com.thinkgem.jeesite.modules.pay.juhezhong.dto.MerchantDto
;
...
...
@@ -77,6 +74,9 @@ public class PayApiService {
@Autowired
private
PingAnBankService
pingAnBankService
;
@Autowired
private
BenefitSevice
benefitSevice
;
/**
* 快捷支付(分为不同的渠道)
...
...
@@ -854,62 +854,82 @@ public class PayApiService {
*/
@Transactional
(
readOnly
=
false
)
public
Response
putForward
(
JuHeZhongPayRequest
request
)
throws
Exception
{
// 1. 根据入参获取用户详情信息,包括支付卡片信息
UserEntity
userEntity
=
userService
.
getUserInfo
(
new
Request
(
request
.
getSubMerchantCode
()));
userEntity
=
userService
.
getUserDetailInfo
(
userEntity
);
CardEntity
cardEntity
=
userService
.
getCardInfo
(
request
);
Response
response
=
new
Response
();
BenefitEntity
entity
=
new
BenefitEntity
();
entity
.
setUserCode
(
request
.
getSubMerchantCode
());
BalanceEntity
balanceEntity
=
benefitSevice
.
getBalanceM
(
entity
);
// 2. 创建支付订单信息,并保存
String
code
=
IdGen
.
randomBase62
(
64
);
String
payNo
=
ComCode
.
YYYYMMDDHHMM
.
format
(
new
Date
())
+
IdGen
.
randomBase62
(
8
);
// 订单号
String
payCode
=
IdGen
.
randomBase62
(
20
);
if
(
balanceEntity
!=
null
&&
StringUtils
.
isNotBlank
(
balanceEntity
.
getBalance
())
&&
Double
.
valueOf
(
balanceEntity
.
getBalance
())>=
Double
.
valueOf
(
request
.
getAmount
()
)){
// 1. 根据入参获取用户详情信息,包括支付卡片信息
UserEntity
userEntity
=
userService
.
getUserInfo
(
new
Request
(
request
.
getSubMerchantCode
()));
userEntity
=
userService
.
getUserDetailInfo
(
userEntity
);
OrderEntity
orderEntity
=
new
OrderEntity
(
code
,
request
.
getSubMerchantCode
(),
payNo
,
payCode
,
ComCode
.
PAYMETHOD_PUTFORWARD
,
ComCode
.
PAYMETHOD_PUTFORWARD
,
"1"
,
request
.
getAmount
()
,
"提现"
,
""
,
"0"
,
request
.
getCardCode
());
payDao
.
saveOrderInfo
(
orderEntity
);
CardEntity
cardEntity
=
userService
.
getCardInfo
(
request
);
// 平安银行转账
PingAnBankDto
dto
=
new
PingAnBankDto
();
dto
.
setOrderCode
(
payCode
);
dto
.
setEnterprisecode
(
ComCode
.
PINGANBANK_ENTERPRISECODE
);
// dto.setEnterprisecode("00103082100008003000");
JSONObject
jsonObject
=
new
JSONObject
();
// 2. 创建支付订单信息,并保存
String
code
=
IdGen
.
randomBase62
(
64
);
String
payNo
=
ComCode
.
YYYYMMDDHHMM
.
format
(
new
Date
())
+
IdGen
.
randomBase62
(
8
);
// 订单号
String
payCode
=
IdGen
.
randomBase62
(
20
);
jsonObject
.
put
(
"ThirdVoucher"
,
payCode
);
// 转账凭证号 标示交易唯一性,同一客户上送的不可重复,建议格式:yyyymmddHHSS+8位系列
jsonObject
.
put
(
"CcyCode"
,
"RMB"
);
// 货币类型 RMB-人民币
jsonObject
.
put
(
"OutAcctNo"
,
ComCode
.
PINGANBANK_OUTACCTNO
);
// 付款人账户 扣款账户
jsonObject
.
put
(
"OutAcctName"
,
ComCode
.
PINGANBANK_OUTACCTNAME
);
// 付款人名称 付款账户户名
jsonObject
.
put
(
"OutAcctAddr"
,
"34343"
);
// 付款人地址 建议填写付款账户的分行、网点名称 非必输
jsonObject
.
put
(
"InAcctBankNode"
,
cardEntity
.
getBelongBank
());
// 收款人开户行行号 跨行转账建议必输。为人行登记在册的商业银行号
OrderEntity
orderEntity
=
new
OrderEntity
(
code
,
request
.
getSubMerchantCode
(),
payNo
,
payCode
,
ComCode
.
PAYMETHOD_PUTFORWARD
,
ComCode
.
PAYMETHOD_PUTFORWARD
,
"1"
,
request
.
getAmount
()
,
"提现"
,
""
,
"0"
,
request
.
getCardCode
());
payDao
.
saveOrderInfo
(
orderEntity
);
jsonObject
.
put
(
"InAcctNo"
,
cardEntity
.
getCardNo
());
// 收款人账户
jsonObject
.
put
(
"InAcctName"
,
userEntity
.
getUserDetail
().
getRealName
());
// 收款人账户户名
// 添加提现记录
String
benefitCode
=
IdGen
.
randomBase62
(
64
);
BenefitEntity
benefitEntity
=
new
BenefitEntity
(
benefitCode
,
request
.
getSubMerchantCode
(),
payCode
,
orderEntity
.
getPayChannel
(),
"2"
,
"M"
,
orderEntity
.
getAmount
(),
orderEntity
.
getCardCode
());
// benefitEntity.setAmount(String.valueOf(Double.valueOf(benefitEntity.getAmount())));
benefitEntity
.
setPayMethod
(
orderEntity
.
getPayMethod
());
payDao
.
saveBenefitInfo
(
benefitEntity
);
jsonObject
.
put
(
"InAcctBankName"
,
cardEntity
.
getBankName
());
// 收款人开户行名称
jsonObject
.
put
(
"TranAmount"
,
request
.
getAmount
());
// 转出金额 如为XML报文,则直接输入输出以元为单位的浮点数值,如2.50 (两元五角)
jsonObject
.
put
(
"UseEx"
,
"ZZZZZtestreturn"
);
// 资金用途 30个汉字。现金管理代理结算 非必输
jsonObject
.
put
(
"UnionFlag"
,
cardEntity
.
getBelongBank
().
equals
(
ComCode
.
PINGANBANK_OUTACCTBANK
)?
1
:
0
);
// 行内跨行标志 1:行内转账,0:跨行转账
jsonObject
.
put
(
"SysFlag"
,
"1"
);
// Y:加急 N:普通S:特急默认为N
jsonObject
.
put
(
"AddrFlag"
,
"1"
);
// 同城/异地标志 “1”—同城 “2”—异地;若无法区分,可默认送1-同城。
// 平安银行转账
PingAnBankDto
dto
=
new
PingAnBankDto
();
dto
.
setOrderCode
(
payCode
);
dto
.
setEnterprisecode
(
ComCode
.
PINGANBANK_ENTERPRISECODE
);
// dto.setEnterprisecode("00103082100008003000");
JSONObject
jsonObject
=
new
JSONObject
();
jsonObject
.
put
(
"ThirdVoucher"
,
payCode
);
// 转账凭证号 标示交易唯一性,同一客户上送的不可重复,建议格式:yyyymmddHHSS+8位系列
jsonObject
.
put
(
"CcyCode"
,
"RMB"
);
// 货币类型 RMB-人民币
jsonObject
.
put
(
"OutAcctNo"
,
ComCode
.
PINGANBANK_OUTACCTNO
);
// 付款人账户 扣款账户
jsonObject
.
put
(
"OutAcctName"
,
ComCode
.
PINGANBANK_OUTACCTNAME
);
// 付款人名称 付款账户户名
jsonObject
.
put
(
"OutAcctAddr"
,
"34343"
);
// 付款人地址 建议填写付款账户的分行、网点名称 非必输
jsonObject
.
put
(
"InAcctBankNode"
,
cardEntity
.
getBelongBank
());
// 收款人开户行行号 跨行转账建议必输。为人行登记在册的商业银行号
jsonObject
.
put
(
"InAcctNo"
,
cardEntity
.
getCardNo
());
// 收款人账户
jsonObject
.
put
(
"InAcctName"
,
userEntity
.
getUserDetail
().
getRealName
());
// 收款人账户户名
jsonObject
.
put
(
"InAcctBankName"
,
cardEntity
.
getBankName
());
// 收款人开户行名称
jsonObject
.
put
(
"TranAmount"
,
request
.
getAmount
());
// 转出金额 如为XML报文,则直接输入输出以元为单位的浮点数值,如2.50 (两元五角)
jsonObject
.
put
(
"UseEx"
,
"ZZZZZtestreturn"
);
// 资金用途 30个汉字。现金管理代理结算 非必输
jsonObject
.
put
(
"UnionFlag"
,
cardEntity
.
getBelongBank
().
equals
(
ComCode
.
PINGANBANK_OUTACCTBANK
)?
1
:
0
);
// 行内跨行标志 1:行内转账,0:跨行转账
jsonObject
.
put
(
"SysFlag"
,
"1"
);
// Y:加急 N:普通S:特急默认为N
jsonObject
.
put
(
"AddrFlag"
,
"1"
);
// 同城/异地标志 “1”—同城 “2”—异地;若无法区分,可默认送1-同城。
JSONObject
result
=
pingAnBankService
.
singleTransfer
(
dto
,
jsonObject
);
if
(
result
.
get
(
"all"
)
!=
null
){
String
str
=
result
.
getString
(
"all"
);
String
reg
=
"[^\u4e00-\u9fa5]"
;
str
=
str
.
replaceAll
(
reg
,
" "
);
str
=
str
.
trim
();
System
.
out
.
println
(
str
);
response
.
setMessage
(
str
);
response
.
setStatus
(
ComCode
.
STATUS_CODE_9998
);
return
response
;
JSONObject
result
=
pingAnBankService
.
singleTransfer
(
dto
,
jsonObject
);
Response
response
=
new
Response
();
if
(
result
.
get
(
"all"
)
!=
null
){
String
str
=
result
.
getString
(
"all"
);
String
reg
=
"[^\u4e00-\u9fa5]"
;
str
=
str
.
replaceAll
(
reg
,
" "
);
str
=
str
.
trim
();
System
.
out
.
println
(
str
);
response
.
setMessage
(
str
);
response
.
setStatus
(
ComCode
.
STATUS_CODE_9998
);
}
// response.setMessage(str);
response
.
setStatus
(
ComCode
.
STATUS_CODE_2000
);
return
response
;
}
// response.setMessage(str);
response
.
setStatus
(
ComCode
.
STATUS_CODE_2000
);
response
.
setStatus
(
ComCode
.
STATUS_CODE_9998
);
response
.
setMessage
(
"余额不足"
);
return
response
;
}
...
...
@@ -1110,12 +1130,10 @@ public class PayApiService {
order
.
setPayStatus
(
"2"
);
payDao
.
updateOrderStatus
(
order
);
// 添加提现记录
String
benefitCode
=
IdGen
.
randomBase62
(
64
);
BenefitEntity
benefitEntity
=
new
BenefitEntity
(
benefitCode
,
order
.
getUserCode
(),
order
.
getPayCode
(),
order
.
getPayChannel
(),
"0"
,
"M"
,
order
.
getAmount
(),
order
.
getCardCode
());
// benefitEntity.setAmount(String.valueOf(Double.valueOf(benefitEntity.getAmount())));
benefitEntity
.
setPayMethod
(
orderEntity
.
getPayMethod
());
payDao
.
saveBenefitInfo
(
benefitEntity
);
BenefitEntity
benefitEntity
=
new
BenefitEntity
();
benefitEntity
.
setOrderCode
(
order
.
getPayCode
());
benefitEntity
.
setDelFlag
(
"1"
);
payDao
.
deleteBenefit
(
benefitEntity
);
}
}
...
...
@@ -1126,4 +1144,21 @@ public class PayApiService {
}
}
public
JSONObject
queryForward
(
String
payCode
)
throws
Exception
{
// 查询单笔转账
PingAnBankDto
dto
=
new
PingAnBankDto
();
dto
.
setOrderCode
(
payCode
);
dto
.
setEnterprisecode
(
ComCode
.
PINGANBANK_ENTERPRISECODE
);
JSONObject
jsonObject
=
new
JSONObject
();
jsonObject
.
put
(
"OrigThirdVoucher"
,
payCode
);
// 转账凭证号 推荐使用;使用4004接口上送的ThirdVoucher或者4014上送的SThirdVoucher
JSONObject
jsonObject1
=
pingAnBankService
.
querySingleTransfer
(
dto
,
jsonObject
);
return
jsonObject1
;
}
}
src/main/resources/youka.properties
View file @
3a7c6412
...
...
@@ -168,5 +168,5 @@ pinganbank.outacctname = 天津盛世互通网络科技有限公司
pinganbank.outacctbank
=
307110004315
## 企业银行代码
pinganbank.b2bicurl
=
http://
39.107.124.166
:7072
pinganbank.b2bicurl
=
http://
127.0.0.1
:7072
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