接收并处理facebook发送的上行消息接口
接口功能
接受并处理facebook发送的上行消息。
接口鉴权
获取请求头X-Hub-Signature-XX 里面的鉴权字符串,将request里面的参数与渠道配置里的secretKey加密进行对比,相同鉴权通过。
String algorithm = channelConfig.getAlgorithm();
String signature = "";
if (AlgorithmEnum.SHA256.getValue().equals(algorithm)) {
String signatureHeader = request.getHeader("X-Hub-Signature-256");
// 校验signatureHeaderSha256
if (StringUtils.isTrimEmpty(signatureHeader)) {
log.error("sha256 Signature from facebook is empty");
return false;
}
signature = StringUtils.substringAfter(signatureHeader, "sha256=");
} else {
String signatureHeader = request.getHeader();
// 校验signatureHeader
if (StringUtils.isTrimEmpty(signatureHeader)) {
log.error("sha1 Signature from facebook is empty");
return false;
}
signature = StringUtils.substringAfter(signatureHeader, "sha1=");
}
String hash;
try {
hash = getSignatureByAlgorithm(payloadContent, secretKey, channelConfig.getAlgorithm());
} catch (Exception e) {
log.error("Fail to get the signature, and the exception is {}", e.getMessage());
return false;
}
return StringUtils.equals(hash, signature);
sha1加密算法存在安全风险,请谨慎使用。
接口原型
|
请求方法 |
POST |
|
|---|---|---|
|
请求URL |
https://ip:port/social/on/facebook/{channelId} |
其中,ip:port为对外暴露的nslb的ip和port, channelId为渠道id |
请求参数
|
参数名称 |
选取原则 |
参数类型 |
说明 |
|---|---|---|---|
|
Content-Type |
必选 |
String |
固定填 application/json; charset=UTF-8。 |
|
X-Hub-Signature-XX |
必选 |
String |
facebook鉴权信息 |
|
参数名称 |
选取原则 |
参数类型 |
说明 |
|---|---|---|---|
|
object |
必选 |
String |
请求对象结构体 |
|
entry |
必选 |
JSONArray |
entry中包含事件数据,详情见表4 |
|
参数名称 |
选取原则 |
参数类型 |
说明 |
|---|---|---|---|
|
id |
必选 |
String |
page主页编号 |
|
time |
必选 |
long |
请求时间 |
|
messaging |
必选 |
JSONArray |
messaging webhook事件,详情见表5 |
|
参数名称 |
选取原则 |
参数类型 |
说明 |
|---|---|---|---|
|
message |
必选 |
JSONObject |
事件内容,详见表6 |
|
sender |
必选 |
JSONObject |
发送者id,格式: {"id":"5465176836886605"} |
|
timestamp |
必选 |
Long |
消息发送时间 |
|
recipient |
必选 |
JSONObject |
格式:{"id":"107416531546370"} |
响应参数
当调用本接口响应成功,无响应内容;
当调用本接口响应失败,响应错误状态码和错误描述。
接口示例
- 请求示例
POST /social/on/facebook/202108135240338790 host : 10.10.10.2:28090 connection : Keep-Alive x-forwarded-for : 10.10.10.3, 10.10.10.4 x-real-ip : 10.10.10.5 content-length : 314 remote-host : 10.10.10.6 accept : */* accept-encoding : deflate, gzip user-agent : facebookexternalua content-type : application/json x-hub-signature-256 : sha256=599c****************3bc facebook-api-version : v8.0 { "object" : "page", "entry" : [{ "id" : "107416531546370", "time" : 1629191082254, "messaging" : [{ "sender" : { "id" : "5465176836886605" }, "recipient" : { "id" : "107416531546370" }, "timestamp" : 1629191082001, "message" : { "mid" : "m_5ugOgGm2v5x36EyvvInnNOwvV5bGYdVdhgz8VK0mdjnLC3qm8PfaQZdWwAsLOg8hiDIqmpkcYQtllLH_tDzl7A", "text" : "jianlian" } } ] } ] }