From 9eeb8153225e2a8d477e71cd8d9935b490e92d7a Mon Sep 17 00:00:00 2001 From: pppscn <35696959@qq.com> Date: Mon, 27 Sep 2021 18:11:42 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E9=A3=9E=E4=B9=A6=E7=9A=84we?= =?UTF-8?q?bhook=E6=94=AF=E6=8C=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 1 + .../idormy/sms/forwarder/SenderActivity.java | 135 ++++++++++++++++-- .../sms/forwarder/model/SenderModel.java | 7 +- .../forwarder/model/vo/FeiShuSettingVo.java | 19 +++ .../idormy/sms/forwarder/sender/SendUtil.java | 17 +++ .../sms/forwarder/sender/SenderFeishuMsg.java | 116 +++++++++++++++ .../layout/alert_dialog_setview_feishu.xml | 108 ++++++++++++++ app/src/main/res/mipmap-hdpi/bark.png | Bin 2863 -> 0 bytes app/src/main/res/mipmap-hdpi/dingding.png | Bin 2492 -> 0 bytes app/src/main/res/mipmap-hdpi/email.png | Bin 1734 -> 0 bytes app/src/main/res/mipmap-hdpi/feishu.png | Bin 0 -> 3483 bytes app/src/main/res/mipmap-hdpi/qywx.png | Bin 3273 -> 0 bytes app/src/main/res/mipmap-hdpi/qywxapp.png | Bin 2518 -> 0 bytes app/src/main/res/mipmap-hdpi/serverchan.png | Bin 4087 -> 0 bytes app/src/main/res/mipmap-hdpi/telegram.png | Bin 2598 -> 0 bytes app/src/main/res/mipmap-hdpi/webhook.png | Bin 3553 -> 0 bytes app/src/main/res/mipmap-mdpi/bark.png | Bin 1694 -> 0 bytes app/src/main/res/mipmap-mdpi/dingding.png | Bin 1618 -> 0 bytes app/src/main/res/mipmap-mdpi/email.png | Bin 1177 -> 0 bytes app/src/main/res/mipmap-mdpi/feishu.png | Bin 0 -> 1918 bytes app/src/main/res/mipmap-mdpi/qywx.png | Bin 1988 -> 0 bytes app/src/main/res/mipmap-mdpi/qywxapp.png | Bin 1434 -> 0 bytes app/src/main/res/mipmap-mdpi/serverchan.png | Bin 2273 -> 0 bytes app/src/main/res/mipmap-mdpi/telegram.png | Bin 1623 -> 0 bytes app/src/main/res/mipmap-mdpi/webhook.png | Bin 2053 -> 0 bytes app/src/main/res/mipmap-xhdpi/bark.png | Bin 3920 -> 0 bytes app/src/main/res/mipmap-xhdpi/dingding.png | Bin 3204 -> 0 bytes app/src/main/res/mipmap-xhdpi/email.png | Bin 2378 -> 0 bytes app/src/main/res/mipmap-xhdpi/feishu.png | Bin 0 -> 5219 bytes app/src/main/res/mipmap-xhdpi/qywx.png | Bin 4322 -> 0 bytes app/src/main/res/mipmap-xhdpi/qywxapp.png | Bin 3327 -> 0 bytes app/src/main/res/mipmap-xhdpi/serverchan.png | Bin 5869 -> 0 bytes app/src/main/res/mipmap-xhdpi/telegram.png | Bin 3243 -> 0 bytes app/src/main/res/mipmap-xhdpi/webhook.png | Bin 4898 -> 0 bytes app/src/main/res/mipmap-xxhdpi/bark.png | Bin 6268 -> 0 bytes app/src/main/res/mipmap-xxhdpi/dingding.png | Bin 4621 -> 0 bytes app/src/main/res/mipmap-xxhdpi/email.png | Bin 3810 -> 0 bytes app/src/main/res/mipmap-xxhdpi/feishu.png | Bin 0 -> 10025 bytes app/src/main/res/mipmap-xxhdpi/qywx.png | Bin 6316 -> 0 bytes app/src/main/res/mipmap-xxhdpi/qywxapp.png | Bin 6898 -> 0 bytes app/src/main/res/mipmap-xxhdpi/serverchan.png | Bin 11556 -> 0 bytes app/src/main/res/mipmap-xxhdpi/telegram.png | Bin 6220 -> 0 bytes app/src/main/res/mipmap-xxhdpi/webhook.png | Bin 7654 -> 0 bytes app/src/main/res/mipmap-xxxhdpi/bark.png | Bin 8841 -> 0 bytes app/src/main/res/mipmap-xxxhdpi/dingding.png | Bin 5208 -> 0 bytes app/src/main/res/mipmap-xxxhdpi/email.png | Bin 5612 -> 0 bytes app/src/main/res/mipmap-xxxhdpi/feishu.png | Bin 0 -> 16323 bytes app/src/main/res/mipmap-xxxhdpi/qywx.png | Bin 7314 -> 0 bytes app/src/main/res/mipmap-xxxhdpi/qywxapp.png | Bin 9322 -> 0 bytes .../main/res/mipmap-xxxhdpi/serverchan.png | Bin 16051 -> 0 bytes app/src/main/res/mipmap-xxxhdpi/telegram.png | Bin 7595 -> 0 bytes app/src/main/res/mipmap-xxxhdpi/webhook.png | Bin 9919 -> 0 bytes app/src/main/res/values/array.xml | 1 + app/src/main/res/values/strings.xml | 1 + psd/hdpi.psd | Bin 62887 -> 0 bytes psd/ic_launcher.psd | Bin 349635 -> 0 bytes psd/mdpi.psd | Bin 46575 -> 0 bytes psd/xhdpi.psd | Bin 77420 -> 0 bytes psd/xxhdpi.psd | Bin 114214 -> 0 bytes psd/xxxhdpi.psd | Bin 259705 -> 0 bytes 60 files changed, 390 insertions(+), 15 deletions(-) create mode 100644 app/src/main/java/com/idormy/sms/forwarder/model/vo/FeiShuSettingVo.java create mode 100644 app/src/main/java/com/idormy/sms/forwarder/sender/SenderFeishuMsg.java create mode 100644 app/src/main/res/layout/alert_dialog_setview_feishu.xml delete mode 100644 app/src/main/res/mipmap-hdpi/bark.png delete mode 100644 app/src/main/res/mipmap-hdpi/dingding.png delete mode 100644 app/src/main/res/mipmap-hdpi/email.png create mode 100644 app/src/main/res/mipmap-hdpi/feishu.png delete mode 100644 app/src/main/res/mipmap-hdpi/qywx.png delete mode 100644 app/src/main/res/mipmap-hdpi/qywxapp.png delete mode 100644 app/src/main/res/mipmap-hdpi/serverchan.png delete mode 100644 app/src/main/res/mipmap-hdpi/telegram.png delete mode 100644 app/src/main/res/mipmap-hdpi/webhook.png delete mode 100644 app/src/main/res/mipmap-mdpi/bark.png delete mode 100644 app/src/main/res/mipmap-mdpi/dingding.png delete mode 100644 app/src/main/res/mipmap-mdpi/email.png create mode 100644 app/src/main/res/mipmap-mdpi/feishu.png delete mode 100644 app/src/main/res/mipmap-mdpi/qywx.png delete mode 100644 app/src/main/res/mipmap-mdpi/qywxapp.png delete mode 100644 app/src/main/res/mipmap-mdpi/serverchan.png delete mode 100644 app/src/main/res/mipmap-mdpi/telegram.png delete mode 100644 app/src/main/res/mipmap-mdpi/webhook.png delete mode 100644 app/src/main/res/mipmap-xhdpi/bark.png delete mode 100644 app/src/main/res/mipmap-xhdpi/dingding.png delete mode 100644 app/src/main/res/mipmap-xhdpi/email.png create mode 100644 app/src/main/res/mipmap-xhdpi/feishu.png delete mode 100644 app/src/main/res/mipmap-xhdpi/qywx.png delete mode 100644 app/src/main/res/mipmap-xhdpi/qywxapp.png delete mode 100644 app/src/main/res/mipmap-xhdpi/serverchan.png delete mode 100644 app/src/main/res/mipmap-xhdpi/telegram.png delete mode 100644 app/src/main/res/mipmap-xhdpi/webhook.png delete mode 100644 app/src/main/res/mipmap-xxhdpi/bark.png delete mode 100644 app/src/main/res/mipmap-xxhdpi/dingding.png delete mode 100644 app/src/main/res/mipmap-xxhdpi/email.png create mode 100644 app/src/main/res/mipmap-xxhdpi/feishu.png delete mode 100644 app/src/main/res/mipmap-xxhdpi/qywx.png delete mode 100644 app/src/main/res/mipmap-xxhdpi/qywxapp.png delete mode 100644 app/src/main/res/mipmap-xxhdpi/serverchan.png delete mode 100644 app/src/main/res/mipmap-xxhdpi/telegram.png delete mode 100644 app/src/main/res/mipmap-xxhdpi/webhook.png delete mode 100644 app/src/main/res/mipmap-xxxhdpi/bark.png delete mode 100644 app/src/main/res/mipmap-xxxhdpi/dingding.png delete mode 100644 app/src/main/res/mipmap-xxxhdpi/email.png create mode 100644 app/src/main/res/mipmap-xxxhdpi/feishu.png delete mode 100644 app/src/main/res/mipmap-xxxhdpi/qywx.png delete mode 100644 app/src/main/res/mipmap-xxxhdpi/qywxapp.png delete mode 100644 app/src/main/res/mipmap-xxxhdpi/serverchan.png delete mode 100644 app/src/main/res/mipmap-xxxhdpi/telegram.png delete mode 100644 app/src/main/res/mipmap-xxxhdpi/webhook.png delete mode 100644 psd/hdpi.psd delete mode 100644 psd/ic_launcher.psd delete mode 100644 psd/mdpi.psd delete mode 100644 psd/xhdpi.psd delete mode 100644 psd/xxhdpi.psd delete mode 100644 psd/xxxhdpi.psd diff --git a/.gitignore b/.gitignore index f4d7428f..075cec65 100644 --- a/.gitignore +++ b/.gitignore @@ -11,3 +11,4 @@ local.properties .settings/* */.settings/* /app/pppscn.jks +/psd diff --git a/app/src/main/java/com/idormy/sms/forwarder/SenderActivity.java b/app/src/main/java/com/idormy/sms/forwarder/SenderActivity.java index d67e53aa..a53d201a 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/SenderActivity.java +++ b/app/src/main/java/com/idormy/sms/forwarder/SenderActivity.java @@ -1,5 +1,17 @@ package com.idormy.sms.forwarder; +import static com.idormy.sms.forwarder.model.SenderModel.STATUS_ON; +import static com.idormy.sms.forwarder.model.SenderModel.TYPE_BARK; +import static com.idormy.sms.forwarder.model.SenderModel.TYPE_DINGDING; +import static com.idormy.sms.forwarder.model.SenderModel.TYPE_EMAIL; +import static com.idormy.sms.forwarder.model.SenderModel.TYPE_FEISHU; +import static com.idormy.sms.forwarder.model.SenderModel.TYPE_QYWX_APP; +import static com.idormy.sms.forwarder.model.SenderModel.TYPE_QYWX_GROUP_ROBOT; +import static com.idormy.sms.forwarder.model.SenderModel.TYPE_SERVER_CHAN; +import static com.idormy.sms.forwarder.model.SenderModel.TYPE_SMS; +import static com.idormy.sms.forwarder.model.SenderModel.TYPE_TELEGRAM; +import static com.idormy.sms.forwarder.model.SenderModel.TYPE_WEB_NOTIFY; + import android.content.DialogInterface; import android.os.Bundle; import android.os.Handler; @@ -26,6 +38,7 @@ import com.idormy.sms.forwarder.model.SenderModel; import com.idormy.sms.forwarder.model.vo.BarkSettingVo; import com.idormy.sms.forwarder.model.vo.DingDingSettingVo; import com.idormy.sms.forwarder.model.vo.EmailSettingVo; +import com.idormy.sms.forwarder.model.vo.FeiShuSettingVo; import com.idormy.sms.forwarder.model.vo.QYWXAppSettingVo; import com.idormy.sms.forwarder.model.vo.QYWXGroupRobotSettingVo; import com.idormy.sms.forwarder.model.vo.ServerChanSettingVo; @@ -34,6 +47,7 @@ import com.idormy.sms.forwarder.model.vo.TelegramSettingVo; import com.idormy.sms.forwarder.model.vo.WebNotifySettingVo; import com.idormy.sms.forwarder.sender.SenderBarkMsg; import com.idormy.sms.forwarder.sender.SenderDingdingMsg; +import com.idormy.sms.forwarder.sender.SenderFeishuMsg; import com.idormy.sms.forwarder.sender.SenderMailMsg; import com.idormy.sms.forwarder.sender.SenderQyWxAppMsg; import com.idormy.sms.forwarder.sender.SenderQyWxGroupRobotMsg; @@ -49,17 +63,6 @@ import java.util.ArrayList; import java.util.Date; import java.util.List; -import static com.idormy.sms.forwarder.model.SenderModel.STATUS_ON; -import static com.idormy.sms.forwarder.model.SenderModel.TYPE_BARK; -import static com.idormy.sms.forwarder.model.SenderModel.TYPE_DINGDING; -import static com.idormy.sms.forwarder.model.SenderModel.TYPE_EMAIL; -import static com.idormy.sms.forwarder.model.SenderModel.TYPE_QYWX_APP; -import static com.idormy.sms.forwarder.model.SenderModel.TYPE_QYWX_GROUP_ROBOT; -import static com.idormy.sms.forwarder.model.SenderModel.TYPE_SERVER_CHAN; -import static com.idormy.sms.forwarder.model.SenderModel.TYPE_SMS; -import static com.idormy.sms.forwarder.model.SenderModel.TYPE_TELEGRAM; -import static com.idormy.sms.forwarder.model.SenderModel.TYPE_WEB_NOTIFY; - public class SenderActivity extends AppCompatActivity { public static final int NOTIFY = 0x9731993; @@ -140,6 +143,9 @@ public class SenderActivity extends AppCompatActivity { case TYPE_SMS: setSms(senderModel); break; + case TYPE_FEISHU: + setFeiShu(senderModel); + break; default: Toast.makeText(SenderActivity.this, "异常的发送方类型,自动删除!", Toast.LENGTH_LONG).show(); if (senderModel != null) { @@ -175,7 +181,6 @@ public class SenderActivity extends AppCompatActivity { //添加AlertDialog.Builder对象的setNegativeButton()方法 builder.setNegativeButton("取消", new DialogInterface.OnClickListener() { - @Override public void onClick(DialogInterface dialog, int which) { @@ -227,6 +232,9 @@ public class SenderActivity extends AppCompatActivity { case TYPE_SMS: setSms(null); break; + case TYPE_FEISHU: + setFeiShu(null); + break; default: Toast.makeText(SenderActivity.this, "暂不支持这种转发!", Toast.LENGTH_LONG).show(); break; @@ -237,6 +245,7 @@ public class SenderActivity extends AppCompatActivity { Log.d(TAG, "setDingDing show" + senderModels.size()); } + //钉钉机器人 private void setDingDing(final SenderModel senderModel) { DingDingSettingVo dingDingSettingVo = null; //try phrase json setting @@ -349,6 +358,7 @@ public class SenderActivity extends AppCompatActivity { }); } + //邮箱 private void setEmail(final SenderModel senderModel) { EmailSettingVo emailSettingVo = null; //try phrase json setting @@ -476,6 +486,7 @@ public class SenderActivity extends AppCompatActivity { }); } + //Bark private void setBark(final SenderModel senderModel) { BarkSettingVo barkSettingVo = null; //try phrase json setting @@ -566,6 +577,7 @@ public class SenderActivity extends AppCompatActivity { }); } + //Server酱·Turbo版 private void setServerChan(final SenderModel senderModel) { ServerChanSettingVo serverchanSettingVo = null; //try phrase json setting @@ -740,7 +752,7 @@ public class SenderActivity extends AppCompatActivity { String method = radioGroupWebNotifyMethod.getCheckedRadioButtonId() == R.id.radioWebNotifyMethodGet ? "GET" : "POST"; if (!webServer.isEmpty()) { try { - SenderWebNotifyMsg.sendMsg(0, handler, webServer, webParams,secret, method, "SmsForwarder Title", "测试内容(content)@" + (new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()))); + SenderWebNotifyMsg.sendMsg(0, handler, webServer, webParams, secret, method, "SmsForwarder Title", "测试内容(content)@" + (new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()))); } catch (Exception e) { Toast.makeText(SenderActivity.this, "发送失败:" + e.getMessage(), Toast.LENGTH_LONG).show(); e.printStackTrace(); @@ -1073,7 +1085,7 @@ public class SenderActivity extends AppCompatActivity { }); } - //Sms + //短信 private void setSms(final SenderModel senderModel) { SmsSettingVo smsSettingVo = null; //try phrase json setting @@ -1178,6 +1190,101 @@ public class SenderActivity extends AppCompatActivity { }); } + //飞书机器人 + private void setFeiShu(final SenderModel senderModel) { + FeiShuSettingVo feiShuSettingVo = null; + //try phrase json setting + if (senderModel != null) { + String jsonSettingStr = senderModel.getJsonSetting(); + if (jsonSettingStr != null) { + feiShuSettingVo = JSON.parseObject(jsonSettingStr, FeiShuSettingVo.class); + } + } + final AlertDialog.Builder alertDialog71 = new AlertDialog.Builder(SenderActivity.this); + View view1 = View.inflate(SenderActivity.this, R.layout.alert_dialog_setview_feishu, null); + + final EditText editTextFeishuName = view1.findViewById(R.id.editTextFeishuName); + if (senderModel != null) + editTextFeishuName.setText(senderModel.getName()); + final EditText editTextFeishuWebhook = view1.findViewById(R.id.editTextFeishuWebhook); + if (feiShuSettingVo != null) + editTextFeishuWebhook.setText(feiShuSettingVo.getWebhook()); + final EditText editTextFeishuSecret = view1.findViewById(R.id.editTextFeishuSecret); + if (feiShuSettingVo != null) + editTextFeishuSecret.setText(feiShuSettingVo.getSecret()); + + Button buttonfeishuok = view1.findViewById(R.id.buttonfeishuok); + Button buttonfeishudel = view1.findViewById(R.id.buttonfeishudel); + Button buttonfeishutest = view1.findViewById(R.id.buttonfeishutest); + alertDialog71 + .setTitle(R.string.setfeishutitle) + .setIcon(R.mipmap.feishu) + .setView(view1) + .create(); + final AlertDialog show = alertDialog71.show(); + buttonfeishuok.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + + if (senderModel == null) { + SenderModel newSenderModel = new SenderModel(); + newSenderModel.setName(editTextFeishuName.getText().toString()); + newSenderModel.setType(TYPE_FEISHU); + newSenderModel.setStatus(STATUS_ON); + FeiShuSettingVo feiShuSettingVonew = new FeiShuSettingVo( + editTextFeishuWebhook.getText().toString(), + editTextFeishuSecret.getText().toString()); + newSenderModel.setJsonSetting(JSON.toJSONString(feiShuSettingVonew)); + SenderUtil.addSender(newSenderModel); + initSenders(); + adapter.add(senderModels); + } else { + senderModel.setName(editTextFeishuName.getText().toString()); + senderModel.setType(TYPE_FEISHU); + senderModel.setStatus(STATUS_ON); + FeiShuSettingVo feiShuSettingVonew = new FeiShuSettingVo( + editTextFeishuWebhook.getText().toString(), + editTextFeishuSecret.getText().toString()); + senderModel.setJsonSetting(JSON.toJSONString(feiShuSettingVonew)); + SenderUtil.updateSender(senderModel); + initSenders(); + adapter.update(senderModels); + } + show.dismiss(); + } + }); + + buttonfeishudel.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + if (senderModel != null) { + SenderUtil.delSender(senderModel.getId()); + initSenders(); + adapter.del(senderModels); + } + show.dismiss(); + } + }); + + buttonfeishutest.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + String token = editTextFeishuWebhook.getText().toString(); + String secret = editTextFeishuSecret.getText().toString(); + if (token != null && !token.isEmpty()) { + try { + SenderFeishuMsg.sendMsg(0, handler, token, secret, "测试内容(content)@" + (new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()))); + } catch (Exception e) { + Toast.makeText(SenderActivity.this, "发送失败:" + e.getMessage(), Toast.LENGTH_LONG).show(); + e.printStackTrace(); + } + } else { + Toast.makeText(SenderActivity.this, "token 不能为空", Toast.LENGTH_LONG).show(); + } + } + }); + } + @Override protected void onDestroy() { Log.d(TAG, "onDestroy"); diff --git a/app/src/main/java/com/idormy/sms/forwarder/model/SenderModel.java b/app/src/main/java/com/idormy/sms/forwarder/model/SenderModel.java index 2b81e0f0..88238ff0 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/model/SenderModel.java +++ b/app/src/main/java/com/idormy/sms/forwarder/model/SenderModel.java @@ -17,6 +17,7 @@ public class SenderModel { public static final int TYPE_SERVER_CHAN = 6; public static final int TYPE_TELEGRAM = 7; public static final int TYPE_SMS = 8; + public static final int TYPE_FEISHU = 9; private Long id; private String name; private int status; @@ -52,8 +53,9 @@ public class SenderModel { return R.mipmap.serverchan; case (TYPE_TELEGRAM): return R.mipmap.telegram; + case (TYPE_FEISHU): + return R.mipmap.feishu; case (TYPE_SMS): - return R.mipmap.sms; default: return R.mipmap.sms; } @@ -77,6 +79,9 @@ public class SenderModel { return R.mipmap.serverchan; case (TYPE_TELEGRAM): return R.mipmap.telegram; + case (TYPE_FEISHU): + return R.mipmap.feishu; + case (TYPE_SMS): default: return R.mipmap.sms; diff --git a/app/src/main/java/com/idormy/sms/forwarder/model/vo/FeiShuSettingVo.java b/app/src/main/java/com/idormy/sms/forwarder/model/vo/FeiShuSettingVo.java new file mode 100644 index 00000000..4ce58e87 --- /dev/null +++ b/app/src/main/java/com/idormy/sms/forwarder/model/vo/FeiShuSettingVo.java @@ -0,0 +1,19 @@ +package com.idormy.sms.forwarder.model.vo; + +import java.io.Serializable; + +import lombok.Data; + +@Data +public class FeiShuSettingVo implements Serializable { + private String webhook; + private String secret; + + public FeiShuSettingVo() { + } + + public FeiShuSettingVo(String webhook, String secret) { + this.webhook = webhook; + this.secret = secret; + } +} diff --git a/app/src/main/java/com/idormy/sms/forwarder/sender/SendUtil.java b/app/src/main/java/com/idormy/sms/forwarder/sender/SendUtil.java index 26b62a16..5a6c8561 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/sender/SendUtil.java +++ b/app/src/main/java/com/idormy/sms/forwarder/sender/SendUtil.java @@ -3,6 +3,7 @@ package com.idormy.sms.forwarder.sender; import static com.idormy.sms.forwarder.model.SenderModel.TYPE_BARK; import static com.idormy.sms.forwarder.model.SenderModel.TYPE_DINGDING; import static com.idormy.sms.forwarder.model.SenderModel.TYPE_EMAIL; +import static com.idormy.sms.forwarder.model.SenderModel.TYPE_FEISHU; import static com.idormy.sms.forwarder.model.SenderModel.TYPE_QYWX_APP; import static com.idormy.sms.forwarder.model.SenderModel.TYPE_QYWX_GROUP_ROBOT; import static com.idormy.sms.forwarder.model.SenderModel.TYPE_SERVER_CHAN; @@ -21,6 +22,7 @@ import com.idormy.sms.forwarder.model.SenderModel; import com.idormy.sms.forwarder.model.vo.BarkSettingVo; import com.idormy.sms.forwarder.model.vo.DingDingSettingVo; import com.idormy.sms.forwarder.model.vo.EmailSettingVo; +import com.idormy.sms.forwarder.model.vo.FeiShuSettingVo; import com.idormy.sms.forwarder.model.vo.QYWXAppSettingVo; import com.idormy.sms.forwarder.model.vo.QYWXGroupRobotSettingVo; import com.idormy.sms.forwarder.model.vo.ServerChanSettingVo; @@ -254,6 +256,21 @@ public class SendUtil { } break; + case TYPE_FEISHU: + //try phrase json setting + if (senderModel.getJsonSetting() != null) { + FeiShuSettingVo feiShuSettingVo = JSON.parseObject(senderModel.getJsonSetting(), FeiShuSettingVo.class); + if (feiShuSettingVo != null) { + try { + SenderFeishuMsg.sendMsg(logId, handError, feiShuSettingVo.getWebhook(), feiShuSettingVo.getSecret(), smsVo.getSmsVoForSend()); + } catch (Exception e) { + LogUtil.updateLog(logId, 0, e.getMessage()); + Log.e(TAG, "senderSendMsg: feishu error " + e.getMessage()); + } + } + } + break; + default: break; } diff --git a/app/src/main/java/com/idormy/sms/forwarder/sender/SenderFeishuMsg.java b/app/src/main/java/com/idormy/sms/forwarder/sender/SenderFeishuMsg.java new file mode 100644 index 00000000..703297e3 --- /dev/null +++ b/app/src/main/java/com/idormy/sms/forwarder/sender/SenderFeishuMsg.java @@ -0,0 +1,116 @@ +package com.idormy.sms.forwarder.sender; + +import static com.idormy.sms.forwarder.SenderActivity.NOTIFY; + +import android.os.Bundle; +import android.os.Handler; +import android.util.Base64; +import android.util.Log; + +import com.alibaba.fastjson.JSON; +import com.idormy.sms.forwarder.utils.LogUtil; + +import java.io.IOException; +import java.net.URLEncoder; +import java.util.HashMap; +import java.util.Map; + +import javax.crypto.Mac; +import javax.crypto.spec.SecretKeySpec; + +import okhttp3.Call; +import okhttp3.Callback; +import okhttp3.MediaType; +import okhttp3.OkHttpClient; +import okhttp3.Request; +import okhttp3.RequestBody; +import okhttp3.Response; + +public class SenderFeishuMsg { + + static String TAG = "SenderFeishuMsg"; + + public static void sendMsg(final long logId, final Handler handError, String webhook, String secret, String msg) throws Exception { + Log.i(TAG, "sendMsg webhook:" + webhook + " secret:" + secret + " msg:" + msg); + + if (webhook == null || webhook.isEmpty()) { + return; + } + + Map textMsgMap = new HashMap(); + + //签名校验 + if (secret != null && !secret.isEmpty()) { + Long timestamp = System.currentTimeMillis(); + String stringToSign = timestamp + "\n" + secret; + Mac mac = Mac.getInstance("HmacSHA256"); + mac.init(new SecretKeySpec(secret.getBytes("UTF-8"), "HmacSHA256")); + byte[] signData = mac.doFinal(stringToSign.getBytes("UTF-8")); + String sign = URLEncoder.encode(new String(Base64.encode(signData, Base64.NO_WRAP)), "UTF-8"); + textMsgMap.put("timestamp", timestamp); + textMsgMap.put("sign", sign); + } + + //组装报文 + textMsgMap.put("msg_type", "text"); + Map content = new HashMap(); + content.put("text", msg); + textMsgMap.put("content", content); + + String textMsg = JSON.toJSONString(textMsgMap); + Log.i(TAG, "textMsg:" + textMsg); + + OkHttpClient client = new OkHttpClient(); + RequestBody requestBody = RequestBody.create(MediaType.parse("application/json;charset=utf-8"), + textMsg); + + final Request request = new Request.Builder() + .url(webhook) + .addHeader("Content-Type", "application/json; charset=utf-8") + .post(requestBody) + .build(); + Call call = client.newCall(request); + call.enqueue(new Callback() { + @Override + public void onFailure(Call call, final IOException e) { + LogUtil.updateLog(logId, 0, e.getMessage()); + Log.d(TAG, "onFailure:" + e.getMessage()); + + if (handError != null) { + android.os.Message msg = new android.os.Message(); + msg.what = NOTIFY; + Bundle bundle = new Bundle(); + bundle.putString("DATA", "发送失败:" + e.getMessage()); + msg.setData(bundle); + handError.sendMessage(msg); + } + + } + + @Override + public void onResponse(Call call, Response response) throws IOException { + final String responseStr = response.body().string(); + Log.d(TAG, "Code:" + String.valueOf(response.code()) + responseStr); + + //TODO:粗略解析是否发送成功 + if (responseStr.contains("\"StatusCode\":0")) { + LogUtil.updateLog(logId, 1, responseStr); + } else { + LogUtil.updateLog(logId, 0, responseStr); + } + + if (handError != null) { + android.os.Message msg = new android.os.Message(); + msg.what = NOTIFY; + Bundle bundle = new Bundle(); + bundle.putString("DATA", "发送状态:" + responseStr); + msg.setData(bundle); + handError.sendMessage(msg); + Log.d(TAG, "respone:" + String.valueOf(response.code()) + responseStr); + } + + } + }); + } + +} diff --git a/app/src/main/res/layout/alert_dialog_setview_feishu.xml b/app/src/main/res/layout/alert_dialog_setview_feishu.xml new file mode 100644 index 00000000..704b790d --- /dev/null +++ b/app/src/main/res/layout/alert_dialog_setview_feishu.xml @@ -0,0 +1,108 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +