請(qǐng)求短信發(fā)送接口報(bào)錯(cuò) code -50常見(jiàn)原因及解決方法:
情況1:
未使用云片提供的SDK,接口請(qǐng)求報(bào)錯(cuò) code -50 未知異常:
- 可檢查是否為必傳請(qǐng)求參數(shù)漏傳或參數(shù)名傳錯(cuò)。比如調(diào)用single_send.json接口時(shí),是否漏傳了必傳參數(shù)mobile,或?qū)obile傳成了Mobile等。
- 可檢查是否為請(qǐng)求參數(shù)格式錯(cuò)誤。比如調(diào)用云片接口發(fā)送http POST請(qǐng)求時(shí),數(shù)據(jù)需要使用x-www-form-urlencoded格式提交,但您實(shí)際提交的數(shù)據(jù)格式是json。
- Java開(kāi)發(fā)語(yǔ)言可參考Java demo,將參數(shù)格式使用UrlEncodedFormEntity類(lèi)做下轉(zhuǎn)換后再請(qǐng)求;
- php開(kāi)發(fā)語(yǔ)言可參考php demo, 將參數(shù)格式使用http_build_query()函數(shù)做下轉(zhuǎn)換后再請(qǐng)求;
- python開(kāi)發(fā)語(yǔ)言可參考python demo,將參數(shù)使用urllib.urlencode處理后再請(qǐng)求。
情況2:
使用云片提供的SDK,接口請(qǐng)求報(bào)錯(cuò) code -50 未知異常時(shí),可先將異常信息打印出來(lái),再進(jìn)行具體排查。
各開(kāi)發(fā)語(yǔ)言 SDK 異常打印示例如下:
Java: System.out.println(r.getThrowable());
PHP: var_dump($r);
Python: print(r.exception());
C#: Console.WriteLine(r.E);
情況2常見(jiàn)異常的處理方法:
1.javax.net.ssl.SSLException
原因:云片提供的SDK默認(rèn)是使用https(http+ssl)方式發(fā)送接口請(qǐng)求的,報(bào)這個(gè)錯(cuò)誤的大部分原因是客戶(hù)端不具備安全證書(shū)、安全證書(shū)配置存在問(wèn)題、安全證書(shū)已過(guò)期/未生效或安全證書(shū)不是由受信任的證書(shū)機(jī)構(gòu)頒發(fā)的,所以無(wú)法使用https方式調(diào)用接口。
解決方法:
- 客戶(hù)端購(gòu)買(mǎi)安裝受信任的ssl證書(shū)后,即可通過(guò)https調(diào)用接口(建議);
- 客戶(hù)端將yunpian.com的證書(shū)下載到所在服務(wù)器,用JDK導(dǎo)入證書(shū)信任(建議);
云片CA證書(shū)公鑰cacert.pem下載命令: openssl s_client ?-connect yunpian.com:443 ?2>/dev/null | openssl x509 - 將SDK配置文件(比如java sdk配置文件yunpian.properties)中的各接口配置的host的地址從https改成http(不建議,http報(bào)文為明文傳輸,不安全)。
2.Java.net.UnknownHostException: sms.yunpian.com
原因:客戶(hù)端的DNS服務(wù)器無(wú)法解析云片的域名是sms.yunpian.com,可能是客戶(hù)端的DNS服務(wù)器配置有問(wèn)題或服務(wù)不穩(wěn)定
解決方法:
- 聯(lián)系您的運(yùn)維檢查下DNS配置問(wèn)題或嘗試使用公共的dns,如:114.114.114.114 8.8.8.8等(建議);
- 將域名對(duì)應(yīng)的ip(ping sms.yunpian.com返回的ip)寫(xiě)入hosts文件中: (不建議,IP可能會(huì)變)
vi /etc/hosts
# 綁定域名對(duì)應(yīng)ip
xxx.xxx.xxx.xxx sms.yunpian.com
3.java.net.ConnectException: Connection timed out
原因:客戶(hù)端與服務(wù)器的網(wǎng)絡(luò)鏈路存在問(wèn)題或客戶(hù)端防火墻規(guī)則限制等原因?qū)е聼o(wú)法訪問(wèn)外網(wǎng)。
解決方法:
- 確認(rèn)客戶(hù)端是否為海外服務(wù)器,如果是,將云片接口地址中的域名sms.yunpian.com改成us.yunpian.com看是否正常;
- 如果客戶(hù)端服務(wù)器也部署在國(guó)內(nèi),ping sms.yunpian.com 看是否可以ping通或是否存在丟包的情況,如果是,可使用mtr sms.yunpian.com查看是在哪一跳出現(xiàn)的超時(shí)或丟包,從而聯(lián)系相關(guān)人員(比如運(yùn)維或客戶(hù)端服務(wù)器供應(yīng)商)進(jìn)一步排查;
- 有時(shí)由于網(wǎng)絡(luò)鏈路不穩(wěn)定,可能出現(xiàn)偶發(fā)性的請(qǐng)求超時(shí),可以通過(guò)增加超時(shí)時(shí)間和重試機(jī)制來(lái)降低此類(lèi)問(wèn)題造成的影響。
4.java.lang.RuntimeException: Request cannot be executed; I/O reactor status: STOPPED
原因:使用云片Java SDK時(shí)每次調(diào)用YunpianClient后都進(jìn)行了釋放(clnt.close) .
解決方法:YunpianClient使用單例方式,只需要初始化(new)一次,應(yīng)用運(yùn)行期間不需要釋放(close),在應(yīng)用退出時(shí)釋放即可。
如以上原因及方案仍無(wú)法解決您的問(wèn)題,請(qǐng)聯(lián)系技術(shù)支持進(jìn)一步排查。