- 集成指南
- 支持的功能(付款方式)
- 持卡人在位付款
持卡人在位
持卡人在位付款 (CHP) 付款指使用销售点 (POS) 终端的交易。 终端可以通过以下方式读取卡数据:
- 掏取 EMV 卡
- 通过非接触式卡进行 NFC(近场通讯)
- 刷磁条卡
- 键入卡号
webServices Integration 版本 40 之前的版本提供上述所有支持。
CHP 付款由终端发起,然后作为 Verify、Authorize、Capture、Pay 或 Refund 交易发送到网关。 例如,由卡芯片离线授权的交易将只作为 Capture 发送,而需要发卡机构授权的交易将使用在线 Authorize 交易,然后使用 Capture 交易。
CHP 交易与很多其他网关功能交互。 您可以:
- 将卡令牌化,
- 使用与您的电子商务交易相同的集成或通过 UI 退款
- 统一电子商务和 CHP 报告
先决条件
Your payment service provider 和您的收单行必须为您启用持卡人在位交易。
用于 CHP 交易的通用字段
以下 API 字段与通过网关的所有持卡人在位集成相关。
transaction.source=CARD_PRESENT
: 如果不提供此字段,将使用 your payment service provider 在收单行链接配置的默认交易来源。 [REST][NVP]- 卡号: 强制提供卡号,不过提供方式取决于卡读取方式,包括键盘输入、磁条或 EMV 芯片,您可以在以下位置提供:
- 键控交易的
sourceOfFunds.provided.card.number
。 - 磁条交易的
sourceOfFunds.provided.card.track1
和/或sourceOfFunds.provided.card.track2
,或
标签 56 和标签 57 的 EMV 标签等效实体,这些标签分别在卡数据为磁条格式的非接触式交易的sourceOfFunds.provided.card.emvRequest
中提供。 - 卡数据为 EMV 格式的 EMV 交易(接触式/非接触式)的
sourceOfFunds.provided.card.emvRequest
中的标签 5A。 - 卡数据为 DUKPT 加密格式的 P2PE(点对点加密)交易的
sourceOfFunds.provided.card.p2pe.payload
。
- 键控交易的
- 终端识别码: 强制提供终端识别码,不过提供方式取决于卡读取方式,包括键盘输入、磁条或 EMV 芯片,您可以在以下位置提供:
- 键控交易和磁条交易的
posTerminal.lane
。 - 卡数据为 EMV 格式的 EMV 交易(接触式/非接触式)的
sourceOfFunds.provided.card.emvRequest
中的标签 9F1C。
- 键控交易和磁条交易的
确保以下 POS 终端字段值根据终端生成交易的卡数据的方式正确设置。 如果存在这些字段的数据,应始终提供这些数据。 网关将根据需要将此数据传送到收单行。 如果收单行需要一个字段,但实际不存在,那么交易将失败。
posTerminal.address
posTerminal.attended
: 如果您未提供此字段,网关将默认此值为UNKNOWN_OR_UNSPECIFIED
posTerminal.authorizationMethod
posTerminal.cardHolderActivated
: 如果您未提供此字段,网关将默认此值为NOT_CARDHOLDER_ACTIVATED
posTerminal.inputCapability
: 此字段对于 EMV 交易是强制的。posTerminal.location
: 此字段对于 EMV 交易是强制的。posTerminal.panEntryMode
posTerminal.pinEntryCapability
posTerminal.onlineReasonCode
: 此字段对于所有在线交易的芯片和芯片回调交易(包括撤消)是强制的。posTerminal.serialNumber
posTerminal.mobile.cardInputDevice
: 此字段适用于能够接受点击屏幕或物理键盘来输入 PIN 的移动 POS (mPOS) 设备。 软件 PIN 应仅用于没有支持 PIN 输入的硬件键盘的设备。 有关 mPOS 集成的要求,请参见通过集成使用 mPOS。
处理磁条交易
如果卡轨数据从卡磁条读取,
- 在
sourceOfFunds.provided.card.track1
字段中提供卡轨 1 数据,或在sourceOfFunds.provided.card.track2
字段中提供卡轨 2 数据。 如果卡轨 1 和卡轨 2 在终端均可用,那么在交易请求中全部提供。 - 提供强制字段。
- 提供可选字段(如果需要)。
sourceOfFunds.provided.card.track1 [REST][NVP]
sourceOfFunds.provided.card.track2 [REST][NVP]
这里是使用磁条数据的在线授权交易的示例。
URL | https://api/rest/version/72/merchant/{merchantId}/order/{orderid}/transaction/{transactionid} |
HTTP 方法 | PUT |
{ "apiOperation": "AUTHORIZE", "order": { "amount": 80, "currency": "AUD" }, "transaction": { "source": "CARD_PRESENT", "frequency": "SINGLE" }, "sourceOfFunds": { "type": "CARD", "provided": { "card": { "number": "5457210089020012", "sequenceNumber": "015", "expiry": { "year": "39", "month": "01" }, "track2": ";5123456789012346=17051019681143384001?", "track1": "%B5123456789012346^MR JOHN R SMITH ^17051019681143300001 840 ?;" } } }, "posTerminal": { "lane": "AdamLane", "panEntryMode": "SWIPE", "pinEntryCapability": "PIN_NOT_SUPPORTED", "attended": "UNATTENDED", "cardholderActivated": "SELF_SERVICE_TERMINAL", "inputCapability": "MAGNETIC_STRIPE", "location": "MERCHANT_TERMINAL_OFF_PREMISES" } }
{ "authorizationResponse": { "posData": "1605S0100130", "transactionIdentifier": "AmexTidTest" }, "gatewayEntryPoint": "WEB_SERVICES_API", "merchant": "TESTSMOKE-RETAIL", "order": { "amount": 80, "creationTime": "2017-05-31T07:49:46.351Z", "currency": "AUD", "id": "sa-e229682a-2163-47cf-b080-fb60dd148192", "status": "AUTHORIZED", "totalAuthorizedAmount": 80, "totalCapturedAmount": 0, "totalRefundedAmount": 0 }, "posTerminal": { "attended": "UNATTENDED", "cardholderActivated": "SELF_SERVICE_TERMINAL", "inputCapability": "MAGNETIC_STRIPE", "lane": "AdamLane", "location": "MERCHANT_TERMINAL_OFF_PREMISES", "panEntryMode": "SWIPE", "pinEntryCapability": "PIN_NOT_SUPPORTED" }, "response": { "acquirerCode": "00", "gatewayCode": "APPROVED" }, "result": "SUCCESS", "sourceOfFunds": { "provided": { "card": { "brand": "MASTERCARD", "expiry": { "month": "1", "year": "39" }, "fundingMethod": "DEBIT", "issuer": "CAPITAL ONE BANK (CANADA BRANCH)", "number": "545721xxxxxx0012", "scheme": "MASTERCARD", "sequenceNumber": "015", "trackDataProvided": true } }, "type": "CARD" }, "timeOfRecord": "2017-05-31T07:49:46.351Z", "transaction": { "acquirer": { "batch": 1, "id": "SYSTEST_ACQ1", "merchantId": "12345678" }, "amount": 80, "authorizationCode": "000001", "currency": "AUD", "frequency": "SINGLE", "id": "1", "receipt": "1705313", "source": "CARD_PRESENT", "terminal": "0006", "type": "AUTHORIZATION" }, "version": "43" }
处理键控交易
如果在终端键盘手动输入卡号,
sourceOfFunds.provided.card.number
[REST][NVP]
这里是使用手动键入卡号的在线授权交易的示例。
URL | https://api/rest/version/72/merchant/{merchantId}/order/{orderid}/transaction/{transactionid} |
HTTP 方法 | PUT |
{ "posTerminal": { "serialNumber": "13130PP800781435", "cardholderActivated": "NOT_CARDHOLDER_ACTIVATED", "lane": "S2_Lane", "panEntryMode": "KEYED", "pinEntryCapability": "UNKNOWN", "attended": "ATTENDED", "inputCapability": "KEY_ENTRY", "location": "MERCHANT_TERMINAL_ON_PREMISES" }, "apiOperation": "AUTHORIZE", "sourceOfFunds": { "type": "CARD", "provided": { "card": { "number": "5457210089020012", "sequenceNumber": "000", "expiry": { "year": "39", "month": "01" } } } }, "order": { "amount": "100.00", "currency": "EUR" }, "transaction": { "source": "CARD_PRESENT", "frequency": "SINGLE" } }
{ "gatewayEntryPoint": "WEB_SERVICES_API", "merchant": "TESTSMOKE-RETAIL", "order": { "amount": 100, "creationTime": "2017-05-31T08:59:47.194Z", "currency": "EUR", "id": "sa-529e784a-e11d-474d-8012-c0790531bb0f", "status": "AUTHORIZED", "totalAuthorizedAmount": 100, "totalCapturedAmount": 0, "totalRefundedAmount": 0 }, "posTerminal": { "attended": "ATTENDED", "cardholderActivated": "NOT_CARDHOLDER_ACTIVATED", "inputCapability": "KEY_ENTRY", "lane": "S2_Lane", "location": "MERCHANT_TERMINAL_ON_PREMISES", "panEntryMode": "KEYED", "pinEntryCapability": "UNKNOWN", "serialNumber": "13130PP800781435" }, "response": { "gatewayCode": "APPROVED" }, "result": "SUCCESS", "sourceOfFunds": { "provided": { "card": { "brand": "MASTERCARD", "expiry": { "month": "1", "year": "39" }, "fundingMethod": "DEBIT", "issuer": "CAPITAL ONE BANK (CANADA BRANCH)", "number": "545721xxxxxx0012", "scheme": "MASTERCARD", "sequenceNumber": "000" } }, "type": "CARD" }, "timeOfRecord": "2017-05-31T08:59:47.194Z", "transaction": { "acquirer": { "batch": 1, "id": "FOOBANK", "merchantId": "11223344" }, "amount": 100, "authorizationCode": "471223", "currency": "EUR", "frequency": "SINGLE", "id": "1", "receipt": "170531475", "source": "CARD_PRESENT", "terminal": "0001", "type": "AUTHORIZATION" }, "version": "43" }
处理点对点加密 (P2PE) 交易
P2PE 是支付卡行业标准委员会制定的标准。 使用 P2PE,敏感的卡数据会在读取卡数据后在终端立即加密。 由于您不必处理敏感数据,因此这会最大化持卡人在位交易的安全性,并会减少您的 PCI 合规义务。
如何处理 P2PE 交易:
- 在以下字段中提供来自终端的 DUKPT P2PE 数据:
sourceOfFunds.provided.card.p2pe.keySerialNumber
: 您必须提供终端提供的 DUKPT 密钥序列号。sourceOfFunds.provided.card.p2pe.payload
: 如果提供此字段,则不强制提供sourceOfFunds.provided.card.number
。 网关将从提供的支付数据中提取所有相关的卡详细信息。posTerminal.serialNumber
:sourceOfFunds.provided.card.p2pe.cardBin
sourceOfFunds.provided.card.p2pe.encryptionState
: 如果您未提供此字段,网关将默认此值为VALID
sourceOfFunds.provided.card.p2pe.initializationVector
: 如果终端未使用初始化向量来进行加密,可以忽略此字段。
- 提供强制字段。
- 提供可选字段(如果需要)。
下表汇总了 sourceOfFunds.provided.card.p2pe
参数组的字段约束。
如果字段 | 那么网关... | ||
---|---|---|---|
sourceOfFunds.provided.card.p2pe. initializationVector |
sourceOfFunds.provided.card.p2pe. keySerialNumber |
sourceOfFunds.provided.card.p2pe. payload | |
已提供 | 已提供 | 未提供 | 拒绝交易请求。 |
已提供 | 已在解密前或解密后提供,但使用纯文本 | 已提供 | 返回错误并生成安全日志条目。 |
交易响应
sourceOfFunds.provided.card.encryption
字段在交易响应中返回 DUKPT
(webServices Integration 43 及更高版本)以指示卡数据已加密。 sourceOfFunds.provided.card.p2pe
参数组中的字段不在响应中返回。
集成以使用在线 PIN
持卡人输入的在线 PIN 在 PIN 输入设备内在源头加密。 ARC Pay Gateway 在 webServices Integration 45 及更高版本中支持 DUKPT (Derived Unique Key Per Transaction) 加密的在线 PIN 数据。
- 在以下字段中提供来自终端的 DUKPT 加密的 PIN 数据:
sourceOfFunds.provided.card.pin.payload
sourceOfFunds.provided.card.pin.keySerialNumber
posTerminal.pinLengthCapability
sourceOfFunds.provided.card.pin.encryptionState
- 提供强制字段。
- 提供可选字段(如果需要)。
通过集成使用 mPOS
从 API v56 开始,网关支持在移动 POS (mPOS) 设备上接受付款。 要启用此功能,在 Verify、Authorize、Capture、Pay 或 Refund 交易中提供以下内容:
posTerminal.cardholderActivated
=MPOS_ACCEPTANCE_DEVICE
- 在
posTerminal.mobile.cardInputDevice
中提供读卡器的值BUILT_IN
: 只有内置非接触式读卡器的非专门设计的手机或平板电脑。 在这种情况下,posTerminal.pinEntryCapability 必须设置为 SOFTWARE_ONLINE_PIN_ONLY,否则网关将拒绝交易。INTEGRATED_DONGLE
: 带有集成读卡器的专用移动终端。 在这种情况下,posTerminal.pinEntryCapability 必须设置为 PIN_SUPPORTED 或 OFFLINE_PIN_ONLY,否则网关将拒绝交易。SEPARATE_DONGLE
: 带有单独读卡器的非专门设计的设备或专用移动终端。 在这种情况下,posTerminal.pinEntryCapability 必须设置为 PIN_SUPPORTED 或 OFFLINE_PIN_ONLY,否则网关将拒绝交易。
- 提供强制字段。
- 提供可选字段(如果需要)。
交易响应
如果付款人输入了无效的 PIN、超过了允许的 PIN 输入尝试次数,或在需要 PIN 来完成交易时跳过了 PIN 输入,PIN 身份验证可能失败。
在因 PIN 身份验证错误而导致授权失败的情况下,网关会返回特定的授权响应代码。 您可以在下一次交易中重新使用同一个订单 ID。
测试持卡人在位集成
您可以使用收单行专有的测试卡。