Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
A
amos-boot-zx-biz
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
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
Jobs
Commits
Open sidebar
项目统一框架
一体化_户用光伏项目代码
amos-boot-zx-biz
Commits
d0154e61
Commit
d0154e61
authored
Jul 18, 2024
by
yangyang
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
对接聚富通
parent
efa07f37
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
215 additions
and
32 deletions
+215
-32
HygfIcbcRecordMapper.xml
.../src/main/resources/mapper/mysql/HygfIcbcRecordMapper.xml
+49
-0
HygfIcbcController.java
...s/boot/module/hygf/biz/controller/HygfIcbcController.java
+16
-5
HygfIcbcServiceImpl.java
...oot/module/hygf/biz/service/impl/HygfIcbcServiceImpl.java
+150
-27
No files found.
amos-boot-system-jxiop/amos-boot-module-hygf-api/src/main/resources/mapper/mysql/HygfIcbcRecordMapper.xml
0 → 100644
View file @
d0154e61
<?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=
"com.yeejoin.amos.boot.module.hygf.api.mapper.HygfIcbcRecordMapper"
>
<sql
id=
"tableName"
>
hygf_icbc_record
</sql>
<sql
id=
"baseColumn"
>
sequence_nbr,cust_name,id_card,phone,medium_id,project_id,open_account_state,protocol_status,protocol_start_time,protocol_end_time,trx_limit_amount,day_limit_amount,protocol_limit_amount,app_id,out_user_id,out_vendor_id,sign_entrsut_prtl_status
</sql>
<select
id=
"listObject"
resultType=
"com.yeejoin.amos.boot.module.hygf.api.dto.HygfIcbcRecordDTO"
>
SELECT DISTINCT
icbc.sequence_nbr,
ph.owners_name as custName,
ph.telephone as phone,
ph.id_card,
ph.amos_user_id,
icbc.open_account_status,
icbc.protocol_status
FROM
hygf_peasant_household ph LEFT JOIN hygf_icbc_record icbc ON ph.amos_user_id = icbc.amos_user_id
<where>
ph.is_delete = 0
<if
test=
"param != null"
>
<if
test=
"param.openAccountStatus != null and param.openAccountStatus != ''"
>
AND icbc.protocol_status = #{param.openAccountStatus}
</if>
<if
test=
"param.custName != null and param.custName != ''"
>
AND ph.owners_name LIKE CONCAT('%', #{param.custName}, '%')
</if>
<if
test=
"param.idCard != null and param.idCard != ''"
>
AND ph.id_card LIKE CONCAT('%', #{param.idCard}, '%')
</if>
<if
test=
"param.phone != null and param.phone != ''"
>
AND ph.telephone LIKE CONCAT('%', #{param.phone}, '%')
</if>
<if
test=
"param.regionalCompaniesSeq != null and param.regionalCompaniesSeq != ''"
>
AND ph.regional_companies_seq = #{param.regionalCompaniesSeq}
</if>
</if>
</where>
GROUP BY
ph.amos_user_id
ORDER BY
ph.rec_date DESC
</select>
</mapper>
\ No newline at end of file
amos-boot-system-jxiop/amos-boot-module-hygf-biz/src/main/java/com/yeejoin/amos/boot/module/hygf/biz/controller/HygfIcbcController.java
View file @
d0154e61
...
...
@@ -64,14 +64,25 @@ public class HygfIcbcController extends BaseController {
@GetMapping
(
value
=
"/getHygfIcbcWalletInfo"
)
@ApiOperation
(
httpMethod
=
"GET"
,
value
=
"获取钱包信息"
,
notes
=
"获取钱包信息"
)
public
ResponseModel
<
JftApiUserEntrustopenacctQueryResponseV1
>
getHygfIcbcWalletInfo
(
HttpServletRequest
req
,
HttpServletResponse
resp
)
{
return
ResponseHelper
.
buildResponse
(
hygfIcbcService
.
getHygfIcbcWalletInfo
(
req
,
resp
));
return
ResponseHelper
.
buildResponse
(
hygfIcbcService
.
getHygfIcbcWalletInfo
(
req
.
getParameter
(
"userId"
)
));
}
@TycloudOperation
(
ApiLevel
=
UserType
.
AGENCY
,
needAuth
=
false
)
@PostMapping
(
value
=
"/registerWalletCallback"
)
/**
* 开户签约异步通知
*
*
* @param request request
* @param response response
* @return {@link Object}
* @author yangyang
* @throws
* @date 2024/7/18 19:39
*/
@TycloudOperation
(
ApiLevel
=
UserType
.
PUBLIC
,
needAuth
=
false
)
@PostMapping
(
value
=
"/notify"
)
@ApiOperation
(
httpMethod
=
"POST"
,
value
=
"注册电子钱包回调"
,
notes
=
"注册电子钱包回调"
)
public
ResponseModel
<
HygfIcbcRecordDTO
>
registerWalletCallback
(
@ApiParam
@RequestBody
HygfIcbcRecordDTO
hygfIcbcRecordDTO
)
{
return
ResponseHelper
.
buildResponse
(
hygfIcbcService
.
registerWalletCallback
(
hygfIcbcRecordDTO
)
);
public
Object
notify
(
HttpServletRequest
request
,
HttpServletResponse
response
)
throws
Exception
{
return
hygfIcbcService
.
registerWalletCallback
(
request
,
response
);
}
@TycloudOperation
(
ApiLevel
=
UserType
.
AGENCY
,
needAuth
=
false
)
...
...
amos-boot-system-jxiop/amos-boot-module-hygf-biz/src/main/java/com/yeejoin/amos/boot/module/hygf/biz/service/impl/HygfIcbcServiceImpl.java
View file @
d0154e61
package
com
.
yeejoin
.
amos
.
boot
.
module
.
hygf
.
biz
.
service
.
impl
;
import
cn.hutool.core.codec.Base64
;
import
com.alibaba.fastjson.JSONObject
;
import
com.icbc.api.DefaultIcbcClient
;
import
com.icbc.api.IcbcApiException
;
import
com.baomidou.mybatisplus.extension.plugins.pagination.Page
;
...
...
@@ -10,6 +12,8 @@ import com.icbc.api.UiIcbcClient;
import
com.icbc.api.request.JftApiUserEntrustopenacctQueryRequestV1
;
import
com.icbc.api.request.JftUiUserEntrustopenacctSubmitRequestV1
;
import
com.icbc.api.response.JftApiUserEntrustopenacctQueryResponseV1
;
import
com.icbc.api.utils.IcbcSignature
;
import
com.icbc.api.utils.WebUtils
;
import
com.yeejoin.amos.boot.module.hygf.api.Enum.IcbcEnum
;
import
com.yeejoin.amos.boot.module.hygf.api.dto.FinancingInfoDto
;
import
com.yeejoin.amos.boot.module.hygf.api.dto.FinancingRectificationOrderDto
;
...
...
@@ -24,9 +28,9 @@ import com.yeejoin.amos.boot.module.hygf.api.service.IHygfIcbcService;
import
io.swagger.annotations.ApiParam
;
import
lombok.extern.slf4j.Slf4j
;
import
net.sf.json.JSON
;
import
net.sf.json.JSONObject
;
import
org.apache.commons.lang3.StringUtils
;
import
org.springframework.beans.BeanUtils
;
import
org.springframework.beans.factory.annotation.Value
;
import
org.springframework.stereotype.Service
;
import
org.springframework.util.CollectionUtils
;
import
org.springframework.web.bind.annotation.RequestBody
;
...
...
@@ -39,11 +43,14 @@ import javax.annotation.Resource;
import
javax.servlet.http.HttpServletRequest
;
import
javax.servlet.http.HttpServletResponse
;
import
java.io.PrintWriter
;
import
java.io.UnsupportedEncodingException
;
import
java.net.URLDecoder
;
import
java.text.SimpleDateFormat
;
import
java.time.LocalDateTime
;
import
java.time.format.DateTimeFormatter
;
import
java.util.Calendar
;
import
java.util.Date
;
import
java.util.HashMap
;
import
java.util.Map
;
import
java.util.Collections
;
import
java.util.List
;
...
...
@@ -76,7 +83,7 @@ public class HygfIcbcServiceImpl extends BaseService<HygfIcbcRecordDTO, HygfIcbc
// private static final String OUT_VENDOR_ID = "071301";
// private static final String PROJECT_ID = "PJ14001401B000160171";
// 测试环境
// 测试环境
private
static
final
String
APP_ID
=
"11000000000000009254"
;
private
static
final
String
corpNo
=
"10000000000000088011"
;
private
static
final
String
MY_PRIVATE_KEY
=
"MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCxMt/01YNUsTfG6ml8Nyw7Xs80k3G72mmnD8mpR5v6ZU0v7i8lynBJxqDWFRqo6brZr/yzneyuEM0c+qbhYA4NNgWuri87PFWZND5H249ZpEZPmnZSOg6R7RwiFQG8uhwMTlZwYkNJc6fBFnLvUwMu3pPHINx10iHh7dawbX1GZDKk82gUBaTzYMkg0CW8PtOUdGwW+4uyt5KGWp90MTqS47JmGCLWWwLMW3MhPe8/PBApFdRQi2cdOXHQ+HwleTL7kHXi2XEHnbIxZuOuyXUkiRog4fajs+ZS+o+YgC2JEhGN5om64LrSUXrEyeOZSdHMriKLxsBUbS5AUP8rOvqjAgMBAAECggEBAKwB55YhoK+Yq70ilSzn3b7wBJFTwyaIGOD7mVUCVy3UIf4x5oB3p1JmRoAp0kw/PorLo7CzzykU1BaaVV4XQOygERoEqYKFyc3DAeX9AoUQytPA67Rb+QK8OP/4hkwuGMX1UUEckZZ+d0wev4kDeuaHVsoIYxjX1t4aYrm2PtIRGFLYZvB44Chu8oCK/yesZ9JP+BKKPLJzsx1bEnxZHkQK4IJBWbxSbi/QGiJ254Q4nyinCPUuaRzpiiN/ZmbdLIZ4NYZeQr7sK4wXhgy6XMeMZFHm/WE0EKSBqR82oO6PL/AOR6v9GVMj9kGLfegQHsFyiDJKHzYqj80hX5tyZIkCgYEA6PdmNOpiplNBkg9xxGgSZIWqbRqKBTR51QDB2WPKkC27S7Biy1E+ncz7osSP9X16Y87eKV32ioqJzZ9eND1ri9DnETkPhnYfv4DJRsD3fTHZCtPh274KXASma4DyZnCJY913vjHKqAjJKwl10SR7EFGwQ1LOHKXkLrUa4rASvH0CgYEAwrfxXj+94YnFkialYNbVT3pYdYR0x6b9z70YnYktaZtWZO01hV8lpdpKi/6f5DMIrDC6d9QsjmVXEjZFv1YLlkqEc8FXsThsXWphCr27EtEwymlN90RiIjBInhUh4BrQqMRKbz8CAQgyxiNohEJUVwVlESNSBjfi0eNHFwRg3Z8CgYBE/X73DLJKLz2r04cNcwR/YFYoGUPmZrPtsFu31SWXrPNaZtHbBCRW9u1ONoerW41zIUAJYBoyzPQiQJ/VOJswvJyxLQS7/R9JxwnUOjEQkkKEQlsQiCbpOTdPftBKJemJ+XwMhxJM0M1CQXryhKstGgPo7Ay9zyLT8i4UE7B4wQKBgQCKiNo2Jv2OUDn7sHkq+84J3M7A1XtMbLfZq/yuYGGp6DXAWrAgcsBTToqJLaBOeCysbYLNLGyC5wDa2TgoWCyoQd4YiS89zBn1IHFodfJ6AdFHwUISMVnsXxPbPMe8LPfViso2ecqQN2gAZkK/Dn3458KvPcTm3a4HjD8Q1jGgmwKBgHbzvyt1R38BEGeDhJhqOaBuTeqgChPyQrd1dFRE2VicrTksldel3eHbLgq1iYRyw+l9M66a/03XiCa3yLMIGOn/hOQE7dGxmBI2x44Tf5LugBuQnc5WSXwJ3Qa4+Yjw5yMBL/Hw8hRFlt5ycpy2YyAZ/jdnoNiOuM5koFpQFvfs"
;
...
...
@@ -86,16 +93,20 @@ public class HygfIcbcServiceImpl extends BaseService<HygfIcbcRecordDTO, HygfIcbc
private
static
final
String
APIGW_PUBLIC_KEY
=
"MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCwFgHD4kzEVPdOj03ctKM7KV+16bWZ5BMNgvEeuEQwfQYkRVwI9HFOGkwNTMn5hiJXHnlXYCX+zp5r6R52MY0O7BsTCLT7aHaxsANsvI9ABGx3OaTVlPB59M6GPbJh0uXvio0m1r/lTW3Z60RU6Q3oid/rNhP3CiNgg0W6O3AGqwIDAQAB"
;
private
static
final
String
OUT_VENDOR_ID
=
"071301"
;
private
static
final
String
PROJECT_ID
=
"PJ14001401B000160171"
;
@Value
(
"${hygf.icbc.trxLmtAmt:200000}"
)
private
String
trxLmtAmt
;
@Value
(
"${hygf.icbc.dayLmtAmt:200000}"
)
private
String
dayLmtAmt
;
@Value
(
"${hygf.icbc.loanTotalAmt:200000}"
)
private
String
loanTotalAmt
;
public
void
icbcRegisterWalletUrl
(
HttpServletRequest
req
,
HttpServletResponse
resp
)
{
@Resource
(
type
=
PeasantHouseholdServiceImpl
.
class
)
private
PeasantHouseholdServiceImpl
peasantHouseholdService
;
@Resource
(
type
=
HygfIcbcRecordMapper
.
class
)
private
HygfIcbcRecordMapper
hygfIcbcRecordMapper
;
@Override
public
void
icbcRegisterWalletUrl
(
HttpServletRequest
req
,
HttpServletResponse
resp
)
{
try
{
UiIcbcClient
client
=
new
UiIcbcClient
(
APP_ID
,
IcbcConstants
.
SIGN_TYPE_RSA2
,
MY_PRIVATE_KEY
,
IcbcConstants
.
CHARSET_UTF8
);
...
...
@@ -119,17 +130,22 @@ public class HygfIcbcServiceImpl extends BaseService<HygfIcbcRecordDTO, HygfIcbc
bizContent
.
setBusiCode
(
userId
);
// 缴费编号
Calendar
calendar
=
Calendar
.
getInstance
();
Date
date
=
new
Date
();
//当前时间
Date
date
=
new
Date
();
//
当前时间
calendar
.
setTime
(
date
);
int
year
=
26
;
//26年
calendar
.
add
(
Calendar
.
YEAR
,
year
);
//在年份增加
int
year
=
26
;
//
26年
calendar
.
add
(
Calendar
.
YEAR
,
year
);
//
在年份增加
Date
newDate
=
calendar
.
getTime
();
SimpleDateFormat
formatter
=
new
SimpleDateFormat
(
"yyyy-MM-dd"
);
String
formattedDate
=
formatter
.
format
(
newDate
);
bizContent
.
setProtocolEndDate
(
formattedDate
);
// 协议到期日
bizContent
.
setProtocolLimitAmount
(
"99999999999999999"
);
// 协议累计额
// bizContent.setTemplateParams();
JSONObject
templateParams
=
new
JSONObject
();
templateParams
.
put
(
"prtl_enddate"
,
formattedDate
);
templateParams
.
put
(
"loan_total_amt"
,
loanTotalAmt
);
templateParams
.
put
(
"trx_lmt_amt"
,
trxLmtAmt
);
templateParams
.
put
(
"day_lmt_amt"
,
dayLmtAmt
);
bizContent
.
setTemplateParams
(
templateParams
.
toJSONString
());
// bizContent.setCallbackUrl("https://www.icbc.com.cn/notify");
bizContent
.
setCamsPublicKey
(
CAMS_PUBLIC_KEY
);
...
...
@@ -146,32 +162,16 @@ public class HygfIcbcServiceImpl extends BaseService<HygfIcbcRecordDTO, HygfIcbc
out
.
write
(
"</body>"
);
out
.
write
(
"</html>"
);
}
catch
(
Exception
e
)
{
log
.
error
(
e
.
getMessage
(),
e
);
log
.
error
(
e
.
getMessage
(),
e
);
throw
new
BadRequest
(
"报错了"
);
}
}
public
HygfIcbcRecordDTO
registerWalletCallback
(
HygfIcbcRecordDTO
hygfIcbcRecordDTO
)
{
return
this
.
createWithModel
(
hygfIcbcRecordDTO
);
}
public
JftApiUserEntrustopenacctQueryResponseV1
getHygfIcbcWalletInfo
(
String
userId
)
{
public
HygfIcbcRecordDTO
getObject
(
Long
sequenceNbr
)
{
HygfIcbcRecordDTO
hygfIcbcRecordDTO
=
this
.
queryBySeq
(
sequenceNbr
);
return
hygfIcbcRecordDTO
;
}
public
List
<
HygfIcbcRecordDTO
>
listObject
(
HygfIcbcRecordQueryDTO
hygfIcbcRecordQueryDTO
)
{
List
<
HygfIcbcRecordDTO
>
list
=
hygfIcbcRecordMapper
.
listObject
(
hygfIcbcRecordQueryDTO
);
return
toModels
(
list
);
}
}
public
JftApiUserEntrustopenacctQueryResponseV1
getHygfIcbcWalletInfo
(
HttpServletRequest
req
,
HttpServletResponse
resp
)
{
String
userId
=
req
.
getParameter
(
"userId"
);
// String userId = req.getParameter("userId");
DefaultIcbcClient
client
=
new
DefaultIcbcClient
(
...
...
@@ -202,7 +202,54 @@ public class HygfIcbcServiceImpl extends BaseService<HygfIcbcRecordDTO, HygfIcbc
e
.
printStackTrace
();
return
null
;
}
}
public
Object
registerWalletCallback
(
HttpServletRequest
request
,
HttpServletResponse
response
)
throws
Exception
{
log
.
info
(
"验签"
);
boolean
verifyFlag
=
verifySignData
(
request
,
"/[需替换]合作方通知路径A/[需替换]合作方通知路径B"
);
String
returnJson
;
// 获取其他参数略...
if
(
verifyFlag
)
{
// 验签成功
log
.
info
(
"解密..."
);
String
biz_content
=
request
.
getParameter
(
"biz_content"
);
String
decode
=
URLDecoder
.
decode
(
biz_content
,
"utf-8"
);
Map
<
String
,
String
>
data
=
JSONObject
.
parseObject
(
decode
,
Map
.
class
);
// 其中certNo、custName、newPayAcc字段进行了base64编码,可以调用示例代码中的base64Decode进行解码
String
custName
=
base64Decode
(
data
.
get
(
"custName"
));
String
certNo
=
base64Decode
(
data
.
get
(
"certNo"
));
String
newPayAcc
=
base64Decode
(
data
.
get
(
"newPayAcc"
));
String
outUserId
=
data
.
get
(
"outUserId"
);
String
projectId
=
data
.
get
(
"projectId"
);
String
openAccoutSucceedFlag
=
data
.
get
(
"openAccoutSucceedFlag"
);
String
signEntrsutPrtlSucceedFlag
=
data
.
get
(
"signEntrsutPrtlSucceedFlag"
);
// 获取其他参数略...
//...
JftApiUserEntrustopenacctQueryResponseV1
jftApiUserEntrustopenacctQueryResponseV1
=
this
.
getHygfIcbcWalletInfo
(
outUserId
);
System
.
out
.
println
(
jftApiUserEntrustopenacctQueryResponseV1
);
log
.
info
(
"解密后参数:{}"
,
data
);
// 进行自己的处理,此处默认处理成功,返回通知方成功,return_code=0
String
copReturnCode
=
"0"
;
// 通知合作方接收成功的返回码,固定
String
copReturnMsg
=
"success"
;
// 合作方的返回信息,固定
returnJson
=
sign
(
request
,
copReturnCode
,
copReturnMsg
);
log
.
error
(
"通知响应json结果:{}"
,
returnJson
);
return
returnJson
;
}
else
{
// 验签失败
String
copReturnCode
=
"‐12345"
;
String
copReturnMsg
=
"icbc jft sign not pass."
;
returnJson
=
sign
(
request
,
copReturnCode
,
copReturnMsg
);
log
.
error
(
"通知响应json结果:{}"
,
returnJson
);
}
return
returnJson
;
}
public
HygfIcbcRecordDTO
getObject
(
Long
sequenceNbr
)
{
HygfIcbcRecordDTO
hygfIcbcRecordDTO
=
this
.
queryBySeq
(
sequenceNbr
);
return
hygfIcbcRecordDTO
;
}
public
List
<
HygfIcbcRecordDTO
>
listObject
(
HygfIcbcRecordQueryDTO
hygfIcbcRecordQueryDTO
)
{
List
<
HygfIcbcRecordDTO
>
list
=
hygfIcbcRecordMapper
.
listObject
(
hygfIcbcRecordQueryDTO
);
return
toModels
(
list
);
}
public
Page
<
HygfIcbcRecordDTO
>
queryForPage
(
int
current
,
int
size
,
HygfIcbcRecordQueryDTO
hygfIcbcRecordQueryDTO
)
{
PageHelper
.
startPage
(
current
,
size
);
...
...
@@ -232,4 +279,79 @@ public class HygfIcbcServiceImpl extends BaseService<HygfIcbcRecordDTO, HygfIcbc
return
hygfIcbcRecordDTO
;
}).
collect
(
Collectors
.
toList
());
}
/**
* 验签方法
*
* @param request
* @param path
* @return
* @throws Exception
*/
private
boolean
verifySignData
(
HttpServletRequest
request
,
String
path
)
throws
Exception
{
// 网关公钥
Map
<
String
,
String
>
params
=
new
HashMap
<>();
String
api
=
request
.
getParameter
(
"api"
);
String
from
=
request
.
getParameter
(
"from"
);
String
app_id
=
request
.
getParameter
(
"app_id"
);
String
charset
=
request
.
getParameter
(
"charset"
);
String
format
=
request
.
getParameter
(
"format"
);
String
encrypt_type
=
request
.
getParameter
(
"encrypt_type"
);
String
timestamp
=
request
.
getParameter
(
"timestamp"
);
String
biz_content
=
request
.
getParameter
(
"biz_content"
);
String
sign_type
=
request
.
getParameter
(
"sign_type"
);
String
sign
=
request
.
getParameter
(
"sign"
);
params
.
put
(
"from"
,
from
);
params
.
put
(
"api"
,
api
);
params
.
put
(
"app_id"
,
app_id
);
params
.
put
(
"charset"
,
charset
);
params
.
put
(
"format"
,
format
);
params
.
put
(
"encrypt_type"
,
encrypt_type
);
params
.
put
(
"timestamp"
,
timestamp
);
params
.
put
(
"biz_content"
,
biz_content
);
params
.
put
(
"sign_type"
,
sign_type
);
// 目前上行网关签名暂时仅支持RSA
/**********验证工行上行网关RSA签名**********/
String
signStr
=
WebUtils
.
buildOrderedSignStr
(
path
,
params
);
log
.
error
(
"验签入参,signStr:[[{}]], sign_type:[[{}]], APIGW_PUBLIC_KEY: [[{}]],charset:[[{}]],sign:[[{}]]"
,
signStr
,
sign_type
,
APIGW_PUBLIC_KEY
,
charset
,
sign
);
boolean
flag
=
IcbcSignature
.
verify
(
signStr
,
sign_type
,
APIGW_PUBLIC_KEY
,
charset
,
sign
);
log
.
error
(
"验签结果:[[{}]]"
,
flag
);
return
flag
;
}
/**
* 加签方法
*
* @param request
* @param copReturnCode
* @param copReturnMsg
* @return
* @throws Exception
*/
private
String
sign
(
HttpServletRequest
request
,
String
copReturnCode
,
String
copReturnMsg
)
throws
Exception
{
String
msg_id
=
new
SimpleDateFormat
(
"yyyyMMdd"
).
format
(
new
Date
())
+
new
SimpleDateFormat
(
"HHmmss"
).
format
(
new
Date
());
String
responseBizContent
=
"{\"return_code\":\""
+
copReturnCode
+
"\",\"return_msg\":\""
+
copReturnMsg
+
"\""
+
",\"msg_id\":\""
+
msg_id
+
"\"}"
;
String
charset
=
request
.
getParameter
(
"charset"
);
// 调用过程使用的编码格式
/**********商户对消息返回响应进行签名,签名方式需与在API平台登记APP的sign_type保持一致(目前基本都是RSA2)**********/
String
signType
=
IcbcConstants
.
SIGN_TYPE_RSA2
;
String
signStr
=
"\"response_biz_content\":"
+
responseBizContent
+
","
+
"\"sign_type\":"
+
"\""
+
signType
+
"\""
;
String
signParam
=
IcbcSignature
.
sign
(
signStr
,
signType
,
MY_PRIVATE_KEY
,
charset
);
String
returnJson
=
"{\"response_biz_content\":"
+
responseBizContent
+
",\"sign_type\":\""
+
signType
+
"\""
+
",\"sign\":\""
+
signParam
+
"\"}"
;
return
returnJson
;
}
/**
* base64Decode
*
* @param str
* @return
* @throws UnsupportedEncodingException
*/
public
String
base64Decode
(
String
str
)
throws
UnsupportedEncodingException
{
if
(
str
==
null
||
""
.
equals
(
str
))
{
return
""
;
}
char
[]
ch
=
str
.
toCharArray
();
byte
[]
bt
=
Base64
.
decode
(
String
.
valueOf
(
ch
));
return
new
String
(
bt
,
"UTF-8"
);
}
}
\ 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