1. 程式人生 > >php簡訊介面開發經驗及具體開發實現

php簡訊介面開發經驗及具體開發實現

一、群發簡訊mt

引數名稱

說明

是否必須   

備註

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原始碼下載: