请教Delphi 如何调用银行KeeperClient.dll进行扫码支付

KJHM 2018-12-31 11:18:16
一、总体说明:

接口采用DLL动态加载方式,提供一个DLL名为KeeperClient.dll供应用程序调用,里面提供一个函数:int __stdcall misposTrans(void* input, void* output)
银行卡的所有交易功能均通过此函数交互,根据不同的参数实现不同的功能。

二、接口函数原型说明

int __stdcall misposTrans(void* input, void* output)当DLL函数返回RspCode为00时,表示交易成功,如需要打印凭条,则DLL程序会自动在当前目录生成ICBCPRTTKT.txt文件,收银机厂

家将其内容取出来打印即可。当DLL函数返回RspCode 不是00时候,DLL程序会在RspMessage 字段返回错误提示信息,请收银机厂家将错误信息显示在屏幕上供收银员查看。其中交易金额为12

位定长,以分为单位,不足12位左补零。

三、结构定义如下

交易输入结构体:
typedef struct
{
char TransType[2]; //交易指令
char FuncID[4]; //分行特色脚本ID号
char TransAmount[12]; //交易金额
char TipAmount[12]; //小费金额
char TransDate[8]; //交易日期
char MisTraceNo[6];//MIS流水号
char CardNo[19]; //交易卡号
char ExpDate[4]; //卡片有效期
char Track2[37]; //二磁道信息
char Track3[104]; //三磁道信息
char ReferNo[8]; //系统检索号
char AuthNo[6]; //授权号
char MultiId[12]; //多商户交易索引号
char TerminalId[15]; //交易终端号
char InstallmentTimes[2]; //分期期数
char PreInput[256]; //预输入项 附件说明 1
char AddDatas[256]; //固定输入项 附件说明 2
char QRCardNO[50]; //二维码支付号
char QROrderNo[50]; //二维码订单号
char PrnFeatureData[512]; //特色打印数据 附件说明 4
char BillInfo[60]; //附加在对账单上的信息。如商户可传入自己系统的交易流水号,在银行提供对账单上每一笔交易将会附加该流水号,方便查阅对账。
char platId[20]; //收银机号
char operId[20]; //操作员号
} ST_MISPOS_IN;

交易输出结构体:

typedef struct
{
char TransType[2]; //交易指令
char CardNo[19]; //交易卡号
char Amount[12]; //交易金额
char TipAmount[12]; //小费金额
char TransTime[6]; //交易时间
char TransDate[8]; //交易日期
char ExpDate[4]; //卡片有效期
char Track2[37]; //二磁道信息
char Track3[104]; //三磁道信息
char ReferNo[8]; //系统检索号
char AuthNo[6]; //授权号
char RspCode[2]; //返回码
char TerminalId[15]; //交易终端号
char MerchantId[12]; //交易商户号
char YLMerchantId[15]; //银联商户号
char InstallmentTimes[2]; //分期期数
char TCData[256]; //IC卡数据
char MerchantNameEng[50]; //英文商户名称
char MerchantNameChs[40]; //中文商户名称
char TerminalTraceNo[6]; //终端流水号
char TerminalBatchNo[6]; //终端批次号
char IcCardId[4]; //IC卡序列号
char BankName[20]; //发卡行名称
char TransName[20]; //中文交易名称
char CardType[20]; //卡类别
char TotalInfo[800]; //交易汇总信息,打印总账时需要
char RspMessage[100]; //交易失败时,MISPOS系统返回中文错误描述信息
char Remark[300]; //备注信息
char WTrace[24]; //外卡流水号
char AIDDAT[34]; //AID(IC卡数据项)
char APPLBL[20]; //APPLABEL(IC卡数据项)
char APPNAM[20]; //APPNAME(IC卡数据项)
char ElecTotal[32]; //脱机交易汇总信息
char SettleAmount[12];//实扣金额
char QROrderNo[50]; //二维码订单号
char QRMemo[300]; /*二维码优惠支付信息:( 积分抵扣12+电子券抵扣金额12+优惠券抵扣金额12+银行立减12+商户立减12+订单号30该字段全为可视字符,另外目前工行对该字段的设计是长

度可变,该字段可能为空,也可能只有一个订单号,后面的金额个数也是未定的,有可能一个金额,也可能多个金额,具体以工行实际返回为准,收银系统这边要对这块做好解析扩展空间)*/
char RefNum[23]; //23位系统检索号
char platId[20]; //收银机号
char operId[20]; //操作员号
} ST_MISPOS_OUT;


四、交易说明:二维码消费(M(必备):该数据必定存在。C(有条件):在一定条件下存在。O(可选):可选输入的参数。)

TransType M 交易类型 46
TransAmount M 交易金额12 位分为单位无小数点,前补“0”补足12位, 比如“ 1.02元”为“000000000102”
QRCardNO M 二维码支付号不足右补空格
MultiId C 多商户交易索引号12位该字段只有多商户终端时存在,用于终端指定索引号对应的商户进行交易。
MisTraceNo C MIS流水号6位 当ERP 系统需要使用“再确认”交易时,该字段必须存在并且保证唯一,由ERP 系统自行维护。
PrnFeatureData O 特色打印数据
BillInfo O 外附加在对账单上的信息如商户可传入自己系统的交易流水号,在银行提供对账单上每一笔交易将会附加该流水号,方便查阅对账。
platId O 收银台号20位不足右补空格
operId O 收银员号20位不足右补空格
...全文
375 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
KJHM 2019-01-02
  • 打赏
  • 举报
回复
解决了感谢!
function Pay(Input: Pinput; output: Poutput): integer; stdcall external 'xxxx.dll';
  • 打赏
  • 举报
回复
这个有难度吗
//int __stdcall misposTrans(void* input, void* output);
function misposTrans(input, output: pointer): integer; stdcall; external 'xxx.dll';
或者
function misposTrans(var input, output): integer; stdcall; external 'xxx.dll';
也可以,看使用习惯了

结构体定义:
type
ST_MISPOS_IN = record
TransType: array[0..1] of AnsiChar; //交易指令
FuncID: array[0..3] of AnsiChar; //分行特色脚本I
// ...
end;
剩下的你自己翻译吧

16,748

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
  • 语言基础/算法/系统设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧