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
1203dd4c
Commit
1203dd4c
authored
May 24, 2018
by
Java-聂换换
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
提现
parent
5b37019a
Hide whitespace changes
Inline
Side-by-side
Showing
11 changed files
with
614 additions
and
42 deletions
+614
-42
ComCode.java
src/main/java/com/thinkgem/jeesite/common/constant/ComCode.java
+22
-0
DateUtils.java
src/main/java/com/thinkgem/jeesite/common/utils/DateUtils.java
+15
-0
PayApiController.java
src/main/java/com/thinkgem/jeesite/modules/pay/api/PayApiController.java
+21
-0
PingAnBankService.java
src/main/java/com/thinkgem/jeesite/modules/pay/pinganbank/PingAnBankService.java
+170
-15
PingAnBankDto.java
src/main/java/com/thinkgem/jeesite/modules/pay/pinganbank/dto/PingAnBankDto.java
+52
-0
PingAnBankUtils.java
src/main/java/com/thinkgem/jeesite/modules/pay/pinganbank/util/PingAnBankUtils.java
+84
-0
XmlUtil.java
src/main/java/com/thinkgem/jeesite/modules/pay/pinganbank/util/XmlUtil.java
+91
-0
PayApiService.java
src/main/java/com/thinkgem/jeesite/modules/pay/service/PayApiService.java
+132
-25
DictDao.xml
src/main/resources/mappings/modules/sys/DictDao.xml
+2
-1
UserDao.xml
src/main/resources/mappings/modules/user/UserDao.xml
+3
-1
youka.properties
src/main/resources/youka.properties
+22
-0
No files found.
src/main/java/com/thinkgem/jeesite/common/constant/ComCode.java
View file @
1203dd4c
...
...
@@ -151,4 +151,26 @@ public class ComCode {
public
static
final
String
PAYCHANNEL_HL2
=
"quick_jfen"
;
public
static
final
String
PAYCHANNEL_HL3
=
"quick_integral"
;
public
static
final
String
PAYCHANNEL_HUANQIUHUIJU
=
"quick_huanqiuhuiju"
;
/**
* 支付方式
*/
public
static
final
String
PAYMETHOD_QUICK
=
"quick"
;
public
static
final
String
PAYMETHOD_WX
=
"wx"
;
public
static
final
String
PAYMETHOD_ALI
=
"ali"
;
public
static
final
String
PAYMETHOD_PUTFORWARD
=
"put_forward"
;
/**
* 平安银行
*/
public
static
final
String
PINGANBANK_ENTERPRISECODE
=
Global
.
getConfig
(
"pinganbank.enterprisecode"
);
// 企业代码
public
static
final
String
PINGANBANK_ACCOUNT
=
Global
.
getConfig
(
"pinganbank.account"
);
// 企业账号
public
static
final
String
PINGANBANK_OUTACCTNO
=
Global
.
getConfig
(
"pinganbank.outacctno"
);
// 企业的付款人账号
public
static
final
String
PINGANBANK_OUTACCTNAME
=
Global
.
getConfig
(
"pinganbank.outacctname"
);
// 企业的付款人账号
public
static
final
String
PINGANBANK_OUTACCTBANK
=
Global
.
getConfig
(
"pinganbank.outacctbank"
);
// 企业银行代码
public
static
final
String
PINGANBANK_B2BICURL
=
Global
.
getConfig
(
"pinganbank.b2bicurl"
);
// 企业银行代码
}
src/main/java/com/thinkgem/jeesite/common/utils/DateUtils.java
View file @
1203dd4c
...
...
@@ -239,6 +239,21 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils {
}
/**
* 获取自定义昨天日期
* @param month 月份
* @return Date
*/
public
static
String
getDateByDay
(
String
pattern
,
int
day
)
{
SimpleDateFormat
dateFormat
=
new
SimpleDateFormat
(
pattern
);
Calendar
calendar
=
Calendar
.
getInstance
(
);
Date
date
=
new
Date
();
calendar
.
setTime
(
date
);
calendar
.
add
(
Calendar
.
DATE
,
day
);
return
dateFormat
.
format
(
calendar
.
getTime
(
)
);
}
/**
* 获取当月第一天
*
* @param yyyy-mm-dd
...
...
src/main/java/com/thinkgem/jeesite/modules/pay/api/PayApiController.java
View file @
1203dd4c
...
...
@@ -151,6 +151,27 @@ public class PayApiController {
return
resp
;
}
/**
* 提现
*
* @param request
* @return
*/
@PostMapping
(
"/putForward"
)
public
Response
putForward
(
JuHeZhongPayRequest
request
)
{
Response
resp
=
new
Response
();
try
{
return
payService
.
putForward
(
request
);
}
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
...
...
src/main/java/com/thinkgem/jeesite/modules/pay/pinganbank/PingAnBankService.java
View file @
1203dd4c
package
com
.
thinkgem
.
jeesite
.
modules
.
pay
.
pinganbank
;
import
com.alibaba.fastjson.JSONObject
;
import
com.thinkgem.jeesite.common.utils.DateUtils
;
import
com.thinkgem.jeesite.common.utils.IdGen
;
import
com.thinkgem.jeesite.common.utils.StringUtils
;
import
com.thinkgem.jeesite.modules.pay.pinganbank.dto.PingAnBankDto
;
import
com.thinkgem.jeesite.modules.pay.pinganbank.util.PingAnBankUtils
;
import
com.thinkgem.jeesite.modules.pay.pinganbank.util.XmlUtil
;
import
org.apache.commons.httpclient.HttpClient
;
import
org.apache.commons.httpclient.methods.PostMethod
;
import
org.apache.commons.httpclient.methods.StringRequestEntity
;
import
org.springframework.stereotype.Service
;
import
org.springframework.transaction.annotation.Transactional
;
import
java.io.UnsupportedEncodingException
;
import
java.util.Date
;
@Service
@Transactional
public
class
PingAnBankService
{
/**
* 查询余额
* @param dto
* @return
* @throws Exception
*/
public
JSONObject
queryBalance
(
PingAnBankDto
dto
)
throws
Exception
{
JSONObject
jsonObject
=
new
JSONObject
();
jsonObject
.
put
(
"Account"
,
dto
.
getAccount
());
jsonObject
.
put
(
"CcyCode"
,
dto
.
getCcyCode
());
String
body
=
XmlUtil
.
JsonBean2XmlString
(
jsonObject
);
String
head
=
PingAnBankUtils
.
getHead
(
body
,
dto
.
getEnterprisecode
(),
"4001"
,
dto
.
getOrderCode
());
JSONObject
json
=
PingAnBankUtils
.
post
(
head
+
body
);
return
json
;
}
/**
* 单笔转账
* @param dto
* @return
* @throws Exception
*/
public
JSONObject
singleTransfer
(
PingAnBankDto
dto
,
JSONObject
jsonObject
)
throws
Exception
{
String
body
=
XmlUtil
.
JsonBean2XmlString
(
jsonObject
);
String
head
=
PingAnBankUtils
.
getHead
(
body
,
dto
.
getEnterprisecode
(),
"4004"
,
dto
.
getOrderCode
());
JSONObject
json
=
PingAnBankUtils
.
post
(
head
+
body
);
return
json
;
}
/**
* 查询单笔转账结果
* @param dto
* @return
* @throws Exception
*/
public
JSONObject
querySingleTransfer
(
PingAnBankDto
dto
,
JSONObject
jsonObject
)
throws
Exception
{
String
body
=
XmlUtil
.
JsonBean2XmlString
(
jsonObject
);
String
head
=
PingAnBankUtils
.
getHead
(
body
,
dto
.
getEnterprisecode
(),
"4005"
,
dto
.
getOrderCode
());
JSONObject
json
=
PingAnBankUtils
.
post
(
head
+
body
);
return
json
;
}
public
static
void
main
(
String
args
[])
throws
Exception
{
// 余额
// PingAnBankService pingAnBankService = new PingAnBankService();
// PingAnBankDto dto = new PingAnBankDto();
// dto.setOrderCode(IdGen.randomBase62(20));
// dto.setEnterprisecode("00103082100008003000");
// dto.setCcyCode("RMB");
// dto.setAccount("11002923034501");
// pingAnBankService.queryBalance(dto);
// 单笔转账
PingAnBankService
pingAnBankService
=
new
PingAnBankService
();
PingAnBankDto
dto
=
new
PingAnBankDto
();
dto
.
setOrderCode
(
IdGen
.
randomBase62
(
20
));
dto
.
setEnterprisecode
(
"00103082100008003000"
);
JSONObject
jsonObject
=
new
JSONObject
();
// <ThirdVoucher>20100811153405</ThirdVoucher>
// <CcyCode>RMB</CcyCode>
// <OutAcctNo>11002873403401</OutAcctNo>
// <OutAcctName>ebt</OutAcctName>
// <OutAcctAddr>34343</OutAcctAddr>
// <InAcctBankNode/><InAcctRecCode/>
// <InAcctNo>11002873390701</InAcctNo>
// <InAcctName>EBANK</InAcctName>
// <InAcctBankName>anything</InAcctBankName>
// <TranAmount>000.01</TranAmount>
// <UseEx>ZZZZZtestreturn</UseEx>
// <UnionFlag>1</UnionFlag>
// <SysFlag>2</SysFlag>
// <AddrFlag>1</AddrFlag>
// <RealFlag>2</RealFlag>
// <MainAcctNo/>
jsonObject
.
put
(
"ThirdVoucher"
,
"20100811153405"
);
// 转账凭证号 标示交易唯一性,同一客户上送的不可重复,建议格式:yyyymmddHHSS+8位系列
jsonObject
.
put
(
"CcyCode"
,
"RMB"
);
// 货币类型 RMB-人民币
jsonObject
.
put
(
"OutAcctNo"
,
"11002873403401"
);
// 付款人账户 扣款账户
jsonObject
.
put
(
"OutAcctName"
,
"ebt"
);
// 付款人名称 付款账户户名
jsonObject
.
put
(
"OutAcctAddr"
,
"34343"
);
// 付款人地址 建议填写付款账户的分行、网点名称 非必输
jsonObject
.
put
(
"OutAcctNo"
,
"11002873403401"
);
// 付款人账户 扣款账户
jsonObject
.
put
(
"InAcctBankNode"
,
"11002873403401"
);
// 收款人开户行行号 跨行转账建议必输。为人行登记在册的商业银行号
jsonObject
.
put
(
"InAcctNo"
,
"11002873390701"
);
// 收款人账户
jsonObject
.
put
(
"InAcctName"
,
"EBANK"
);
// 收款人账户户名
jsonObject
.
put
(
"InAcctBankName"
,
"anything"
);
// 收款人开户行名称
jsonObject
.
put
(
"TranAmount"
,
"000.01"
);
// 转出金额 如为XML报文,则直接输入输出以元为单位的浮点数值,如2.50 (两元五角)
jsonObject
.
put
(
"UseEx"
,
"ZZZZZtestreturn"
);
// 资金用途 30个汉字。现金管理代理结算 非必输
jsonObject
.
put
(
"UnionFlag"
,
"1"
);
// 行内跨行标志 1:行内转账,0:跨行转账
jsonObject
.
put
(
"SysFlag"
,
"2"
);
// Y:加急 N:普通S:特急默认为N
jsonObject
.
put
(
"AddrFlag"
,
"1"
);
// 同城/异地标志 “1”—同城 “2”—异地;若无法区分,可默认送1-同城。
pingAnBankService
.
singleTransfer
(
dto
,
jsonObject
);
// 查询单笔转账
// PingAnBankService pingAnBankService = new PingAnBankService();
// PingAnBankDto dto = new PingAnBankDto();
// dto.setOrderCode(IdGen.randomBase62(20));
// dto.setEnterprisecode("00103082100008003000");
// JSONObject jsonObject = new JSONObject();
//
//
// jsonObject.put("OrigThirdVoucher","20100811153405"); // 转账凭证号 推荐使用;使用4004接口上送的ThirdVoucher或者4014上送的SThirdVoucher
//
// pingAnBankService.querySingleTransfer(dto,jsonObject);
// String url = "http://127.0.0.1:7072/";
// String xml = "";
// HttpUtil.postXml(url,xml);
// 00202043000000326000 企业码
String
res
=
"A0010102010020204300000032600000000001084014 0120100809171028 2010080981026055 00000 0<?xml version=\"1.0\" encoding=\"GBK\"?><Result><Account>11002873390701</Account><CcyCode>RMB</CcyCode></Result>"
;
PostMethod
postMethod
=
new
PostMethod
(
"http://127.0.0.1:7072"
);
postMethod
.
setRequestEntity
(
new
StringRequestEntity
(
res
,
"text/html"
,
"UTF-8"
));
postMethod
.
setRequestHeader
(
"Content-Type"
,
"text/xml; charset=UTF-8"
);
HttpClient
httpClient
=
new
HttpClient
();
int
resultint
=
httpClient
.
executeMethod
(
postMethod
);
res
=
new
String
(
postMethod
.
getResponseBody
(),
"UTF-8"
);
System
.
out
.
println
(
"http response:"
+
res
);
postMethod
.
releaseConnection
();
System
.
out
.
println
(
resultint
);
// String res = "A0010102020020204300000032600000000001084001 0120100809171028 2010080981026055 00000 0<?xml version=\"1.0\" encoding=\"GBK\"?><Result><Account>11002873390701</Account><CcyCode>RMB</CcyCode></Result>";
// String s = "<?xml version=\"1.0\" encoding=\"GBK\"?><Result><Account>11002923034501</Account><CcyCode>RMB</CcyCode></Result>";
// System.out.println(s.getBytes("GBK").length+"");
//// String code = "00202043000000326000";
// String code = "00103082100008003000";
// String res = "A0010102020010308210000800300000000001084001 123450120120620151810201206180000011037 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"+s;
// System.out.println(PingAnBankUtils.getBobyLength("<?xml version=\"1.0\" encoding=\"GB2312\"?><Result><ThirdVoucher>20100811153405</ThirdVoucher><CcyCode>RMB</CcyCode><OutAcctNo>11002873403401</OutAcctNo><OutAcctName>ebt</OutAcctName><OutAcctAddr>34343</OutAcctAddr><InAcctBankNode/><InAcctRecCode/><InAcctNo>11002873390701</InAcctNo><InAcctName>EBANK</InAcctName><InAcctBankName>anything</InAcctBankName><TranAmount>000.01</TranAmount><AmountCode/><UseEx>ZZZZZtestreturn</UseEx><UnionFlag>1</UnionFlag><SysFlag>2</SysFlag><AddrFlag>1</AddrFlag><RealFlag>2</RealFlag><MainAcctNo/></Result>"));
// String res = "A0010102020010308210000800300000000005344004 123450120120620151810201206180000011037 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000<?xml version=\"1.0\" encoding=\"GB2312\"?><Result><ThirdVoucher>20100811153405</ThirdVoucher><CcyCode>RMB</CcyCode><OutAcctNo>11002873403401</OutAcctNo><OutAcctName>ebt</OutAcctName><OutAcctAddr>34343</OutAcctAddr><InAcctBankNode/><InAcctRecCode/><InAcctNo>11002873390701</InAcctNo><InAcctName>EBANK</InAcctName><InAcctBankName>anything</InAcctBankName><TranAmount>000.01</TranAmount><AmountCode/><UseEx>ZZZZZtestreturn</UseEx><UnionFlag>1</UnionFlag><SysFlag>2</SysFlag><AddrFlag>1</AddrFlag><RealFlag>2</RealFlag><MainAcctNo/></Result>";
// PostMethod postMethod = new PostMethod(
// "http://127.0.0.1:7072");
//
// postMethod.setRequestEntity(new StringRequestEntity(
// res, "text/html", "UTF-8"));
// postMethod.setRequestHeader("Content-Type",
// "text/xml; charset=UTF-8");
//
// HttpClient httpClient = new HttpClient();
// int resultint = httpClient.executeMethod(postMethod);
// res = new String(postMethod.getResponseBody(),"UTF-8");
// System.out.println("http response:" + res);
// postMethod.releaseConnection();
// System.out.println(resultint);
System
.
out
.
println
(
new
String
(
"浼佷笟鍓嶇疆鏈嶅姟宸插惎鍔?"
.
getBytes
(
"GBK"
)).
toString
());
}
}
src/main/java/com/thinkgem/jeesite/modules/pay/pinganbank/dto/PingAnBankDto.java
0 → 100644
View file @
1203dd4c
package
com
.
thinkgem
.
jeesite
.
modules
.
pay
.
pinganbank
.
dto
;
public
class
PingAnBankDto
{
private
String
account
;
// 账号
private
String
ccyCode
;
// 货币类型 RMB 人民币,USD 美元,HKD 港币, 默认为RMB
private
String
ccyType
;
// 钞汇标志 C 钞户, R汇户,默认为C。
private
String
enterprisecode
;
private
String
orderCode
;
public
String
getAccount
()
{
return
account
;
}
public
void
setAccount
(
String
account
)
{
this
.
account
=
account
;
}
public
String
getCcyCode
()
{
return
ccyCode
;
}
public
void
setCcyCode
(
String
ccyCode
)
{
this
.
ccyCode
=
ccyCode
;
}
public
String
getCcyType
()
{
return
ccyType
;
}
public
void
setCcyType
(
String
ccyType
)
{
this
.
ccyType
=
ccyType
;
}
public
String
getEnterprisecode
()
{
return
enterprisecode
;
}
public
void
setEnterprisecode
(
String
enterprisecode
)
{
this
.
enterprisecode
=
enterprisecode
;
}
public
String
getOrderCode
()
{
return
orderCode
;
}
public
void
setOrderCode
(
String
orderCode
)
{
this
.
orderCode
=
orderCode
;
}
}
src/main/java/com/thinkgem/jeesite/modules/pay/pinganbank/util/PingAnBankUtils.java
0 → 100644
View file @
1203dd4c
package
com
.
thinkgem
.
jeesite
.
modules
.
pay
.
pinganbank
.
util
;
import
com.alibaba.fastjson.JSONObject
;
import
com.fasterxml.jackson.annotation.JsonBackReference
;
import
com.thinkgem.jeesite.common.constant.ComCode
;
import
com.thinkgem.jeesite.common.utils.DateUtils
;
import
com.thinkgem.jeesite.common.utils.IdGen
;
import
com.thinkgem.jeesite.common.utils.StringUtils
;
import
org.apache.commons.httpclient.HttpClient
;
import
org.apache.commons.httpclient.methods.PostMethod
;
import
org.apache.commons.httpclient.methods.StringRequestEntity
;
import
org.jdom2.JDOMException
;
import
java.io.IOException
;
import
java.io.UnsupportedEncodingException
;
import
java.util.Date
;
public
class
PingAnBankUtils
{
public
static
String
getBobyLength
(
String
boby
)
throws
UnsupportedEncodingException
{
String
length
=
boby
.
getBytes
(
"GBK"
).
length
+
""
;
int
sub
=
10
-
length
.
length
()
;
StringBuffer
sb
=
new
StringBuffer
();
for
(
int
i
=
0
;
i
<
sub
;
i
++){
sb
.
append
(
"0"
);
}
sb
.
append
(
length
);
return
sb
.
toString
();
}
public
static
String
getHead
(
String
boby
,
String
enterprisecode
,
String
transactionCode
,
String
orderCode
)
throws
UnsupportedEncodingException
{
StringBuffer
sb
=
new
StringBuffer
();
sb
.
append
(
"A001010102"
)
.
append
(
enterprisecode
)
.
append
(
PingAnBankUtils
.
getBobyLength
(
boby
))
.
append
(
transactionCode
)
.
append
(
" "
)
.
append
(
"0000001"
)
.
append
(
DateUtils
.
formatDate
(
new
Date
(),
"yyyymmddhhmmss"
));
// 时间
if
(
StringUtils
.
isBlank
(
orderCode
)){
orderCode
=
IdGen
.
randomBase62
(
20
);
}
sb
.
append
(
orderCode
)
// 交易码
.
append
(
"000000"
)
//返回码 请求时必须填写 000000 非“000000”代表交易受理异常或失败
.
append
(
"00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000RSA-SHA100000000000"
)
.
append
(
boby
.
toString
());
System
.
out
.
println
(
sb
.
toString
());
return
sb
.
toString
();
}
public
static
JSONObject
post
(
String
parma
)
throws
IOException
,
JDOMException
{
// 目前是本地的服务 等服务器好了之后
PostMethod
postMethod
=
new
PostMethod
(
ComCode
.
PINGANBANK_B2BICURL
);
postMethod
.
setRequestEntity
(
new
StringRequestEntity
(
parma
,
"text/html"
,
"GBK"
));
postMethod
.
setRequestHeader
(
"Content-Type"
,
"text/xml; charset=GBK"
);
HttpClient
httpClient
=
new
HttpClient
();
int
resultint
=
httpClient
.
executeMethod
(
postMethod
);
System
.
out
.
println
(
postMethod
.
getResponseBody
());
String
res
=
new
String
(
postMethod
.
getResponseBody
(),
"GBK"
);
System
.
out
.
println
(
"http response:"
+
res
);
postMethod
.
releaseConnection
();
System
.
out
.
println
(
resultint
);
if
(
res
.
contains
(
"<"
)){
System
.
out
.
println
(
res
.
substring
(
res
.
indexOf
(
"<"
)));
JSONObject
json
=
XmlUtil
.
xml2JSON
(
res
.
substring
(
res
.
indexOf
(
"<"
)).
getBytes
());
System
.
out
.
println
(
json
.
toJSONString
());
return
json
;
}
JSONObject
jsonObject
=
new
JSONObject
();
jsonObject
.
put
(
"all"
,
res
);
return
jsonObject
;
}
}
src/main/java/com/thinkgem/jeesite/modules/pay/pinganbank/util/XmlUtil.java
0 → 100644
View file @
1203dd4c
package
com
.
thinkgem
.
jeesite
.
modules
.
pay
.
pinganbank
.
util
;
import
com.alibaba.fastjson.JSONObject
;
import
org.jdom2.Element
;
import
org.jdom2.JDOMException
;
import
org.jdom2.input.SAXBuilder
;
import
java.io.ByteArrayInputStream
;
import
java.io.IOException
;
import
java.io.InputStream
;
import
java.util.LinkedList
;
import
java.util.List
;
public
class
XmlUtil
{
public
static
JSONObject
xml2JSON
(
byte
[]
xml
)
throws
JDOMException
,
IOException
{
JSONObject
json
=
new
JSONObject
();
InputStream
is
=
new
ByteArrayInputStream
(
xml
);
SAXBuilder
sb
=
new
SAXBuilder
();
org
.
jdom2
.
Document
doc
=
sb
.
build
(
is
);
Element
root
=
doc
.
getRootElement
();
json
.
put
(
root
.
getName
(),
iterateElement
(
root
));
return
json
;
}
private
static
JSONObject
iterateElement
(
Element
element
)
{
List
node
=
element
.
getChildren
();
Element
et
=
null
;
JSONObject
obj
=
new
JSONObject
();
List
list
=
null
;
for
(
int
i
=
0
;
i
<
node
.
size
();
i
++)
{
list
=
new
LinkedList
();
et
=
(
Element
)
node
.
get
(
i
);
if
(
et
.
getTextTrim
().
equals
(
""
))
{
if
(
et
.
getChildren
().
size
()
==
0
)
continue
;
if
(
obj
.
containsKey
(
et
.
getName
()))
{
list
=
(
List
)
obj
.
get
(
et
.
getName
());
}
list
.
add
(
iterateElement
(
et
));
obj
.
put
(
et
.
getName
(),
list
);
}
else
{
if
(
obj
.
containsKey
(
et
.
getName
()))
{
list
=
(
List
)
obj
.
get
(
et
.
getName
());
}
list
.
add
(
et
.
getTextTrim
());
obj
.
put
(
et
.
getName
(),
list
);
}
}
return
obj
;
}
/**
* JsonObject转换成xml
*
* @param json
* @return
*/
public
static
String
JsonBean2XmlString
(
JSONObject
json
){
System
.
out
.
println
(
"JsonBean转换成xml:"
);
System
.
out
.
println
(
"json:"
+
json
);
StringBuffer
sb
=
new
StringBuffer
(
"<?xml version=\"1.0\" encoding=\"GBK\"?><Result>"
);
for
(
Object
key
:
json
.
keySet
()){
sb
.
append
(
"<"
).
append
(
key
).
append
(
">"
);
Object
value
=
json
.
get
(
key
);
//判断value是否含有JSONArray
try
{
JSONObject
jsonV
=
((
JSONObject
)
value
);
for
(
Object
key2
:
jsonV
.
keySet
()){
sb
.
append
(
"<"
).
append
(
key2
).
append
(
">"
);
Object
value2
=
jsonV
.
get
(
key2
);
sb
.
append
(
value2
);
sb
.
append
(
"</"
).
append
(
key2
).
append
(
">"
);
}
}
catch
(
Exception
e
){
sb
.
append
(
value
);
}
sb
.
append
(
"</"
).
append
(
key
).
append
(
">"
);
}
sb
.
append
(
"</Result>"
);
return
sb
.
toString
();
}
public
static
void
main
(
String
[]
args
)
throws
JDOMException
,
IOException
{
String
xml
=
"<?xml version=\"1.0\" encoding=\"utf-8\" ?><MoBaoAccount MessageType=\"UserMobilePay\" PlatformID=\"b2ctest\"><OrderNo>M20150521084825</OrderNo><TradeAmt>5000.00</TradeAmt><Commission>0.5</Commission><UserID>zhuxiaolong</UserID><MerchID>zhuxiaolong1</MerchID><tradeType>0</tradeType><CustParam>123</CustParam> <NotifyUrl>http://mobaopay.com/callback.do</NotifyUrl><TradeSummary>订单</TradeSummary></MoBaoAccount>"
;
JSONObject
json
=
xml2JSON
(
xml
.
getBytes
());
System
.
out
.
println
(
json
.
toJSONString
());
System
.
out
.
println
(
JsonBean2XmlString
(
json
));
}
}
src/main/java/com/thinkgem/jeesite/modules/pay/service/PayApiService.java
View file @
1203dd4c
...
...
@@ -8,6 +8,7 @@ import com.thinkgem.jeesite.common.config.Global;
import
com.thinkgem.jeesite.common.constant.ComCode
;
import
com.thinkgem.jeesite.common.utils.DateUtils
;
import
com.thinkgem.jeesite.common.utils.IdGen
;
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
;
...
...
@@ -24,6 +25,8 @@ import com.thinkgem.jeesite.modules.pay.juhezhong.service.JuHeZhongPayIntegralSe
import
com.thinkgem.jeesite.modules.pay.juhezhong.service.JuHeZhongPayJFenService
;
import
com.thinkgem.jeesite.modules.pay.juhezhong.service.JuHeZhongPayService
;
import
com.thinkgem.jeesite.modules.pay.juhezhong.utils.MakeOrderNum
;
import
com.thinkgem.jeesite.modules.pay.pinganbank.PingAnBankService
;
import
com.thinkgem.jeesite.modules.pay.pinganbank.dto.PingAnBankDto
;
import
com.thinkgem.jeesite.modules.sys.entity.Dict
;
import
com.thinkgem.jeesite.modules.sys.service.SystemService
;
import
com.thinkgem.jeesite.modules.sys.utils.DictUtils
;
...
...
@@ -71,6 +74,9 @@ public class PayApiService {
@Autowired
private
AlipayService
alipayService
;
@Autowired
private
PingAnBankService
pingAnBankService
;
/**
* 快捷支付(分为不同的渠道)
...
...
@@ -841,6 +847,73 @@ public class PayApiService {
/**
* 提现
* @param request
* @return
* @throws AlipayApiException
*/
@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
);
// 2. 创建支付订单信息,并保存
String
code
=
IdGen
.
randomBase62
(
64
);
String
payNo
=
ComCode
.
YYYYMMDDHHMM
.
format
(
new
Date
())
+
IdGen
.
randomBase62
(
8
);
// 订单号
String
payCode
=
IdGen
.
randomBase62
(
20
);
OrderEntity
orderEntity
=
new
OrderEntity
(
code
,
request
.
getSubMerchantCode
(),
payNo
,
payCode
,
ComCode
.
PAYMETHOD_PUTFORWARD
,
ComCode
.
PAYMETHOD_PUTFORWARD
,
"1"
,
request
.
getAmount
()
,
"提现"
,
""
,
"0"
,
request
.
getCardCode
());
payDao
.
saveOrderInfo
(
orderEntity
);
// 平安银行转账
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
);
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
);
return
response
;
}
// response.setMessage(str);
response
.
setStatus
(
ComCode
.
STATUS_CODE_2000
);
return
response
;
}
/**
* 回调
* @param orderEntity
* @return
...
...
@@ -957,11 +1030,14 @@ public class PayApiService {
return
payDao
.
getOrder
(
orderEntity
);
}
/**
* 交易超过7天则修改为交易失败
*/
@Transactional
(
readOnly
=
false
)
public
void
updateOrderTiming
(){
// System.out.println("。。。。。。。定时任务。updateOrderTiming开始。。。。");
OrderEntity
orderEntity
=
new
OrderEntity
();
orderEntity
.
setEndTime
(
DateUtils
.
get
Yesterday
(
DateUtils
.
getYesterday
(
"yyyy-MM-dd HH:mm:ss"
)
));
orderEntity
.
setEndTime
(
DateUtils
.
get
DateByDay
(
"yyyy-MM-dd HH:mm:ss"
,-
7
));
List
<
OrderEntity
>
list
=
payDao
.
getOrderListTimeing
(
orderEntity
);
for
(
OrderEntity
order:
list
){
order
.
setPayStatus
(
"3"
);
...
...
@@ -973,50 +1049,81 @@ public class PayApiService {
// System.out.println("。。。。。。。定时任务。updateOrderTiming结束。。。。");
}
/*
* 查询交易的状态并修改
*/
@Transactional
(
readOnly
=
false
)
public
void
updateOrders
(){
// System.out.println("。。。。。。。定时任务。updateOrders开始。。。。");
try
{
OrderEntity
orderEntity
=
new
OrderEntity
();
orderEntity
.
setStartTime
(
DateUtils
.
get
Yesterday
(
DateUtils
.
getYesterday
(
"yyyy-MM-dd HH:mm:ss"
)
));
orderEntity
.
setStartTime
(
DateUtils
.
get
DateByDay
(
"yyyy-MM-dd HH:mm:ss"
,-
7
));
orderEntity
.
setEndTime
(
DateUtils
.
formatDate
(
DateUtils
.
addHours
(
new
Date
(),-
12
),
"yyyy-MM-dd HH:mm:ss"
));
List
<
OrderEntity
>
list
=
payDao
.
getOrderListTimeing
(
orderEntity
);
for
(
OrderEntity
order:
list
){
QuickDto
dto
=
new
QuickDto
();
dto
.
setOrderId
(
order
.
getPayCode
());
dto
.
setTimestamp
(
System
.
currentTimeMillis
());
JSONObject
jsonObject
=
null
;
if
(
ComCode
.
PAYCHANNEL_HL3
.
equals
(
order
.
getPayChannel
())){
dto
.
setMerchantId
(
ComCode
.
MERCHANT_ID
);
dto
.
setMerchantKey
(
ComCode
.
MERCHANT_KEY
);
// 快捷支付
if
(
"quick"
.
equals
(
order
.
getPayMethod
())){
QuickDto
dto
=
new
QuickDto
();
dto
.
setOrderId
(
order
.
getPayCode
());
jsonObject
=
juHeZhongPayIntegralService
.
query
(
dto
);
dto
.
setTimestamp
(
System
.
currentTimeMillis
());
JSONObject
jsonObject
=
null
;
if
(
ComCode
.
PAYCHANNEL_HL3
.
equals
(
order
.
getPayChannel
())){
dto
.
setMerchantId
(
ComCode
.
MERCHANT_ID
);
dto
.
setMerchantKey
(
ComCode
.
MERCHANT_KEY
);
}
else
if
(
ComCode
.
PAYCHANNEL_HL1
.
equals
(
order
.
getPayChannel
())){
jsonObject
=
juHeZhongPayService
.
query
(
dto
);
}
if
(
jsonObject
!=
null
){
jsonObject
=
juHeZhongPayIntegralService
.
query
(
dto
);
}
else
if
(
ComCode
.
PAYCHANNEL_HL1
.
equals
(
order
.
getPayChannel
())){
jsonObject
=
juHeZhongPayService
.
query
(
dto
);
}
if
(
jsonObject
!=
null
){
// System.out.println("查询订单返回结果:"+jsonObject.toJSONString());
// 支付成功
if
(
"0000"
.
equals
(
jsonObject
.
get
(
"code"
))){
System
.
out
.
println
(
"查询订单返回结果:"
+
jsonObject
.
toJSONString
());
// 支付成功
if
(
"0000"
.
equals
(
jsonObject
.
get
(
"code"
))){
System
.
out
.
println
(
"查询订单返回结果:"
+
jsonObject
.
toJSONString
());
order
.
setPayStatus
(
"2"
);
payDao
.
updateOrderStatus
(
order
);
}
else
{
// 支付失败
order
.
setPayStatus
(
"4"
);
payDao
.
updateOrderStatus
(
order
);
BenefitEntity
benefitEntity
=
new
BenefitEntity
();
benefitEntity
.
setOrderCode
(
order
.
getPayCode
());
benefitEntity
.
setDelFlag
(
"1"
);
payDao
.
deleteBenefit
(
benefitEntity
);
}
}
}
else
if
(
"put_forward"
.
equals
(
order
.
getPayMethod
())){
// 提现
// 查询单笔转账
PingAnBankDto
dto
=
new
PingAnBankDto
();
dto
.
setOrderCode
(
IdGen
.
randomBase62
(
20
));
dto
.
setEnterprisecode
(
ComCode
.
PINGANBANK_ENTERPRISECODE
);
JSONObject
jsonObject
=
new
JSONObject
();
jsonObject
.
put
(
"OrigThirdVoucher"
,
order
.
getPayCode
());
// 转账凭证号 推荐使用;使用4004接口上送的ThirdVoucher或者4014上送的SThirdVoucher
JSONObject
jsonObject1
=
pingAnBankService
.
querySingleTransfer
(
dto
,
jsonObject
);
if
(
"20"
.
equals
(
jsonObject1
.
getString
(
"Stt"
))){
// 交易成功
order
.
setPayStatus
(
"2"
);
payDao
.
updateOrderStatus
(
order
);
}
else
{
// 支付失败
order
.
setPayStatus
(
"4"
);
payDao
.
updateOrderStatus
(
order
);
BenefitEntity
benefitEntity
=
new
BenefitEntity
();
benefitEntity
.
setOrderCode
(
order
.
getPayCode
(
));
benefitEntity
.
set
DelFlag
(
"1"
);
payDao
.
deleteBenefit
(
benefitEntity
);
// 添加提现记录
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
.
set
PayMethod
(
orderEntity
.
getPayMethod
()
);
payDao
.
saveBenefitInfo
(
benefitEntity
);
}
}
}
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
}
// System.out.println("。。。。。。。定时任务。updateOrders结束。。。。");
}
}
src/main/resources/mappings/modules/sys/DictDao.xml
View file @
1203dd4c
...
...
@@ -108,7 +108,8 @@
<select
id=
"findDictListPayChannel"
resultType=
"com.thinkgem.jeesite.modules.sys.entity.DictPayChannel"
>
SELECT
value,
label
label,
remarks
FROM sys_dict
WHERE del_flag = #{DEL_FLAG_NORMAL}
<if
test=
"type != null and type != ''"
>
...
...
src/main/resources/mappings/modules/user/UserDao.xml
View file @
1203dd4c
...
...
@@ -829,9 +829,11 @@
yc.create_by AS createdUser,
yc.update_date AS modified,
yc.update_by AS modifiedUser,
yc.del_flag AS delFlag
yc.del_flag AS delFlag,
yb.bank_name AS bankName
FROM
youka_cards yc
LEFT JOIN youka_bank yb ON yb.bank_code = yc.belong_bank
WHERE
yc.card_no = #{cardNo}
</select>
...
...
src/main/resources/youka.properties
View file @
1203dd4c
...
...
@@ -148,3 +148,25 @@ weixin.appsecret = libo13821934497libo1382193449700
alipay.appid
=
2018041002530242
alipay.private.key
=
MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQC3hFTccWmIFkIQzitDdGTgWKgbs1S2NZutDlUCdiWrXSV+aAvQDqpLXJb7CQ1iSY3CJ4rPbBs7GFZj1rZ1T722Xj1QiFJRTgSSaUe9gejDFOIBpyoG0gT7gZsFrdcYHCzJcA3L9LUWt9XLLH34couARVGY8FUa1GXVUierMms4JnJ1I+Eos4jBmTpLFpZb6brsfuGOzk501KWk+mVXhdEf47MoT6i0ujebf22rdWqQz4ukS7eRbRfvoh0g5wEt14NQHXFLgSAqPN+ZDpKQ8H9Cz0Mj37iN0SA31j3S/Cl0zyPL9n+bWSJdE2MDge8nC7joR4Nxbqirlp3qJ7YOtMghAgMBAAECggEAXG9JFygA0cz0Reayn+1WijHdquYu+wARg58+blj4LFJkekEKAigA2qiuW495sFIAFxU3s7ZuGNvvV6ZkjL43fk4FcDTZ0Z4Ma3qf6fIvPWOdWtvKLVlHrS7g2IFxX/GBFY1dRafiNqkuBIJKiQOZBGjl6rTTCQqGqGYTGQXyP3syu72Nc1p7cq2a4H4Ux+vAC0OxYuCeL12wR5qf1PJ0O+h/syr7+WY7sez5ae36e82C6iQfl3RNqAQyuiqADhUFa/IoKhb1IklddKZZkiU0wsNeLsqkklNSXgejlPKom5MLyRloSyEqARvXBTfAXPn0IkQ9eYNLh1k2MOh5SfqKyQKBgQDum0+irr4T0gpYJ51YzJIjEBn5bUOo0Q0vYb0jRQ0y0lfmAqSTV4RdlasMf8Ny3DZvO1C4nTQ0/Mv2HDJTtLUAC/VntEiKdgS0Dj0iyqTqWXYtTsA1zKr+7RgjPdOC3P7y6lbV+xfmnjHKGFIGKPaxeNVQe72bbLrg5QTMYw0A1wKBgQDE5PqXl6lvEFbNDyHIXOnfXyox1Q881fTZKavKOel6kGP1Qn82BrEC/BF+8ZkGCe/HHuzuFPcw7sInV13xBEVOegcHximXmiR5S8j/SfkTFtrKttMkaZPoW64RrNNsnPckhLTymTefpXX4JQj/ZkNtfg3VO2O9VKkJy74X417HxwKBgBPNYfOPawj8Eo20Y/OdrrcoO++eaNIW33BCPU8zCOBh4pedOolb5wlZRYPZCqB6tC3RD2by7QVEwaygNHEL+0WQuIItzSNongVPdTVw+fTVDeC+u2b7oGldxfYOyIIA00vXtPM3Tol+MYWjNRN7zNV3wMRYMKk4gd3uQ9KumcKrAoGBAIDbAgz3mlEvNj9ZKdjAxeYDl8+pCiHcPDNrDBx6rgwiNuiprisjUfEMGj8jyeuj0SJVYOWnHucNOk8Y5Ef5bYogXj1+OHYY0Mn5CP/Z34HYsTN9Vs07syqb5V13553rU+q4Vtt13mtCk+PkCPFscbBUkKT+CxY7M61Pg4aKrNq9AoGATMAwhGqTdcXvBb1XV5ScbP+UIkqLbib8eYDJRIMlCGGqDMbOoBQQ9joJFtZjV2sL0QwF7qaxtjLs+VVnZkVYHRtn25frtb7teLRuJB7rW9905zqGtCx730uSCX8PuyPS98cV0KnuVCIZZMQbLNVb2M/u/ENJYqSVAETy+xAs7hQ=
alipay.public.key
=
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAg3CAeybKvbk7slUC6wCZiqGKgZwwcL4vvlztKO52xqTnHcsxhC+ogrtg5x59+3T4fKqOs38vC8faEbGbCUqr68hrjXkE0ZuPWygrp3jTUC9vkw+d+Fk18xsoRqac3b7OeNVLbCN9Nq2rAzVqLrNeQFWjpZbXFpPcvSLH3rv4U3ljhjvFnEGOpxu8vdpc/AGwZ+R2GX3yH1W85iWcO3GAEC3raTRq3RRgsKC3WZTq85Vxl70K0FfLKDjNTOQVnEwfYS9wTl4zDTBObxAfQEdH03fXJTkpLwAKlsiJiPRsfyoJMFA6nVCfKhjJwXia99MT1kGHVRyPu/JpaXepme2orwIDAQAB
## 平安银行相关
## 企业代码
pinganbank.enterprisecode
=
00202043000000326000
## 企业账号
pinganbank.account
=
15000092480851
## 企业的付款人账号
pinganbank.outacctno
=
15000092480851
## 企业的付款人姓名
pinganbank.outacctname
=
天津盛世互通网络科技有限公司
## 企业银行代码
pinganbank.outacctbank
=
307110004315
## 企业银行代码
pinganbank.b2bicurl
=
http://39.107.124.166: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