在Secured Globe, Inc.,一直在寻找一种简单的API,用于向程序员团队发送WhatsApp消息。市场上有许多服务提供商,选择了其中一个名为WhatsAppMate的服务,并开始了免费试用。然而,他们提供的代码示例几乎涵盖了所有编程语言,唯独没有C++。因此,决定自己编写一个C++类来实现这一功能。请继续阅读第二部分以了解更多详情。
WhatsApp是一个跨平台的免费聊天服务,支持视频、语音通话以及向个人或群组发送消息,包括文件、媒体等。与旧的短信服务相比,WhatsApp不仅免费,还具有更多功能。在日常工作中,需要设置各种提醒,自动发送给共享工作或共同开发功能的工作组,这使得收到通知变得非常方便。
对于GitHub仓库,请参阅和。可以发送的消息类型包括个人或群组消息,以及是否附带照片或PDF文件。可以在上了解更多信息。
以下是需要具备的构建块。稍后,将附加一个编译好的(.exe)测试应用程序。
首先,打开一个互联网连接并连接到API服务:
C++
hOpenHandle = InternetOpen(_T("HTTP"), INTERNET_OPEN_TYPE_DIRECT, NULL, NULL, 0);
if (hOpenHandle == NULL) {
return false;
}
hConnectHandle = InternetConnect(hOpenHandle, GROUP_API_SERVER, INTERNET_DEFAULT_HTTP_PORT, NULL, NULL, INTERNET_SERVICE_HTTP, 0, 1);
if (hConnectHandle == NULL) {
InternetCloseHandle(hOpenHandle);
return false;
}
接下来,打开一个请求:
C++
const wchar_t *AcceptTypes[] = { _T("application/json"), NULL };
HINTERNET hRequest = HttpOpenRequest(hConnectHandle, _T("POST"), GROUP_API_PATH, NULL, NULL, AcceptTypes, 0, 0);
if (hRequest == NULL) {
InternetCloseHandle(hConnectHandle);
InternetCloseHandle(hOpenHandle);
return false;
}
接下来,使用以下代码设置头部:
C++
std::wstring HeaderData;
HeaderData += _T("X-WM-CLIENT-ID: ");
HeaderData += _T(CLIENT_ID);
HeaderData += _T("\r\nX-WM-CLIENT-SECRET: ");
HeaderData += _T(CLIENT_SECRET);
HeaderData += _T("\r\n");
HttpAddRequestHeaders(hRequest, HeaderData.c_str(), HeaderData.size(), NULL);
现在准备向群组发送消息:
C++
std::wstring WJsonData;
WJsonData += _T("{");
WJsonData += _T("\"group_admin\":\"");
WJsonData += groupAdmin;
WJsonData += _T("\",\"group_name\":\"");
WJsonData += groupName;
WJsonData += _T("\",\"message\":\"");
WJsonData += message;
WJsonData += _T("\"");
WJsonData += _T("}");
const std::string JsonData(WJsonData.begin(), WJsonData.end());
bResults = HttpSendRequest(hRequest, NULL, 0, (LPVOID)(JsonData.c_str()), JsonData.size());
接收者将看到类似这样的WhatsApp消息:但为了确保一切顺利,需要查询Http请求的结果。如果成功,期望的StatusText是"OK"。
C++
TCHAR StatusText[BUFFER_LENGTH] = {0};
DWORD StatusTextLen = BUFFER_LENGTH;
HttpQueryInfo(hRequest, HTTP_QUERY_STATUS_TEXT, &StatusText, &StatusTextLen, NULL);
bResults = (StatusTextLen && wcscmp(StatusText, L"OK")==FALSE);
现在可以看到如何使用类。
C++
#include "SGWhatsApp.h"
int _tmain(int argc, _TCHAR* argv[]) {
SGWhatsApp sender;
sender.SendGroupMessage(GroupAdmin, GroupName, _T("hi"));
return 0;
}