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