2015-09-06 39 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