网易云信消息抄送php,网易云信消息抄送
import java.security.MessageDigest;
/**
* 网易云信 校验类
* User: NinetyOne
* Date: 2019/3/15
* Time: 11:33
* To change this template use File | Setting | File Template.
**/
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'};
}
import com.alibaba.fastjson.JSONObject;
import com.patient.core.config.NeteaseConfig;
import com.patient.core.middleware.CheckSumBuilder;
import org.apache.commons.io.IOUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
/**
* 网易云信抄送
*/
@RestController
@RequestMapping(value = "/v1")
public class RouteController {
public static final Logger logger = LoggerFactory.getLogger(RouteController.class);
@Autowired
private NeteaseConfig neteaseConfig;
@PostMapping("/route/mockClient")
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(neteaseConfig.getAppSecret(), 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;
}
}
// body如果为空 request.getContentLength() = 0
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;
}
}
网易云信消息抄送php,网易云信消息抄送相关推荐
- 网易来聊聊子弹短信的消息漫游技术
"子弹短信"炸翻了创投圈,上线短短7天,掀起IM行业一股巨浪.网易云信作为子弹短信IM以及音视频通话技术提供者,今天来聊聊子弹短信这款即时通讯产品里面一个重要功能-消息漫游. [知 ...
- 网易创新企业大会倒计时,云信将发布新一代音视频技术架构
网易创新企业大会倒计时 4 天! 当下,科技创新已成为推动经济社会发展的主要力量,运用创新技术构建前瞻性业务模式.提高业务增长成为各大企业生存和发展的重要着力点. 对此,网易旗下一站式企业服务提供商网 ...
- 基于云信IM实现的文字+图片消息聊天功能
前言 记得在初学Android时,自己当时定下的目标的是实现一个QQ,虽然当时的想法比较高,但是自己当时技术不足,很多功能无从下手,最后便做了一些QQ的效果来当做学习,后来就搁置在那里了,然后在大二暑 ...
- 网易HR告诉你关于网易招聘的那些事(下篇)
本文 Github/javamap 已收录,有Java程序员进阶技术知识地图以及我的系列文章,欢迎大家Star. --正文-- 菜架:雷架我师妹也想去网易,不过她对网易招聘情况不了解,惆怅- 雷架:有 ...
- java jms消息删除_activemq的topic消息一直都会存在数据库中,为什么不会删除
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 我把消息设置的持久化到数据库.采用topic的方式发送消息. 每次发送消息之后,数据库的ACTIVEMQ_MSGS表里都会插入10条记录(每次是发送10条 ...
- 阿里一面:如何保障消息100%投递成功、消息幂等性?
点击关注公众号,Java干货及时送达来源:toutiao.com/i6672235084336071179 前言 我们小伙伴应该都听说够消息中间件MQ,如:RabbitMQ,RocketMQ,Kafk ...
- Java开发微信公众号(四)---微信服务器post消息体的接收及消息的处理
在前几节文章中我们讲述了微信公众号环境的搭建.如何接入微信公众平台.以及微信服务器请求消息,响应消息,事件消息以及工具处理类的封装:接下来我们重点说一下-微信服务器post消息体的接收及消息的处理,这 ...
- rabbitmq消费固定个数消息_SpringBoot+RabbitMQ (保证消息100%投递成功并被消费)
作者:wangzaiplus https://www.jianshu.com/p/dca01aad6bc8 一.先扔一张图 说明:本文涵盖了关于RabbitMQ很多方面的知识点, 如: 消息发送确认机 ...
- RabbitMQ中的虚拟主机、交换机、消息队列、绑定、消息
虚拟主机(virtual host ) 虚拟地址,用于进行逻辑隔离,最上层的消息路由,一个 virtual host 里面可以有若干个 exchange 和 queue,但是里面不能有相同名称的 ex ...
最新文章
- 百度大脑发布企业服务解决方案,将 AI 技术落实到细分领域
- 华为平板电脑_当5G遇上平板电脑,华为MatePad Pro 5G带来了什么?
- win10系统预览体验计划错误代码0x800bfa19怎么办
- VC2010 项目的创建
- VMware虚拟机CentOS7 - VMnet8网络配置及常见问题解决
- xssfdataformat 设置单元格式为数值_Excel表格为工作表的部分区域设置保护密码同时隐藏单元格内容。...
- 手眼标定,我的结果显示手和眼相距上千米!手眼标定结果准确率如何提高?
- python 拼音地名对应关系,Python使用百度地图API根据地名获取相应经纬度
- 双系统——彻底删除ubuntu
- 空洞卷积(膨胀卷积)的相关知识以及使用建议(HDC原则)
- ps滤镜之——马赛克
- 【一致性仿真】Consensus Control of Leader-Following Multi-Agent Systems in Directed Topology With ...
- Ubuntu桌面不见了,桌面找回
- (算法练习)——小白鼠排队
- b级车里有比迈腾空间更大的车吗?
- 全加器--两种方法实现
- linux .opj文件,OPJ 文件扩展名: 它是什么以及如何打开它?
- spring cloud微服务框架 第七天
- 聚丙烯酰胺凝胶电泳检测非还原性SDS-PAGE蛋白质产品的纯度
- 后疫情时代,智慧物流遭遇危机还是邂逅转机?