對接快遞單每個快遞商家的介面都不同,但基本大同小異,主要的演算法都是md5 和Base64,一般提供的Demo都不會有Delphi的,其實md5和Base64Delpi都自帶了,
base64一般都不會有問題,主要是md5,很多用Delphi對接的,主要的問題都是出在這里,下面我分享對接兩個不同快遞介面,用到的md5處理都不同,
procedure TForm1.SpeedButton1Click(Sender: TObject);
var
Str:String;
M5Str,BaseStr:AnsiString;
begin
str:=StringReplace(Trim(Edit1.Text),' ','',[rfReplaceAll]);
Memo1.Lines.Add('原文'+str);
M5Str:=THashMD5.GetHashString(Str);
Memo1.Lines.Add('MD5:'+M5Str);
Memo1.Lines.Add('QDAC,URL:'+qstring.UrlEncode(str,False,true));
Memo1.Lines.Add('TNET,URL:'+TURLEncoding.URL.Encode(str));
BaseStr:=TNetEncoding.Base64.Encode(M5Str);
Memo1.Lines.Add('Base64(MD5):'+BaseStr);
Memo1.Lines.Add('QDAC,URL(Base64(MD5)):'+qstring.UrlEncode(BaseStr,True,true));
Memo1.Lines.Add('TNET,URL(Base64(MD5)):'+TNetEncoding.URL.Encode(BaseStr));
end;
procedure TForm1.SpeedButton2Click(Sender: TObject);
var
md5: TIdHashMessageDigest5;
base64: TIdEncoderMIME;
sMD5:TIdBytes;
Str:String;
fStr:AnsiString;
aMD5:TBytes;
MStream,OStream:TMemoryStream;
begin
Memo1.Lines.Clear;
MStream:=TMemoryStream.Create;
OStream:=TMemoryStream.Create;
str:='<order></order>123456';
aMD5:=THashMD5.GetHashBytes(Str);
var s:=TNetEncoding.Base64.EncodeBytesToString(aMD5);
Memo1.Lines.Add('TNetEncoding.Base64.EncodeBytesToString:'+s);
Memo1.Lines.Add('UrlEncode:'+qstring.UrlEncode(s,True,true));
md5 := TIdHashMessageDigest5.Create;
base64 := TIdEncoderMIME.Create(nil);
try
base64.FillChar := '=';
sMD5:=md5.HashString(str);
Memo1.Lines.Add(base64.EncodeBytes(sMD5));
finally
base64.Free;
md5.Free;
end;
如果你在用Delphi對接其他的快遞介面的時候,如果有問題用這兩個的其中一個應該就沒有問題
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/308.html
標籤:Delphi
