请选择 进入手机版 | 继续访问电脑版
查看: 3204|回复: 7

[经验分享]消息抄送服务第三方接口示例

[复制链接]

353

主题

373

帖子

9万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
99914
发表于 2017-11-23 14:16:55 | 显示全部楼层 |阅读模式
消息抄送服务的第三方接口示例如下(Java):
[url=]复制代码[/url]
  • package com.netease.nim.route;
  • import com.alibaba.fastjson.JSONObject;
  • import com.netease.nim.route.CheckSumBuilder;
  • import org.apache.commons.io.IOUtils;
  • import org.slf4j.Logger;
  • import org.slf4j.LoggerFactory;
  • import org.springframework.stereotype.Controller;
  • import org.springframework.web.bind.annotation.RequestMapping;
  • import org.springframework.web.bind.annotation.RequestMethod;
  • import org.springframework.web.bind.annotation.ResponseBody;
  • import javax.servlet.http.HttpServletRequest;
  • import java.io.IOException;
  • @Controller
  • @RequestMapping(value = {"/route"})
  • public class RouteController {
  •     public static final Logger logger = LoggerFactory
  •             .getLogger(RouteController.class);
  •     // 需要改成自身应用的appSecret
  •     private final String appSecret = "7bb79g40f44j";
  •     @RequestMapping(value = {"/mockClient.action"}, method = {RequestMethod.POST})
  •     @ResponseBody
  •     public JSONObject mockClient(HttpServletRequest request)
  •             throws Exception {
  •         JSONObject result = new JSONObject();
  •         try {
  •             // 获取请求体
  •             byte[] body = readBody(request);
  •             if (body == null) {
  •                 logger.warn("request wrong, empty body!");
  •                 result.put("code", 414);
  •                 return result;
  •             }
  •             // 获取部分request header,并打印
  •             String ContentType = request.getContentType();
  •             String AppKey = request.getHeader("AppKey");
  •             String CurTime = request.getHeader("CurTime");
  •             String MD5 = request.getHeader("MD5");
  •             String CheckSum = request.getHeader("CheckSum");
  •             logger.info("request headers: ContentType = {}, AppKey = {}, CurTime = {}, " +
  •                     "MD5 = {}, CheckSum = {}", ContentType, AppKey, CurTime, MD5, CheckSum);
  •             // 将请求体转成String格式,并打印
  •             String requestBody = new String(body, "utf-8");
  •             logger.info("request body = {}", requestBody);
  •             // 获取计算过的md5及checkSum
  •             String verifyMD5 = CheckSumBuilder.getMD5(requestBody);
  •             String verifyChecksum = CheckSumBuilder.getCheckSum(appSecret, verifyMD5, CurTime);
  •             logger.debug("verifyMD5 = {}, verifyChecksum = {}", verifyMD5, verifyChecksum);
  •             // TODO: 比较md5、checkSum是否一致,以及后续业务处理
  •             result.put("code", 200);
  •             return result;
  •         } catch (Exception ex) {
  •             logger.error(ex.getMessage(), ex);
  •             result.put("code", 414);
  •             return result;
  •         }
  •     }
  •     private byte[] readBody(HttpServletRequest request) throws IOException {
  •         if (request.getContentLength() > 0) {
  •             byte[] body = new byte[request.getContentLength()];
  •             IOUtils.readFully(request.getInputStream(), body);
  •             return body;
  •         } else
  •             return null;
  •     }
  • }


[url=]复制代码[/url]
  • package com.netease.nim.route;
  • import java.security.MessageDigest;
  • public class CheckSumBuilder {
  •     // 计算并获取CheckSum
  •     public static String getCheckSum(String appSecret, String nonce, String curTime) {
  •         return encode("sha1", appSecret + nonce + curTime);
  •     }
  •     // 计算并获取md5值
  •     public static String getMD5(String requestBody) {
  •         return encode("md5", requestBody);
  •     }
  •     private static String encode(String algorithm, String value) {
  •         if (value == null) {
  •             return null;
  •         }
  •         try {
  •             MessageDigest messageDigest
  •                     = MessageDigest.getInstance(algorithm);
  •             messageDigest.update(value.getBytes());
  •             return getFormattedText(messageDigest.digest());
  •         } catch (Exception e) {
  •             throw new RuntimeException(e);
  •         }
  •     }
  •     private static String getFormattedText(byte[] bytes) {
  •         int len = bytes.length;
  •         StringBuilder buf = new StringBuilder(len * 2);
  •         for (int j = 0; j < len; j++) {
  •             buf.append(HEX_DIGITS[(bytes[j] >> 4) & 0x0f]);
  •             buf.append(HEX_DIGITS[bytes[j] & 0x0f]);
  •         }
  •         return buf.toString();
  •     }
  •     private static final char[] HEX_DIGITS = { '0', '1', '2', '3', '4', '5',
  •             '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' };
  • }


回复

使用道具 举报

0

主题

2

帖子

5

积分

云客

Rank: 1

积分
5
发表于 2018-3-13 15:46:10 | 显示全部楼层
地址必须是 公网地址 才能校 验 通过吗?
回复

使用道具 举报

0

主题

4

帖子

31

积分

云客

Rank: 1

积分
31
发表于 2018-6-22 17:33:01 | 显示全部楼层
它会有node.js版本吗?
回复

使用道具 举报

0

主题

4

帖子

31

积分

云客

Rank: 1

积分
31
发表于 2018-6-24 01:36:13 | 显示全部楼层
Main.java 这个设置是否正确?

package com.netease.nim.route;
public class Main {
        public static void main(String[] args) {
                new RouteController();
        }
}
回复

使用道具 举报

0

主题

4

帖子

31

积分

云客

Rank: 1

积分
31
发表于 2018-6-24 23:59:06 | 显示全部楼层
它是Java EE项目吗?
回复

使用道具 举报

6

主题

65

帖子

321

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
321
发表于 2018-7-4 09:45:06 | 显示全部楼层
许可 发表于 2018-3-13 15:46
地址必须是 公网地址 才能校 验 通过吗?

是的,抄送地址要外网能访问成功的。
回复

使用道具 举报

6

主题

65

帖子

321

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
321
发表于 2018-7-4 09:46:33 | 显示全部楼层
chikiuso 发表于 2018-6-22 17:33
它会有node.js版本吗?

目前没有示例。
回复

使用道具 举报

6

主题

65

帖子

321

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
321
发表于 2018-7-4 09:47:58 | 显示全部楼层
chikiuso 发表于 2018-6-24 23:59
它是Java EE项目吗?

在Java EE项目中实现抄送接收功能,可以参考这个示例。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表