2015-09-06 87 views
-1

在我的PHP項目中,我想整合短信網關。將短信網關整合到PHP中的問題

我已經集成了HSPSMS短信網關。

他們爲此提供了一個API,但不幸的是我無法以正確的方式調用此API。我已經在用戶成功註冊到站點之後調用了API,以便向用戶發送關於通知他已成功註冊的SMS。目前我正在發送相同的短信,但API可以發送短信回覆(成功發送或不發送JSON格式的短信)。

這是一個問題 - 我無法捕獲SMS網關的回覆響應,因此它導致響應顯示在用戶/網頁上。

這對用戶來說是個問題。

喚起我已經使用PHP頭功能,如SMS網關:

header("Location:URL of SMS Gateway"); 

我作爲貝婁代碼,

<?php 
include("otherpages/connection.php"); 

if(isset($_POST['submit1'])) { 
    $mname=$_POST['mname']; 
    $cdate=$_POST['cdate']; 
    $maddress1=$_POST['maddress']; 
    $mschool=$_POST['mschool']; 
    $mkendra=$_POST['centrename']; 
    $mmobile=$_POST['mmobile']; 
    $user=$_POST['user']; 
    $pass=$_POST['pass']; 
    $approved="0"; 

    $qr="insert into tempregistration values('','$cdate','$mname','$maddress1','$mschool','$mschool','$mkendra','$mmobile','$user','$pass','$approved')"; 

    // Code for Registration SMS 

    $url = 'http://sms.hspsms.com/sendSMS?username=#USERNAME#&message=Dear User,You Have Succeffully Registered to ABC.com ,Thanks&sendername=HSPSMS&smstype=PROMO&numbers=9503808004&apikey=#APIKey#'; 

    header("Location:$url"); 
?> 

請大家幫我上相同或指導在那裏我做的對還是錯?

任何幫助將是可觀的。

+1

目前還不清楚你問什麼:如果你通過一個'Location'頭的方式轉發用戶的一些服務,那麼你發送的用戶了。沒有辦法以某種方式讓用戶回到你身邊。這種方法不是使用API​​,這就是所謂的「轉發」。你可以嘗試做的是在一些iframe中轉發該服務。這將允許使用JavaScript來調查iframe並對此作出反應。但這聽起來很難看。而是尋找一個_real_ API,它允許你從服務器端交出請求,所以你可以在你的php腳本中對結果做出反應。 – arkascha

+0

這是*全部錯誤*。忽略非功能性和不安全的SQL,你的代碼正在指導*用戶的瀏覽器*進入'sms.hspsms.com'。正如arkascha所說,這意味着*用戶將離開您的網站*。更重要的是,這意味着用戶可以看到發生這種情況,保存URL,更改消息的詳細信息,他們可以發送額外的短信,你將被收取費用。您想要的是將請求從服務器*發送到網關*,可以使用[cURL](http://stackoverflow.com/q/3062324/1233508)完成。 – DCoder

+0

而且,爲了說明這一點,如果您的網址字面上包含「#USERNAME#」和「#APIKey#」,則必須將其替換爲您的帳戶憑據......從您的文本中判斷「是否」 JSON格式「,它聽起來像是期待JSON而不是簡單的查詢字符串,您需要閱讀網關的文檔。 – DCoder

回答

0

你正在發送用戶的瀏覽器到API,你想要做的是讓PHP發出請求,然後告訴用戶它是否成功。

您可以使用get_file_contents,但curl會給你更多的控制權。

您應該有一個函數將請求發送到API並返回成功/失敗,然後向用戶顯示消息。

像這樣(未經):

if(isset($_POST['submit1'])) { 
    $mname=$_POST['mname']; 
    $cdate=$_POST['cdate']; 
    $maddress1=$_POST['maddress']; 
    $mschool=$_POST['mschool']; 
    $mkendra=$_POST['centrename']; 
    $mmobile=$_POST['mmobile']; 
    $user=$_POST['user']; 
    $pass=$_POST['pass']; 
    $approved="0"; 

    $qr="insert into tempregistration values('', 
     '$cdate','$mname','$maddress1','$mschool', 
     '$mschool','$mkendra','$mmobile','$user','$pass','$approved')"; 
    //update to encode parameters which contain spaces 
    $message = urlencode('Dear User, You have successfully registered ...'); 
    // other parametes might also contain spaces ... 
    $username = urlencode('#USERNAME'); 
    $sendername = urlencode('HSPSMS'); 
    //etc 

    $url = 'http://sms.hspsms.com/sendSMS?username='.$username 
      .'&message='.$message 
      .'&sendername='.$sendername 
      .'&smstype=PROMO&numbers=9503808004&apikey=#APIKey#'; 


    if ($result = do_api_call($url)){ 
     echo "SMS API returned:<br>"; 
     echo $result;//for debugging 
    }else { 
     echo "Failure" 
    } 
} 

... 

function do_api_call($url){ 
    //this is very simplistic code to get you going ... 
    //use curl instead for more control 
    return file_get_contents($url); 
} 
+0

你好,謝謝你的回覆,我已經試過但未能找出解決方案我已經使用file_get_contents()方法,但它給異常未能打開流和異常的詳細信息是,警告:file_get_contents(http%3A%2F%2Fsms.hspsms 。com%2FsendSMS%3Fusername%3D#UserName#%26message%3DYe + Makada%26sendername%3DHSPSMS%26smstype%3DPROMO%26numbers%3D9970077302%26apikey%3D#APIKEY#)[function.file-get-contents]:無法打開流:沒有這樣的文件或目錄在C:\ wamp \ www \ Sangola Taluka Society \ SendSMS.php在第9行 失敗 – user3350069

+0

我試過也沒有使用urlencode,但它給出了以下異常。我不知道如何使用Curl()警告:file_get_contents(http://sms.hspsms.com/sendSMS?username=#Username#&message=Hello&sendername=HSPSMS&smstype=PROMO&numbers=950380004&apikey=#APIKey#)[function.file-get-contents]:無法打開流: HTTP請求失敗! HTTP/1.1 505 HTTP版本不支持在C:\ wamp \ www \ Sangola Taluka Society \ SendSMS.php在第9行 失敗 – user3350069

+0

如果您要編碼url,您應該分別編碼每個參數,否則您的'http :// ...'路徑也會被編碼,然後它不會再像一個地址一樣...查看我更新的答案 – Loopo