- 云商店介绍
-
商家指南
- 商家入驻
- 商品发布
- 商品交易
- 商家结算
- 店铺运营
- 政策与权益
-
商家常见问题
- 入驻前需要准备哪些企业证件
- 商家退出后,是否还能申请入驻
- 如何加入云商店合作伙伴
- 提交入驻申请后,审核需要多久
- 如何在云商店发布产品
- 商品发布申请提交后,审核需要多久
- 商品如何下架
- 订单出账后,什么时间能收到回款
- 如何判断订单是否符合开票条件?我的订单是否可开具发票?我可以开票了吗?
- 产品技术支持是卖家还是华为云提供
- 云商店商品上架的使用有效期
- 如何发起服务监管申诉
- 个人是否能成为云商店的seller
- 入驻云商店可以享受哪些利好
- 入驻云商店收取保证金吗
- 如何修改公司名称
- 订单为什么没出账?出账的前提是什么?
- 如何查看商品的分成比例
- 如何发布SaaS类商品试用规格
- 云商店镜像资产无法选择到已创建私人镜像的原因
- 经销商指南
- 用户指南
- 接入指南
- 通用参考
展开导读
链接复制成功!
ISV Server验证所有的通知请求
代码调用如下图所示。
/** * 校验通知消息的合法性 * @param request http请求通知消息 * @param accessKey 接入码 * @param encryptLength 加密长度 * @return 验证结果 */ public static boolean verificateRequestParams(javax.servlet.http.HttpServletRequest request, String accessKey,int encryptLength) { //解析出url内容 Map<String, String[]> paramsMap = request.getParameterMap(); String timeStamp = null; String authToken = null; String[] timeStampArray = paramsMap.get("timeStamp"); if (null != timeStampArray && timeStampArray.length > 0) { timeStamp = timeStampArray[0]; } String[] authTokenArray = paramsMap.remove("authToken"); if (null != authTokenArray && authTokenArray.length > 0) { authToken = authTokenArray[0]; } //对剩下的参数进行排序,拼接成加密内容 Map<String, String[]> sortedMap = new TreeMap<String, String[]>(); sortedMap.putAll(paramsMap); StringBuffer strBuffer = new StringBuffer(); Set<String> keySet = sortedMap.keySet(); Iterator<String> iter = keySet.iterator(); while (iter.hasNext()) { String key = iter.next(); String value = sortedMap.get(key)[0]; strBuffer.append("&").append(key).append("=").append(value); } //修正消息体,去除第一个参数前面的& String reqParams = strBuffer.toString().substring(1); String key = accessKey + timeStamp; String signature = null; try { signature = generateResponseBodySignature(key, reqParams); } catch (InvalidKeyException | NoSuchAlgorithmException | IllegalStateException | UnsupportedEncodingException e) { // TODO Auto-generated catch block } return authToken.equals(signature); } |
/** * 生成http响应消息体签名示例Demo * @param key 用户在isv console分配的accessKey,请登录后查看 * @param body http响应的报文 * @return 加密结果 * @throws InvalidKeyException * @throws NoSuchAlgorithmException * @throws IllegalStateException * @throws UnsupportedEncodingException */ public static String generateResponseBodySignature(String key, String body) throws InvalidKeyException, NoSuchAlgorithmException, IllegalStateException, UnsupportedEncodingException { return base_64(hmacSHA256(key, body)); } |
/** * * hamcSHA256加密算法 * @param macKey 秘钥key * @param macData 加密内容-响应消息体 * @return 加密密文 * @throws NoSuchAlgorithmException * @throws InvalidKeyException * @throws IllegalStateException * @throws UnsupportedEncodingException */ public static byte[] hmacSHA256(String macKey, String macData) throws NoSuchAlgorithmException, InvalidKeyException, IllegalStateException, UnsupportedEncodingException { SecretKeySpec secret = new SecretKeySpec(macKey.getBytes(), "HmacSHA256"); Mac mac = Mac.getInstance("HmacSHA256"); mac.init(secret); byte[] doFinal = mac.doFinal(macData.getBytes("UTF-8")); return doFinal; } |
/** * * 字节数组转字符串 * @param bytes 字节数组 * @return 字符串 */ public static String base_64(byte[] bytes) { return new String(Base64.encodeBase64(bytes)); } |