最近小编发现有些客户反应使用短信宝接口http请求短信发送失败,经过技术人员排查发现是因为客户服务器的机房阻断了http请求而导致的(特别是将服务器托管在国外的客户)
解决这种问题一般有两种方案
第一种您可以联系您服务器所在机房工作人员打开http请求
第二种您可以使用短信宝https短信接口
首先检测确认是否是机房线路阻断http请求
如果您是windows服务器您可以用您的IE浏览器访问下国内网站 例如:http://www.donews.com/如果不能访问则表示是您服务器所在机房阻断了http请求的原因。
如果您是linux服务器您可以使用命令 wget http://www.donews.com/来测试 如果显示下载失败则也是因为您服务器所在机房阻断了http请求的原因
解决方案
1:找到您的发送类函数,将短信宝http接口替换成https
1
2
3
|
2:更改请求短信宝请求方式使用CURL请求
1
2
3
4
5
6
7
8
9
10
11
12
|
$result =file_get_contents($sendurl); 替换成 $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $sendurl); curl_setopt($ch, CURLOPT_TIMEOUT, 1); curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER[ "HTTP_USER_AGENT" ]); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true ); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false ); //不验证证书 curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false ); //不验证证书 $r = curl_exec($ch); curl_close($ch); |
完整实例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
$user = "***" ; //短信宝平台帐号 $pass = md5( "****" ); //短信宝平台密码 $content= "短信内容" ; //要发送的短信内容 $phone = "*****" ; //要发送短信的手机号码 $sendurl = $smsapi. "sms?u=" .$user. "&p=" .$pass. "&m=" .$phone. "&c=" .urlencode($content); $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $sendurl); curl_setopt($ch, CURLOPT_TIMEOUT, 1); curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER[ "HTTP_USER_AGENT" ]); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true ); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false ); //不验证证书 curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false ); //不验证证书 $result = curl_exec($ch); curl_close($ch); echo $result; |
3:如有其它疑问,请咨询短信宝客服。
最新更新
电商类
CMS类
微信类