1

我已经注册了一个基于 Web 的短消息服务来发送文本消息以确认 Web 表单提交。我正在使用 CURL,我的 PHP 代码如下

$url = "http://www.mysmservice.co.uk/smsgateway/sendmsg.aspx?";
$param = "username=" . $username . "&password=" . $password . "&to=" . $diner_mobile . "&text=";
$smsmessage = "Hello, your table booking for " . $bookingdate . " at " . $booking_time . " is confirmed " , " Myrestaurant";

$ch = curl_init() or die(curl_error()); 
curl_setopt($ch, CURLOPT_POST,1); 
curl_setopt($ch, CURLOPT_POSTFIELDS,$param); 
curl_setopt($ch, CURLOPT_PORT, 80);
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
$data1=curl_exec($ch) or die(curl_error());
curl_close($ch); 

但它似乎没有向 URL 发布任何内容(mysmsservice 告诉我日志不指示任何传入请求)。但是,如果我访问以下 URL 并替换适当的变量,该服务将起作用。

http://www.mysmsservice.co.uk/smsgateway/sendmsg.aspx?username=MyUsername &password=MyPassword&to=44771012345,44771054321&text=TheMessage

不确定我是否正确使用了 CURL 调用。任何帮助将不胜感激。提前致谢。

4

2 回答 2

1

如果您说如果您访问在地址栏中直接输入所有参数(作为 GET 参数)的页面,它就可以工作,那么这意味着您不需要进行 POST 调用。

在这种情况下,您甚至不需要使用 cURL:

$base = 'http://www.mysmservice.co.uk/smsgateway/sendmsg.aspx';
$params = array(
    'username' => $username,
    'password' => $password,
    'to'       => $diner_mobile,
    'text'     => 'Your booking has been confirmed',
);
$url = sprintf('%s?%s', $base, http_build_query($params));
$response = file_get_contents($url);

但是,如果您确实需要使用 POST,这应该可以:

$curl = curl_init();
curl_setopt_array($curl, array(
    CURLOPT_URL            => $base,
    CURLOPT_POST           => 1,
    CURLOPT_POSTFIELDS     => $params,
    CURLOPT_RETURNTRANSFER => 1,
    CURLOPT_SSL_VERIFYHOST => 0, // to avoid SSL issues if you need to fetch from https
    CURLOPT_SSL_VERIFYPEER => 0, // same ^
));
$response = curl_exec($curl);

注意:我显然没有测试过代码,但这就是我通常发出 cURL 请求的方式。

于 2013-02-11T16:54:35.400 回答
0

或许 SMS 服务在消息丢失时表示没有有效的请求。如果您在这里查看您的代码:

$param = "username=" . $username . "&password=" . $password . "&to=" . $diner_mobile . "&text=";

您永远不会将消息添加到 $param。不过,您可以在变量 $smsmessage 中构建它。您应该将代码修改为:

$smsmessage = "Hello, your table booking for " . $bookingdate . " at " . $booking_time . " is confirmed, " . " Myrestaurant";
$param = "username=" . $username . "&password=" . $password . "&to=" . $diner_mobile . "&text=" . $smsmessage;
于 2013-02-11T16:25:04.083 回答