Delphi IdHttp.Get方法

2022-12-04 10:51:06 作者:admin

本文整理自网络,侵删。

 unit Unit1;
interface
uses  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,  Dialogs, StdCtrls, DateUtils, IdHTTP, IdHashMessageDigest, Pos_Log,  superobject;
type  TForm1 = class(TForm)    Memo1: TMemo;    Memo2: TMemo;    edt_Url: TEdit;    edt_BarCode: TEdit;    edt_Type: TEdit;    btn2: TButton;    procedure btn2Click(Sender: TObject);  private    function Test(sVaule, sBarCode: string; var sMsg: string): Boolean;    function My_MD5(const sVaule: string): string;    function GetJavaTime(d: TDateTime): Int64;    { Private declarations }  public    { Public declarations }  end;
var  Form1: TForm1;
implementation
{$R *.dfm}
function TForm1.GetJavaTime(d: TDateTime): Int64;var  dJavaStart: TDateTime;begin  //java里的时间是从1970年1月1日0点到当前的间隔  dJavaStart := EncodeDateTime(1970, 1, 1, 8, 0, 0, 0);  //从08:00:00开始计算  Result := MilliSecondsBetween(d, dJavaStart);   //精确到毫秒//  Result := SecondsBetween(d, dJavaStart);        //精确到秒end;
function TForm1.My_MD5(const sVaule: string): string;var  mymd5: TIdHashMessageDigest5;begin  try    mymd5 := TIdHashMessageDigest5.Create;    Result := (mymd5.AsHex(mymd5.HashValue(sVaule)));  finally    mymd5.Free;  end;end;
function TForm1.Test(sVaule, sBarCode: string; var sMsg: string): Boolean;var  S, sUrl, sAccountId, sServiceName, sRequestTime, sDataInfo, sSign, sSignKey, sUpdata, sJson: string;  IdHttp: TIdHTTP;  JO: ISuperObject;  ja: TSuperArray;begin  //对接优惠券接口  LogInfo('开始提交接口*******Begin******************************');  sUrl := Trim(edt_Url.Text);  sSignKey := '6e591e1e95b74d608fa016187ae3ed21';  sAccountId := 'shenda';  sServiceName := Trim(sVaule);  sRequestTime := IntToStr(GetJavaTime(Now));  if UpperCase(sServiceName) = UpperCase('findCoupon') then          //查询接口    sDataInfo := '{"couponCode":"' + sBarCode + '"}'  else if UpperCase(sServiceName) = UpperCase('activeCoupon') then   //激活优惠券    sDataInfo := '{"couponCode":"' + sBarCode + '"}'  else if UpperCase(sServiceName) = UpperCase('refundCoupon') then   //退优惠券    sDataInfo := '{"couponCode":"' + sBarCode + '","refundFlag":1}'      //0-已使用、已过期可以退成功  1-已使用、已过期不可退成功  else  begin    sMsg := '错误:非法接口类型!';    LogInfo(sMsg);    LogInfo('结束提交接口*******End***【Error】***************************');    Exit;  end;  sSign := LowerCase(My_MD5(sAccountId + sServiceName + sRequestTime + sDataInfo + sSignKey));  //获取32位签名
  sUpdata := sUrl + '?'           + 'accountId=' + sAccountId           + '&serviceName=' + sServiceName           + '&requestTime=' + sRequestTime           + '&signKey=' + sSignKey           + '&sign=' + sSign           + '&data=' + sDataInfo;  sUpdata := AnsiToUtf8(sUpdata);  LogInfo('提交地址:' + sUrl);  LogInfo('提交数据:' + sUpdata);  Memo1.Lines.Text := sUpdata;
  IdHttp := TIdHTTP.Create(nil);  try    try      IdHttp.HTTPOptions := IdHttp.HTTPOptions + [hoKeepOrigProtocol];      IdHttp.ProtocolVersion := pv1_1;      IdHttp.Request.Accept := 'image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, */*';      IdHttp.Request.UserAgent := 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; Maxthon; .NET CLR 1.1.4322)';      IdHttp.Request.ContentEncoding := 'utf-8';      IdHttp.Request.ContentType := 'text/xml;Charset=UTF-8';
      //正式提交接口      S := IdHttp.Get(sUpdata);      sJson := UTF8Decode(S);       sJson := StringReplace(sJson, '\', '', [rfReplaceAll]);      sJson := StringReplace(sJson, '"{"', '[{"', [rfReplaceAll]);      sJson := StringReplace(sJson, '"}"', '"}]', [rfReplaceAll]);      if sJson = '' then      begin        sMsg := '错误:返回数据为空!';        LogInfo(sMsg);        LogInfo('结束提交宏理接口*******End***【Error】***************************');        Exit;      end;      LogInfo('返回数据:' + sJson);      Memo2.Lines.Text := sJson;    except      on e: Exception do      begin        sMsg := '错误[Exception]:提交接口错误->' + E.Message;        LogInfo(sMsg);        LogInfo('结束提交接口*******End***【Error】***************************');        Exit;      end;    end;  finally    FreeAndNil(IdHttp);  end;
  //解析Json  JO := SO(sJson);  if JO.O['result'].AsString = 'fail' then  begin    sMsg := '返回状态Error:【' + JO.O['result'].AsString + '】';    LogInfo(sMsg);    LogInfo('结束提交接口*******End***【Error】***************************');    Exit;  end;
  //成功  if UpperCase(sServiceName) = UpperCase('findCoupon') then  begin    ja := JO['data'].AsArray; //解析data部分---->只有查询接口有此主体data    if ja <> nil then      sMsg := '查询状态:【' + JO.O['result'].AsString + '】;' + #10#13            + '优惠券编号:【' + ja[0]['couponCode'].AsString + '】;' + #10#13            + '优惠券状态:【' + ja[0]['couponState'].AsString + '】;' + #10#13            + '优惠金额:【' + ja[0]['couponMny'].AsString + '】;' + #10#13            + '满减金额:【' + ja[0]['condMny'].AsString + '】;' + #10#13            + '有效结束日期:【' + ja[0]['validEndDt'].AsString + '】;' + #10#13            + '剩余核销数量:【' + ja[0]['unUsedQty'].AsString + '】;'    else      sMsg := '查询状态:【' + JO.O['result'].AsString + '】';  end  else  begin    sMsg := '返回状态:【' + JO.O['result'].AsString + '】';  end;  LogInfo(sMsg);  LogInfo('结束提理接口*******End***【Success】***************************');end;
procedure TForm1.btn2Click(Sender: TObject);var  S1, S2, sMsg: string;begin //activeCoupon激活优惠券  findCoupon查询优惠券  refundCoupon退优惠券  S1 := Trim(edt_Type.Text);  S2 := Trim(edt_BarCode.Text);  if not test(S1, S2, sMsg) then // 180913332011247  180913790829524  begin    ShowMessage(sMsg);  end  else  begin    ShowMessage(sMsg);  end;end;
end.――――――――――――――――
原文链接:https://blog.csdn.net/qq_39951605/article/details/82702860

相关阅读 >>

Delphi mscomm1自动获取串口

Delphi旋转位图

Delphi 获取一个文件夹下的一级目录

Delphi idtcpclient和idtcpserver主要属性

Delphi获取dll的函数列表

Delphi 10.3.1新的变量的声明方法

Delphi关闭进程

Delphi xe berlin readprocessmemory writeprocessmemory

Delphi xe7 android 实现的在线更新app的一个程序

Delphi 实现 图灵机器人api(idhttp post )

更多相关阅读请进入《Delphi》频道 >>



在线咨询 拨打电话