ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Delphi_调用DLL方法[创建对象下面的方法]

2019-07-03 08:52:05  阅读:215  来源: 互联网

标签:end string Temp UpData Delphi 创建对象 sMsg DLL Response


unit PayIntf_CallDLL;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TUpData = class
    PosNumber: string;	        //收银机号
    StoreNumber: string;	//门店号
    operator: string;     	//操作员号
    CardNumber: string;	        //卡号/付款码/优惠券码
    CardType: string;	        //卡种代码(银行卡01,万商通联02……)
    TransType: string;	        //交易类型
    Amount: string;         	//金额(12位,分为单位,不足左补0)
    OldTraceNumber: string;	//原始流水号(6位,不足左补0)
    AuthNumber: string;	        //授权码(6位,不足左补0)
    HostserialNumber: string;	//原系统参考号(12位,不足左补0)
    TransDate: string;	        //原交易日期(4位,MMDD)
    ExpireDate: string;	        //有效期(4位,MMDD)
    Memo: string;	        //其他信息
    TransCheck: string;	        //交易唯一标识
    BusinessId: string;	        //业务编码,用于多业务模式
    TransId: string;    	//原交易单号
    ProductNumber: string;	//产品编码    万商卡附加KEY
    preDef_0: string;   	//自定义域1   自定义附加KEY
    preDef_1: string;   	//自定义域2
    preDef_9: string;	        //自定义域9
    preDef_A: string;	        //自定义域10
    preDef_B: string;	        //自定义域11
    preDef_J: string;	        //自定义域20
  end;

  TDownData = class
    Tips: string;       	//小费
    Total: string;	        //总计
    Amount: string;     	//金额
    BalanceAmount: string;	//余额
    PosTraceNumber: string;	//流水号
    OldTraceNumber: string;	//原始流水号
    ExpireDate: string;	        //有效期
    BatchNumber: string;	//批次号
    MerchantNumber: string;	//商户号
    MerchantName: string;	//商户名
    TerminalNumber: string;	//终端号
    HostSerialNumber: string;	//系统参考号
    AuthNumber: string;	        //授权码
    RejCode: string;	        //返回码
    IssNumber: string;	        //发卡行号
    IssName: string;	        //发卡行名称
    CardNumber: string;	        //卡号
    TransDate: string;	        //交易日期
    TransTime: string;	        //交易时间
    RejCodeExplain: string;	//返回码解释
    CardBack: string;	        //卡片回收标志
    Memo: string;	        //备注
    TransCheck: string;	        //交易唯一标识
    IsOffline: string;	        //脱机标识:0-联机、1-脱机
    CUPS: string;       	//卡组织
    TransId: string;	        //原交易单号
    ProductNumber: string;	//产品号码
    ProductName: string;	//产品名称
    preDef_0: string;	        //自定义域1   自定义附加KEY
    preDef_1: string;	        //自定义域2
    preDef_9: string;	        //自定义域9
    preDef_A: string;	        //自定义域10
    preDef_B: string;	        //自定义域11
    preDef_J: string;	        //自定义域20
  end;

const
  CARD_YHK = '01'; //银行卡
  CARD_SCAN = '02'; //扫码: 微信/支付宝
  FILENAME = 'C:\ALLINPAY\ALLINPAY\AllInPay.dll';

procedure MyWriteLog(const mStr: string);

function Obj2Json(nType:integer; UpData:TUpData; Response: Variant): string;

function FormatData(var UpData: TUpData; var DownData: TDownData): boolean;

function ExchangeMoney(Value: string; Ext:integer): string;

function SetRigthZero(sVaule: string; Len:integer): string;

function CheckValid(UpData: TUpData; DownData: TDownData): boolean;

function Param_Input(UpData: TUpData; var Request: Variant): boolean;

function Param_OutPut(var DownData: TDownData; var Response: Variant): boolean;

function PayIntf_MisByTL(UpData: TUpData; var DownData: TDownData; var sUp,sDown:string): boolean;

function Call_InputMis(CardType,TransType,Amount,PosNumber,Operator,Memo:string; var sUp,sDwon:string): boolean;

function TransProcess(request: Variant; response: Variant):LongInt ;  stdcall; external 'C:\ALLINPAY\ALLINPAY\AllInPay.dll';

implementation

uses
  ComObj,SuperObject;

function Call_InputMis(CardType,TransType,Amount,PosNumber,Operator,Memo:string; var sUp,sDwon:string): boolean;
var
  sMsg: string;
  UpData: TUpData;
  DownData: TDownData;
  jo: ISuperObject;
begin
  {**
    *   M — 必须有数据	传入
    *   C — 如果有数据则传入(推荐)
    *   TransType: 1签到  2消费  3消费撤销  4隔日退货
    *-------------------------------------------------------------------
    *	                签到/查询余额	消费	撤 销	退 货
    *  CardType         	M       M	M	M
    *  TransType        	M	M	M	M
    *  Amount	        	M	M	M
    *  OldTraceNumber	        		M
    *  HostSerialNumber	        			M
    *  TransDate	        			M
    *  AuthNumber
    *  CardNumber       			C	C
    *  ExpireDate       			C	C
    *  Memo	        	C	C	C
    *  StoreNumber      		C	C	C
    *  PosNumber        		C	C	C
    *  Operator	        	C	C	C
    *  TransCheck       	C	C	C	C
    *--------------------------------------------------------------------}
  Result := False;
  UpData := TUpData.Create;
  DownData := TDownData.Create;
  try
    try
      UpData.CardType := Trim(CardType);
      UpData.TransType := Trim(TransType);
      UpData.Amount := Trim(Amount);
      UpData.PosNumber := PosNumber;
      UpData.Operator := Operator;
      UpData.Memo := Memo;
      if (UpData.TransType = '3') or (UpData.TransType = '4') then
      begin
        jo := SO(sDwon);   //<---读取Json进行解析
        if UpData.TransType = '3' then    //TransType: 1签到  2消费  3消费撤销  4隔日退货
        begin
          if UpData.CardType = '01' then
          begin
            if jo['OldTraceNumber'] <> nil then
              UpData.OldTraceNumber := jo['OldTraceNumber'].AsString;
          end;
          if UpData.CardType = '100' then
          begin
            if jo['TransId'] <> nil then
              UpData.TransId := jo['TransId'].AsString;
          end;
        end;
        
        if UpData.TransType = '4' then    //TransType: 1签到  2消费  3消费撤销  4隔日退货
        begin
          if jo['HostserialNumber'] <> nil then
            UpData.HostserialNumber := jo['HostserialNumber'].AsString;
          if jo['TransDate'] <> nil then
            UpData.TransDate := jo['TransDate'].AsString;
        end;
      end;

      //调用支付函数
      if not PayIntf_MisByTL(UpData, DownData, sUp, sDwon) then   //返回交易成功的Json,需保存到数据库;
      begin
        Exit;
      end;

      Result := True;
    finally
      FreeAndNil(UpData);
      FreeAndNil(DownData);
    end;
  except
    on e: exception do
    begin
      sMsg := '支付接口交易异常[0]:' + #13#10 + e.Message;
      MyWriteLog(sMsg);
      Application.MessageBox(Pchar(sMsg), '提示', MB_OK);
      Exit;
    end;
  end;
end;

function PayIntf_MisByTL(UpData: TUpData; var DownData: TDownData; var sUp,sDown:string): boolean;
var
  Mis, Request, Response: Variant;
  sMsg: string;
  lv_nRet: LongInt;
begin
  {**
   *  1、对UpData、DownData根据规则检查参数必要性和规范性
   *  2、创建3个对象CreateOleObject: MisPos, RequestData, ResponseData
   *  3、赋值 RequestData, ResponseData  <----传入----[UpData、DownData]
   *  4、调用对象MisPos中函数原型如下:
   *     Function TransProcess(Request As RequestData, Response As ResponseData) As Long
   *  5、赋值 DownData  <----传入----[ResponseData]
   *  6、释放3个对象
   *  7、根据返回的DownData判分析是否成功,并返回Ture/Flase
  **}
  Result := False;
  sMsg := '';
  sUp := '';
  sDown := '';
  lv_nRet := -1;
  try
    //格式化数据  例如:000000000001 1分
    if not FormatData(UpData, DownData) then
    begin
      Exit;
    end;
    
    //检查传入参数的规范性
    if not CheckValid(UpData, DownData) then
    begin
      Exit;
    end;
    MyWriteLog('1');
    try
      try
        //创建对象
        Mis := CreateOleObject('ALLINPAY.MisPos');
        Request := CreateOleObject('ALLINPAY.RequestData');
        Response := CreateOleObject('ALLINPAY.ResponseData');
      except
        on e: exception do
        begin
          sMsg := '创建对象异常:' + #13#10 + e.Message;
          MyWriteLog(sMsg);
          Application.MessageBox(Pchar(sMsg), '提示', MB_OK);
          Exit;
        end;
      end;
      MyWriteLog('2');
      //赋值传入的参数
      if not Param_Input(UpData, Request) then
      begin
        Exit;
      end;

      //调用对象函数接口
      sUp := Obj2Json(1, UpData, Response);
      MyWriteLog('提交数据:' + sUp);  //记录日志
      lv_nRet := Mis.TransProcess(Request, Response);
      if lv_nRet <> 0 then  //调用函数 0:成功 非0:失败
      begin
        sMsg := '调用接口失败:' + IntToStr(lv_nRet);
        MyWriteLog(sMsg);
        Application.MessageBox(Pchar(sMsg), '提示', MB_OK);
        Exit;
      end;
      sDown := Obj2Json(2, UpData, Response);
      MyWriteLog('返回数据:' + sDown);  //记录日志
      
      //赋值返回传输
      if not Param_OutPut(DownData, Response) then
      begin
        Exit;
      end;
      MyWriteLog('3');
      //在调用函数成功情况下,进一步判断业务是否成功
      if DownData.RejCode <> '00' then   //RejCode  00:成功 非00:失败
      begin
        sMsg := 'Mis交易失败!';
        MyWriteLog(sMsg);
        Application.MessageBox(Pchar(sMsg), '提示', MB_OK);
        Exit;
      end;
      MyWriteLog('5');
      if DownData.RejCode = '00' then    //00:成功
      begin
        sMsg := '返回码:' + DownData.RejCode;
        sMsg := sMsg + ' 返回码解释:' + DownData.RejCodeExplain;
        sMsg := sMsg + ' 流水号:' + DownData.PosTraceNumber;
        sMsg := sMsg + ' 交易唯一标识:' + DownData.TransCheck;
        sMsg := sMsg + ' 返回码解释:' + DownData.RejCodeExplain;

        MyWriteLog(sMsg);
        sDown := Obj2Json(2, UpData, Response);
        Result := True;
        Application.MessageBox(Pchar(sMsg), '提示', MB_OK);
      end;
      MyWriteLog('6');
    finally
      Mis := Unassigned;
      Request := Unassigned;
      Response := Unassigned;
    end;
  except
    on e: exception do
    begin
      sMsg := '支付接口交易异常[1]:' + #13#10 + e.Message;
      MyWriteLog(sMsg);
      Application.MessageBox(Pchar(sMsg), '提示', MB_OK);
      Exit;
    end;
  end;
end;

function FormatData(var UpData: TUpData; var DownData: TDownData): boolean;
var
  sMsg: string;
begin
  Result := False;
  sMsg := '';
  try
    UpData.Amount := ExchangeMoney(UpData.Amount, 2);  //小数点保留2位,然后转换为分
    UpData.Amount := SetRigthZero(UpData.Amount, 12);  //金额(12位,分为单位,不足左补0)
    UpData.OldTraceNumber := SetRigthZero(UpData.OldTraceNumber, 6);  //原始流水号(6位,不足左补0)
    UpData.AuthNumber := SetRigthZero(UpData.AuthNumber, 6);  //授权码(6位,不足左补0)
    UpData.HostserialNumber := SetRigthZero(UpData.HostserialNumber, 12);  //原系统参考号(12位,不足左补0)
    UpData.TransDate := SetRigthZero(UpData.TransDate, 4);    //原交易日期(4位,MMDD)
    UpData.ExpireDate := SetRigthZero(UpData.ExpireDate, 4);    //有效期(4位,MMDD)
    Result := True;
  except
    on e: exception do
    begin
      sMsg := '格式化参数异常:' + #13#10 + e.Message;
      MyWriteLog(sMsg);
      Application.MessageBox(Pchar(sMsg), '提示', MB_OK);
      Exit;
    end;
  end;
end;

function CheckValid(UpData: TUpData; DownData: TDownData): boolean;
var
  sMsg: string;
begin
  {**
    *   M — 必须有数据	传入
    *   C — 如果有数据则传入(推荐)
    *   TransType: 1签到  2消费  3消费撤销  4隔日退货
    *-------------------------------------------------------------------
    *	                签到/查询余额	消费	撤 销	退 货
    *  CardType         	M       M	M	M
    *  TransType        	M	M	M	M
    *  Amount	        	M	M	M
    *  OldTraceNumber	        		M
    *  HostSerialNumber	        			M
    *  TransDate	        			M
    *  AuthNumber
    *  CardNumber       			C	C
    *  ExpireDate       			C	C
    *  Memo	        	C	C	C
    *  StoreNumber      		C	C	C
    *  PosNumber        		C	C	C
    *  Operator	        	C	C	C
    *  TransCheck       	C	C	C	C
    *--------------------------------------------------------------------
  **}
  Result := False;
  sMsg := '';
  try
    if not FileExists(FILENAME) then     //接口文件不存在
    begin
      sMsg := '通联支付接口文件[' + FILENAME + ']不存在!';
      MyWriteLog(sMsg);
      Application.MessageBox(Pchar(sMsg), '提示', MB_OK);
      Exit;
    end;

    if (UpData.CardType <> '01') and (UpData.CardType <> '100') then     // 01银行卡  100扫码:微信/支付宝
    begin
      sMsg := '非银行卡或微信支付宝的卡类型!';
      MyWriteLog(sMsg);
      Application.MessageBox(Pchar(sMsg), '提示', MB_OK);
      Exit;
    end;

    if (UpData.TransType <> '1') and (UpData.TransType <> '2')    // 1签到/查询  2消费  3消费撤销  4隔日退货
      and (UpData.TransType <> '3') and (UpData.TransType <> '4') then
    begin
      sMsg := '非正常交易的交易类型!';
      MyWriteLog(sMsg);
      Application.MessageBox(Pchar(sMsg), '提示', MB_OK);
      Exit;
    end;

    if (UpData.TransType = '2') or (UpData.TransType = '3') then
    begin
      if UpData.Amount = '' then
      begin
        sMsg := '当交易类型为消费/撤销/退货的时候,不允许金额为空!';
        MyWriteLog(sMsg);
        Application.MessageBox(Pchar(sMsg), '提示', MB_OK);
        Exit;
      end;
      if StrToIntDef(UpData.Amount, 0) = 0 then
      begin
        sMsg := '不允许交易金额零!';
        MyWriteLog(sMsg);
        Application.MessageBox(Pchar(sMsg), '提示', MB_OK);
        Exit;
      end;
      if Length(UpData.Amount) <> 12 then
      begin
        sMsg := '非12位数的交易金额!';
        MyWriteLog(sMsg);
        Application.MessageBox(Pchar(sMsg), '提示', MB_OK);
        Exit;
      end;
    end;

    if UpData.TransType = '3' then
    begin
      if UpData.OldTraceNumber = '' then
      begin
        sMsg := '当交易类型为撤销的时候,不允许原始流水号为空!';
        MyWriteLog(sMsg);
        Application.MessageBox(Pchar(sMsg), '提示', MB_OK);
        Exit;
      end;
      if Length(UpData.OldTraceNumber) <> 6 then
      begin
        sMsg := '非6位数的原始流水号!';
        MyWriteLog(sMsg);
        Application.MessageBox(Pchar(sMsg), '提示', MB_OK);
        Exit;
      end;
    end;

    if UpData.TransType = '4' then
    begin
      if UpData.HostserialNumber = '' then    //原系统参考号(12位,不足左补0)
      begin
        sMsg := '当交易类型为退货的时候,不允许原系统参考号为空!';
        MyWriteLog(sMsg);
        Application.MessageBox(Pchar(sMsg), '提示', MB_OK);
        Exit;
      end;
      if Length(UpData.HostserialNumber) <> 12 then
      begin
        sMsg := '非12位数的原系统参考号!';
        MyWriteLog(sMsg);
        Application.MessageBox(Pchar(sMsg), '提示', MB_OK);
        Exit;
      end;
      if UpData.TransDate = '' then          //原交易日期(4位,MMDD)
      begin
        sMsg := '当交易类型为退货的时候,不允许原交易日期为空!';
        MyWriteLog(sMsg);
        Application.MessageBox(Pchar(sMsg), '提示', MB_OK);
        Exit;
      end;
      if Length(UpData.TransDate) <> 4 then
      begin
        sMsg := '非4位数的原交易日期!';
        MyWriteLog(sMsg);
        Application.MessageBox(Pchar(sMsg), '提示', MB_OK);
        Exit;
      end;
      try
        sMsg := '2000' + UpData.TransDate + '01';
        VarToDateTime(sMsg);
      except
        sMsg := '非法的原交易日期[' + sMsg + ']!';
        MyWriteLog(sMsg);
        Application.MessageBox(Pchar(sMsg), '提示', MB_OK);
        Exit;
      end;
    end;

    if UpData.AuthNumber <> '' then
    begin
      if Length(UpData.AuthNumber) <> 6 then
      begin
        sMsg := '非6位数的授权码!';
        MyWriteLog(sMsg);
        Application.MessageBox(Pchar(sMsg), '提示', MB_OK);
        Exit;
      end;
    end;

    if (UpData.ExpireDate <> '') and (StrToIntDef(UpData.ExpireDate,0) <> 0) then
    begin
      if Length(UpData.ExpireDate) <> 4 then
      begin
        sMsg := '非4位数的有效期!';
        MyWriteLog(sMsg);
        Application.MessageBox(Pchar(sMsg), '提示', MB_OK);
        Exit;
      end;
      try
        sMsg := '2000' + UpData.ExpireDate + '01 00:00:01';
        VarToDateTime(sMsg);
      except
        sMsg := '非法的有效期[' + sMsg + ']!';
        MyWriteLog(sMsg);
        Application.MessageBox(Pchar(sMsg), '提示', MB_OK);
        Exit;
      end;
    end;

    Result := True;
  except
    on e: exception do
    begin
      sMsg := '检查传入参数异常:' + #13#10 + e.Message;
      MyWriteLog(sMsg);
      Application.MessageBox(Pchar(sMsg), '提示', MB_OK);
      Exit;
    end;
  end;
end;

function Param_Input(UpData: TUpData; var Request: Variant): boolean;
var
  sMsg: string;
begin
  Result := False;
  try
    //请求
    Request.PutValue('PosNumber', UpData.PosNumber);	        //收银机号
    Request.PutValue('StoreNumber', UpData.StoreNumber);  	//门店号
    Request.PutValue('operator', UpData.operator);        	//操作员号
    Request.PutValue('CardNumber', UpData.CardNumber);	        //卡号/付款码/优惠券码
    Request.PutValue('CardType', UpData.CardType);	        //卡种代码(银行卡01,万商通联02……)
    Request.PutValue('TransType', UpData.TransType);	        //交易类型
    Request.PutValue('Amount', UpData.Amount);         	        //金额(12位,分为单位,不足左补0)
    Request.PutValue('OldTraceNumber', UpData.OldTraceNumber);	//原始流水号(6位,不足左补0)
    Request.PutValue('AuthNumber', UpData.AuthNumber);	        //授权码(6位,不足左补0)
    Request.PutValue('HostserialNumber', UpData.HostserialNumber);	//原系统参考号(12位,不足左补0)
    Request.PutValue('TransDate', UpData.TransDate);	        //原交易日期(4位,MMDD)
    Request.PutValue('ExpireDate', UpData.ExpireDate);	        //有效期(4位,MMDD)
    Request.PutValue('Memo', UpData.Memo);	                 //其他信息
    Request.PutValue('TransCheck', UpData.TransCheck);	        //交易唯一标识
    Request.PutValue('BusinessId', UpData.BusinessId);	        //业务编码,用于多业务模式
    Request.PutValue('TransId', UpData.TransId);          	//原交易单号
    Request.PutValue('ProductNumber', UpData.ProductNumber);	//产品编码    万商卡附加KEY
    Request.PutValue('preDef_0', UpData.preDef_0);        	//自定义域1   自定义附加KEY
    Request.PutValue('preDef_1', UpData.preDef_1);        	//自定义域2
    Request.PutValue('preDef_9', UpData.preDef_9);	        //自定义域9
    Request.PutValue('preDef_A', UpData.preDef_A);	        //自定义域10
    Request.PutValue('preDef_B', UpData.preDef_B);	        //自定义域11
    Request.PutValue('preDef_J', UpData.preDef_J);	        //自定义域20
    Result := True;
  except
    on e: exception do
    begin
      sMsg := '传递参数异常[发送]:' + #13#10 + e.Message;
      MyWriteLog(sMsg);
      Application.MessageBox(Pchar(sMsg), '提示', MB_OK);
      Exit;
    end;
  end;
end;

function Param_OutPut(var DownData: TDownData; var Response: Variant): boolean;
var
  sMsg: string;
begin
  Result := False;
  try
    //返回
    DownData.Tips := Response.GetValue('Tips');             	//小费
    DownData.Total := Response.GetValue('Total');	                //总计
    DownData.Amount := Response.GetValue('Amount');         	//金额
    DownData.BalanceAmount := Response.GetValue('BalanceAmount');	//余额
    DownData.PosTraceNumber := Response.GetValue('PosTraceNumber');	//流水号
    DownData.OldTraceNumber := Response.GetValue('OldTraceNumber');	//原始流水号
    DownData.ExpireDate := Response.GetValue('ExpireDate');	        //有效期
    DownData.BatchNumber := Response.GetValue('BatchNumber');	//批次号
    DownData.MerchantNumber := Response.GetValue('MerchantNumber');	//商户号
    DownData.MerchantName := Response.GetValue('MerchantName');	//商户名
    DownData.TerminalNumber := Response.GetValue('TerminalNumber');	//终端号
    DownData.HostSerialNumber := Response.GetValue('HostSerialNumber');	//系统参考号
    DownData.AuthNumber := Response.GetValue('AuthNumber');	        //授权码
    DownData.RejCode := Response.GetValue('RejCode');	        //返回码
    DownData.IssNumber := Response.GetValue('IssNumber');	        //发卡行号
    DownData.IssName := Response.GetValue('IssName');	        //发卡行名称
    DownData.CardNumber := Response.GetValue('CardNumber');	        //卡号
    DownData.TransDate := Response.GetValue('TransDate');	        //交易日期
    DownData.TransTime := Response.GetValue('TransTime');	        //交易时间
    DownData.RejCodeExplain := Response.GetValue('RejCodeExplain');	//返回码解释
    DownData.CardBack := Response.GetValue('CardBack');	        //卡片回收标志
    DownData.Memo := Response.GetValue('Memo');	                //备注
    DownData.TransCheck := Response.GetValue('TransCheck');	        //交易唯一标识
    DownData.IsOffline := Response.GetValue('IsOffline');	        //脱机标识:0-联机、1-脱机
    DownData.CUPS := Response.GetValue('CUPS');             	//卡组织
    DownData.TransId := Response.GetValue('TransId');	        //原交易单号
    DownData.ProductNumber := Response.GetValue('ProductNumber');	//产品号码
    DownData.ProductName := Response.GetValue('ProductName');	//产品名称
    DownData.preDef_0 := Response.GetValue('preDef_0');	        //自定义域1   自定义附加KEY
    DownData.preDef_1 := Response.GetValue('preDef_1');	        //自定义域2
    DownData.preDef_9 := Response.GetValue('preDef_9');	        //自定义域9
    DownData.preDef_A := Response.GetValue('preDef_A');	        //自定义域10
    DownData.preDef_B := Response.GetValue('preDef_B');	        //自定义域11
    DownData.preDef_J := Response.GetValue('preDef_J');	        //自定义域20

    Result := True;
  except
    on e: exception do
    begin
      sMsg := '传递参数异常[返回]:' + #13#10 + e.Message;
      MyWriteLog(sMsg);
      Application.MessageBox(Pchar(sMsg), '提示', MB_OK);
      Exit;
    end;
  end;
end;

function SetRigthZero(sVaule: string; Len:integer): string;
var
  i: integer;
  Value: string;
  Temp,sMsg: string;
begin
  Result := '0';
  try
    Value := Trim(sVaule);
    if length(Value) = 0 then
    begin
      Value := '0';
    end;
    
    for i := 1 to Len-Length(Value) do
    begin
      Temp := Temp + '0';
    end;
    Result := Temp + Value;    //格式化长度为Len位数
  except
    on e:exception do
    begin
      sMsg := '字段' + Value + '左补零异常:' + #13#10 + e.Message;
      MyWriteLog(sMsg);
      Application.MessageBox(Pchar(sMsg), '提示', MB_OK);
      Exit;
    end;
  end;
end;

function ExchangeMoney(Value: string; Ext:integer): string;
var
  S,Temp,sMsg: string;
  i: integer;
begin
  Result := '0';
  try
    for i := 1 to Ext do
    begin
      Temp := Temp + '0';
    end;
    Temp := '0.' + Temp;
    S := Value;
    S := FormatFloat(Temp, StrToFloatDef(S, 0));  //保留小数点Ext位
    S := FloatToStr(StrToFloat(S) * 100);  //转换为分
    Result := S;
  except
    on e:exception do
    begin
      sMsg := '金额转换异常:' + #13#10 + e.Message;
      MyWriteLog(sMsg);
      Application.MessageBox(Pchar(sMsg), '提示', MB_OK);
      Exit;
    end;
  end;
end;

function Obj2Json(nType:integer; UpData:TUpData; Response: Variant): string;
var
  Temp,sMsg: string;
begin
  Result := '对象转换Json错!';
  try
    if nType = 1 then  //请求
    begin
      Temp := '{';
      Temp := Temp + '"PosNumber":"' + UpData.PosNumber + '",';
      Temp := Temp + '"StoreNumber":"' + UpData.StoreNumber + '",';
      Temp := Temp + '"operator":"' + UpData.operator + '",';
      Temp := Temp + '"CardNumber":"' + UpData.CardNumber + '",';
      Temp := Temp + '"CardType":"' + UpData.CardType + '",';
      Temp := Temp + '"TransType":"' + UpData.TransType + '",';
      Temp := Temp + '"Amount":"' + UpData.Amount + '",';
      Temp := Temp + '"OldTraceNumber":"' + UpData.OldTraceNumber + '",';
      Temp := Temp + '"AuthNumber":"' + UpData.AuthNumber + '",';
      Temp := Temp + '"HostserialNumber":"' + UpData.HostserialNumber + '",';
      Temp := Temp + '"TransDate":"' + UpData.TransDate + '",';
      Temp := Temp + '"ExpireDate":"' + UpData.ExpireDate + '",';
      Temp := Temp + '"Memo":"' + UpData.Memo + '",';
      Temp := Temp + '"TransCheck":"' + UpData.TransCheck + '",';
      Temp := Temp + '"BusinessId":"' + UpData.BusinessId + '",';
      Temp := Temp + '"TransId":"' + UpData.TransId + '",';
      Temp := Temp + '"ProductNumber":"' + UpData.ProductNumber + '",';
      Temp := Temp + '"preDef_0":"' + UpData.preDef_0 + '",';
      Temp := Temp + '"preDef_1":"' + UpData.preDef_1 + '",';
      Temp := Temp + '"preDef_9":"' + UpData.preDef_9 + '",';
      Temp := Temp + '"preDef_A":"' + UpData.preDef_A + '",';
      Temp := Temp + '"preDef_B":"' + UpData.preDef_B + '",';
      Temp := Temp + '"preDef_J":"' + UpData.preDef_J + '"';
      Temp := Temp + '}';
    end else begin  //返回
      Temp := '{';
      Temp := Temp + '"Tips":"' + Response.GetValue('Tips') + '",';
      Temp := Temp + '"Total":"' + Response.GetValue('Total') + '",';
      Temp := Temp + '"Amount":"' + Response.GetValue('Amount') + '",';
      Temp := Temp + '"BalanceAmount":"' + Response.GetValue('BalanceAmount') + '",';
      Temp := Temp + '"PosTraceNumber":"' + Response.GetValue('PosTraceNumber') + '",';
      Temp := Temp + '"OldTraceNumber":"' + Response.GetValue('OldTraceNumber') + '",';
      Temp := Temp + '"ExpireDate":"' + Response.GetValue('ExpireDate') + '",';
      Temp := Temp + '"BatchNumber":"' + Response.GetValue('BatchNumber') + '",';
      Temp := Temp + '"MerchantNumber":"' + Response.GetValue('MerchantNumber') + '",';
      Temp := Temp + '"MerchantName":"' + Response.GetValue('MerchantName') + '",';
      Temp := Temp + '"TerminalNumber":"' + Response.GetValue('TerminalNumber') + '",';
      Temp := Temp + '"HostSerialNumber":"' + Response.GetValue('HostSerialNumber') + '",';
      Temp := Temp + '"AuthNumber":"' + Response.GetValue('AuthNumber') + '",';
      Temp := Temp + '"IssNumber":"' + Response.GetValue('IssNumber') + '",';
      Temp := Temp + '"IssNumber":"' + Response.GetValue('IssNumber') + '",';
      Temp := Temp + '"IssName":"' + Response.GetValue('IssName') + '",';
      Temp := Temp + '"CardNumber":"' + Response.GetValue('CardNumber') + '",';
      Temp := Temp + '"TransDate":"' + Response.GetValue('TransDate') + '",';
      Temp := Temp + '"TransTime":"' + Response.GetValue('TransTime') + '",';
      Temp := Temp + '"RejCodeExplain":"' + Response.GetValue('RejCodeExplain') + '",';
      Temp := Temp + '"CardBack":"' + Response.GetValue('CardBack') + '",';
      Temp := Temp + '"Memo":"' + Response.GetValue('Memo') + '",';
      Temp := Temp + '"TransCheck":"' + Response.GetValue('TransCheck') + '",';
      Temp := Temp + '"IsOffline":"' + Response.GetValue('IsOffline') + '",';
      Temp := Temp + '"CUPS":"' + Response.GetValue('CUPS') + '",';
      Temp := Temp + '"TransId":"' + Response.GetValue('TransId') + '",';
      Temp := Temp + '"ProductNumber":"' + Response.GetValue('ProductNumber') + '",';
      Temp := Temp + '"ProductName":"' + Response.GetValue('ProductName') + '",';
      Temp := Temp + '"preDef_0":"' + Response.GetValue('preDef_0') + '",';
      Temp := Temp + '"preDef_1":"' + Response.GetValue('preDef_1') + '",';
      Temp := Temp + '"preDef_9":"' + Response.GetValue('preDef_9') + '",';
      Temp := Temp + '"preDef_A":"' + Response.GetValue('preDef_A') + '",';
      Temp := Temp + '"preDef_B":"' + Response.GetValue('preDef_B') + '",';
      Temp := Temp + '"preDef_J":"' + Response.GetValue('preDef_J') + '"';
      Temp := Temp + '}';
    end;
    Result := Temp;
  except
    on e:exception do
    begin
      sMsg := '对象转换Json异常:' + #13#10 + e.Message;
      MyWriteLog(sMsg);
      Application.MessageBox(Pchar(sMsg), '提示', MB_OK);
      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;



end.

  

标签:end,string,Temp,UpData,Delphi,创建对象,sMsg,DLL,Response
来源: https://www.cnblogs.com/studycode/p/11124254.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有