请求短信发送接口报错 code -50常见原因及解决方法:

情况1:

未使用云片提供的SDK,接口请求报错 code -50 未知异常:

  1. 可检查是否为必传请求参数漏传或参数名传错。比如调用single_send.json接口时,是否漏传了必传参数mobile,或将mobile传成了Mobile等。
  2. 可检查是否为请求参数格式错误。比如调用云片接口发送http POST请求时,数据需要使用x-www-form-urlencoded格式提交,但您实际提交的数据格式是json。
    1. Java开发语言可参考Java demo,将参数格式使用UrlEncodedFormEntity类做下转换后再请求;
    2. php开发语言可参考php demo, 将参数格式使用http_build_query()函数做下转换后再请求。


情况2:

使用云片提供的SDK,接口请求报错 code -50 未知异常时,可先将异常信息打印出来,再进行具体排查。

各开发语言 SDK 异常打印示例如下:

Java: System.out.println(r.getThrowable());

PHP: var_dump($r);

Python: print(r.exception());

C#: Console.WriteLine(r.E);


情况2常见异常处理方法:

1.javax.net.ssl.SSLException
原因:云片提供的SDK默认是使用https(http+ssl)方式发送接口请求的,报这个错误的大部分原因是客户端不具备安全证书、安全证书配置存在问题、安全证书已过期/未生效或安全证书不是由受信任的证书机构颁发的,所以无法使用https方式调用接口。
解决方法:

  • 客户端购买安装受信任的ssl证书后,即可通过https调用接口(建议);
  • 客户端将yunpian.com的证书下载到所在服务器,用JDK导入证书信任(建议);
    云片CA证书公钥cacert.pem下载命令: openssl s_client  -connect yunpian.com:443  2>/dev/null | openssl x509
  • 将SDK配置文件(比如java sdk配置文件yunpian.properties)中的各接口配置的host的地址从https改成http(不建议,http报文为明文传输,不安全)。


2.Java.net.UnknownHostException: sms.yunpian.com
原因:客户端的DNS服务器无法解析云片的域名是sms.yunpian.com,可能是客户端的DNS服务器配置有问题或服务不稳定

解决方法:

  • 联系您的运维检查下DNS配置问题或尝试使用公共的dns,如:114.114.114.114 8.8.8.8等(建议);
  • 将域名对应的ip(ping sms.yunpian.com返回的ip)写入hosts文件中: (不建议,IP可能会变)

vi /etc/hosts

# 绑定域名对应ip

xxx.xxx.xxx.xxx sms.yunpian.com


3.java.net.ConnectException: Connection timed out
原因:客户端与服务器的网络链路存在问题或客户端防火墙规则限制等原因导致无法访问外网。
解决方法:

  • 确认客户端是否为海外服务器,如果是,将云片接口地址中的域名sms.yunpian.com改成us.yunpian.com看是否正常;
  • 如果客户端服务器也部署在国内,ping sms.yunpian.com 看是否可以ping通或是否存在丢包的情况,如果是,可使用mtr sms.yunpian.com查看是在哪一跳出现的超时或丢包,从而联系相关人员(比如运维或客户端服务器供应商)进一步排查;
  • 有时由于网络链路不稳定,可能出现偶发性的请求超时,可以通过增加超时时间和重试机制来降低此类问题造成的影响。


4.java.lang.RuntimeException: Request cannot be executed; I/O reactor status: STOPPED
原因:使用云片Java SDK时每次调用YunpianClient后都进行了释放(clnt.close) .
解决方法:YunpianClient使用单例方式,只需要初始化(new)一次,应用运行期间不需要释放(close),在应用退出时释放即可。


如以上原因及方案仍无法解决您的问题,请联系技术支持进一步排查。