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

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

一、群發簡訊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格式:

具體函式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原始碼下載: