php簡訊介面開發經驗及具體開發實現
引數名稱 |
說明 |
是否必須 |
備註 |
Sn |
軟體序列號 |
是 |
格式XXX-XXX-XXX-XXXXX |
Pwd |
密碼 |
是 |
md5(sn+password) 32位大寫密文 |
Mobile |
手機號 |
是 |
必填(支援10000個手機號,建議<=5000)多個英文逗號隔開 |
Content |
內容 |
是 |
支援長簡訊(詳細請看長簡訊扣費說明) |
Ext |
擴充套件碼 |
否 |
例如:123(預設置空) |
stime |
定時時間 |
否 |
例如:2010-12-29 16:27:03(非定時置空) |
Rrid |
唯一標識 |
否 |
最長18位,只能是數字或者 字母 或者數字+字母的組合 |
函式返回值:String(唯一標識,即當前傳送簡訊批次的唯一標識,和rrid對應,如為空則返回系統生成的rrid),此方法推薦用於大量群發.內容相同手機號多個的情況。
示例1
SN= SDK-SSD-010-00001
PWD=3B5D3C427365F40C1D27682D78BB31E0
Mobile:139***404,138***213…………….
Content:測試
Ext: ""
Stime: ""
Rrid: ""
輸出結果:
XML格式:
具體函式PHP實現:
<?PHP //改demo的功能是群發簡訊和發單條簡訊。(傳一個手機號就是發單條,多個手機號既是群發) //您把序列號和密碼還有手機號,填上,直接執行就可以了 //如果您的系統是utf-8,請轉成GB2312 後,再提交、 //請參考 'content'=>iconv( "UTF-8", "gb2312//IGNORE" ,'您好測試簡訊[XXX公司]'),//簡訊內容 $flag = 0; //要post的資料 $argv = array( 'sn'=>'SDK-SSD-010-00009', ////替換成您自己的序列號 'pwd'=>strtoupper(md5('SDK-SSD-010-00001'.'XXX')), //此處密碼需要加密 加密方式為 md5(sn+password) 32位大寫 'mobile'=>'18636924700',//手機號 多個用英文的逗號隔開 post理論沒有長度限制.推薦群發一次小於等於10000個手機號 'content'=>'使用者您好,您的校驗碼是123456,十分鐘輸入有效。[雷雨科技]',//簡訊內容 'ext'=>'', 'stime'=>'',//定時時間 格式為2011-6-29 11:09:21 'rrid'=>'' ); //構造要post的字串 foreach ($argv as $key=>$value) { if ($flag!=0) { $params .= "&"; $flag = 1; } $params.= $key."="; $params.= urlencode($value); $flag = 1; } $length = strlen($params); //建立socket連線 $fp = fsockopen("sdk.entinfo.cn",8060,$errno,$errstr,10) or exit($errstr."--->".$errno); //構造post請求的頭 $header = "POST /webservice.asmx/mt HTTP/1.1\r\n"; $header .= "Host:sdk.entinfo.cn\r\n"; $header .= "Content-Type: application/x-www-form-urlencoded\r\n"; $header .= "Content-Length: ".$length."\r\n"; $header .= "Connection: Close\r\n\r\n"; //新增post的字串 $header .= $params."\r\n"; //傳送post的資料 fputs($fp,$header); $inheader = 1; while (!feof($fp)) { $line = fgets($fp,1024); //去除請求包的頭只顯示頁面的返回資料 if ($inheader && ($line == "\n" || $line == "\r\n")) { $inheader = 0; } if ($inheader == 0) { // echo $line; } } //<string xmlns="http://tempuri.org/">-5</string> $line=str_replace("<string xmlns=\"http://tempuri.org/\">","",$line); $line=str_replace("</string>","",$line); $result=explode("-",$line); // echo $line."-------------"; if(count($result)>1) echo '傳送失敗返回值為:'.$line.'。請檢視webservice返回值對照表'; else echo '傳送成功 返回值為:'.$line; ?>
二、webservice返回集合對照表:
返回值 |
返回值說明 |
問題描述 |
-2 |
帳號/密碼不正確 |
1.序列號未註冊2.密碼加密不正確3.密碼已被修改4.序列號已登出 |
-4 |
餘額不足支援本次傳送(或者修改密碼長度不正確) |
餘額不足(或者修改密碼長度不在6位到10位之間) |
-5 |
資料格式錯誤 |
只能自行除錯了。或與技術支援聯絡 |
-6 |
引數有誤 |
看引數傳的是否均正常,請除錯程式檢視各引數 |
-7 |
許可權受限 |
該序列號是否已經開通了呼叫該方法的許可權 |
-8 |
流量控制錯誤 |
|
-9 |
擴充套件碼許可權錯誤 |
該序列號是否已經開通了擴充套件子號的許可權,把ext這個引數置空。 |
-10 |
內容長度長 |
單位元組不能超過1000個字元,雙位元組不能超過500個字元 |
-11 |
內部資料庫錯誤 |
|
-12 |
序列號狀態錯誤 |
序列號是否被禁用 |
-14 |
伺服器寫檔案失敗 |
|
-17 |
沒有許可權 |
如傳送彩信僅限於SDK3 |
-19 |
禁止同時使用多個介面地址 |
每個序列號提交只能使用一個介面地址 |
-20 |
相同手機號,相同內容重複提交 |
|
-22 |
Ip鑑權失敗 |
提交的IP不是所繫結的IP |
-23 |
快取無此序列號資訊 |
|
-601 |
序列號為空,引數錯誤 |
|
-602 |
序列號格式錯誤,引數錯誤 |
|
-603 |
密碼為空,引數錯誤 |
|
-604 |
手機號碼為空,引數錯誤 |
|
-605 |
內容為空,引數錯誤 |
|
-606 |
ext長度大於9,引數錯誤 |
|
-607 |
引數錯誤 擴充套件碼非數字 |
|
-608 |
引數錯誤 定時時間非日期格式 |
|
-609 |
rrid長度大於18,引數錯誤 |
|
-610 |
引數錯誤 rrid非數字 |
|
-611 |
引數錯誤 內容編碼不符合規範 |
|
-623 |
手機個數與內容個數不匹配 |
|
-624 |
擴充套件個數與手機個數數 |
|
-644 |
rrid個數與手機個數不一致 |
注:以上返回值針對個別方法.請具體參看每個用到方法的詳細說明。
三、附加說明:
1.介面地址:
2.其它說明:
(1)開發使用的帳號必須為SDK開頭,如SDK-SSD-010-00001,帳號第一次需要呼叫Register方法註冊一次.僅需註冊一次即可,資訊必須真實
(2)UnRegister與Register配合使用, 連續使用不得超過10次/天;
(3)群發推薦使用介面方法 mt或者mdSmsSend (僅方法名不同);
3. 鄭重宣告:
(1)禁止相同的內容多個手機號連續一條一條提交. 否則禁用帳號,由此帶來損失由客戶自行負責.
(2)請客戶提供外網伺服器IP以便於繫結IP傳送,提高賬號的安全性!
(3)在程式裡最好有配置檔案,程式自動判斷當某個介面連線超時提交速度變慢時.程式可以自動切換其它的介面以下是推薦的幾個伺服器,僅介面地址不同而已.方法全部相同;
這些地址都是標準的webservice地址,C#,Java客戶可以按照自己熟悉的方式去解析String
或者
四、示例Demo原始碼下載: