0

我正在使用 VC++ 2010 为 CAT-Credit Authorization Terminal 开发 OPOS 接口。我的问题是关于 ClearOutput 方法,如果这里有人尝试过编写 opos 控件。当我调用该函数时,它返回代码 106,这意味着 OPOS_E_ILLEGAL。

这是我的代码序列:

  • OPOSCAT.Open()
  • OPOSCAT.ClaimDevice()
  • OPOSCAT.DeviceEnabled = True
  • OPOSCAT.Asyncmode = true
  • 执行 SALES 并触发事件,等到它完成,调用 OutputCompleteEvent
  • OPOSCAT.ClearOutput()
  • OPOSCAT.DeviceEnabled = False
  • OPOSCAT.Asyncmode = False
  • OPOSCAT.ReleaseDevice()
  • OPOSCAT.Close()

单击此处获取更多参考: 参见第 5 章

谢谢

4

2 回答 2

0

详情请查看您使用的 CAT 服务对象的规格。

可能是因为在OutputCompleteEvent 之后调用了ClearOutput,也就是在SALES 的异步处理结束之后。

一般在异步处理过程中调用ClearOutput方法取消处理。在您的代码中,它是“等到它完成”的一部分。

如果在等待此完成时调用 ClearOutput 方法,则 ClearOutput 方法将成功,并且 SALES 操作(如 AuthorizeSales)将被取消。

但是,根据您使用的 CAT 服务对象的规范,服务对象可能不支持 ClearOutput 方法。在这种情况下,无论调用时间如何,都会发生错误。

于 2017-11-27T13:18:45.400 回答
0

首先,该 PDF 适用于 1.6,已经过时超过 15 年。请参阅http://monroecs.com/unifiedpos.htm了解 OPOS 的当前版本,即 1.14。如果不出意外,出于 PCI 合规性原因,您应该升级。

OPOS 公共控件非常通用,并且没有太多理由在clearOutput()方法上返回该错误。我唯一能想到的就是如果它不处于合法状态(声称)可以调用它。也许之前的调用创建了一个非常糟糕的错误条件,以至于设备将状态从声明更改为释放?

如果不是这样,则可能是特定于设备的错误。联系提供服务对象的设备厂商。您可以尝试下载 OPOS 的调试版本并启用日志记录,这将提供更多证据来支持这一说法。

于 2017-10-02T03:45:21.837 回答