> ## Documentation Index
> Fetch the complete documentation index at: https://devzone.nayax.com/llms.txt
> Use this file to discover all available pages before exploring further.

# 退款

Cortina DQR 使用 `Refund` 命令通知集成方有关退款请求的信息,以便集成方与 Cortina 支付提供商发起退款。

## 如何触发退款

您可以通过以下两种方式触发退款请求:

* 在 Nayax Core 的动态交易监控器中。
* 通过 Lynx API。

### 通过动态交易监控器

<Warning>
  **需要 Refunds Admin 角色**

  在动态交易监控器中申请和批准退款需要 Refunds Admin 角色。请联系您的集成支持工程师为您分配该角色。
</Warning>

<Steps>
  <Step title="申请退款">
    右键单击相关交易,然后选择**申请退款**。

    <Frame>
      <img src="https://mintcdn.com/nayax-44d6e37b/XyvrHwtHlwko_UeF/images/docs/dynamicqr-refund/request-refund.png?fit=max&auto=format&n=XyvrHwtHlwko_UeF&q=85&s=3ab1f61100eb51215c2e8eec488b3b7d" alt="Nayax Core 交易右键菜单,其中突出显示了“申请退款”" width="291" height="193" data-path="images/docs/dynamicqr-refund/request-refund.png" />
    </Frame>
  </Step>

  <Step title="批准退款">
    再次右键单击同一笔交易,然后选择**批准/拒绝退款**。

    <Frame>
      <img src="https://mintcdn.com/nayax-44d6e37b/XyvrHwtHlwko_UeF/images/docs/dynamicqr-refund/approve-refund.png?fit=max&auto=format&n=XyvrHwtHlwko_UeF&q=85&s=c836c566f1489c9ff7cccf6cf2beb1d4" alt="Nayax Core 交易右键菜单,其中突出显示了“批准/拒绝退款”" width="241" height="186" data-path="images/docs/dynamicqr-refund/approve-refund.png" />
    </Frame>
  </Step>
</Steps>

随后,Nayax 会按下文所述,向您的端点发送 `Refund` 命令。

### 通过 Lynx API

先调用 [Request a Payment Refund](/reference/lynx/payment/request-a-payment-refund) 端点,再调用 [Approve Payment Refund](/reference/lynx/payment/approve-payment-refund) 端点。

## 要求

Nayax's servers send a POST request to your configured `Refund` endpoint, which would be of the following format:

`(customer's URL)/Cortina/DynamicQR/Refund`

该负载（payload）包含读卡操作的完整结果：

```json theme={null}
{
  "ReasonCode": 0,
  "ReasonText": "string",
  "BasicInfo": {
    "TransactionId": "N99O4XURDQYJZIK4OTCAWF1RHHA40TZWVCRB",
    "NayaxTransactionId": 3584697384,
    "Amount": 5,
    "CurrencyCode": "ILS",
    "CurrencyNumeric": "376",
    "SiteId": 1,
    "MachineAuTime": "071221132914",
    "TimeoutMS": 15000,
    "IsProductSelected": true,
    "PaymentMethodID": 1,
    "BillingProviderId": 1,
    "AuditNumber": 342,
    "NayaxRRN": "111111",
    "IsDeferredAuthorization": true,
    "AgeLimitation": 18,
    "IsSoftDeclineCompletion": true,
    "TransitElement": {
      "TransitTransactionType": 1,
      "DenyListIndication": 0
    }
  },
  "DeviceInfo": {
    "HwSerial": "0434324119376526",
    "FWVersion": "4.0.0.22-RC01 - Aug 25 2021",
    "Type": "Onyx"
  },
  "MachineInfo": {
    "Id": 106791869,
    "Name": "Itai_TestPayCC V2",
    "ExternalId": "OperatorExternalID",
    "Type": "machine type",
    "TerminalId": "8888888844",
    "DecimalPlace": 2,
    "Offset": "3.00",
    "GroupId": "String",
    "OperatorId": 2001537302,
    "Region": "EU",
    "City": "Abbeville",
    "ZipCode": "22448Z",
    "Country": {
      "Name": "UNITED STATES",
      "NumericCode": "840",
      "Alpha2Code": "US",
      "Alpha3Code": "USA",
      "Intra": "Europe"
    },
    "GeoLocation": {
      "State": "Alabama",
      "City": "Zambezi",
      "CountryCode": "ZM",
      "ZipCode": "234234",
      "Address": "River",
      "Latitude": 51.0003431,
      "Longitude": 23.745245
    }
  },
  "ActorInfo": {
    "Id": 2001537302,
    "Name": "TestPayCC V2 OP",
    "OperatorId": 2001537302,
    "OperatorName": "TestPayCC V2 OP _ Sub Merchant",
    "MerchantId": 999999888885,
    "DynamicURL": "https://www.nayax.com/alternativeURL",
    "Country": {
      "Name": "UNITED STATES",
      "NumericCode": "840",
      "Alpha2Code": "US",
      "Alpha3Code": "USA",
      "Intra": "Europe"
    },
    "GeoLocation": {
      "State": "Alabama",
      "City": "Zambezi",
      "CountryCode": "ZM",
      "ZipCode": "234234",
      "Address": "River",
      "Latitude": 51.0003431,
      "Longitude": 23.745245
    },
    "MCC": 455,
    "SubMerchantId": 999999888886
  },
  "CustomData": {
    "DirectActor": "String",
    "Operator": "String",
    "Distributor": "String",
    "Actor": "String",
    "Machine": "String",
    "SoftDecline": "String"
  },
  "PaymentInfo": {
    "SrvTranId": "3584697388",
    "AuthCode": "333333",
    "AuthAmount": 5.5,
    "SettAmount": 5.5,
    "RRN": "111111",
    "Token": "string",
    "AuthDateTime": "071221133300",
    "SettDateTime": "071221133330",
    "TraceNumber": "4444",
    "AuthSource": "string",
    "AdditionalData": "string",
    "IsGatewayTimeout": false,
    "ProviderExternalData": "string",
    "InitiateTranReference": 11223344,
    "IsRevalueCard": false
  }
}
```

### 请求参数

下表描述了请求正文中包含的参数：

<table>
  <thead>
    <tr>
      字段
      类型
      描述
    </tr>
  </thead>

  <tbody>
    <tr>
      交易标识符和参考信息
    </tr>

    <tr>
      `TransactionId`
      String(36)

      <td style={{ textAlign: "left" }}>
        此交易的**唯一标识符**。

        <ul>
          如果使用了 `/StartSession`，则回显其加密后的 ID。
          否则，将由 Nayax Engine 生成此值。
        </ul>
      </td>
    </tr>

    <tr>
      `NayaxTransactionId`
      Int(64)

      <td style={{ textAlign: "left" }}>
        **Nayax 内部交易的唯一 ID** ，在后续请求中会重复出现。
      </td>
    </tr>

    <tr>
      `SrvTranId`
      String

      <td style={{ textAlign: "left" }}>
        **集成商的内部交易 ID** 。

        <ul>
          条件性：如果未使用 `/StartSession`，则为必填字段。
          如果使用了 /StartSession，则该字段应为空，或回显交易 ID（Transaction ID）。
        </ul>
      </td>
    </tr>

    <tr>
      `RRN`
      String

      <td style={{ textAlign: "left" }}>
        **参考检索编号（RRN）** 。建议向**消费者/持卡人**公开，以便获得支持。
      </td>
    </tr>

    <tr>
      `AuthCode`
      String(40)

      <td style={{ textAlign: "left" }}>
        **外部授权码**（通常来自发卡行的银行）。
      </td>
    </tr>

    <tr>
      `Token`
      String(256)

      <td style={{ textAlign: "left" }}>
        交易的唯一令牌。**仅供 Nayax 内部使用。**
      </td>
    </tr>

    <tr>
      `TraceNumber`
      String

      <td style={{ textAlign: "left" }}>
        追踪编号。**仅供Nayax内部使用。**
      </td>
    </tr>

    <tr>
      `AuthSource`
      String(5)

      <td style={{ textAlign: "left" }}>
        仅供 Nayax 内部使用。
      </td>
    </tr>

    <tr>
      `InitiateTranReference`
      String

      <td style={{ textAlign: "left" }}>
        条件性字段:反映预付忠诚卡重试时的原始 Nayax 交易 ID。以 JSON 格式的字符串提供。
      </td>
    </tr>

    <tr>
      财务和时间详情
    </tr>

    <tr>
      `Amount`
      Double

      <td style={{ textAlign: "left" }}>
        **付款金额**（以美分为单位，最多保留 3 位小数）。

        <ul>
          示例：1 分 = `0.01`。
          注意：没有小数位的货币仍以 double 类型表示（例如，234 JYN = `234.0`）。
        </ul>
      </td>
    </tr>

    <tr>
      `AuthAmount`
      Double

      <td style={{ textAlign: "left" }}>
        `/Authorization` 请求中所请求的原始金额。是否显示取决于 `/Authorization` 的响应。
      </td>
    </tr>

    <tr>
      `SettAmount`
      Double

      <td style={{ textAlign: "left" }}>
        `/Settlement` 或 `/Sale` 流程中请求的原始金额。与 Authorization 命令无关。
      </td>
    </tr>

    <tr>
      `AuthDateTime`
      String

      <td style={{ textAlign: "left" }}>
        `/Authorization` 发生的日期和时间。格式：`ddMMyyHHmmss`。
      </td>
    </tr>

    <tr>
      `SettDateTime`
      Double

      <td style={{ textAlign: "left" }}>
        结算日期/时间。与授权命令无关。
      </td>
    </tr>

    <tr>
      `CurrencyCode`
      String(3)

      <td style={{ textAlign: "left" }}>
        **ISO 4217 Alpha-3**格式的货币代码。
      </td>
    </tr>

    <tr>
      `CurrencyNumeric`
      String(3)

      <td style={{ textAlign: "left" }}>
        **ISO 4217 数字-3**格式的货币代码。
      </td>
    </tr>

    <tr>
      卡片及支付详情
    </tr>

    <tr>
      `CardNumber`
      String

      <td style={{ textAlign: "left" }}>
        根据交易类型提供的卡片信息：

        <ul>
          对于卡片在场（card-present）的 Authorization/Sale，为完整的 Track 2 数据。
          对于其他交易类型，仅为卡号（Card PAN）。
        </ul>
      </td>
    </tr>

    <tr>
      `EntryMode`
      String(4)

      <td style={{ textAlign: "left" }}>
        卡片信息的读取方式：

        <ul>
          MCR：磁条读取（刷卡）
          CON：接触式芯片（插卡）
          CLS：非接触式芯片（挥卡）
          NFC：手机/移动设备非接触式
          QR：由 DOT 读取的二维码
          有关特定边缘情况，请咨询 Nayax POC。
        </ul>
      </td>
    </tr>

    <tr>
      `ExpYear`
      String

      <td style={{ textAlign: "left" }}>
        卡片到期年份（ **YY**格式）。**条件性**（仅当接口为 1 或 10 时）。
      </td>
    </tr>

    <tr>
      `ExpMonth`
      String

      <td style={{ textAlign: "left" }}>
        卡片到期月份（ **MM**格式）。**条件性**（仅当接口为 1 或 10 时）。
      </td>
    </tr>

    <tr>
      `EMVData`
      String

      <td style={{ textAlign: "left" }}>
        EMV标签数据采用**TLV（标签长度-值）格式**。
      </td>
    </tr>

    <tr>
      `IDNumber`
      String

      <td style={{ textAlign: "left" }}>
        持卡人**ID号码**。
      </td>
    </tr>

    <tr>
      `RandomNumber`
      String

      <td style={{ textAlign: "left" }}>
        暂无更多信息。
      </td>
    </tr>

    <tr>
      `PrimaryId`
      String

      <td style={{ textAlign: "left" }}>
        主要品牌 ID。
      </td>
    </tr>

    <tr>
      `PrimaryDescription`
      String

      <td style={{ textAlign: "left" }}>
        主要品牌描述。
      </td>
    </tr>

    <tr>
      `SecondaryId`
      String

      <td style={{ textAlign: "left" }}>
        次要品牌 ID。
      </td>
    </tr>

    <tr>
      `SecondaryDescription`
      String

      <td style={{ textAlign: "left" }}>
        次要品牌描述。
      </td>
    </tr>

    <tr>
      `CardHolderName`
      String

      <td style={{ textAlign: "left" }}>
        持卡人姓名。
      </td>
    </tr>

    <tr>
      `IsRevalueCard`
      Bool

      <td style={{ textAlign: "left" }}>
        指示该卡是否**允许重新估值**。
      </td>
    </tr>

    <tr>
      系统和外部数据
    </tr>

    <tr>
      `IsGatewayTimeout`
      Bool

      <td style={{ textAlign: "left" }}>
        指示是否发生**网关超时**（响应中有效）。
      </td>
    </tr>

    <tr>
      `AdditionalData`
      String

      <td style={{ textAlign: "left" }}>
        附加数据字符串， **JSON 格式**。请联系 Nayax TPOC 进行定义。
      </td>
    </tr>

    <tr>
      `ProviderExternalData`
      String

      <td style={{ textAlign: "left" }}>
        来自提供商的外部数据，**格式为 JSON 字符串**。
      </td>
    </tr>
  </tbody>
</table>

## 回复

客户的支付方式会向 Nayax 服务器发送的退款响应。负载应如下所示：

```json theme={null}
{
  "Status": {
    "Verdict": "string",
    "Code": 0,
    "StatusMessage": "string",
    "CustomDeclineCode": "string"
  },
  "PaymentInfo": {
    "SrvTranId": "3584697388",
    "AuthCode": "333333",
    "AuthAmount": 5.5,
    "SettAmount": 5.5,
    "RRN": "111111",
    "Token": "string",
    "AuthDateTime": "071221133300",
    "SettDateTime": "071221133330",
    "TraceNumber": "4444",
    "AuthSource": "string",
    "AdditionalData": "string",
    "IsGatewayTimeout": false,
    "ProviderExternalData": "string",
    "InitiateTranReference": 11223344,
    "IsRevalueCard": false
  }
}
```

### 响应参数

下表描述了 API 响应中返回的字段：

<table>
  <thead>
    <tr>
      字段
      类型
      描述
    </tr>
  </thead>

  <tbody>
    <tr>
      交易状态及错误代码
    </tr>

    <tr>
      `Verdict`
      String

      <td style={{ textAlign: "left" }}>
        请求的最终状态。必须是以下常量字符串值之一：

        <ul>
          <li>**`Approved`**</li>
          <li>**`Declined`**</li>
        </ul>
      </td>
    </tr>

    <tr>
      `Code`
      Int(32)

      <td style={{ textAlign: "left" }}>
        拒绝代码（Decline Code）。条件性字段——仅当 `Verdict` 为 “Declined” 时才会出现。有效代码包括：

        <ul>
          1:余额不足
          5:疑似欺诈
          6:一般系统故障
          7:金额无效
          8/998:格式/解析错误或验证错误
          992:超时异常
          997:缺少必填参数
          999:一般异常
          其他状态及内部错误请参阅完整列表。
        </ul>
      </td>
    </tr>

    <tr>
      `StatusMessage`
      String(255)

      <td style={{ textAlign: "left" }}>
        包含**交易状态消息**或有关结果的其他不同数据的自由文本字段。
      </td>
    </tr>

    <tr>
      `CustomDeclineCode`
      String

      <td style={{ textAlign: "left" }}>
        用于指定自定义拒绝代码（例如与 Soft Decline 或 Switch Interface 相关的代码）。可能反映收单机构（acquirer）的响应代码。
      </td>
    </tr>

    <tr>
      财务和时间详情
    </tr>

    <tr>
      `AuthAmount`
      Double

      <td style={{ textAlign: "left" }}>
        在 `/GenerateQR` 请求中所请求的原始金额。
      </td>
    </tr>

    <tr>
      `SettAmount`
      Double

      <td style={{ textAlign: "left" }}>
        在 `/Settlement` 或 `/Sale` 流程中所请求的原始金额。取决于 `/Inquiry` 请求的条件性字段。
      </td>
    </tr>

    <tr>
      `AuthDateTime`
      String

      <td style={{ textAlign: "left" }}>
        `/Authorization` 或 `/Sale` 发生的日期和时间。格式:`ddMMyyHHmmss`。
      </td>
    </tr>

    <tr>
      `SettDateTime`
      String

      <td style={{ textAlign: "left" }}>
        `/Settlement` 或 `/Sale` 发生的日期和时间。格式:`ddMMyyHHmmss`。
      </td>
    </tr>

    <tr>
      交易标识符和参考信息
    </tr>

    <tr>
      `SrvTranId`
      String

      <td style={{ textAlign: "left" }}>
        **集成商的内部交易 ID** 。

        <ul>
          条件性：如果未使用 `/StartSession`，则为必填字段。
          如果使用了 /StartSession，则该字段应为空，或回显交易 ID（Transaction ID）。
        </ul>
      </td>
    </tr>

    <tr>
      `AuthCode`
      String(40)

      <td style={{ textAlign: "left" }}>
        **外部授权码**（通常来自发卡行的银行）。
      </td>
    </tr>

    <tr>
      `RRN`
      String

      <td style={{ textAlign: "left" }}>
        检索参考号（RRN）。

        <ul>
          <li>Used as External Transaction ID for external parties (e.g., Card schemes).</li>
          <li>Highly recommended to be visible to the **consumer/card holder** for support.</li>
          <li>**Note:** The RRN must **match** the preceding value sent in the `/GenerateQR` response for an `/Inquiry` request.</li>
        </ul>
      </td>
    </tr>

    <tr>
      `Token`
      String(256)

      <td style={{ textAlign: "left" }}>
        交易的唯一令牌。**仅供 Nayax 内部使用。**
      </td>
    </tr>

    <tr>
      `TraceNumber`
      String

      <td style={{ textAlign: "left" }}>
        追踪编号。**仅供Nayax内部使用。**
      </td>
    </tr>

    <tr>
      `AuthSource`
      String(5)

      <td style={{ textAlign: "left" }}>
        仅供 Nayax 内部使用。
      </td>
    </tr>

    <tr>
      `InitiateTranReference`
      Int(64)

      <td style={{ textAlign: "left" }}>
        **条件**：反映预付会员卡重新尝试的**原始 Nayax 交易 ID** 。
      </td>
    </tr>

    <tr>
      忠诚度及系统详情
    </tr>

    <tr>
      `RegularCreditType`
      Int(32)

      <td style={{ textAlign: "left" }}>
        定义 `RegularCredit` 的计量单位（枚举值）：

        <ul>
          0：信用额度以交易次数计（count）。
          1：信用额度以金额计（currency）。
        </ul>
      </td>
    </tr>

    <tr>
      `RegularCredit`
      Double

      <td style={{ textAlign: "left" }}>
        根据 `RegularCreditType` 计算的常规信用额度值（金额或交易次数）。使用小数位数 2。
      </td>
    </tr>

    <tr>
      `RevalueCredit`
      Int(32)

      <td style={{ textAlign: "left" }}>
        **重新估值信用额度**。**仅当关联的卡配置为可重新估值时才会显示**。
      </td>
    </tr>

    <tr>
      `IsRevalueCard`
      Bool

      <td style={{ textAlign: "left" }}>
        指示该卡是否**允许重新估值**。
      </td>
    </tr>

    <tr>
      `IsGatewayTimeout`
      Bool

      <td style={{ textAlign: "left" }}>
        指示是否发生**网关超时**（响应中有效）。
      </td>
    </tr>

    <tr>
      `ProviderExternalData`
      String

      <td style={{ textAlign: "left" }}>
        来自提供商的外部数据，**格式为 JSON 字符串**。
      </td>
    </tr>

    <tr>
      `AdditionalData`
      String

      <td style={{ textAlign: "left" }}>
        以 JSON 格式表示的附加数据字符串。
      </td>
    </tr>
  </tbody>
</table>


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.