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.