1.接口代码
@RequestMapping("notifyUrl")
public void notifyUrl(HttpServletRequest request, HttpServletResponse response) {
String transactionId = request.getParameter("transaction_id");
String contractId = request.getParameter("contract_id");
String resultCode = request.getParameter("result_code"); // 3000(签章成功)3001(签章失败)
String resultDesc = request.getParameter("result_desc");
String timestamp = request.getParameter("timestamp");
String msgDigest = request.getParameter("msg_digest");// Base64( SHA1(
// app_id+MD5(timestamp)+SHA1(app_secret+transaction_id)
// ) ) 建议接入
log.warn("异步通知参数");
log.warn("transactionId= {}", transactionId);
log.warn("contractId = {}", contractId);
log.warn("resultCode = {}", resultCode);
log.warn("resultDesc = {}", resultDesc);
log.warn("timestamp = {}", timestamp);
log.warn("msgDigest = {}", msgDigest);
try {
String msgDigestSelf = new String(FddEncryptTool.Base64Encode(FddEncryptTool
.sha1(appId + FddEncryptTool.md5Digest(timestamp) + FddEncryptTool.sha1(secret + transactionId)).getBytes()));
if (!StringUtils.equals(msgDigestSelf, msgDigest)) {
log.warn("校验失败! {}", msgDigest);
return;
}
} catch (Exception e) {
log.error("{}", e);
}
// TODO 根据transactionId 判断是客户签署还是公司签署,回写当前合同签署状态.
TblContractPre entity = tblContractPreService.findByDeedsn(contractId);
if ((entity != null) && (StringUtils.isNotBlank(entity.getTransactionId()))) {
if (transactionId.equals(entity.getTransactionId())) { // 客户签署
tblContractPreService.SignSuccess(contractId);
}
}
}
2.用postMan测试
后台springMVC用request.getParameter()获取请求参数的话,在postman发送请求时,body选取x-www-form-urlencoded,Headers部分是key: Content-Type----------value: application/x-www-form-urlencoded。
当然,也可以使用其他方式获取请求参数如@RequestBody 实体类 实体变量名来自动封装请求参数到实体中,如用post请求方式发送请求,参数是json格式,那么Header的值要选application/json;charset=utf-8