2017-06-19 66 views
-1

我已經使用Indy10.6.2組件進行了3次嘗試,其中沒有一個顯示任何錯誤,但代碼無法發送短信。請幫助我通過Delphi代碼向我發送短信。如何使用Delphi代碼發送短信

嘗試1

const 
    URL = 'https://api.bulksmsgateway.in/send/?  username=****&hash=****&sender=TXTLCL&numbers=9198........&message=HISUNDAR'; 
    //URL = 'https://api.textlocal.in/send/? username=*****&hash=******&sender=TXTLCL&numbers=9198...&message=HISUNDAR'; 
    ResponseSize = 1024; 
var 
    hSession, hURL: HInternet; 
    Request: String; 
    ResponseLength: Cardinal; 
begin 
    hSession := InternetOpen('TEST', INTERNET_OPEN_TYPE_PRECONFIG, nil,  nil, 0); 
    try 
     Request := Format(URL,  [Username,Password,Sender,Numbers,HttpEncode(Message1)]); 
     hURL := InternetOpenURL(hSession, PChar(Request), nil, 0,0,0); 
     try 
      SetLength(Result, ResponseSize); 
      InternetReadFile(hURL, PChar(Result), ResponseSize,   ResponseLength); 
      SetLength(Result, ResponseLength); 
     finally 
      InternetCloseHandle(hURL) 
     end; 
     showmessage(result); 
    finally 
     InternetCloseHandle(hSession) 
    end 

嘗試2

var 
    http : TIdHTTP; 
    IdSSL : TIdSSLIOHandlerSocketOpenSSL; 
begin 
    http := TIdHTTP.Create(nil); 
    IdSSL := TIdSSLIOHandlerSocketOpenSSL.Create(nil); 
    try 
     Http.ReadTimeout := 30000; 
     Http.IOHandler := IdSSL; 
     IdSSL.SSLOptions.Method := sslvTLSv1; 
     Http.Request.BasicAuthentication := True; 
     // IdSSL.SSLOptions.Method := sslvTLSv1; 
     //IdSSL.SSLOptions.Method := sslvTLSv1; 
     // http.Get('https://www.smsgatewayhub.com/api/mt/SendSMS?  APIKey=B215dPone0yVIJU2QDH&senderid=TESTIN&channel=2&DCS=0&flashsms=0&number=  9195.....&text=test message&route=1'); 
     http.Get('http://login.bulksmsgateway.in/sendmessage.php?   user=****&password=****&mobile=95661....&message=Good   Morning&sender=PRAPUS&type=3 '); 
    finally 
     http.Free; 
    end; 

嘗試3

var 
    lHTTP: TIdHTTP; 
    lParamList: TStringList; 
    lResult: String; 
    IdSSL : TIdSSLIOHandlerSocketOpenSSL; 
begin 
    lParamList := TStringList.Create; 
    lParamList.Add('username=****');          
    lParamList.Add('password=****');         
    lParamList.Add('msgtext=Hello World');         
    lParamList.Add('originator=TestAccount');        
    lParamList.Add('phone=+9195....');          

    lParamList.Add('showDLR=0');             


    lParamList.Add('charset=0');             
    lParamList.Add('msgtype=');             
    lParamList.Add('provider=bulksmsgateway.in');      

    lHTTP := TIdHTTP.Create(nil);            
    try 

     lResult :=  lHTTP.Post('http://login.bulksmsgateway.in/sendmessage.php?', lParamList); 
     //WriteLn(lResult);              
     // Readln; 
    finally 
     FreeAndNil(lHTTP);            
     FreeAndNil(lParamList); 
    end; 
+0

上次代碼中的第一個地方,刪除'?'來自URL的字符。爲獲得進一步的幫助,我們需要查看某個流量嗅探器(例如,來自瀏覽器控制檯)捕獲的請求。 – Victoria

+0

你做了什麼調試。你說你有「嘗試」的東西。你做了什麼事? –

+0

以前遇到過多種_online_解決方案時,我們發現最好的解決方案是使用USB連接的電話並連接到它的虛擬串行調制解調器。 [見這裏](https://gist.github.com/stijnsanders/bf0e7014b5824720f50e2f25a8d6efaf)爲例 –

回答

2

您正在發出錯誤的參數來使用錯誤的HTTP方法錯網址。根據Bulk SMS Gateway website上的代碼示例,您需要使用具有正確URL和參數的HTTP POST。請按照在線示例進行操作。

嘗試一些更喜歡這個:

var 
    lHTTP: TIdHTTP; 
    lParamList: TStringList; 
    lResult: String; 
    IdSSL : TIdSSLIOHandlerSocketOpenSSL; 
begin 
    lParamList := TStringList.Create; 
    try 
    lParamList.Add('user=****'); 
    lParamList.Add('password=****'); 
    lParamList.Add('message=Hello World'); 
    lParamList.Add('sender=TestAccount'); 
    lParamList.Add('mobile=+9195....'); 
    lParamList.Add('type=1'); // or 3 

    lHTTP := TIdHTTP.Create(nil); 
    try 
     // note: if you are using an up-to-date version of Indy, 
     // assigning the IOHandler is optional: 
     // 
     // http://www.indyproject.org/sockets/blogs/ChangeLog/20141222.aspx 
     // 
     lHTTP.IOHandler := TIdSSLIOHandlerSocketOpenSSL.Create(lHTTP); 
     try 
     lResult := lHTTP.Post('https://www.bulksmsgateway.in/sendmessage.php', lParamList); 
     // WriteLn(lResult); 
     // Readln; 
     except 
     on E: Exception do begin 
      //WriteLn('Error: ', e.Message); 
     end; 
     end; 
    finally 
     FreeAndNil(lHTTP); 
    end; 
    finally 
    FreeAndNil(lParamList); 
    end; 
end; 

如果你想通過SMS Gateway Hub送,你必須使用HTTP GET,或HTTP上的XML POST的選擇:

var 
    lHTTP: TIdHTTP; 
    lParamList, lResult: String; 
    IdSSL : TIdSSLIOHandlerSocketOpenSSL; 
begin 
    lParamList := Format('APIKey=%s&senderid=%s&channel=2&DCS=8&flashsms=0&number=%s&text=%s&route=1', 
    [ 
    '****', 
    'TestAccount', 
    '9195....', 
    'Hello World' 
    ] 
); 

    lHTTP := TIdHTTP.Create(nil); 
    try 
    lHTTP.IOHandler := TIdSSLIOHandlerSocketOpenSSL.Create(lHTTP); 
    try 
     lResult := lHTTP.Get('https://www.smsgatewayhub.com/api/mt/SendSMS?' + lParamList); 
     // WriteLn(lResult); 
     // Readln; 
    except 
     on E: Exception do begin 
     //WriteLn('Error: ', e.Message); 
     end; 
    end; 
    finally 
    FreeAndNil(lHTTP); 
    end; 
end; 

var 
    lHTTP: TIdHTTP; 
    lParamList: TStringStream; 
    lResult: String; 
    IdSSL : TIdSSLIOHandlerSocketOpenSSL; 
begin 
    lParamList := TStringStream.Create(
    '<SmsQueue>' + 
     '<Account>' + 
     '<User>****</User>' + 
     '<Password>****</Password>' + 
     '<SenderId>TestAccount</SenderId>' + 
     '<Channel>1</Channel>' + 
     '<DCS>0</DCS>' + 
     '<FlashSms>0</FlashSms>' + 
     '<Route>1</Route>' + 
     '</Account>' + 
     '<Messages>' + 
     '<Message>' + 
      '<Number>9195....</Number>' + 
      '<Text>Hello World</Text>' + 
     '</Message>' + 
     '</Messages>' + 
    '</SmsQueue>', 
    TEncoding.UTF8); 
    try 
    lHTTP := TIdHTTP.Create(nil); 
    try 
     lHTTP.IOHandler := TIdSSLIOHandlerSocketOpenSSL.Create(lHTTP); 
     try 
     lHTTP.Request.ContentType := 'text/xml'; 
     lHTTP.Request.Charset := 'utf-8'; 
     lResult := lHTTP.Post('https://www.smsgatewayhub.com/RestAPI/MT.svc/mt', lParamList); 
     // WriteLn(lResult); 
     // Readln; 
     except 
     on E: Exception do begin 
      //WriteLn('Error: ', e.Message); 
     end; 
     end; 
    finally 
     FreeAndNil(lHTTP); 
    end; 
    finally 
    FreeAndNil(lParams); 
    end; 
end;