1、增加签名校验功能,在TD2Signature表中有的记录才允许发送。
2、CSgip,修改了发送规则,断连时等到连接恢复后再发送短信
This commit is contained in:
parent
b10841b3d1
commit
53133d3841
@ -14,7 +14,7 @@
|
|||||||
|
|
||||||
|
|
||||||
广州首易信息技术有限公司
|
广州首易信息技术有限公司
|
||||||
2024年2月
|
2025年2月
|
||||||
|
|
||||||
目录
|
目录
|
||||||
一、引言 4
|
一、引言 4
|
||||||
@ -1513,6 +1513,10 @@
|
|||||||
|-110 |短信内容长度不符合要求 |Sms_Send |
|
|-110 |短信内容长度不符合要求 |Sms_Send |
|
||||||
|-111 |没有发送短信权限 |Sms_Send |
|
|-111 |没有发送短信权限 |Sms_Send |
|
||||||
|-112 |目标号码数量不符合要求 |Sms_Send |
|
|-112 |目标号码数量不符合要求 |Sms_Send |
|
||||||
|
|-113 |此企业禁止非模板短信 |Sms_Send |
|
||||||
|
|-114 |此用户禁止非模板短信 |Sms_Send |
|
||||||
|
|-115 |此企业禁止客户端短信 |Sms_Send |
|
||||||
|
|-116 |此用户禁止客户端短信 |Sms_Send |
|
||||||
|-122 |用户状态异常 |Sms_Send |
|
|-122 |用户状态异常 |Sms_Send |
|
||||||
|-123 |企业状态异常 |Sms_Send |
|
|-123 |企业状态异常 |Sms_Send |
|
||||||
|-124 |用户权限不足 |Sms_Send |
|
|-124 |用户权限不足 |Sms_Send |
|
||||||
|
@ -588,6 +588,10 @@ Method不存在
|
|||||||
此企业禁止非模板短信
|
此企业禁止非模板短信
|
||||||
-114
|
-114
|
||||||
此用户禁止非模板短信
|
此用户禁止非模板短信
|
||||||
|
-115
|
||||||
|
此企业禁止客户端短信
|
||||||
|
-116
|
||||||
|
此用户禁止客户端短信
|
||||||
-122
|
-122
|
||||||
用户状态异常
|
用户状态异常
|
||||||
-123
|
-123
|
23
FXSend.rc
23
FXSend.rc
@ -100,7 +100,6 @@ BEGIN
|
|||||||
LTEXT "地址",IDC_STATIC,12,68,17,8
|
LTEXT "地址",IDC_STATIC,12,68,17,8
|
||||||
LTEXT "用户",IDC_STATIC,12,82,17,8
|
LTEXT "用户",IDC_STATIC,12,82,17,8
|
||||||
LTEXT "密码",IDC_STATIC,85,82,17,8
|
LTEXT "密码",IDC_STATIC,85,82,17,8
|
||||||
EDITTEXT IDC_MSG2,170,9,297,172,ES_MULTILINE | ES_READONLY | ES_WANTRETURN
|
|
||||||
PUSHBUTTON "test",IDC_TEST,4,0,25,15
|
PUSHBUTTON "test",IDC_TEST,4,0,25,15
|
||||||
EDITTEXT IDC_EDIT1,7,33,147,12,ES_MULTILINE | ES_AUTOVSCROLL | ES_WANTRETURN | WS_VSCROLL
|
EDITTEXT IDC_EDIT1,7,33,147,12,ES_MULTILINE | ES_AUTOVSCROLL | ES_WANTRETURN | WS_VSCROLL
|
||||||
EDITTEXT IDC_MSG3,170,198,297,155,ES_MULTILINE | ES_READONLY | ES_WANTRETURN
|
EDITTEXT IDC_MSG3,170,198,297,155,ES_MULTILINE | ES_READONLY | ES_WANTRETURN
|
||||||
@ -128,12 +127,21 @@ BEGIN
|
|||||||
LTEXT "Window",IDC_STATIC,12,255,25,8
|
LTEXT "Window",IDC_STATIC,12,255,25,8
|
||||||
EDITTEXT IDC_DELAY,117,237,24,12,ES_AUTOHSCROLL | ES_NUMBER
|
EDITTEXT IDC_DELAY,117,237,24,12,ES_AUTOHSCROLL | ES_NUMBER
|
||||||
LTEXT "Delay",IDC_STATIC,93,239,21,8
|
LTEXT "Delay",IDC_STATIC,93,239,21,8
|
||||||
CONTROL "强制去签名",IDC_EXCM,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,79,288,56,10
|
|
||||||
CONTROL "检测签名",IDC_CHECKCM,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,288,48,10
|
CONTROL "检测签名",IDC_CHECKCM,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,288,48,10
|
||||||
CONTROL "显示日志",IDC_SHOWLOG,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,172,185,49,10
|
CONTROL "强制去签名",IDC_EXCM,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,79,288,56,10
|
||||||
|
CONTROL "半",IDC_EXCM2,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,137,288,24,10
|
||||||
CONTROL "不处理Ret",IDC_NORET,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,301,52,10
|
CONTROL "不处理Ret",IDC_NORET,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,301,52,10
|
||||||
CONTROL "不处理Report",IDC_NOREPORT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,79,301,64,10
|
CONTROL "不处理Report",IDC_NOREPORT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,79,301,64,10
|
||||||
CONTROL "半",IDC_EXCM2,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,137,288,24,10
|
CONTROL "不处理上行",IDC_NORECV,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,315,56,10
|
||||||
|
CONTROL "拼接长短信",IDC_SUPLONGSMS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,79,315,56,10
|
||||||
|
CONTROL "除去长信标记",IDC_EXPLONGSMS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,328,64,10
|
||||||
|
LTEXT "数据包大小",IDC_STATIC,80,330,41,8
|
||||||
|
EDITTEXT IDC_ONEPACKSMSCOUNT,123,327,24,12,ES_AUTOHSCROLL | ES_NUMBER
|
||||||
|
CONTROL "号码不加86",IDC_NO86,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,341,54,10
|
||||||
|
CONTROL "校验报备签名",IDC_VERIFYSIGNNATURE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,79,342,64,10
|
||||||
|
EDITTEXT IDC_MSG2,170,9,297,172,ES_MULTILINE | ES_READONLY | ES_WANTRETURN
|
||||||
|
LTEXT "中国移动",IDC_TDMSG,12,130,145,8
|
||||||
|
CONTROL "显示日志",IDC_SHOWLOG,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,172,185,49,10
|
||||||
PUSHBUTTON "test2",IDC_TEST2,4,16,25,14
|
PUSHBUTTON "test2",IDC_TEST2,4,16,25,14
|
||||||
PUSHBUTTON "清零",IDC_0,134,51,24,12,0,WS_EX_STATICEDGE
|
PUSHBUTTON "清零",IDC_0,134,51,24,12,0,WS_EX_STATICEDGE
|
||||||
LTEXT "select",IDC_STATIC,12,270,25,8
|
LTEXT "select",IDC_STATIC,12,270,25,8
|
||||||
@ -147,16 +155,9 @@ BEGIN
|
|||||||
LTEXT "--",IDC_S_ZD_SEND2,143,105,9,8
|
LTEXT "--",IDC_S_ZD_SEND2,143,105,9,8
|
||||||
LTEXT "A",IDC_SELECT_DB,107,105,8,8
|
LTEXT "A",IDC_SELECT_DB,107,105,8,8
|
||||||
LTEXT "--",IDC_S_ZD_RECV2,143,117,9,8
|
LTEXT "--",IDC_S_ZD_RECV2,143,117,9,8
|
||||||
LTEXT "中国移动",IDC_TDMSG,12,130,145,8
|
|
||||||
PUSHBUTTON "运营商设置",IDC_TDSETUP,15,105,56,18
|
PUSHBUTTON "运营商设置",IDC_TDSETUP,15,105,56,18
|
||||||
CONTROL "拼接长短信",IDC_SUPLONGSMS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,79,315,56,10
|
|
||||||
CONTROL "除去长信标记",IDC_EXPLONGSMS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,328,64,10
|
|
||||||
LTEXT "数据包大小",IDC_STATIC,80,331,41,8
|
|
||||||
EDITTEXT IDC_ONEPACKSMSCOUNT,123,328,24,12,ES_AUTOHSCROLL | ES_NUMBER
|
|
||||||
CONTROL "不处理上行",IDC_NORECV,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,315,56,10
|
|
||||||
CONTROL "显示详细日志",IDC_SHOWLOG2,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,227,185,64,10
|
CONTROL "显示详细日志",IDC_SHOWLOG2,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,227,185,64,10
|
||||||
LTEXT "Prov",IDC_STATIC,85,68,17,8
|
LTEXT "Prov",IDC_STATIC,85,68,17,8
|
||||||
CONTROL "号码不加86",IDC_NO86,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,341,54,10
|
|
||||||
END
|
END
|
||||||
|
|
||||||
IDD_TDSETUP DIALOGEX 0, 0, 366, 317
|
IDD_TDSETUP DIALOGEX 0, 0, 366, 317
|
||||||
|
238
FXSendDlg.cpp
238
FXSendDlg.cpp
@ -83,6 +83,7 @@ CFXSendDlg::CFXSendDlg(CWnd* pParent /*=NULL*/)
|
|||||||
, m_bNoRecv(FALSE)
|
, m_bNoRecv(FALSE)
|
||||||
, m_strDBProvider(_T(""))
|
, m_strDBProvider(_T(""))
|
||||||
, m_lCheckReSend(0)
|
, m_lCheckReSend(0)
|
||||||
|
, m_bVerifySignature(FALSE)
|
||||||
{
|
{
|
||||||
//{{AFX_DATA_INIT(CFXSendDlg)
|
//{{AFX_DATA_INIT(CFXSendDlg)
|
||||||
m_strIP = _T("");
|
m_strIP = _T("");
|
||||||
@ -297,6 +298,7 @@ void CFXSendDlg::DoDataExchange(CDataExchange* pDX)
|
|||||||
DDX_Text(pDX, IDC_DBPROVIDER, m_strDBProvider);
|
DDX_Text(pDX, IDC_DBPROVIDER, m_strDBProvider);
|
||||||
DDV_MaxChars(pDX, m_strDBProvider, 30);
|
DDV_MaxChars(pDX, m_strDBProvider, 30);
|
||||||
DDX_CBIndex(pDX, IDC_CHECKRESEND, m_lCheckReSend);
|
DDX_CBIndex(pDX, IDC_CHECKRESEND, m_lCheckReSend);
|
||||||
|
DDX_Check(pDX, IDC_VERIFYSIGNNATURE, m_bVerifySignature);
|
||||||
}
|
}
|
||||||
|
|
||||||
BEGIN_MESSAGE_MAP(CFXSendDlg, CDialog)
|
BEGIN_MESSAGE_MAP(CFXSendDlg, CDialog)
|
||||||
@ -399,6 +401,7 @@ BOOL CFXSendDlg::OnInitDialog()
|
|||||||
m_bCheckBack = m_MCom_Head.bCheckBack;
|
m_bCheckBack = m_MCom_Head.bCheckBack;
|
||||||
m_bMainReSend = m_MCom_Head.bMainReSend;
|
m_bMainReSend = m_MCom_Head.bMainReSend;
|
||||||
m_bCheckCM = m_MCom_Head.bCheckCM;
|
m_bCheckCM = m_MCom_Head.bCheckCM;
|
||||||
|
m_bVerifySignature = m_MCom_Head.bVerifySignature;
|
||||||
m_bExCM = m_MCom_Head.bExCM;
|
m_bExCM = m_MCom_Head.bExCM;
|
||||||
m_bExCM2 = m_MCom_Head.bExCM2;
|
m_bExCM2 = m_MCom_Head.bExCM2;
|
||||||
m_bNo86 = m_MCom_Head.bNo86;
|
m_bNo86 = m_MCom_Head.bNo86;
|
||||||
@ -612,6 +615,7 @@ void CFXSendDlg::OnSave()
|
|||||||
m_MCom_Head.lDelay = m_lDelay;
|
m_MCom_Head.lDelay = m_lDelay;
|
||||||
m_MCom_Head.bMainReSend=m_bMainReSend;
|
m_MCom_Head.bMainReSend=m_bMainReSend;
|
||||||
m_MCom_Head.bCheckCM = m_bCheckCM;
|
m_MCom_Head.bCheckCM = m_bCheckCM;
|
||||||
|
m_MCom_Head.bVerifySignature = m_bVerifySignature;
|
||||||
m_MCom_Head.bExCM = m_bExCM;
|
m_MCom_Head.bExCM = m_bExCM;
|
||||||
m_MCom_Head.bExCM2 = m_bExCM2;
|
m_MCom_Head.bExCM2 = m_bExCM2;
|
||||||
m_MCom_Head.bNo86 = m_bNo86;
|
m_MCom_Head.bNo86 = m_bNo86;
|
||||||
@ -1485,6 +1489,130 @@ try
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (pDlg->m_MCom_Head.bVerifySignature) //检验报备签名,如果没在运营商报备的签名不能发送,本步骤取出每条短信的签名
|
||||||
|
{
|
||||||
|
for (int i = 0; i < lDelCount; i++)
|
||||||
|
{
|
||||||
|
long lSignatureStart = 0; //签名起始位置
|
||||||
|
CString strSignatureMsg = pMT[i].Msg; //含签名的内容
|
||||||
|
CString strSignature;
|
||||||
|
//判断内容是否为长信
|
||||||
|
if (strSignatureMsg.GetLength() > 7 &&
|
||||||
|
strSignatureMsg.Left(2) == CString(_T("长信")) &&
|
||||||
|
strSignatureMsg.Mid(6, 1) == CString(_T(":")))
|
||||||
|
{
|
||||||
|
|
||||||
|
if (strSignatureMsg.Mid(5, 1) != CString(_T("1"))) //不是长信第一条,需要取长信第一条
|
||||||
|
{
|
||||||
|
BOOL bGetSignatureMsg = false;
|
||||||
|
strSignatureMsg = _T("");
|
||||||
|
//先从已读取的内容中取第一条内容
|
||||||
|
for (int j = 0; j < lDelCount; j++)
|
||||||
|
{
|
||||||
|
if (/*pMT[j].SendNum == pMT[i].SendNum &&*/
|
||||||
|
pMT[j].RecvNum == pMT[i].RecvNum &&
|
||||||
|
pMT[j].Msg.GetLength() > 7 &&
|
||||||
|
pMT[j].Msg.Left(2) == CString(_T("长信")) &&
|
||||||
|
pMT[j].Msg.Mid(6, 1) == CString(_T(":")) &&
|
||||||
|
pMT[j].Msg.Mid(5, 1) == CString(_T("1")) &&
|
||||||
|
pMT[j].Msg.Mid(2, 2) == pMT[i].Msg.Mid(2, 2))
|
||||||
|
{
|
||||||
|
strSignatureMsg = pMT[j].Msg;
|
||||||
|
bGetSignatureMsg = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//再从发送表的内容中取第一条
|
||||||
|
if (!bGetSignatureMsg)
|
||||||
|
{
|
||||||
|
CSingleLock cl(&pDlg->m_MT_FS_Lock, true);
|
||||||
|
POSITION pos = pDlg->m_MT_FS.GetHeadPosition(); // 获取链表头部位置
|
||||||
|
while (pos != NULL)
|
||||||
|
{
|
||||||
|
FXSend_MT mt = pDlg->m_MT_FS.GetNext(pos); // 获取当前元素并移动位置
|
||||||
|
// 处理 value
|
||||||
|
if (/*mt.SendNum == pMT[i].SendNum &&*/
|
||||||
|
mt.RecvNum == pMT[i].RecvNum &&
|
||||||
|
mt.Msg.GetLength() > 7 &&
|
||||||
|
mt.Msg.Left(2) == CString(_T("长信")) &&
|
||||||
|
mt.Msg.Mid(6, 1) == CString(_T(":")) &&
|
||||||
|
mt.Msg.Mid(5, 1) == CString(_T("1")) &&
|
||||||
|
mt.Msg.Mid(2, 2) == pMT[i].Msg.Mid(2, 2))
|
||||||
|
{
|
||||||
|
strSignatureMsg = mt.Msg;
|
||||||
|
bGetSignatureMsg = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
cl.Unlock();
|
||||||
|
}
|
||||||
|
//再从已发送表的内容中取第一条
|
||||||
|
if (!bGetSignatureMsg)
|
||||||
|
{
|
||||||
|
CSingleLock cl(&pDlg->m_MT_YF_Lock, true);
|
||||||
|
POSITION pos = pDlg->m_MT_YF.GetHeadPosition(); // 获取链表头部位置
|
||||||
|
while (pos != NULL)
|
||||||
|
{
|
||||||
|
FXSend_MT mt = pDlg->m_MT_YF.GetNext(pos); // 获取当前元素并移动位置
|
||||||
|
// 处理 value
|
||||||
|
if (/*mt.SendNum == pMT[i].SendNum &&*/
|
||||||
|
mt.RecvNum == pMT[i].RecvNum &&
|
||||||
|
mt.Msg.GetLength() > 7 &&
|
||||||
|
mt.Msg.Left(2) == CString(_T("长信")) &&
|
||||||
|
mt.Msg.Mid(6, 1) == CString(_T(":")) &&
|
||||||
|
mt.Msg.Mid(5, 1) == CString(_T("1")) &&
|
||||||
|
mt.Msg.Mid(2, 2) == pMT[i].Msg.Mid(2, 2))
|
||||||
|
{
|
||||||
|
strSignatureMsg = mt.Msg;
|
||||||
|
bGetSignatureMsg = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
cl.Unlock();
|
||||||
|
}
|
||||||
|
|
||||||
|
//再从数据库中读取第一条内容
|
||||||
|
if (strSignatureMsg.GetLength() <= 0)
|
||||||
|
{
|
||||||
|
str.Format(_T("select msg from smssend with(nolock) where sendid>%d and sendid<%d and Recvnum='%s' and sendnum='%s' and substring(msg,3,2)='%s' and substring(msg,6,1)='1'"), pMT[i].SendID - 200, pMT[i].SendID + 200, pMT[i].RecvNum, pMT[i].SendNum, pMT[i].Msg.Mid(2, 2));
|
||||||
|
if (AdoRS.Open(str) && !AdoRS.IsEOF())
|
||||||
|
{
|
||||||
|
AdoRS.GetCollect(_T("Msg"), strSignatureMsg);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
//发送表查不到,需要到已发表查询
|
||||||
|
str.Format(_T("select msg from corpsmsm.dbo.smssend with(nolock) where sendid>%d and sendid<%d and Recvnum='%s' and substring(msg,3,2)='%s' and substring(msg,6,1)='1'"), pMT[i].SendID - 200, pMT[i].SendID + 200, pMT[i].RecvNum, pMT[i].Msg.Mid(2, 2));
|
||||||
|
if (AdoRS.Open(str) && !AdoRS.IsEOF())
|
||||||
|
{
|
||||||
|
AdoRS.GetCollect(_T("Msg"), strSignatureMsg);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//因为是长短信,签名内容先去掉长信标识
|
||||||
|
strSignatureMsg = strSignatureMsg.Mid(7); //取7个字符后的内容
|
||||||
|
}
|
||||||
|
|
||||||
|
//取签名
|
||||||
|
long lSignatureMsgLen = strSignatureMsg.GetLength();
|
||||||
|
if (strSignatureMsg.Left(1) == CString(_T("【"))) //内容是以"【"开头的,开始取签名
|
||||||
|
{
|
||||||
|
for (int i = 1; i < lSignatureMsgLen && i < 21; i++)
|
||||||
|
{
|
||||||
|
if (strSignatureMsg.Mid(i, 1) == "】")
|
||||||
|
{
|
||||||
|
strSignature = strSignatureMsg.Mid(1, i - 1); //取到签名
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (strSignature.GetLength() > 0 && strSignature.GetLength() < 20) //有效签名
|
||||||
|
{
|
||||||
|
pMT[i].strSignature = strSignature;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
//在send中删除
|
//在send中删除
|
||||||
if (!bOnlySubmitMmsFile) //不是提交彩信模板的,取出后需要删除
|
if (!bOnlySubmitMmsFile) //不是提交彩信模板的,取出后需要删除
|
||||||
{
|
{
|
||||||
@ -1513,6 +1641,7 @@ try
|
|||||||
//判断是否需要换另一个检索方法
|
//判断是否需要换另一个检索方法
|
||||||
lSelectType==1?bSelectTimer=true:bSelectNoTimer=true; //记录是否有检索记录
|
lSelectType==1?bSelectTimer=true:bSelectNoTimer=true; //记录是否有检索记录
|
||||||
|
|
||||||
|
|
||||||
//开始发送,将需要发送的短信加入到发送列表
|
//开始发送,将需要发送的短信加入到发送列表
|
||||||
strTemp.Format( _T("发送 正在提交%d条...") , lDelCount );
|
strTemp.Format( _T("发送 正在提交%d条...") , lDelCount );
|
||||||
AddLogMsg(Send, strTemp );
|
AddLogMsg(Send, strTemp );
|
||||||
@ -1810,6 +1939,26 @@ try
|
|||||||
_tcscpy(szMsg , mt.Msg );
|
_tcscpy(szMsg , mt.Msg );
|
||||||
#ifndef SMSCENTER_NX
|
#ifndef SMSCENTER_NX
|
||||||
long lMsgLen =_tcslen(szMsg);
|
long lMsgLen =_tcslen(szMsg);
|
||||||
|
|
||||||
|
if (pDlg->m_MCom_Head.bVerifySignature) //检验报备签名,如果没在运营商报备的签名不能发送
|
||||||
|
{
|
||||||
|
if (!pDlg->VerifySignature(&AdoRS2, &mt, szSendNum2))
|
||||||
|
{
|
||||||
|
lBackStatus = -121;
|
||||||
|
strTemp.Format(_T("发送 %d %s %d,签名校验失败"), mt.CorpID, mt.RecvNum, mt.SendID);
|
||||||
|
AddLogMsg(Send, strTemp);
|
||||||
|
|
||||||
|
mt.Status = 11; //发送失败
|
||||||
|
mt.RecvStatus.Format(_T("TJ-签%d"), lBackStatus);
|
||||||
|
mt.SendTime = COleDateTime::GetCurrentTime();
|
||||||
|
b = pDlg->WriteSendRetToCorpSmsM(&AdoRS2, &mt);
|
||||||
|
if (!b) //数据库异常
|
||||||
|
{
|
||||||
|
bSql = false;
|
||||||
|
}
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
if ( pDlg->m_MCom_Head.bCheckCM )
|
if ( pDlg->m_MCom_Head.bCheckCM )
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
@ -6317,6 +6466,95 @@ void CFXSendDlg::GetCurrentPath(TCHAR * pPath)
|
|||||||
pPath[j+1]=0;
|
pPath[j+1]=0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
typedef struct _TD2SignatureSmsNum
|
||||||
|
{
|
||||||
|
long lSignatureID;
|
||||||
|
CString strSmsNum;
|
||||||
|
}TD2SignatureSmsNum;
|
||||||
|
|
||||||
|
typedef CList<TD2SignatureSmsNum, TD2SignatureSmsNum&> CTD2SignatureSmsNum;
|
||||||
|
|
||||||
|
|
||||||
|
BOOL CFXSendDlg::VerifySignature(CAdoRecordSet* pAdoRS, FXSend_MT* pMT, TCHAR * pSrcNum)
|
||||||
|
{
|
||||||
|
BOOL bVerfitySignature = false;
|
||||||
|
CString str;
|
||||||
|
CString strSignatrue = pMT->strSignature;
|
||||||
|
|
||||||
|
if (strSignatrue.GetLength() < 1) //签名小于1的校验不通过
|
||||||
|
{
|
||||||
|
return bVerfitySignature;
|
||||||
|
}
|
||||||
|
|
||||||
|
CTD2SignatureSmsNum SmsNumList;
|
||||||
|
|
||||||
|
long lMinSmsNumLen = 21; //最小的端口号长度
|
||||||
|
long lSmsNumCount = 0;
|
||||||
|
str.Format(_T("select top 100 * from TD2Signature with(nolock) where Signature='%s' and status=2 and TDID=%d order by SignatureID desc"), SQLStr(strSignatrue), m_MCom_Head.lSendFCS );
|
||||||
|
pAdoRS->Open(str);
|
||||||
|
for (int i = 0; i < 100 && !pAdoRS->IsEOF(); i++)
|
||||||
|
{
|
||||||
|
TD2SignatureSmsNum smsNum;
|
||||||
|
pAdoRS->GetCollect(_T("SmsNum"), smsNum.strSmsNum); //取端口号
|
||||||
|
pAdoRS->GetCollect(_T("SignatureID"), smsNum.lSignatureID); //取ID
|
||||||
|
SmsNumList.AddTail(smsNum);
|
||||||
|
|
||||||
|
if (smsNum.strSmsNum.GetAllocLength() < lMinSmsNumLen) //取最小的长度
|
||||||
|
lMinSmsNumLen = smsNum.strSmsNum.GetAllocLength();
|
||||||
|
pAdoRS->MoveNext();
|
||||||
|
lSmsNumCount++;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (lSmsNumCount <= 0)
|
||||||
|
{
|
||||||
|
return bVerfitySignature;
|
||||||
|
}
|
||||||
|
|
||||||
|
CString strSendNum = pMT->SendNum;
|
||||||
|
int iSendNumLen = strSendNum.GetLength();
|
||||||
|
|
||||||
|
for (int j = iSendNumLen; j >= 2 && j >= lMinSmsNumLen; j--) //发送号码从长到短匹配
|
||||||
|
{
|
||||||
|
CString strSendNum2 = strSendNum.Left(j);
|
||||||
|
|
||||||
|
POSITION pos = SmsNumList.GetHeadPosition(); // 获取链表头部位置
|
||||||
|
while (pos != NULL)
|
||||||
|
{
|
||||||
|
TD2SignatureSmsNum mt = SmsNumList.GetNext(pos); // 获取当前元素并移动位置
|
||||||
|
|
||||||
|
if (strSendNum2 == mt.strSmsNum)
|
||||||
|
{
|
||||||
|
bVerfitySignature = true;
|
||||||
|
pMT->SendNum = mt.strSmsNum; //更改发送号码
|
||||||
|
_tcscpy(pSrcNum, mt.strSmsNum);//更改发送号码
|
||||||
|
|
||||||
|
//计数增加1
|
||||||
|
str.Format(_T("update TD2Signature set SendCount=SendCount+1 where SignatureID=%d"), mt.lSignatureID);
|
||||||
|
pAdoRS->Open(str);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (bVerfitySignature) //匹配上签名
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!bVerfitySignature && SmsNumList.GetCount() > 0)
|
||||||
|
{
|
||||||
|
TD2SignatureSmsNum mt = SmsNumList.GetHead(); // 取第一条记录
|
||||||
|
bVerfitySignature = true;
|
||||||
|
pMT->SendNum = mt.strSmsNum; //更改发送号码
|
||||||
|
_tcscpy(pSrcNum, mt.strSmsNum);//更改发送号码
|
||||||
|
|
||||||
|
//计数增加1
|
||||||
|
str.Format(_T("update TD2Signature set SendCount=SendCount+1 where SignatureID=%d"), mt.lSignatureID);
|
||||||
|
pAdoRS->Open(str);
|
||||||
|
}
|
||||||
|
|
||||||
|
return bVerfitySignature;
|
||||||
|
}
|
||||||
long CFXSendDlg::WriteSendRetToCorpSmsM(CAdoRecordSet * pAdoRS,FXSend_MT * pMT)
|
long CFXSendDlg::WriteSendRetToCorpSmsM(CAdoRecordSet * pAdoRS,FXSend_MT * pMT)
|
||||||
{
|
{
|
||||||
CString str;
|
CString str;
|
||||||
|
@ -470,6 +470,7 @@ public:
|
|||||||
BOOL FS_Add(FXSend_MT mt);
|
BOOL FS_Add(FXSend_MT mt);
|
||||||
BOOL FS_Get(FXSend_MT & mt);
|
BOOL FS_Get(FXSend_MT & mt);
|
||||||
static CString SQLStr(CString & str);
|
static CString SQLStr(CString & str);
|
||||||
|
BOOL VerifySignature(CAdoRecordSet* pAdoRS, FXSend_MT* pMT, TCHAR* pSrcNum);
|
||||||
long WriteSendRetToCorpSmsM(CAdoRecordSet * pAdoRS,FXSend_MT * pMT);
|
long WriteSendRetToCorpSmsM(CAdoRecordSet * pAdoRS,FXSend_MT * pMT);
|
||||||
long WriteSendRetToCorpSmsM2(CAdoRecordSet * pAdoRS,FXSend_MT * pMT,CString & strValues);
|
long WriteSendRetToCorpSmsM2(CAdoRecordSet * pAdoRS,FXSend_MT * pMT,CString & strValues);
|
||||||
long WriteSendRetToCorpSmsM_XY(CAdoRecordSet * pAdoRS,FXSend_MT * pMT);
|
long WriteSendRetToCorpSmsM_XY(CAdoRecordSet * pAdoRS,FXSend_MT * pMT);
|
||||||
@ -674,6 +675,7 @@ public:
|
|||||||
afx_msg void OnCbnSelchangeCheckresend();
|
afx_msg void OnCbnSelchangeCheckresend();
|
||||||
int m_lCheckReSend;
|
int m_lCheckReSend;
|
||||||
static CStringA UnicodeToString(TCHAR * pMsg);
|
static CStringA UnicodeToString(TCHAR * pMsg);
|
||||||
|
BOOL m_bVerifySignature;
|
||||||
};
|
};
|
||||||
|
|
||||||
//{{AFX_INSERT_LOCATION}}
|
//{{AFX_INSERT_LOCATION}}
|
||||||
|
@ -128,6 +128,7 @@ namespace MobsetApi {
|
|||||||
m_lReqReturn = ns1__Sms_USCORESendResponse->Count;
|
m_lReqReturn = ns1__Sms_USCORESendResponse->Count;
|
||||||
return SOAP_OK;
|
return SOAP_OK;
|
||||||
}
|
}
|
||||||
|
BOOL bTemplateSms = false;
|
||||||
if (ns1__Template_USCORESendSms != nullptr) //模板短信转发的,将参数转移过来
|
if (ns1__Template_USCORESendSms != nullptr) //模板短信转发的,将参数转移过来
|
||||||
{
|
{
|
||||||
ns1__Sms_USCORESend->soap = ns1__Template_USCORESendSms->soap;
|
ns1__Sms_USCORESend->soap = ns1__Template_USCORESendSms->soap;
|
||||||
@ -140,6 +141,8 @@ namespace MobsetApi {
|
|||||||
ns1__Sms_USCORESend->LongSms = 1; //默认为长短信
|
ns1__Sms_USCORESend->LongSms = 1; //默认为长短信
|
||||||
ns1__Sms_USCORESend->MobileList = ns1__Template_USCORESendSms->MobileList;
|
ns1__Sms_USCORESend->MobileList = ns1__Template_USCORESendSms->MobileList;
|
||||||
ns1__Sms_USCORESend->Content = NULL;
|
ns1__Sms_USCORESend->Content = NULL;
|
||||||
|
|
||||||
|
bTemplateSms = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
CFXSendDlg* pDlg = (CFXSendDlg*)m_pParam;
|
CFXSendDlg* pDlg = (CFXSendDlg*)m_pParam;
|
||||||
@ -254,14 +257,14 @@ namespace MobsetApi {
|
|||||||
return SOAP_OK;
|
return SOAP_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (userPro.dwCorpSDK & SDK_PROHIBITNONTEMPLATE) //禁止非模板短信
|
if (!bTemplateSms && (userPro.dwCorpSDK & SDK_PROHIBITNONTEMPLATE) ) //如果是非模板短信,并且禁止非模板短信
|
||||||
{
|
{
|
||||||
*ns1__Sms_USCORESendResponse->ErrMsg = L"此企业禁止非模板短信";
|
*ns1__Sms_USCORESendResponse->ErrMsg = L"此企业禁止非模板短信";
|
||||||
ns1__Sms_USCORESendResponse->Count = -113;
|
ns1__Sms_USCORESendResponse->Count = -113;
|
||||||
m_lReqReturn = ns1__Sms_USCORESendResponse->Count;
|
m_lReqReturn = ns1__Sms_USCORESendResponse->Count;
|
||||||
return SOAP_OK;
|
return SOAP_OK;
|
||||||
}
|
}
|
||||||
if (userPro.dwSDK & SDK_PROHIBITNONTEMPLATE) //禁止非模板短信
|
if (!bTemplateSms && (userPro.dwSDK & SDK_PROHIBITNONTEMPLATE) ) //如果是非模板短信,并且禁止非模板短信
|
||||||
{
|
{
|
||||||
*ns1__Sms_USCORESendResponse->ErrMsg = L"此用户禁止非模板短信";
|
*ns1__Sms_USCORESendResponse->ErrMsg = L"此用户禁止非模板短信";
|
||||||
ns1__Sms_USCORESendResponse->Count = -114;
|
ns1__Sms_USCORESendResponse->Count = -114;
|
||||||
@ -2817,6 +2820,7 @@ namespace MobsetApi {
|
|||||||
CFXSendDlg* pDlg = (CFXSendDlg*)m_pParam;
|
CFXSendDlg* pDlg = (CFXSendDlg*)m_pParam;
|
||||||
|
|
||||||
|
|
||||||
|
BOOL bTemplateSms = false;
|
||||||
long lCorpID = ns1__Mms_USCORESend->CorpID;
|
long lCorpID = ns1__Mms_USCORESend->CorpID;
|
||||||
m_lReqCorpID = lCorpID;
|
m_lReqCorpID = lCorpID;
|
||||||
CString strLoginName;
|
CString strLoginName;
|
||||||
@ -2886,6 +2890,22 @@ namespace MobsetApi {
|
|||||||
m_lReqReturn = ns1__Mms_USCORESendResponse->Count;
|
m_lReqReturn = ns1__Mms_USCORESendResponse->Count;
|
||||||
return SOAP_OK;
|
return SOAP_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!bTemplateSms && (userPro.dwCorpSDK & SDK_PROHIBITNONTEMPLATE)) //如果是非模板短信,并且禁止非模板短信
|
||||||
|
{
|
||||||
|
*ns1__Mms_USCORESendResponse->ErrMsg = L"此企业禁止非模板短信";
|
||||||
|
ns1__Mms_USCORESendResponse->Count = -113;
|
||||||
|
m_lReqReturn = ns1__Mms_USCORESendResponse->Count;
|
||||||
|
return SOAP_OK;
|
||||||
|
}
|
||||||
|
if (!bTemplateSms && (userPro.dwSDK & SDK_PROHIBITNONTEMPLATE)) //如果是非模板短信,并且禁止非模板短信
|
||||||
|
{
|
||||||
|
*ns1__Mms_USCORESendResponse->ErrMsg = L"此用户禁止非模板短信";
|
||||||
|
ns1__Mms_USCORESendResponse->Count = -114;
|
||||||
|
m_lReqReturn = ns1__Mms_USCORESendResponse->Count;
|
||||||
|
return SOAP_OK;
|
||||||
|
}
|
||||||
|
|
||||||
CString str;
|
CString str;
|
||||||
BOOL bAtTime = false;
|
BOOL bAtTime = false;
|
||||||
CString strTimer = _T("NULL");
|
CString strTimer = _T("NULL");
|
||||||
|
@ -475,8 +475,12 @@ DWORD WINAPI CSgip::SocketSend(LPVOID lParam)
|
|||||||
CSgip* pNet = (CSgip*)lParam;
|
CSgip* pNet = (CSgip*)lParam;
|
||||||
while (!pNet->m_bQuitThread)
|
while (!pNet->m_bQuitThread)
|
||||||
{
|
{
|
||||||
//发送短信
|
long lCount = 0;
|
||||||
long lCount = pNet->Back_Send();
|
if (pNet->m_bConnect && pNet->m_bLoginSgip == 0)
|
||||||
|
{
|
||||||
|
//发送短信
|
||||||
|
long lCount = pNet->Back_Send();
|
||||||
|
}
|
||||||
if (lCount > 0)
|
if (lCount > 0)
|
||||||
Sleep_Lu(1);
|
Sleep_Lu(1);
|
||||||
else
|
else
|
||||||
|
@ -50,7 +50,7 @@ BOOL CSmsSend::OnInitDialog()
|
|||||||
|
|
||||||
|
|
||||||
m_strMobile=_T("13922455188");
|
m_strMobile=_T("13922455188");
|
||||||
m_strMsg=_T("测试短信,祝你工作顺利。此短信免费,不用回复,如果打扰,请见谅![广州首易]");
|
m_strMsg=_T("【广州首易】本次操作验证码是:723623,5分钟有效,如非本人操作请忽略。");
|
||||||
|
|
||||||
UpdateData(false);
|
UpdateData(false);
|
||||||
|
|
||||||
|
4
StdAfx.h
4
StdAfx.h
@ -131,7 +131,8 @@ typedef struct _MobileCom_Head
|
|||||||
long lSendFCS;
|
long lSendFCS;
|
||||||
long lReport;
|
long lReport;
|
||||||
long lDelay;
|
long lDelay;
|
||||||
TCHAR szWindow[128];
|
TCHAR szWindow[126];
|
||||||
|
BOOL bVerifySignature;
|
||||||
BOOL bMainReSend;
|
BOOL bMainReSend;
|
||||||
BOOL bAllNum;
|
BOOL bAllNum;
|
||||||
BOOL bCheckCM;
|
BOOL bCheckCM;
|
||||||
@ -342,6 +343,7 @@ typedef struct _FXSend_MT
|
|||||||
BOOL bLongSms;
|
BOOL bLongSms;
|
||||||
long lLongSmsRand;
|
long lLongSmsRand;
|
||||||
BOOL bOnlySubmitMmsFile;
|
BOOL bOnlySubmitMmsFile;
|
||||||
|
CString strSignature;
|
||||||
}FXSend_MT;
|
}FXSend_MT;
|
||||||
|
|
||||||
typedef CList<FXSend_MT , FXSend_MT&> CFXSend_MT;
|
typedef CList<FXSend_MT , FXSend_MT&> CFXSend_MT;
|
||||||
|
@ -64,6 +64,8 @@
|
|||||||
#define IDC_EXCM 1028
|
#define IDC_EXCM 1028
|
||||||
#define IDC_CHECKCM 1029
|
#define IDC_CHECKCM 1029
|
||||||
#define IDC_SUBNUM 1030
|
#define IDC_SUBNUM 1030
|
||||||
|
#define IDC_CHECKCM2 1030
|
||||||
|
#define IDC_VERIFYSIGNNATURE 1030
|
||||||
#define IDC_CMPP 1031
|
#define IDC_CMPP 1031
|
||||||
#define IDC_CMPP_EXCHANGENUM 1032
|
#define IDC_CMPP_EXCHANGENUM 1032
|
||||||
#define IDC_CMPP_PORT 1033
|
#define IDC_CMPP_PORT 1033
|
||||||
|
Loading…
Reference in New Issue
Block a user