• 文章
  • 如何從應用程式傳送簡訊
2014 年 8 月 11 日 (最後更新:2014 年 8 月 29 日)

如何從應用程式傳送簡訊

評分:3.8/5 (141 票)
*****

如何從桌面應用程式(使用 C++ 編寫)傳送簡訊。

  • 下載原始碼 - 45.7 KB


  • 簡介

    本文介紹瞭如何為桌面應用程式添加發送文字(SMS)訊息的功能。


    背景

    本文重點介紹使用 MFC / C++ 的實現。在尋找一種可靠且經濟的方式來以程式設計方式傳送簡訊時,我遇到了一家名為 CardBoardFish 的公司,該公司覆蓋 150 個國家/地區,並提供易於使用但功能強大的 SDK,可用於與任何網站、手機或桌面應用程式進行介面,涵蓋大多數平臺和開發環境。不幸的是,在其網站的程式碼示例中,沒有 C++ 示例,因此我決定開發我自己的 C++ 實現。

    以程式設計方式傳送簡訊

    大多數應用程式和網站在傳送簡訊時,都會將其作為其範圍的一部分或作為其他功能之一(例如,傳送警報等),它們通常使用以下方法之一:
    • HTTP Web 服務 - 要求使用 HTTP“GET”方法,透過 API 向給定的 Web 服務傳送命令,該 API 包含憑據、引數和訊息文字。

    • 電子郵件到簡訊 - 使用 SMTP 協議,允許以一種獨特的格式傳送電子郵件,該格式將所有必需的引數(憑據、發件人、接收者等)編碼為電子郵件的一部分。
    本文重點介紹第一種方法,即使用 Web 服務。

    API

    下表列出了可以(或應該)傳送到 Web 服務的所有引數。


    使用程式碼

    本文中的程式碼是在 MFC / C++ 中使用 Visual Studio 2010 Ultimate 開發的。我還使用了 Cheng Shi 的 HTTPClient(感謝 Cheng!)。

    為了在您自己的應用程式中使用程式碼,建議您閱讀名為 HTTPSMS 的 SDK 的規範。其次,您需要開立一個賬戶並獲取您的使用者名稱和密碼,這些資訊可以硬編碼在原始碼中,也可以在執行時輸入。

    SendSMS 應用程式

    我們應用程式的主要功能顯然是傳送簡訊,這在以下函式中完成:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    // SendSms  - by Michael Haephrati
    BOOL SendSms(CString From, CString CountryCode, CString To,CString Message,CString *Status)
        // From - the ID or number you are sending from. This is what will appear at the recipient's cellphone. 
        // CountyCode - the code of the country you are sending the SMS to (for example: 44 is for the UK
        // To - is the number you are texting to, which should not contain any leading zeros, spaces, commas, etc.
        // Message - is the message you are sending, which can be any multi lingual text
        // The status returned would be either a confirmation number along with the text "OK", which means that the message
        // was delivered, or an error code. 
    {
        BOOL result=FALSE;
        wstring user=L"PLACE_YOUR_USERNAME_HERE",pass=L"PLACE_YOUR_PASSWORD_HERE",request=L"";
        // 
        request=L"http://sms1.cardboardfish.com:9001/HTTPSMS?S=H&UN=";
        request+=user;    // user name
        request+=L"&P=";
        request+=pass;    // password
        request+=L"&DA="; 
        request+=(wstring)(CountryCode+To); // country code
        request+=L"&SA="; 
        request+=(wstring)From; // From (sender ID)
        request+=L"&M=";
        CString EncodedMessage; // Message
        
        CString ccc;
        EncodedMessage=ConvertHex(Message)+ConvertHex( L" here you can place your marketing piech, website, etc.");
        
        request+=(wstring)EncodedMessage; // Message to send
    
        request+=L"&DC=4";
        // Indicating that this message is encoded as opposed to plain text  


    現在我們處理 HTTP“GET”請求。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    WinHttpClient client(request); 
            
         client.SendHttpRequest(L"GET",true);
        // Get the response
    
        wstring httpResponseHeader = client.GetResponseHeader();
        wstring httpResponseContent = client.GetResponseContent();
        *Status=httpResponseContent.c_str();
        return result; 
    }


    其他服務

    我測試了 CardBoardFish 的服務,並在附加原始碼中使用了它們。它們在此處提供了自己的程式碼示例,但其中不包含 c++,這就是我編寫本文附加的測試應用程式的原因。

    我最近測試了他們提供的另一項服務,即在傳送簡訊之前驗證手機號碼。我沒有包含此功能,因為我發現它太慢了,而且它也不涵蓋某些國家/地區,其中包括……美國。

    我找到了另一個備選服務提供商:http://www.clickatell.coml,因此有多種選擇可供選擇。

    延伸閱讀 

    請參閱我的另一篇文章,本文將解釋如何使用 iOS(iPhone / iPad)完成同樣的操作。


    許可證


    本文以及任何相關的原始碼和檔案,均根據 The Code Project Open License (CPOL) 獲得許可。

    關於作者

    Michael N. Haephrati 是一位企業家、發明家和音樂家。Haephrati 曾參與過許多專案,包括 HarmonySoft,設計了 Rashumon,這是 Amiga 計算機上首個圖形多語言文字處理器。在 1995-1996 年間,他作為合同工在 Apple 位於庫比蒂諾的公司工作。在一家研究所工作,為以色列的信用評分領域邁出了第一步。他創立了 Target Scoring,並開發了一個名為 ThiS 的信用評分系統,該系統基於地理統計資料,參與了 VISA CAL、Isracard、Bank Leumi 和 Bank Discount(Target Scoring,是一家大型以色列機構的業務發展副總裁)。
    2000 年,他創立了 Target Eye,並開發了第一個名為 Target Eye 的遠端 PC 監控系統。

    其他專案包括:資料清洗(作為 DataTune  系統的一部分,該系統已在許多組織中實施)。





    關注



    文章頂部

    附件:[Haephrati_SendSMS.zip]