From 5b55c7f8452c5731014adc8aea997e34ff04dd56 Mon Sep 17 00:00:00 2001 From: pppscn <35696959@qq.com> Date: Sun, 23 Jan 2022 23:30:29 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=EF=BC=9AWebhook=E7=9A=84GET?= =?UTF-8?q?=E5=BD=A2=E5=BC=8F=E6=94=AF=E6=8C=81webParams=E3=80=90=E4=BE=8B?= =?UTF-8?q?=E5=A6=82=EF=BC=9APushDeer=E3=80=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../forwarder/sender/SenderWebNotifyMsg.java | 15 ++++++++- doc/POST_WEB.md | 33 +++++++++++++++---- 2 files changed, 41 insertions(+), 7 deletions(-) diff --git a/app/src/main/java/com/idormy/sms/forwarder/sender/SenderWebNotifyMsg.java b/app/src/main/java/com/idormy/sms/forwarder/sender/SenderWebNotifyMsg.java index fa9d9dc7..e7c5e0f9 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/sender/SenderWebNotifyMsg.java +++ b/app/src/main/java/com/idormy/sms/forwarder/sender/SenderWebNotifyMsg.java @@ -1,6 +1,7 @@ package com.idormy.sms.forwarder.sender; import android.os.Handler; +import android.text.TextUtils; import android.util.Base64; import android.util.Log; @@ -52,7 +53,7 @@ public class SenderWebNotifyMsg extends SenderBaseMsg { } Request request; - if (method.equals("GET")) { + if (method.equals("GET") && TextUtils.isEmpty(webParams)) { webServer += (webServer.contains("?") ? "&" : "?") + "from=" + URLEncoder.encode(from, "UTF-8"); webServer += "&content=" + URLEncoder.encode(content, "UTF-8"); if (secret != null && !secret.isEmpty()) { @@ -60,6 +61,18 @@ public class SenderWebNotifyMsg extends SenderBaseMsg { webServer += "&sign=" + sign; } + Log.d(TAG, "method = GET, Url = " + webServer); + request = new Request.Builder().url(webServer).get().build(); + } else if (method.equals("GET") && !TextUtils.isEmpty(webParams)) { + webParams = webParams.replace("\n", "%0A") + .replace("[from]", URLEncoder.encode(from, "UTF-8")) + .replace("[msg]", URLEncoder.encode(content, "UTF-8")); + if (secret != null && !secret.isEmpty()) { + webParams = webParams.replace("[timestamp]", String.valueOf(timestamp)) + .replace("[sign]", URLEncoder.encode(sign, "UTF-8")); + } + webServer += (webServer.contains("?") ? "&" : "?") + webParams; + Log.d(TAG, "method = GET, Url = " + webServer); request = new Request.Builder().url(webServer).get().build(); } else if (webParams != null && webParams.contains("[msg]")) { diff --git a/doc/POST_WEB.md b/doc/POST_WEB.md index f87b937a..74f64769 100644 --- a/doc/POST_WEB.md +++ b/doc/POST_WEB.md @@ -1,7 +1,30 @@ # 1、请求方式: GET -- `webParams` 参数无需填写(填写了也无效) -- 在 `WebServer` 的基础上,追加 `3、post form 参数列表` 所列的节点经过`urlEncode`的值 +## 1.1 `webParams` 为空 + +将在 `WebServer` 的基础上,追加 `3、post form 参数列表` 所列的节点经过 `urlEncode` 的值 + +例如: + +`WebServer`: `https://ppps.cn/demo` + +`最终请求地址`:`https://ppps.cn/demo?from=15888888888&content=123456` + +## 1.2 `webParams` 非空 + +将在 `WebServer` 的基础上,追加经过处理后的 `webParams` + +处理方式: 替换 `3、post form 参数列表` 所列的节点经过 `urlEncode` 的值(例如:将 `短信内容(content)` 替换报文中的 `[msg]` 标签) + +注意事项: `webParams` 中如果有特殊字符自行 `urlEncode`,程序只会替换列表中的key对应的标签 + +例如: + +`WebServer`: `https://api2.pushdeer.com/message/push?pushkey=1234567890` + +`webParams`: `text=[msg]` + +`最终请求地址`:`https://api2.pushdeer.com/message/push?pushkey=1234567890&text=123456` *** @@ -30,6 +53,7 @@ | timestamp | string | 当前时间戳,单位是毫秒,(建议验证与请求调用时间误差不能超过1小时,防止重放欺骗) | | sign | string | 当设置`secret`时,生成的`sign`签名,用于发送端校验,规则见下方`sign`校验规则 | +* 节点对应的标签就是 `key` 的值加上中括号(例如: `[msg]` ) * `sign` 部分参考借鉴了 [阿里钉钉群机器人的sign生成](https://developers.dingtalk.com/document/app/custom-robot-access) * `sign` 校验规则: @@ -40,13 +64,11 @@ | timestamp | 当前时间戳,单位是毫秒,(建议验证与请求调用时间误差不能超过1小时,防止重放欺骗) | | secret | 密钥,web通知设置页面,secret | - *** - # 附录: -## 1、一个现成的 `webhook` 服务端站点:可以在线查看 [消息通知](https://msg.allmything.com) +## 1、一个现成的 `webhook` 服务端站点:可以在线查看 [消息通知](https://msg.allmything.com) 来自:[TSMS](https://github.com/xiaoyuanhost/TranspondSms) @@ -54,7 +76,6 @@ 此链接填写到 `WebServer` , `webParams` 留空 ,即可通过该站点直接查看提交的消息列表 - ## 2、`sign` 签名计算示例: ```Java