Delphi Idhttp.Get方法

unit PayIntf_Get; interface

uses SysUtils, Windows, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, IdHashMessageDigest, IdGlobal, IdHash, HTTPApp, DateUtils, IdHTTP, superobject, DBClient, iniFiles; type
  {** 輸入控制 符號 * 必須輸入 M * 非必須輸入 O * 不可輸入 - * 條件必輸 C * 類型 符號 長度 示例 * 字符串 S (20) S(20) 20位長度字符串 * 整數 N (10) N(10) 10位長度整數 * 數字(帶小數) N (10,2) N(10,2)整數10位,小數2位數字 }

  //數據結構:支付
  PUpPayData = ^TUpPayData; TUpPayData = record terminalNo: string;     //[C]終端編號:支付的中行MIS終端編號,當支付方式是01或02時必填
    orderNo: string;        //[M]訂單編號:大售檢票系統中的訂單編號
    orderAmount: string;    //[M]訂單金額:12位,以分爲單位,好比1分=000000000001
    cashAmount: string;     //[C]現金支付金額:當支付方式是00或02時必填,12位,以分爲單位,好比1分=000000000001
    misAmount: string;      //[C]MIS支付金額:當支付方式是01或02時必填,12位,以分爲單位,好比1分=000000000001
    salesman: string;       //[O]銷售員
    orderTime: string;      //[M]下單時間:格式:yyyyMMddHHmmss
    payType: string;        //[M]支付方式: 00現金; 01中行MIS; 02組合支付(現金+中行MIS)
    merchantNo: string;     //[M]商戶編號:財務結算中心分配的商戶編號
    tellerNo: string;       //[M]銷售員編號
    orgInfo: string;        //[O]預留信息:原交易要素,用於反向交易時定位原交易
    orderDetail: string;    //[M]訂單詳情
    sign: string;           //[M]簽名數據:使用1.3通信方式中的示例進行簽名
  end; PDownPayData = ^TDownPayData; TDownPayData = record return_code: string;     //[M]返回狀態碼:通信碼爲SUCCESS/FAIL
    return_desc: string;     //[M]返回信息:當return_code爲FAIL時返回信息爲錯誤緣由 ,例如:簽名失敗,參數格式校驗錯誤
    result_code: string;     //[O]業務結果:SUCCESS/FAIL
    orderNo: string;         //[O]售檢票系統訂單號:當result_code是SUCCESS纔有返回
    merchantOrderNo: string;  //[O]財務結算中心訂單號:當result_code是SUCCESS纔有返回
    succTime: string;        //[O]訂單成功時間:當result_code是SUCCESS纔有返回,格式:yyyyMMddHHmmss
    succAmount: integer;     //[O]成功金額:成功金額:當result_code是SUCCESS纔有返回,12位,以分爲單位,好比1分=000000000001
  end; //數據結構:退票
  PUpRefundData = ^TUpRefundData; TUpRefundData = record orderNo: string;          //[M]訂單編號:深大售檢票系統中的訂單編號
    refundAmount: integer;    //[M]退款金額:12位,以分爲單位,好比1分=000000000001
  end; PDownRefundData = ^TDownRefundData; TDownRefundData = record return_code: string;    //[M]返回狀態碼:通信碼爲SUCCESS/FAIL
    return_desc: string;    //[M]返回信息:當return_code爲FAIL時返回信息爲錯誤緣由,例如:簽名失敗/參數格式校驗錯誤
    result_code: string;    //[O]業務結果:SUCCESS/FAIL
    orderNo: string;        //[O]售檢票系統訂單號:當result_code是SUCCESS纔有返回
    refundTime: string;     //[O]訂單退款成功時間:當result_code是SUCCESS纔有返回
    refundAmount: integer;  //[O]退款金額:當result_code是SUCCESS纔有返回,12位,以分爲單位,好比1分=000000000001
  end; const L: integer = 12;   //金額:12位,以分爲單位,好比1分=000000000001 // Key: string = 'QAZWSXEDCTGFREDW@#$%123123'; //祕鑰key須要與財務結算系統保持一致,不可隨意更改 // Url_Pay: string = 'http://localhost:8080/pay/ParkingAction.createOrder.do'; // Url_Refund:string = 'http://localhost:8080/pay/ParkingAction.refundOrder.do';

procedure MyWriteLog(const mStr:string); function CheckInvalid(UpPayData: TUpPayData; var sMsg: string): boolean; function CheckInvalid_Refund(UpRefundData: TUpRefundData; var sMsg: string): boolean; function ExchangeMoney(Value: string): string; function FormatData(var UpPayData: TUpPayData; var sMsg: string): boolean; function BulidParam(nType: integer; UpPayData: TUpPayData): string; function BulidParam_Refund(nType: integer; UpRefundData: TUpRefundData): string; function ret_mymd5(const sVaule: string): string; function GetSign(var UpPayData: TUpPayData; var sMsg: string): boolean; function PostIntf(UpPayData: TUpPayData; var sJson,sMsg: string): boolean; function PostIntf_Refund(UpRefundData: TUpRefundData; var sJson,sMsg: string): boolean; function GetJsonArr(Cds_BillList: TClientDataSet): string; //提交支付接口函數
function Tkt_PayIntf(UpPayData: TUpPayData; DownPayData: TDownPayData): boolean; //提交退款接口函數
function Tkt_RefundIntf(UpRefundData: TUpRefundData; DownRefundData: TDownRefundData): boolean; implementation
uses unit1; function Tkt_PayIntf(UpPayData: TUpPayData; DownPayData: TDownPayData): boolean; var sMsg,sJson: string; JO: ISuperObject; begin
  {** * 一、檢查必要條件 * 二、格式化數據 * 三、獲取簽名 * 四、提交接口 * 五、解析返回Json *} Result := False; try
    if not CheckInvalid(UpPayData, sMsg) then
    begin MyWriteLog(sMsg); Application.MessageBox(Pchar(sMsg), '提示', MB_OK); Exit; end; if not FormatData(UpPayData, sMsg) then
    begin MyWriteLog(sMsg); Application.MessageBox(Pchar(sMsg), '提示', MB_OK); Exit; end; if not GetSign(UpPayData, sMsg) then
    begin MyWriteLog(sMsg); Application.MessageBox(Pchar(sMsg), '提示', MB_OK); Exit; end; if not PostIntf(UpPayData, sJson, sMsg) then        //提交接口
    begin MyWriteLog('返回信息:' + sJson); Application.MessageBox(Pchar(sMsg), '提示', MB_OK); Exit; end; //解析返回的Json
    MyWriteLog('解析Json:' + sJson); try sMsg := '解析Json錯誤!'; JO := SO(sJson); if UpperCase(JO.O['return_code'].AsString) = 'FAIL' then
      begin sMsg := '返回狀態碼:【' + JO.O['return_code'].AsString + ':' + JO.O['return_desc'].AsString + ''; MyWriteLog(sMsg); Application.MessageBox(Pchar(sMsg), '提示', MB_OK); Exit; end; if UpperCase(JO.O['result_code'].AsString) = 'FAIL' then
      begin sMsg := '返回業務結果:【' + JO.O['result_code'].AsString + ''; MyWriteLog(sMsg); Application.MessageBox(Pchar(sMsg), '提示', MB_OK); Exit; end; //只有爲SUCCESS才返回如下信息
      if UpperCase(JO.O['result_code'].AsString) = 'SUCCESS' then
      begin DownPayData.orderNo := JO.O['result_code'].AsString; DownPayData.merchantOrderNo := JO.O['merchantOrderNo'].AsString; DownPayData.succTime := JO.O['succTime'].AsString; DownPayData.succAmount := JO.O['succAmount'].AsInteger; sMsg := '返回業務結果:【' + JO.O['result_code'].AsString + ''; MyWriteLog(sMsg); Result := True; end; except on e:exception do
      begin sMsg := '解析異常:' + e.Message; MyWriteLog(sMsg); Application.MessageBox(Pchar(sMsg), '提示', MB_OK); Exit; end; end; except on e:exception do
    begin sMsg := '接口異常[售票]:' + e.Message; MyWriteLog(sMsg); Application.MessageBox(Pchar(sMsg), '提示', MB_OK); Exit; end; end; end; function Tkt_RefundIntf(UpRefundData: TUpRefundData; DownRefundData: TDownRefundData): boolean; var sMsg,sJson: string; JO: ISuperObject; begin
  try
    {** * 一、檢查必要條件 * 二、提交接口 * 三、解析返回Json *} Result := False; if not CheckInvalid_Refund(UpRefundData, sMsg) then
    begin Application.MessageBox(Pchar(sMsg), '提示', MB_OK); Exit; end; MyWriteLog('提交信息:' + BulidParam_Refund(1,UpRefundData)); if not PostIntf_Refund(UpRefundData, sJson, sMsg) then    //提交接口
    begin MyWriteLog('返回信息:' + sJson); Application.MessageBox(Pchar(sMsg), '提示', MB_OK); Exit; end; //解析返回的Json
    MyWriteLog('解析Json:' + sJson); try sMsg := '解析Json錯誤!'; JO := SO(sJson); if UpperCase(JO.O['return_code'].AsString) = 'FAIL' then
      begin sMsg := '返回狀態碼:【' + JO.O['return_code'].AsString + ':' + JO.O['return_desc'].AsString + ''; MyWriteLog(sMsg); Application.MessageBox(Pchar(sMsg), '提示', MB_OK); Exit; end; if UpperCase(JO.O['result_code'].AsString) = 'FAIL' then
      begin sMsg := '返回業務結果:【' + JO.O['result_code'].AsString + ''; MyWriteLog(sMsg); Application.MessageBox(Pchar(sMsg), '提示', MB_OK); Exit; end; //只有爲SUCCESS才返回如下信息
      if UpperCase(JO.O['result_code'].AsString) = 'SUCCESS' then
      begin DownRefundData.orderNo := JO.O['orderNo'].AsString; DownRefundData.refundTime := JO.O['refundTime'].AsString; DownRefundData.refundAmount := JO.O['refundAmount'].AsInteger; sMsg := '返回業務結果:【' + JO.O['result_code'].AsString + ''; MyWriteLog(sMsg); Result := True; end; except on e:exception do
      begin sMsg := '解析異常:' + e.Message; MyWriteLog(sMsg); Application.MessageBox(Pchar(sMsg), '提示', MB_OK); Exit; end; end; except on e:exception do
    begin sMsg := '接口異常[退票]:' + e.Message; MyWriteLog(sMsg); Application.MessageBox(Pchar(sMsg), '提示', MB_OK); Exit; end; end; end; function PostIntf(UpPayData: TUpPayData; var sJson,sMsg: string): boolean; var Temp: string; IdHttp: TIdHTTP; begin sMsg := '提交接口錯誤!'; sJson := ''; Result := False; Temp := g_sPayUrl + '?'; Temp := Temp + BulidParam(0, UpPayData); Temp := AnsiToUtf8(Temp); MyWriteLog('提交表單:' + Temp); 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'; //正式提交接口
      sJson := IdHttp.Get(Temp); sJson := UTF8Decode(sJson); sJson := StringReplace(sJson, '\', '', [rfReplaceAll]); sJson := StringReplace(sJson, '"{"', '[{"', [rfReplaceAll]); sJson := StringReplace(sJson, '"}"', '"}]', [rfReplaceAll]); if sJson = '' then
      begin sMsg := '錯誤:接口返回數據爲空!'; Exit; end; Result := True; except on e: Exception do
      begin sMsg := '提交接口異常:' + e.Message; MyWriteLog(sMsg); Exit; end; end; finally
    FreeAndNil(IdHttp); end; end; function PostIntf_Refund(UpRefundData: TUpRefundData; var sJson,sMsg: string): boolean; var Temp: string; IdHttp: TIdHTTP; begin sMsg := '提交接口錯誤!'; sJson := ''; Result := False; Temp := g_sRefundUrl + '?'; Temp := Temp + BulidParam_Refund(0, UpRefundData); Temp := AnsiToUtf8(Temp); 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'; //正式提交接口
      sJson := IdHttp.Get(Temp); sJson := UTF8Decode(sJson); sJson := StringReplace(sJson, '\', '', [rfReplaceAll]); sJson := StringReplace(sJson, '"{"', '[{"', [rfReplaceAll]); sJson := StringReplace(sJson, '"}"', '"}]', [rfReplaceAll]); if sJson = '' then
      begin sMsg := '錯誤:接口返回數據爲空!'; Exit; end; Result := True; except on e: Exception do
      begin sMsg := '提交接口異常:' + e.Message; MyWriteLog(sMsg); Exit; end; end; finally
    FreeAndNil(IdHttp); end; end; function BulidParam(nType: integer; UpPayData: TUpPayData): string; var i: integer; Temp: string; Hash: THashedStringList; begin Hash := THashedStringList.Create; try Hash.Add('terminalNo=' + UpPayData.terminalNo); Hash.Add('orderNo=' + UpPayData.orderNo); Hash.Add('orderAmount=' + UpPayData.orderAmount); Hash.Add('cashAmount=' + UpPayData.cashAmount); Hash.Add('misAmount=' + UpPayData.misAmount); Hash.Add('salesman=' + UpPayData.salesman); Hash.Add('orderTime=' + UpPayData.orderTime); Hash.Add('payType=' + UpPayData.payType); Hash.Add('merchantNo=' + UpPayData.merchantNo); Hash.Add('tellerNo=' + UpPayData.tellerNo); Hash.Add('orgInfo=' + UpPayData.orgInfo); if UpPayData.sign <> '' then
    begin Hash.Add('orderDetail=' + HttpEncode(UTF8Encode(UpPayData.orderDetail))); //訂單明細字段須要進行URL編碼 <--提交接口的時候
      Hash.Add('sign=' + UpPayData.sign); end else begin Hash.Add('orderDetail=' + UpPayData.orderDetail); end; Hash.Sort; if nType = 0 then
    begin
      for i := 0 to Hash.Count-1 do
      begin Temp := Temp + Trim(Hash.Strings[i]) + '&'; end; Result := Copy(Temp,1,Length(Temp)-1);  //去除最後一個字符"&"
    end else
    begin
      for i := 0 to Hash.Count-1 do
      begin Temp := Temp + '"' + Trim(Hash.Strings[i]) + '",'; end; Temp := StringRePlace(Temp,'=','","',[rfRePLaceAll]); Result := '{' + Copy(Temp,1,Length(Temp)-1) + '}';  //去除最後一個字符","
    end; finally
    FreeAndNil(Hash); end; end; function BulidParam_Refund(nType: integer; UpRefundData: TUpRefundData): string; var Temp: string; begin
  if nType = 0 then
  begin Temp := 'orderNo' + UpRefundData.orderNo + '&'; Temp := Temp + 'refundAmount' + IntToStr(UpRefundData.refundAmount); Result := Temp; end else
  begin Temp := '{'; Temp := Temp + '"orderNo":"' + Trim(UpRefundData.orderNo) + '",'; Temp := Temp + '"refundAmount":"' + IntToStr(UpRefundData.refundAmount) + '"'; Temp := Temp + '}'; Result := Temp; end; end; function ret_mymd5(const sVaule: string): string; var mymd5: TIdHashMessageDigest5; begin
  try mymd5 := TIdHashMessageDigest5.Create; Result := (mymd5.AsHex(mymd5.HashValue(sVaule))); finally mymd5.Free; end; end; function GetSign(var UpPayData: TUpPayData; var sMsg: string): boolean; var Temp: string; begin Result := False; sMsg := '獲取簽名失敗!'; try Temp := BulidParam(0, UpPayData); MyWriteLog('獲取字符串:' + Temp); Temp := Temp + g_sKey; MyWriteLog('獲取密鑰:' + g_sKey); Temp := ret_mymd5(Temp); UpPayData.sign := LowerCase(Temp);  //簽名小寫
    sMsg := '獲取簽名成功!'; MyWriteLog('獲取簽名成功:' + UpPayData.sign); Result := True; except on e:exception do
    begin sMsg := '獲取簽名異常:' + e.Message; MyWriteLog(sMsg); Exit; end; end; end; function CheckInvalid(UpPayData: TUpPayData; var sMsg: string): boolean; begin Result := False; sMsg := '檢查傳入參數失敗!'; try
    //必填項檢查
    if UpPayData.orderNo = '' then
    begin sMsg := '訂單編號必須填寫!'; Exit; end; if UpPayData.orderAmount = '' then
    begin sMsg := '訂單金額必須填寫!'; Exit; end; if UpPayData.orderTime = '' then
    begin sMsg := '下單時間必須填寫!'; Exit; end; if UpPayData.payType = '' then
    begin sMsg := '支付方式必須填寫!'; Exit; end; if UpPayData.merchantNo = '' then
    begin sMsg := '商戶編號必須填寫!'; Exit; end; if UpPayData.tellerNo = '' then
    begin sMsg := '銷售員編號必須填寫!'; Exit; end; if UpPayData.orderDetail = '' then
    begin sMsg := '訂單明細必須填寫!'; Exit; end; if (UpPayData.payType <> '00') and (UpPayData.payType <> '01') and (UpPayData.payType <> '02') then
    begin sMsg := '非00/01/02的支付方式!'; Exit; end; //下單時間:格式:yyyyMMddHHmmss
    try VarToDateTime(UpPayData.orderTime) except sMsg := '下單時間格式錯誤!'; Exit; end; //[C]終端編號:支付的中行MIS終端編號,當支付方式是01或02時必填
    if (UpPayData.payType = '01') or (UpPayData.payType = '02') then
    begin
      if UpPayData.terminalNo = '' then
      begin sMsg := '中行MIS終端編號必須填寫!'; Exit; end; end; //[C]現金支付金額:當支付方式是00或02時必填,12位,以分爲單位,好比1分=000000000001
    if (UpPayData.payType = '00') or (UpPayData.payType = '02') then
    begin
      if UpPayData.cashAmount = '' then
      begin sMsg := '必須填寫現金金額!'; Exit; end; end; //[C]MIS支付金額:當支付方式是01或02時必填,12位,以分爲單位,好比1分=000000000001
    if (UpPayData.payType = '01') or (UpPayData.payType = '02') then
    begin
      if UpPayData.misAmount = '' then
      begin sMsg := '必須填寫MIS支付金額!'; Exit; end; end; if StrToFloatDef(UpPayData.orderAmount, 0) = 0 then
    begin sMsg := '訂單金額爲零!'; Exit; end; if (StrToFloatDef(UpPayData.cashAmount, 0) = 0) or (StrToFloatDef(UpPayData.misAmount, 0) = 0) then
    begin sMsg := '現金和Mis支付的金額均爲零!'; Exit; end; if Length(UpPayData.orderAmount) > L then
    begin sMsg := '訂單金額長度不容許超過' + IntToStr(L) + '位數!'; Exit; end; if Length(UpPayData.cashAmount) > L then
    begin sMsg := '現金金額長度不容許超過' + IntToStr(L) + '位數!'; Exit; end; if Length(UpPayData.misAmount) > L then
    begin sMsg := 'Mis支付金額長度不容許超過' + IntToStr(L) + '位數!'; Exit; end; sMsg := '檢查傳入參數經過!'; Result := True; except on e:exception do
    begin sMsg := '檢查傳入參數異常:' + e.Message; MyWriteLog(sMsg); Exit; end; end; end; function CheckInvalid_Refund(UpRefundData: TUpRefundData; var sMsg: string): boolean; begin Result := False; sMsg := '檢查傳入參數失敗!'; try
    //必填項檢查
    if UpRefundData.orderNo = '' then
    begin sMsg := '退單編號必須填寫!'; Exit; end; if (UpRefundData.refundAmount <= 0) then
    begin sMsg := '退單金額必須大於零!'; Exit; end; if (UpRefundData.refundAmount > 99999) then    //若未賦值,則系統默認最大整數值
    begin sMsg := '必須輸入退款金額!'; Exit; end; sMsg := '檢查傳入參數經過!'; Result := True; except on e:exception do
    begin sMsg := '檢查傳入參數異常:' + e.Message; MyWriteLog(sMsg); Exit; end; end; end; function ExchangeMoney(Value: string): string; var S,Temp: string; i: integer; begin Result := '0'; S := Value; S := FormatFloat('0.00', StrToFloatDef(S, 0));  //保留小數點兩位
  S := FloatToStr(StrToFloat(S) * 100);  //轉換爲分
  for i := 1 to L-Length(S) do
  begin Temp := Temp + '0'; end; Result := Temp + S;    //格式化長度爲12位數
end; function FormatData(var UpPayData: TUpPayData; var sMsg: string): boolean; begin Result := False; sMsg := '格式化數據錯誤!'; try UpPayData.orderAmount := ExChangeMoney(UpPayData.orderAmount); UpPayData.cashAmount := ExChangeMoney(UpPayData.cashAmount); UpPayData.misAmount := ExChangeMoney(UpPayData.misAmount); sMsg := '格式化數據成功!'; Result := True; Except on e:exception do
    begin sMsg := '格式化數據異常:' + e.Message; MyWriteLog(sMsg); Exit; end; end; end; procedure MyWriteLog(const mStr:string); var f: textfile; myDir,myFileName: string; FileHandle:Integer; LogType,LogDate,ModuleID: String; begin LogType := 'INFO'; LogDate := FormatDateTime('YYYY-MM-DD hh:nn:ss zzz', Now); ModuleID := ''; // if not (CanLogFile in FLogFlags) then exit;
  //------寫入文件部分的實現--開始
  myDir := ExtractFilePath(Paramstr(0)); //肯定文件名稱
  myFileName := FormatDateTime('"PayIntf"yyyymmdd".log"', Date); //若是可執行目錄下不存在log目錄建立之
  if not DirectoryExists(myDir + '\log') then CreateDir(myDir + '\log'); //若是當日日誌文件不存在,則建立文件並釋放句柄
  if not FileExists(myDir + '\log\' + myFileName) then
  begin FileHandle:=FileCreate(myDir + '\log\' + myFileName);//建立文件
    FileClose(FileHandle);//釋放句柄
  end; try//try...except...statements
    AssignFile(f, myDir + '\log\' + myFileName); Append(f); Writeln(f, '$$'+Format('%6s',[LogType])+'$$ '+Format('%12s',[ModuleID])+'$$'+LogDate + chr(9) + mStr); Flush(f); CloseFile(f); //-----寫入文件部分的實現--結束
  except//try...except...statements
  end;//try...except...statements
end; function GetJsonArr(Cds_BillList: TClientDataSet): string; var Temp, ticketType,ticketSpecies, ticketFrom,ticketNum:string; ticketPrice,ticketAmount:Integer; cds_Temp: TClientDataSet; begin
  {** * ******獲取訂單明細組合成JSON數組字符串********** * 票型 ticketType S M * 票種 ticketSpecies S M * 來源 ticketFrom S M * 票價 ticketPrice N M 以分爲單位 * 數量 ticketNum S M * 金額 ticketAmount N M 以分爲單位,金額=票價*數量 **} Result := ''; Temp := ''; if Cds_BillList.IsEmpty then Exit; cds_Temp := TClientDataSet.Create(nil); try
    try cds_Temp.Data := Cds_BillList.Data; with cds_Temp do
      begin First; While Not Eof do
        begin ticketType := FieldByName('TicketModelName').AsString; ticketSpecies := FieldByName('TicketKindName').AsString; ticketFrom := 'TicketBySell'; ticketPrice := StrToInt(ExchangeMoney(CurrToStr(FieldByName('TicketPrice').AsCurrency))); ticketNum := IntToStr(FieldByName('TicketCount').AsInteger); ticketAmount := StrToInt(ExchangeMoney(CurrToStr(FieldByName('PaySum').AsCurrency))); Temp := '{'; Temp := Temp + '"ticketType":"' + Trim(ticketType) + '",'; Temp := Temp + '"ticketSpecies":"' + Trim(ticketSpecies) + '",'; Temp := Temp + '"ticketFrom":"' + Trim(ticketFrom) + '",'; Temp := Temp + '"ticketPrice":"' + IntToStr(ticketPrice) + '",'; Temp := Temp + '"ticketNum":"' + Trim(ticketNum) + '",'; Temp := Temp + '"ticketAmount":"' + IntToStr(ticketAmount) + '"'; Temp := Temp + '},'; Next; end; end; if Temp <> '' then
      begin Result := '[' + Copy(Temp,1,Length(Temp)-1) + ']';  //去除最後一位的","
      end; finally
      FreeAndNil(cds_Temp); end; except on e:exception do
    begin Result := ''; Exit; end; end; end; end.
View Code
相關文章
相關標籤/搜索