Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in
Toggle navigation
A
Aidea
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
sa_aidea
Aidea
Commits
51899f8c
Commit
51899f8c
authored
Dec 01, 2020
by
谢希宇
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Aidea product update by Strive Date 2020-11-28
parent
8b7a34f8
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
432 additions
and
2 deletions
+432
-2
HashKit.java
...er-module/src/main/java/com/cftech/order/pay/HashKit.java
+58
-0
Md5Utils.java
...r-module/src/main/java/com/cftech/order/pay/Md5Utils.java
+58
-0
WechatPay.java
...-module/src/main/java/com/cftech/order/pay/WechatPay.java
+101
-0
WechatPayUtils.java
...le/src/main/java/com/cftech/order/pay/WechatPayUtils.java
+213
-0
qrcode_edging.png
...web/src/main/webapp/assets/adminlte/img/qrcode_edging.png
+0
-0
pom.xml
pom.xml
+2
-2
No files found.
aidea-modules/order-module/src/main/java/com/cftech/order/pay/HashKit.java
0 → 100644
View file @
51899f8c
package
com
.
cftech
.
order
.
pay
;
import
java.security.MessageDigest
;
import
java.security.SecureRandom
;
public
class
HashKit
{
public
HashKit
()
{
}
private
static
final
SecureRandom
random
=
new
SecureRandom
();
private
static
final
char
[]
HEX_DIGITS
=
{
'0'
,
'1'
,
'2'
,
'3'
,
'4'
,
'5'
,
'6'
,
'7'
,
'8'
,
'9'
,
'a'
,
'b'
,
'c'
,
'd'
,
'e'
,
'f'
};
public
static
String
md5
(
String
srcStr
)
{
return
hash
(
"MD5"
,
srcStr
);
}
public
static
String
sha1
(
String
srcStr
)
{
return
hash
(
"SHA-1"
,
srcStr
);
}
public
static
String
sha256
(
String
srcStr
)
{
return
hash
(
"SHA-256"
,
srcStr
);
}
public
static
String
sha384
(
String
srcStr
)
{
return
hash
(
"SHA-384"
,
srcStr
);
}
public
static
String
sha512
(
String
srcStr
)
{
return
hash
(
"SHA-512"
,
srcStr
);
}
public
static
String
hash
(
String
algorithm
,
String
srcStr
)
{
try
{
MessageDigest
md
=
MessageDigest
.
getInstance
(
algorithm
);
byte
[]
bytes
=
md
.
digest
(
srcStr
.
getBytes
(
"utf-8"
));
return
toHex
(
bytes
);
}
catch
(
Exception
e
)
{
throw
new
RuntimeException
(
e
);
}
}
private
static
String
toHex
(
byte
[]
bytes
)
{
StringBuilder
ret
=
new
StringBuilder
(
bytes
.
length
*
2
);
for
(
int
i
=
0
;
i
<
bytes
.
length
;
i
++)
{
ret
.
append
(
HEX_DIGITS
[(
bytes
[
i
]
>>
4
&
0xF
)]);
ret
.
append
(
HEX_DIGITS
[(
bytes
[
i
]
&
0xF
)]);
}
return
ret
.
toString
();
}
public
static
String
generateSalt
(
int
numberOfBytes
)
{
byte
[]
salt
=
new
byte
[
numberOfBytes
];
random
.
nextBytes
(
salt
);
return
toHex
(
salt
);
}
}
aidea-modules/order-module/src/main/java/com/cftech/order/pay/Md5Utils.java
0 → 100644
View file @
51899f8c
package
com
.
cftech
.
order
.
pay
;
import
java.security.MessageDigest
;
/**
* Created by 16444 on 2020/11/30.
*/
public
class
Md5Utils
{
private
final
static
String
[]
hexDigits
=
{
"0"
,
"1"
,
"2"
,
"3"
,
"4"
,
"5"
,
"6"
,
"7"
,
"8"
,
"9"
,
"a"
,
"b"
,
"c"
,
"d"
,
"e"
,
"f"
};
/**
* 转换字节数组为16进制字串
* @param b 字节数组
* @return 16进制字串
*/
public
static
String
byteArrayToHexString
(
byte
[]
b
)
{
StringBuilder
resultSb
=
new
StringBuilder
();
for
(
byte
aB
:
b
)
{
resultSb
.
append
(
byteToHexString
(
aB
));
}
return
resultSb
.
toString
();
}
/**
* 转换byte到16进制
* @param b 要转换的byte
* @return 16进制格式
*/
private
static
String
byteToHexString
(
byte
b
)
{
int
n
=
b
;
if
(
n
<
0
)
{
n
=
256
+
n
;
}
int
d1
=
n
/
16
;
int
d2
=
n
%
16
;
return
hexDigits
[
d1
]
+
hexDigits
[
d2
];
}
/**
* MD5编码
* @param origin 原始字符串
* @return 经过MD5加密之后的结果
*/
public
static
String
MD5Encode
(
String
origin
)
{
String
resultString
=
null
;
try
{
resultString
=
origin
;
MessageDigest
md
=
MessageDigest
.
getInstance
(
"MD5"
);
md
.
update
(
resultString
.
getBytes
(
"UTF-8"
));
resultString
=
byteArrayToHexString
(
md
.
digest
());
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
}
return
resultString
;
}
}
aidea-modules/order-module/src/main/java/com/cftech/order/pay/WechatPay.java
0 → 100644
View file @
51899f8c
package
com
.
cftech
.
order
.
pay
;
import
lombok.Data
;
/**
* Created by 16444 on 2020/11/30.
*/
@Data
public
class
WechatPay
{
/**
* 公众账号ID
*/
private
String
appid
;
/**
* 商户号
*/
private
String
mch_id
;
/**
* 设备号
*/
private
String
device_info
;
/**
* 随机字符串
*/
private
String
nonce_str
;
/**
* 签名
*/
private
String
sign
;
/**
* 签名类型
*/
private
String
sign_type
;
/**
* 商品描述
*/
private
String
body
;
/**
* 商品详情
*/
private
String
detail
;
/**
* 附加数据
*/
private
String
attach
;
/**
* 商户订单号
*/
private
String
out_trade_no
;
/**
* 商户号
*/
private
String
fee_type
;
/**
* 标价金额
*/
private
Integer
total_fee
;
/**
* 终端IP
*/
private
String
spbill_create_ip
;
/**
* 交易起始时间
*/
private
String
time_start
;
/**
* 交易结束时间
*/
private
String
time_expire
;
/**
* 交易结束时间
*/
private
String
notify_url
;
/**
* 交易结束时间
*/
private
String
trade_type
;
/**
* 商品id
*/
private
String
product_id
;
}
aidea-modules/order-module/src/main/java/com/cftech/order/pay/WechatPayUtils.java
0 → 100644
View file @
51899f8c
package
com
.
cftech
.
order
.
pay
;
import
com.alibaba.fastjson.JSONObject
;
import
com.cftech.core.util.StringUtils
;
import
com.cftech.core.util.SystemConfig
;
import
com.cftech.order.model.Order
;
import
com.cftech.order.service.OrderService
;
import
lombok.extern.slf4j.Slf4j
;
import
org.apache.http.HttpEntity
;
import
org.apache.http.client.methods.CloseableHttpResponse
;
import
org.apache.http.client.methods.HttpPost
;
import
org.apache.http.entity.StringEntity
;
import
org.apache.http.impl.client.CloseableHttpClient
;
import
org.apache.http.impl.client.HttpClients
;
import
org.apache.http.util.EntityUtils
;
import
org.dom4j.Document
;
import
org.dom4j.DocumentException
;
import
org.dom4j.DocumentHelper
;
import
org.dom4j.Element
;
import
org.dom4j.io.SAXReader
;
import
org.mp.api.core.common.util.MessageUtil
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
javax.servlet.http.HttpServletRequest
;
import
java.io.IOException
;
import
java.io.InputStream
;
import
java.util.*
;
/**
* Created by 16444 on 2020/11/30.
*/
@Slf4j
public
class
WechatPayUtils
{
public
static
String
retSucXml
=
"<xml><return_code><![CDATA[SUCCESS]]></return_code><return_msg><![CDATA[OK]]></return_msg></xml>"
;
public
static
String
retFailXml
=
"<xml><return_code><![CDATA[FAIL]]></return_code><return_msg><![CDATA[SYSTEMERROR]]></return_msg></xml>"
;
@Autowired
private
MessageUtil
messageUtil
;
@Autowired
private
OrderService
orderService
;
/**
* 生成随机数
* @return
*/
private
static
String
generateRandomNumber
()
{
return
UUID
.
randomUUID
().
toString
().
replace
(
"-"
,
""
);
}
/**
* 生成签名
* @param params
* @return
*/
private
static
String
getSign
(
SortedMap
<
String
,
String
>
params
)
{
String
secretKey
=
SystemConfig
.
p
.
getProperty
(
"mch.secret_key"
);
//key为商户平台设置的密钥key
Map
<
String
,
String
>
map
=
new
TreeMap
<>();
map
.
putAll
(
params
);
StringBuffer
stringBuffer
=
new
StringBuffer
();
for
(
Map
.
Entry
<
String
,
String
>
s
:
map
.
entrySet
())
{
String
key
=
s
.
getKey
();
String
value
=
s
.
getValue
();
if
(
StringUtils
.
isBlank
(
value
))
{
continue
;
}
stringBuffer
.
append
(
key
).
append
(
"="
).
append
(
value
).
append
(
"&"
);
}
System
.
out
.
println
(
stringBuffer
.
toString
());
stringBuffer
.
append
(
"key="
+
secretKey
);
String
md5Str
=
HashKit
.
md5
(
stringBuffer
.
toString
()).
toUpperCase
();
return
md5Str
;
}
/**
* 封装参数且排序
* @param order
* @param randomStr
* @return
*/
public
static
SortedMap
<
String
,
String
>
generateOrderMap
(
Order
order
,
String
randomStr
)
{
SortedMap
<
String
,
String
>
params
=
new
TreeMap
<>();
params
.
put
(
"appid"
,
SystemConfig
.
p
.
getProperty
(
"WX_MP_SERVER_APPID"
));
params
.
put
(
"mch_id"
,
SystemConfig
.
p
.
getProperty
(
"mch.mch_id"
));
params
.
put
(
"nonce_str"
,
randomStr
);
params
.
put
(
"body"
,
"诺康大药房药品咨询"
);
params
.
put
(
"out_trade_no"
,
order
.
getNumber
());
params
.
put
(
"total_fee"
,
String
.
valueOf
(
order
.
getOrderAmount
().
intValue
()
*
100
));
params
.
put
(
"spbill_create_ip"
,
SystemConfig
.
p
.
getProperty
(
"mch.spbill_id"
));
params
.
put
(
"notify_url"
,
SystemConfig
.
p
.
getProperty
(
"mch.notify_url"
));
params
.
put
(
"trade_type"
,
"NATIVE"
);
params
.
put
(
"product_id"
,
order
.
getProductNumber
());
return
params
;
}
public
static
JSONObject
genenatePay
(
Order
order
)
{
String
randomStr
=
generateRandomNumber
();
SortedMap
<
String
,
String
>
params
=
generateOrderMap
(
order
,
randomStr
);
String
sign
=
getSign
(
params
);
params
.
put
(
"sign"
,
sign
);
String
xmlObj
=
parseXML
(
params
);
System
.
out
.
print
(
xmlObj
);
try
{
String
result
=
sendPost
(
HttpClients
.
createDefault
(),
"https://api.mch.weixin.qq.com/pay/unifiedorder"
,
xmlObj
);
return
xmlToStr
(
result
);
}
catch
(
IOException
e
)
{
e
.
printStackTrace
();
}
return
null
;
}
public
static
String
sendPost
(
CloseableHttpClient
httpclient
,
String
url
,
String
xmlObj
)
throws
IOException
{
String
result
;
HttpPost
httpPost
=
new
HttpPost
(
url
);
// 得指明使用UTF-8编码,否则到API服务器XML的中文不能被成功识别
StringEntity
postEntity
=
new
StringEntity
(
xmlObj
,
"UTF-8"
);
httpPost
.
addHeader
(
"Content-Type"
,
"text/xml"
);
httpPost
.
setEntity
(
postEntity
);
log
.
info
(
xmlObj
);
try
{
CloseableHttpResponse
response
=
httpclient
.
execute
(
httpPost
);
try
{
HttpEntity
entity
=
response
.
getEntity
();
result
=
EntityUtils
.
toString
(
entity
,
"UTF-8"
);
}
finally
{
response
.
close
();
}
}
finally
{
httpclient
.
close
();
}
return
result
;
}
public
static
String
parseXML
(
Map
<
String
,
String
>
parameters
)
{
StringBuffer
sb
=
new
StringBuffer
();
sb
.
append
(
"<xml>"
);
Set
es
=
parameters
.
entrySet
();
Iterator
it
=
es
.
iterator
();
while
(
it
.
hasNext
())
{
Map
.
Entry
entry
=
(
Map
.
Entry
)
it
.
next
();
String
k
=
(
String
)
entry
.
getKey
();
String
v
=
(
String
)
entry
.
getValue
();
if
(
null
!=
v
&&
!
""
.
equals
(
v
)
&&
!
"appkey"
.
equals
(
k
))
{
sb
.
append
(
"<"
+
k
+
">"
+
parameters
.
get
(
k
)
+
"</"
+
k
+
">\n"
);
}
}
sb
.
append
(
"</xml>"
);
return
sb
.
toString
();
}
public
static
JSONObject
xmlToStr
(
String
str
)
{
JSONObject
retObj
=
new
JSONObject
();
try
{
Document
doc
=
DocumentHelper
.
parseText
(
str
);
Element
rootElt
=
doc
.
getRootElement
();
String
result_code
=
rootElt
.
elementTextTrim
(
"result_code"
);
String
return_code
=
rootElt
.
elementTextTrim
(
"return_code"
);
if
(
StringUtils
.
equals
(
result_code
,
"SUCCESS"
)
&&
StringUtils
.
equals
(
return_code
,
"SUCCESS"
))
{
String
code_url
=
rootElt
.
elementTextTrim
(
"code_url"
);
String
prepay_id
=
rootElt
.
elementTextTrim
(
"prepay_id"
);
retObj
.
put
(
"code_url"
,
code_url
);
retObj
.
put
(
"prepay_id"
,
prepay_id
);
return
retObj
;
}
}
catch
(
DocumentException
e
)
{
e
.
printStackTrace
();
}
return
null
;
}
public
static
TreeMap
<
String
,
String
>
parseXml
(
HttpServletRequest
request
)
throws
Exception
{
//将解析结果存储在HashMap中
TreeMap
<
String
,
String
>
map
=
new
TreeMap
<>();
// 从request中取得输入流
InputStream
inputStream
=
request
.
getInputStream
();
System
.
out
.
println
(
inputStream
.
toString
());
// 读取输入流
SAXReader
reader
=
new
SAXReader
();
Document
document
=
reader
.
read
(
inputStream
);
// 得到xml根元素
Element
root
=
document
.
getRootElement
();
//得到根元素的所有子节点
List
<
Element
>
elementList
=
root
.
elements
();
// 遍历所有子节点
List
<
Element
>
elements
;
for
(
Element
e
:
elementList
){
elements
=
e
.
elements
();
if
(
elements
.
size
()>
0
){
for
(
Element
element
:
elements
)
{
map
.
put
(
element
.
getName
(),
element
.
getText
());
}
}
map
.
put
(
e
.
getName
(),
e
.
getText
());
}
// 释放资源
inputStream
.
close
();
inputStream
=
null
;
return
map
;
}
}
cftech-common-web/src/main/webapp/assets/adminlte/img/qrcode_edging.png
0 → 100644
View file @
51899f8c
53.1 KB
pom.xml
View file @
51899f8c
...
@@ -925,7 +925,7 @@
...
@@ -925,7 +925,7 @@
</exclusions>
</exclusions>
</dependency>
</dependency>
<
!--<
dependency>
<dependency>
<groupId>
sf.csim
</groupId>
<groupId>
sf.csim
</groupId>
<artifactId>
printer-api
</artifactId>
<artifactId>
printer-api
</artifactId>
<version>
1.0.3
</version>
<version>
1.0.3
</version>
...
@@ -935,7 +935,7 @@
...
@@ -935,7 +935,7 @@
<groupId>
sf.csim
</groupId>
<groupId>
sf.csim
</groupId>
<artifactId>
waybill-api
</artifactId>
<artifactId>
waybill-api
</artifactId>
<version>
V1.1.1
</version>
<version>
V1.1.1
</version>
</dependency>
-->
</dependency>
</dependencies>
</dependencies>
<build>
<build>
...
...
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