Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Q
qa-platform
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Boards
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
QA
qa-platform
Commits
a107b998
Commit
a107b998
authored
Aug 13, 2021
by
黎博
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
新增电商购物流程方法
parent
03e9ccd0
Changes
8
Hide whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
387 additions
and
38 deletions
+387
-38
KdspController.java
...cn/qg/qaplatform/controller/zdata/yxm/KdspController.java
+25
-0
RSA.java
src/main/java/cn/qg/qaplatform/encrypt/kdsp/RSA.java
+1
-1
DESUtils.java
src/main/java/cn/qg/qaplatform/encrypt/yxm/DESUtils.java
+107
-0
KdspMapper.java
src/main/java/cn/qg/qaplatform/mapper/zdata/KdspMapper.java
+9
-0
Purchase.java
src/main/java/cn/qg/qaplatform/process/Purchase.java
+198
-37
PurchaseService.java
...a/cn/qg/qaplatform/service/zdata/yxm/PurchaseService.java
+6
-0
PurchaseServiceImpl.java
...aplatform/service/zdata/yxm/impl/PurchaseServiceImpl.java
+23
-0
KdspMapper.xml
src/main/resources/mapper/zdata/KdspMapper.xml
+18
-0
No files found.
src/main/java/cn/qg/qaplatform/controller/zdata/yxm/KdspController.java
0 → 100644
View file @
a107b998
package
cn
.
qg
.
qaplatform
.
controller
.
zdata
.
yxm
;
import
cn.qg.qaplatform.config.SwitchDataSource
;
import
cn.qg.qaplatform.mapper.zdata.KdspMapper
;
import
cn.qg.qaplatform.utils.JsonResult
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.web.bind.annotation.CrossOrigin
;
import
org.springframework.web.bind.annotation.GetMapping
;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.bind.annotation.RestController
;
@CrossOrigin
@RestController
@RequestMapping
(
"/kdsp"
)
public
class
KdspController
{
@Autowired
KdspMapper
kdspMapper
;
@GetMapping
(
"/sku/list"
)
public
JsonResult
getSkuList
(
String
namespace
,
Integer
skuSource
,
Double
salePriceLimit
)
{
SwitchDataSource
.
dataSourceSwitch
(
namespace
,
"kdsp"
);
return
JsonResult
.
success
(
kdspMapper
.
getSelfSupportSkuNoList
(
skuSource
,
salePriceLimit
));
}
}
src/main/java/cn/qg/qaplatform/encrypt/kdsp/RSA.java
View file @
a107b998
...
...
@@ -158,4 +158,4 @@ public class RSA {
System
.
out
.
println
(
publicKey
);
}
}
}
\ No newline at end of file
src/main/java/cn/qg/qaplatform/encrypt/yxm/DESUtils.java
0 → 100644
View file @
a107b998
package
cn
.
qg
.
qaplatform
.
encrypt
.
yxm
;
import
java.security.SecureRandom
;
import
javax.crypto.Cipher
;
import
javax.crypto.SecretKey
;
import
javax.crypto.SecretKeyFactory
;
import
javax.crypto.spec.DESKeySpec
;
public
class
DESUtils
{
private
static
final
String
DES
=
"DES"
;
private
static
final
String
PADDING
=
"DES/ECB/PKCS5Padding"
;
private
static
byte
[]
encrypt
(
byte
[]
src
,
byte
[]
key
)
throws
Exception
{
SecureRandom
sr
=
new
SecureRandom
();
DESKeySpec
dks
=
new
DESKeySpec
(
key
);
SecretKeyFactory
keyFactory
=
SecretKeyFactory
.
getInstance
(
DES
);
SecretKey
secretKey
=
keyFactory
.
generateSecret
(
dks
);
Cipher
cipher
=
Cipher
.
getInstance
(
PADDING
);
cipher
.
init
(
Cipher
.
ENCRYPT_MODE
,
secretKey
,
sr
);
return
cipher
.
doFinal
(
src
);
}
private
static
byte
[]
decrypt
(
byte
[]
src
,
byte
[]
key
)
throws
Exception
{
SecureRandom
sr
=
new
SecureRandom
();
DESKeySpec
dks
=
new
DESKeySpec
(
key
);
SecretKeyFactory
keyFactory
=
SecretKeyFactory
.
getInstance
(
DES
);
SecretKey
secretKey
=
keyFactory
.
generateSecret
(
dks
);
Cipher
cipher
=
Cipher
.
getInstance
(
PADDING
);
cipher
.
init
(
Cipher
.
DECRYPT_MODE
,
secretKey
,
sr
);
return
cipher
.
doFinal
(
src
);
}
private
static
String
byte2hex
(
byte
[]
b
)
{
String
hs
=
""
;
String
temp
=
""
;
for
(
int
n
=
0
;
n
<
b
.
length
;
n
++)
{
temp
=
(
Integer
.
toHexString
(
b
[
n
]
&
0XFF
));
if
(
temp
.
length
()
==
1
)
{
hs
=
hs
+
"0"
+
temp
;
}
else
{
hs
=
hs
+
temp
;
}
}
return
hs
.
toUpperCase
();
}
private
static
byte
[]
hex2byte
(
byte
[]
b
)
{
if
((
b
.
length
%
2
)
!=
0
)
{
throw
new
IllegalArgumentException
(
"length not even"
);
}
byte
[]
b2
=
new
byte
[
b
.
length
/
2
];
for
(
int
n
=
0
;
n
<
b
.
length
;
n
+=
2
)
{
String
item
=
new
String
(
b
,
n
,
2
);
b2
[
n
/
2
]
=
(
byte
)
Integer
.
parseInt
(
item
,
16
);
}
return
b2
;
}
/**
* 解密
* @param src
* @param key
* @return
*/
public
static
String
decrypt
(
String
src
,
String
key
)
{
String
decryptStr
=
""
;
try
{
byte
[]
decrypt
=
decrypt
(
hex2byte
(
src
.
getBytes
()),
key
.
getBytes
());
decryptStr
=
new
String
(
decrypt
);
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
}
return
decryptStr
;
}
/**
* 加密
* @param src
* @param key
* @return
*/
public
static
String
encrypt
(
String
src
,
String
key
)
{
byte
[]
bytes
=
null
;
String
encryptStr
=
""
;
try
{
bytes
=
encrypt
(
src
.
getBytes
(),
key
.
getBytes
());
}
catch
(
Exception
ex
)
{
ex
.
printStackTrace
();
}
if
(
bytes
!=
null
)
{
encryptStr
=
byte2hex
(
bytes
);
}
return
encryptStr
;
}
// public static void main(String[] args) {
// String pwd = "123123123";
// String str = encrypt(pwd, "VCC_DFDO&WEK1E0I2S3");
// String str1 = decrypt(str, "VCC_DFDO&WEK1E0I2S3");
// System.out.println(str + "_" + str1);
// }
}
src/main/java/cn/qg/qaplatform/mapper/zdata/KdspMapper.java
0 → 100644
View file @
a107b998
package
cn
.
qg
.
qaplatform
.
mapper
.
zdata
;
import
java.util.List
;
import
java.util.Map
;
public
interface
KdspMapper
{
List
<
Map
>
getSelfSupportSkuNoList
(
Integer
skuSource
,
Double
salePriceLimit
);
}
src/main/java/cn/qg/qaplatform/process/Purchase.java
View file @
a107b998
...
...
@@ -2,11 +2,14 @@ package cn.qg.qaplatform.process;
import
cn.qg.qaplatform.encrypt.kdsp.AESUtil
;
import
cn.qg.qaplatform.encrypt.kdsp.RSA
;
import
cn.qg.qaplatform.encrypt.yxm.DESUtils
;
import
cn.qg.qaplatform.utils.HttpClientUtils
;
import
cn.qg.qaplatform.utils.JsonResult
;
import
cn.qg.qaplatform.vo.EncryptRequest
;
import
com.alibaba.fastjson.JSON
;
import
com.alibaba.fastjson.JSONObject
;
import
com.jayway.jsonpath.JsonPath
;
import
io.swagger.models.auth.In
;
import
lombok.extern.slf4j.Slf4j
;
import
org.apache.commons.lang3.time.DateFormatUtils
;
...
...
@@ -20,14 +23,57 @@ import java.util.*;
@Slf4j
public
class
Purchase
{
/**
* kdsp 配置的私钥及 ios端对应的公钥
* 以_kdsp 结尾的存在于kdsp 端,以_ios结尾的存在于ios端
*/
static
String
private_key_ios_101_kdsp
=
"MIICdQIBADANBgkqhkiG9w0BAQEFAASCAl8wggJbAgEAAoGBAIZ/jCc0lcdcznjCybFPCGmI9oCnbvMzdCyta7X4Y4ygIOYAQ5vaNiPI2HAEh5X15jR/Cgr4x9YHLBuifKnJezWPmX+ZOYVFDwhlj7FkXS3TVyiuegykomdyg2LCpz06eyLAY+rMiz+ItqUGiemmqFZKfSD328VLaqCvRac5aWotAgMBAAECgYA8E1Kt3F4ee4S6Cf9/FFcklInOc3sqZEw6/IdE85q7oHaxZWLNhY1zNG4AsvVA9WILBsecmPzhy7hW66AVUqqWXA8jLIg/J3UyIRQo1sH9cX+3iERhNZluxXzxcX/UXrVQihyEFWZbehtpXFfPq1F7XzkTKy8qSodRLO79F8Tc/QJBAOF2vZ4Ah8GhiZP/KMYX7Q1fY5x/zTKmnNs1fJGDoRmgcF47Inzf2Ovjo+do/QdCf+Bzki6WG0AOpIHKksuw5r8CQQCYtttPfP8FKRxumcczNmkaKDWjrKElwRcGef5OuNBb7Crso9gUY+sL9/4kQHfmBfCS6KVbAA56RSdeSWFYZDYTAkA58pbRoTlDHw2JKC+Gmmem5Dlp478NoZz3Ckw16irht0aqMXCvv6i1GBDsTSObVhAf1BRiPNpMIHdPlI0eJR1pAkA7Oge6P0cEcFpHhrpb4UlHzLpo3QWuh8FvUJbRXxnn3KMVHcIqvkmlXauh0aLugfU4dKPUtCPpRbKr/ZeUWWEjAkAN5D5hH16RwrR6KN8W7t0gnlwOECPD8KbBQeWSja9r8C/yWMmr4RsWirBoDSYu4IG8jnrNcmYk8l1eAWmNyJWe"
;
static
String
public_key_ios_101_ios
=
"MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCGf4wnNJXHXM54wsmxTwhpiPaAp27zM3QsrWu1+GOMoCDmAEOb2jYjyNhwBIeV9eY0fwoK+MfWBywbonypyXs1j5l/mTmFRQ8IZY+xZF0t01cornoMpKJncoNiwqc9OnsiwGPqzIs/iLalBonppqhWSn0g99vFS2qgr0WnOWlqLQIDAQAB"
;
/**
* ios端配置的私钥 及 kdsp 端对应的公钥
* 以_kdsp 结尾的存在于kdsp 端,以_ios结尾的存在于ios端
*/
static
String
private_key_ios_101_ios
=
"MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAINPX+KdtJJYHHgLrurdJOK4mAGeP/RST69ATX1Ir4YBasxmIL7XMRtgJHjwrUZv7v3c4M/RQSSwUXQP5NLE7ns4uZUm/JZoG1zgmq43IqyuwTLlitwYn221DWToehmKp9uC1WhK84EfkCDtinqLA7Rslh9FrlKkVHyus2eONPm7AgMBAAECgYB43wzthqwcdj0mh+Ko0Y5NoQxTmP9YAJjXQoLSC6F+4jkUFAKaiW3rvDF2nl1yVEETsEnFIuMrSZ6BDsxc8+htb458A/kMXdyNvE1eaSnYd5Y0kPX+IyaX6+fTHfGF7SvEs4gHKJFW+G1UQ0veDTeUlNGQVwj5eVnAj+UhWuKWSQJBAN0SFsi/jnc5moqH7F/SNUKNtSCOhRaz/RjEdTjHHWpCYmK8RP+cfHJp4Cb7P/jG0XEFFQSS5FIjQn6ujAfiSH8CQQCYDqFjWxhViONtjnuovqBIKGxppk5SA22leSa53Bads26HKpsIHsFQvr3fXMe2BEUsGFYN20mlouQP7BHn1NDFAkBpJ0KJKHyWf2LgA/lONsm4p3kBTGlHvENmNYRghm2abosn1c+oGgIj1fKV+Cqcpc1XyggOTeSmoTju0w2ublb3AkAOt4PJQPzW8nvIk7zGNUUAFuF/TDhSWcCX/mTQIkwSEVbGQEpm+8sMDJoF703pAPrM7MIPb0Tughh+rgOBo6hdAkEAz7Q1UnZSwr2+2sgKUnMxUVCPTt/ImyWXukU8Uys8hT3i8XFex7dTaAd8XG3Zc77amaXvIBqxo5I6jKbzJCZUwA=="
;
static
String
public_key_ios_101_kdsp
=
"MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCDT1/inbSSWBx4C67q3STiuJgBnj/0Uk+vQE19SK+GAWrMZiC+1zEbYCR48K1Gb+793ODP0UEksFF0D+TSxO57OLmVJvyWaBtc4JquNyKsrsEy5YrcGJ9ttQ1k6HoZiqfbgtVoSvOBH5Ag7Yp6iwO0bJYfRa5SpFR8rrNnjjT5uwIDAQAB"
;
static
String
deviceId
=
"D69C97EC-AC7F-4C5D-AC14-50933E990795"
;
/**
* 模拟IOS 端加密
*/
public
static
EncryptRequest
encryptOrderReq4IOS
(
String
orderSubmitFormStr
)
throws
Exception
{
String
randomKey
=
AESUtil
.
getRandomKey
();
String
orderSubmitReqAesEncrypt
=
AESUtil
.
encryptToBase64
(
orderSubmitFormStr
,
randomKey
);
String
encryptKeyRsaEncrypt
=
RSA
.
encryptToBase64
(
randomKey
,
public_key_ios_101_ios
);
String
appId
=
"101"
;
String
nonce
=
UUID
.
randomUUID
().
toString
();
String
timeStamp
=
DateFormatUtils
.
format
(
new
Date
(),
"yyyy-MM-dd HH:mm:ss"
);
String
content
=
nonce
+
appId
+
timeStamp
+
orderSubmitFormStr
;
String
sign
=
RSA
.
sign
(
content
,
private_key_ios_101_ios
);
EncryptRequest
request
=
new
EncryptRequest
();
request
.
setAppId
(
appId
);
request
.
setNonce
(
nonce
);
request
.
setBody
(
orderSubmitReqAesEncrypt
);
request
.
setEncryptKey
(
encryptKeyRsaEncrypt
);
request
.
setSign
(
sign
);
request
.
setTimestamp
(
timeStamp
);
return
request
;
}
/**
* 登录
* @param namespace 环境
* @param phoneNo 手机号
* @param deviceId 设备id
* @return
*/
public
static
String
loginApp
(
String
namespace
,
String
phoneNo
,
String
deviceId
)
{
public
static
String
loginApp
(
String
namespace
,
String
phoneNo
)
{
String
url
=
"http://sappbackend-"
+
namespace
+
".liangkebang.net/auth/fast-login"
;
Map
<
String
,
Object
>
headers
=
new
HashMap
<>();
Map
<
String
,
Object
>
params
=
new
HashMap
<>();
...
...
@@ -62,9 +108,16 @@ public class Purchase {
if
(
addressIdList
.
size
()
==
0
)
{
return
addAddress
(
namespace
,
token
);
}
log
.
info
(
"获取地址信息:"
+
response
);
return
JsonPath
.
read
(
response
,
"$.data.addrReceiverList[0].addrReceiverId"
);
}
/**
* 新增地址
* @param namespace 环境
* @param token
* @return
*/
public
static
Integer
addAddress
(
String
namespace
,
String
token
)
{
String
url
=
"http://talos-"
+
namespace
+
".liangkebang.net/api/kdsp/addr/receiver/add_edit"
;
Map
<
String
,
Object
>
headers
=
new
HashMap
<>();
...
...
@@ -81,6 +134,7 @@ public class Purchase {
params
.
put
(
"receiverPhoneNo"
,
"18311069063"
);
params
.
put
(
"addrDefault"
,
"1"
);
JSONObject
response
=
HttpClientUtils
.
doPostJson
(
url
,
JSON
.
toJSONString
(
params
),
headers
);
log
.
info
(
"新增地址:"
+
response
);
return
JsonPath
.
read
(
response
,
"$.data.addrReceiverId"
);
}
...
...
@@ -90,10 +144,9 @@ public class Purchase {
* @param token 用户token
* @param skuNo sku no
* @param addrReceiverId 地址id
* @param deviceId 设备id
* @return
*/
public
static
Map
<
String
,
Object
>
confirmOrder
(
String
namespace
,
String
token
,
String
skuNo
,
Integer
addrReceiverId
,
String
deviceId
)
{
public
static
Map
<
String
,
Object
>
confirmOrder
(
String
namespace
,
String
token
,
String
skuNo
,
Integer
addrReceiverId
)
{
String
url
=
"http://talos-"
+
namespace
+
".liangkebang.net/api/kdsp/shop-cart/order-confirm/page/v2"
;
Map
<
String
,
Object
>
headers
=
new
HashMap
<>();
Map
<
String
,
Object
>
params
=
new
HashMap
<>();
...
...
@@ -116,6 +169,7 @@ public class Purchase {
params
.
put
(
"addrReceiverId"
,
addrReceiverId
);
JSONObject
response
=
HttpClientUtils
.
doPostJson
(
url
,
JSON
.
toJSONString
(
params
),
headers
);
log
.
info
(
"确认订单返回结果:"
+
response
);
// 构造确认订单参数
Map
<
String
,
Object
>
result
=
new
HashMap
<>();
result
.
put
(
"totalFreightFee"
,
JsonPath
.
read
(
response
,
"$.data.calcFeeInfo.totalFreightFee"
).
toString
());
result
.
put
(
"totalFee"
,
JsonPath
.
read
(
response
,
"$.data.calcFeeInfo.totalPayFee"
).
toString
());
...
...
@@ -138,33 +192,9 @@ public class Purchase {
* @throws Exception
*/
public
static
String
submitOrder
(
String
namespace
,
String
token
,
Map
<
String
,
Object
>
params
)
throws
Exception
{
System
.
out
.
println
(
"提交订单参数:"
+
JSON
.
toJSONString
(
params
));
String
requestStr
=
JSON
.
toJSONString
(
params
);
log
.
info
(
"确认订单加密前的数据:"
+
requestStr
);
String
url
=
"http://talos-"
+
namespace
+
".liangkebang.net/api/kdsp/order-info/e/submit"
;
// String url = "http://192.168.28.41/api/kdsp/order-info/e/submit";
EncryptRequest
encryptRequest
=
new
EncryptRequest
();
//加密过程
String
appId
=
"101"
;
// String APP_PRIMARY_KEY = "MIICdQIBADANBgkqhkiG9w0BAQEFAASCAl8wggJbAgEAAoGBAIZ/jCc0lcdcznjCybFPCGmI9oCnbvMzdCyta7X4Y4ygIOYAQ5vaNiPI2HAEh5X15jR/Cgr4x9YHLBuifKnJezWPmX+ZOYVFDwhlj7FkXS3TVyiuegykomdyg2LCpz06eyLAY+rMiz+ItqUGiemmqFZKfSD328VLaqCvRac5aWotAgMBAAECgYA8E1Kt3F4ee4S6Cf9/FFcklInOc3sqZEw6/IdE85q7oHaxZWLNhY1zNG4AsvVA9WILBsecmPzhy7hW66AVUqqWXA8jLIg/J3UyIRQo1sH9cX+3iERhNZluxXzxcX/UXrVQihyEFWZbehtpXFfPq1F7XzkTKy8qSodRLO79F8Tc/QJBAOF2vZ4Ah8GhiZP/KMYX7Q1fY5x/zTKmnNs1fJGDoRmgcF47Inzf2Ovjo+do/QdCf+Bzki6WG0AOpIHKksuw5r8CQQCYtttPfP8FKRxumcczNmkaKDWjrKElwRcGef5OuNBb7Crso9gUY+sL9/4kQHfmBfCS6KVbAA56RSdeSWFYZDYTAkA58pbRoTlDHw2JKC+Gmmem5Dlp478NoZz3Ckw16irht0aqMXCvv6i1GBDsTSObVhAf1BRiPNpMIHdPlI0eJR1pAkA7Oge6P0cEcFpHhrpb4UlHzLpo3QWuh8FvUJbRXxnn3KMVHcIqvkmlXauh0aLugfU4dKPUtCPpRbKr/ZeUWWEjAkAN5D5hH16RwrR6KN8W7t0gnlwOECPD8KbBQeWSja9r8C/yWMmr4RsWirBoDSYu4IG8jnrNcmYk8l1eAWmNyJWe";
String
APP_PRIMARY_KEY
=
"MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAINPX+KdtJJYHHgLrurdJOK4mAGeP/RST69ATX1Ir4YBasxmIL7XMRtgJHjwrUZv7v3c4M/RQSSwUXQP5NLE7ns4uZUm/JZoG1zgmq43IqyuwTLlitwYn221DWToehmKp9uC1WhK84EfkCDtinqLA7Rslh9FrlKkVHyus2eONPm7AgMBAAECgYB43wzthqwcdj0mh+Ko0Y5NoQxTmP9YAJjXQoLSC6F+4jkUFAKaiW3rvDF2nl1yVEETsEnFIuMrSZ6BDsxc8+htb458A/kMXdyNvE1eaSnYd5Y0kPX+IyaX6+fTHfGF7SvEs4gHKJFW+G1UQ0veDTeUlNGQVwj5eVnAj+UhWuKWSQJBAN0SFsi/jnc5moqH7F/SNUKNtSCOhRaz/RjEdTjHHWpCYmK8RP+cfHJp4Cb7P/jG0XEFFQSS5FIjQn6ujAfiSH8CQQCYDqFjWxhViONtjnuovqBIKGxppk5SA22leSa53Bads26HKpsIHsFQvr3fXMe2BEUsGFYN20mlouQP7BHn1NDFAkBpJ0KJKHyWf2LgA/lONsm4p3kBTGlHvENmNYRghm2abosn1c+oGgIj1fKV+Cqcpc1XyggOTeSmoTju0w2ublb3AkAOt4PJQPzW8nvIk7zGNUUAFuF/TDhSWcCX/mTQIkwSEVbGQEpm+8sMDJoF703pAPrM7MIPb0Tughh+rgOBo6hdAkEAz7Q1UnZSwr2+2sgKUnMxUVCPTt/ImyWXukU8Uys8hT3i8XFex7dTaAd8XG3Zc77amaXvIBqxo5I6jKbzJCZUwA=="
;
String
SERVER_PUBLIC_KEY
=
"MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCGf4wnNJXHXM54wsmxTwhpiPaAp27zM3QsrWu1+GOMoCDmAEOb2jYjyNhwBIeV9eY0fwoK+MfWBywbonypyXs1j5l/mTmFRQ8IZY+xZF0t01cornoMpKJncoNiwqc9OnsiwGPqzIs/iLalBonppqhWSn0g99vFS2qgr0WnOWlqLQIDAQAB"
;
String
nonce
=
UUID
.
randomUUID
().
toString
();
String
timeStamp
=
DateFormatUtils
.
format
(
new
Date
(),
"yyyy-MM-dd HH:mm:ss"
);
//生成AES key
String
randomKey
=
AESUtil
.
getRandomKey
();
//使用AES key对业务数据进行加密
String
encodeBody
=
AESUtil
.
encryptToBase64
(
JSON
.
toJSONString
(
params
),
randomKey
);
String
body
=
appId
+
nonce
+
timeStamp
+
encodeBody
;
//使用私钥进行签名
String
sign
=
RSA
.
sign
(
body
,
APP_PRIMARY_KEY
);
//使用服务端公钥对AES key进行加密
String
encryptKey
=
RSA
.
encryptToBase64
(
randomKey
,
SERVER_PUBLIC_KEY
);
encryptRequest
.
setAppId
(
appId
);
encryptRequest
.
setEncryptKey
(
encryptKey
);
encryptRequest
.
setBody
(
encodeBody
);
encryptRequest
.
setSign
(
sign
);
encryptRequest
.
setNonce
(
nonce
);
encryptRequest
.
setTimestamp
(
timeStamp
);
Map
<
String
,
Object
>
headers
=
new
HashMap
<>();
headers
.
put
(
"Content-Type"
,
"application/json"
);
...
...
@@ -175,18 +205,149 @@ public class Purchase {
headers
.
put
(
"version"
,
"7.9.00"
);
headers
.
put
(
"appName"
,
"xinyongqianbao"
);
JSONObject
response
=
HttpClientUtils
.
doPostJson
(
url
,
JSON
.
toJSONString
(
encryptRequest
),
headers
);
log
.
info
(
"加密结果: "
+
JSON
.
toJSONString
(
encryptRequest
));
EncryptRequest
request
=
encryptOrderReq4IOS
(
requestStr
);
log
.
info
(
"确认订单加密后的数据:"
+
JSON
.
toJSONString
(
request
));
JSONObject
response
=
HttpClientUtils
.
doPostJson
(
url
,
JSON
.
toJSONString
(
request
),
headers
);
log
.
info
(
"提交订单返回结果:"
+
response
);
return
null
;
return
JsonPath
.
read
(
response
,
"$.data.orderNo"
)
;
}
public
static
String
queryPayStatus
(
String
namespace
,
String
token
,
String
orderNo
)
{
String
url
=
"http://talos-"
+
namespace
+
".liangkebang.net/open/checkout/pay_status/query"
;
Map
<
String
,
Object
>
headers
=
new
HashMap
<>();
Map
<
String
,
Object
>
params
=
new
HashMap
<>();
headers
.
put
(
"Content-Type"
,
"application/json"
);
headers
.
put
(
"x-user-terminal"
,
"IOS"
);
headers
.
put
(
"x-auth-token"
,
token
);
headers
.
put
(
"scDeviceId"
,
"D69C97EC-AC7F-4C5D-AC14-50933E990795"
);
headers
.
put
(
"vccChannel"
,
214
);
headers
.
put
(
"version"
,
"7.9.00"
);
headers
.
put
(
"appName"
,
"xinyongqianbao"
);
params
.
put
(
"orderNo"
,
orderNo
);
JSONObject
response
=
HttpClientUtils
.
doPostJson
(
url
,
JSON
.
toJSONString
(
params
),
headers
);
log
.
info
(
"支付状态返回:"
+
response
);
return
JsonPath
.
read
(
response
,
"$.data.payStatus"
);
}
public
static
void
openCheckout
(
String
namespace
,
String
token
,
String
orderNo
)
{
String
url
=
"http://talos-"
+
namespace
+
".liangkebang.net/open/checkout"
;
Map
<
String
,
Object
>
headers
=
new
HashMap
<>();
Map
<
String
,
Object
>
params
=
new
HashMap
<>();
headers
.
put
(
"Content-Type"
,
"application/json"
);
headers
.
put
(
"x-user-terminal"
,
"IOS"
);
headers
.
put
(
"x-auth-token"
,
token
);
headers
.
put
(
"scDeviceId"
,
"D69C97EC-AC7F-4C5D-AC14-50933E990795"
);
headers
.
put
(
"vccChannel"
,
214
);
headers
.
put
(
"version"
,
"7.9.00"
);
headers
.
put
(
"appName"
,
"xinyongqianbao"
);
params
.
put
(
"orderNo"
,
orderNo
);
JSONObject
response
=
HttpClientUtils
.
doPostJson
(
url
,
JSON
.
toJSONString
(
params
),
headers
);
log
.
info
(
"/open/checkOut返回响应:"
+
response
);
}
public
static
void
payReissueContract
(
String
namespace
,
String
token
)
{
String
url
=
"http://talos-"
+
namespace
+
".liangkebang.net/open/checkout/payReissueContract"
;
Map
<
String
,
Object
>
headers
=
new
HashMap
<>();
Map
<
String
,
Object
>
params
=
new
HashMap
<>();
headers
.
put
(
"Content-Type"
,
"application/json"
);
headers
.
put
(
"x-user-terminal"
,
"IOS"
);
headers
.
put
(
"x-auth-token"
,
token
);
headers
.
put
(
"scDeviceId"
,
"D69C97EC-AC7F-4C5D-AC14-50933E990795"
);
headers
.
put
(
"vccChannel"
,
214
);
headers
.
put
(
"version"
,
"7.9.00"
);
headers
.
put
(
"appName"
,
"xinyongqianbao"
);
List
<
String
>
templateIdList
=
new
ArrayList
<>();
templateIdList
.
add
(
"412"
);
templateIdList
.
add
(
"494"
);
templateIdList
.
add
(
"495"
);
params
.
put
(
"templateIdList"
,
templateIdList
);
JSONObject
response
=
HttpClientUtils
.
doPostJson
(
url
,
JSON
.
toJSONString
(
params
),
headers
);
log
.
info
(
"合同签署返回结果:"
+
response
);
}
public
static
String
checkoutPrePay
(
String
namespace
,
String
token
,
String
orderNo
)
{
String
url
=
"http://talos-"
+
namespace
+
".liangkebang.net/open/checkout/prepay"
;
Map
<
String
,
Object
>
headers
=
new
HashMap
<>();
Map
<
String
,
Object
>
params
=
new
HashMap
<>();
headers
.
put
(
"Content-Type"
,
"application/json"
);
headers
.
put
(
"x-user-terminal"
,
"IOS"
);
headers
.
put
(
"x-auth-token"
,
token
);
headers
.
put
(
"scDeviceId"
,
"D69C97EC-AC7F-4C5D-AC14-50933E990795"
);
headers
.
put
(
"vccChannel"
,
214
);
headers
.
put
(
"version"
,
"7.9.00"
);
headers
.
put
(
"appName"
,
"xinyongqianbao"
);
params
.
put
(
"orderNo"
,
orderNo
);
params
.
put
(
"payMethod"
,
1
);
JSONObject
response
=
HttpClientUtils
.
doPostJson
(
url
,
JSON
.
toJSONString
(
params
),
headers
);
log
.
info
(
"预支付返回结果:"
+
response
);
return
JsonPath
.
read
(
response
,
"$.data.flowOrderNo"
);
}
public
static
String
vccAccountSalt
(
String
namespace
,
String
token
)
throws
URISyntaxException
{
String
url
=
"http://talos-"
+
namespace
+
".liangkebang.net/vcc/account/salt"
;
Map
<
String
,
Object
>
headers
=
new
HashMap
<>();
headers
.
put
(
"Content-Type"
,
"application/json"
);
headers
.
put
(
"x-user-terminal"
,
"IOS"
);
headers
.
put
(
"x-auth-token"
,
token
);
headers
.
put
(
"scDeviceId"
,
"D69C97EC-AC7F-4C5D-AC14-50933E990795"
);
headers
.
put
(
"vccChannel"
,
214
);
headers
.
put
(
"version"
,
"7.9.00"
);
headers
.
put
(
"appName"
,
"xinyongqianbao"
);
JSONObject
response
=
HttpClientUtils
.
doGetReturnJson
(
url
,
null
,
headers
);
log
.
info
(
"vcc加盐返回结果:"
+
response
);
return
JsonPath
.
read
(
response
,
"$.data.payPwdSalt"
);
}
public
static
Integer
checkoutPay
(
String
namespace
,
String
token
,
String
orderNo
,
String
flowOrderNo
,
String
payPwdSalt
)
{
String
url
=
"http://talos-"
+
namespace
+
".liangkebang.net/open/checkout/pay"
;
Map
<
String
,
Object
>
headers
=
new
HashMap
<>();
headers
.
put
(
"Content-Type"
,
"application/json"
);
headers
.
put
(
"x-user-terminal"
,
"IOS"
);
headers
.
put
(
"x-auth-token"
,
token
);
headers
.
put
(
"scDeviceId"
,
"D69C97EC-AC7F-4C5D-AC14-50933E990795"
);
headers
.
put
(
"vccChannel"
,
214
);
headers
.
put
(
"version"
,
"7.9.00"
);
headers
.
put
(
"appName"
,
"xinyongqianbao"
);
Map
<
String
,
Object
>
params
=
new
HashMap
<>();
params
.
put
(
"orderNo"
,
orderNo
);
params
.
put
(
"flowOrderNo"
,
flowOrderNo
);
params
.
put
(
"password"
,
DESUtils
.
encrypt
(
"123456"
,
payPwdSalt
));
JSONObject
response
=
HttpClientUtils
.
doPostJson
(
url
,
JSON
.
toJSONString
(
params
),
headers
);
log
.
info
(
"支付返回结果:"
+
response
);
return
JsonPath
.
read
(
response
,
"$.data.creditPayInfo.creditPayStatus"
);
}
public
static
void
main
(
String
[]
args
)
throws
Exception
{
String
namespace
=
"
vcc2
"
;
String
token
=
loginApp
(
namespace
,
"18300002000"
,
"D69C97EC-AC7F-4C5D-AC14-50933E990795"
);
String
namespace
=
"
test1
"
;
String
token
=
loginApp
(
namespace
,
"18300002000"
);
Integer
addressId
=
getAddressList
(
namespace
,
token
);
Map
<
String
,
Object
>
submitParams
=
confirmOrder
(
namespace
,
token
,
"26423184333313"
,
addressId
,
"D69C97EC-AC7F-4C5D-AC14-50933E990795"
);
submitOrder
(
namespace
,
token
,
submitParams
);
Map
<
String
,
Object
>
submitParams
=
confirmOrder
(
namespace
,
token
,
"26423184333313"
,
addressId
);
String
orderNo
=
submitOrder
(
namespace
,
token
,
submitParams
);
String
payStatus
=
queryPayStatus
(
namespace
,
token
,
orderNo
);
openCheckout
(
namespace
,
token
,
orderNo
);
payReissueContract
(
namespace
,
token
);
String
flowOrderNo
=
checkoutPrePay
(
namespace
,
token
,
orderNo
);
String
payPwdSalt
=
vccAccountSalt
(
namespace
,
token
);
Integer
creditPayStatus
=
checkoutPay
(
namespace
,
token
,
orderNo
,
flowOrderNo
,
payPwdSalt
);
}
}
src/main/java/cn/qg/qaplatform/service/zdata/yxm/PurchaseService.java
0 → 100644
View file @
a107b998
package
cn
.
qg
.
qaplatform
.
service
.
zdata
.
yxm
;
public
interface
PurchaseService
{
boolean
quotaPurchase
(
String
namespace
,
String
phoneNo
);
}
src/main/java/cn/qg/qaplatform/service/zdata/yxm/impl/PurchaseServiceImpl.java
0 → 100644
View file @
a107b998
package
cn
.
qg
.
qaplatform
.
service
.
zdata
.
yxm
.
impl
;
import
cn.qg.qaplatform.service.zdata.yxm.PurchaseService
;
import
org.springframework.stereotype.Service
;
/**
* @author libo
* 2021-08-04
*/
@Service
public
class
PurchaseServiceImpl
implements
PurchaseService
{
/**
* 电商额度购买全流程
* @param namespace 环境
* @param phoneNo 手机号
* @return
*/
@Override
public
boolean
quotaPurchase
(
String
namespace
,
String
phoneNo
)
{
return
false
;
}
}
src/main/resources/mapper/zdata/KdspMapper.xml
0 → 100644
View file @
a107b998
<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper
namespace=
"cn.qg.qaplatform.mapper.zdata.KdspMapper"
>
<select
id=
"getSelfSupportSkuNoList"
resultType=
"java.util.Map"
>
SELECT
*
FROM t_sku_info
<where>
stock > 0
<if
test=
"skuSource != null and skuSource != ''"
>
AND `sku_source` = #{skuSource}
</if>
<if
test=
"salePriceLimit != null and salePriceLimit != ''"
>
AND `sale_price`
<
= #{salePriceLimit}
</if>
</where>
</select>
</mapper>
\ No newline at end of file
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