DELPHI簡訊介面開發經驗及具體開發實現
引數名稱 |
說明 |
是否必須 |
備註 |
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格式:
具體函式DELPHI實現:
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls,IdHTTP,IdHashMessageDigest,IdGlobal, IdHash; type TForm1 = class(TForm) Button1: TButton; Label1: TLabel; Edit1: TEdit; Label2: TLabel; Edit2: TEdit; Label3: TLabel; Edit3: TEdit; Label4: TLabel; Memo1: TMemo; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } function mt(sn, pwd, mobile, content, stime, ext,rrid: string): string; //傳送 function md5(mdstr: string): string; //md5方法 end; var Form1: TForm1; implementation {$R *.dfm} function URLEncode(const msg: String): String; var I : Integer; begin Result := ''; for I := 1 to Length(msg) do begin if msg[I] = ' ' then Result := Result + '+' else if msg[I] in ['a'..'z', 'A'..'Z', '0'..'9'] then Result := Result + msg[I] else Result := Result + '%' + IntToHex(ord(msg[I]), 2); end; end; function TForm1.mt(sn, pwd, mobile, content, stime, ext,rrid: string): string; var aStream: TMemoryStream; Params: TStringStream; ASources:pchar; tl:tstringlist; resultstr,constr,str:string; IdHTTP1:TIdHTTP; jsstring: TStringList;//根據#13 拆分 回車換行符 begin try resultstr:=''; IdHTTP1:=TIdHTTP.Create(nil); aStream := TMemoryStream.Create; Params :=TStringStream.Create(''); constr:='sn='+sn+'&pwd='+pwd+'&mobile='+mobile+'&content='+URLEncode(content)+'&ext='+ext+'&stime='+stime+'&rrid='+rrid; Params.WriteString(constr); IdHTTP1.Request.ContentType := 'application/x-www-form-urlencoded'; IdHTTP1.Request.ContentLength:=length(IdHTTP1.Request.ContentType); IdHTTP1.ReadTimeout:=60000; IdHTTP1.Host:='sdk.entinfo.cn'; IdHTTP1.Port:=8060; with IdHTTP1 do begin IdHTTP1.Post('http://sdk.entinfo.cn:8060/webservice.asmx/mt',Params,aStream); end; jsstring:=Tstringlist.Create; aStream.WriteBuffer(#0' ', 1); ASources:=PChar(aStream.Memory); if ASources<>'' then begin ExtractStrings([#13], [], ASources,jsstring); //以回車換行符對結果拆分; str:=StringReplace(jsstring[1],'<string xmlns="http://tempuri.org/">','', [rfReplaceAll, rfIgnoreCase]); str:=StringReplace(str,'</string>','', [rfReplaceAll, rfIgnoreCase]); end else str:='-999'; jsstring.Free; aStream.free; Params.free; resultstr:=str; except on E: Exception do begin resultstr:=''; end; end; result:=resultstr; end; { TForm1 } procedure TForm1.Button1Click(Sender: TObject); begin showmessage(mt(edit1.Text,md5(edit1.Text+edit2.Text),edit3.Text,memo1.Text,'','','')); end; function TForm1.md5(mdstr: string): string; var MyMD5: TIdHashMessageDigest5; Digest: T4x4LongWordRecord; str:string; begin MyMD5 := TIdHashMessageDigest5.Create; Digest := MyMD5.HashValue(mdstr); str:=MyMD5.AsHex(Digest); result:= str; end; end.
二、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原始碼下載: