支付结果通知
- Endpoint:
POST /collectResultNotifyUrl - Tags: 收单
Description
支付完成后,PayerMax 会把相关支付结果通过数据流的形式发送给商户,商户需要接收处理,并按文档规范返回应答。 提示:该地址无需商户主动请求,以下request.body为payermax对订单状态的回调内容,商户收到回调后需要响应
Parameters
| Field | Type | Required | Description |
|---|---|---|---|
Content-Type (header) | string | Yes | |
sign (header) | string | Yes | 签名信息请参考技术文档 |
Request Body
| Field | Type | Required | Description | Enum |
|---|---|---|---|---|
code | string | Yes | 返回码,交易成功时,code:APPLY_SUCCESS 且status:SUCCESS; 交易失败,code会返回交易失败错误码 且status为FAILED或CLOSED。 | |
msg | string | Yes | 返回描述,交易成功时,msg:Success. 且status:SUCCESS; 交易失败,msg会返回交易失败错误msg 且status为FAILED或CLOSED。 | |
keyVersion | string | Yes | 密钥版本。当前值为:1 | |
appId | string | Yes | 商户app id | |
merchantNo | string | No | 商户Id | |
notifyTime | string | Yes | 通知时间,符合rfc3339规范,格式:yyyy-MM-dd'T'HH:mm:ss.SSSXXX | |
notifyType | string | Yes | 通知类型 PAYMENT | |
data | object | Yes | ||
data.outTradeNo | string | Yes | 商户订单号 | |
data.tradeToken | string | Yes | PayerMax交易流水号 | |
data.totalAmount | number | Yes | 商户传入的订单金额,金额的单位为元 | |
data.currency | string | Yes | 标价币种 | |
data.country | string | No | 用户支付的国家代码,大写字母 | |
data.status | string | Yes | 交易状态:SUCCESS-支付成功,FAILED -支付失败,CLOSED-关单 | SUCCESS, FAILED, CLOSED |
data.completeTime | string | Yes | 完成时间,utc+0时区 | |
data.paymentDetails | array[object] | No | 支付信息 | |
data.paymentDetails[].paymentMethodType | string | Yes | 支付方式类型,用户支付选择的支付方式,只有交易成功才会返回用户支付所选择的支付方式 | |
data.paymentDetails[].targetOrg | string | No | 目标机构,用户支付选择的目标机构,只有交易成功才会返回用户支付所选择的目标机构;支付方式为CARD的时候详见卡信息 | |
data.paymentDetails[].cardInfo | object | No | 卡信息 | |
data.paymentDetails[].cardInfo.cardOrg | string | No | 卡组织,只有交易成功且用户选择卡组织支付时才返回。 | |
data.paymentDetails[].cardInfo.country | string | No | 发卡国家 | |
data.paymentDetails[].cardInfo.cardType | string | No | 卡类型,DEBIT、CREDIT等。 | |
data.paymentDetails[].cardInfo.totalCardOrg | array[string] | No | 卡的所有卡组织,双标卡会返回两个。 | |
data.paymentDetails[].cardInfo.type | string | No | 卡性质。PAN为真实卡;NETWORK_TOKEN为虚拟卡,如APPLEPAY。 | |
data.paymentDetails[].cardInfo.source | string | No | 卡信息来源。CARD、APPLEPAY、GOOGLEPAY_PAN、GOOGLEPAY_CRYPTOGRAM、NETWORK_TOKEN | |
data.paymentDetails[].cardInfo.cardBinNo | string | No | 卡bin号。 | |
data.paymentDetails[].cardInfo.cardNumber | string | No | 卡号,掩码返回。 | |
data.paymentDetails[].cardInfo.cardHolderName | string | No | 持卡人姓名,掩码返回。 | |
data.paymentDetails[].cardInfo.cardLast4 | string | No | 真实卡号后四位。 | |
data.paymentDetails[].cardInfo.cardExpirationYear | string | No | 卡有效年。 | |
data.paymentDetails[].cardInfo.cardExpirationMonth | string | No | 卡有效月。 | |
data.paymentDetails[].cardInfo.cardIdentifierNo | string | No | 卡号,当paymentMethod为CARD时掩码返回 | |
data.paymentDetails[].cardInfo.cardIdentifierName | string | No | 卡姓名,当paymentMethod为CARD时掩码返回 | |
data.paymentDetails[].cardInfo.paymentTokenID | string | No | 绑卡支付场景下,用于支付的授权ID,默认有效期为卡有效期,可通过【removePaymentToken】接口置为无效。 | |
data.paymentDetails[].cardInfo.threeDSResult | object | No | 3ds结果 | |
data.paymentDetails[].cardInfo.threeDSResult.threeDSVersion | string | No | 3ds版本 1.0.2, 2.1.0, 2.2.0 | |
data.paymentDetails[].cardInfo.threeDSResult.enrolled | string | No | Status of Authentication eligibility. Y - Yes, Bank is participating in 3-D Secure protocol and will return the ACSUrl N - No, Bank is not participating in 3-D Secure protocol U - Unavailable, The DS or ACS is not available for authentication at the time of the request B - Bypass, Merchant authentication rule is triggered to bypass authentication in this use case. (3DS Flex premium only) | Y, U, B |
data.paymentDetails[].cardInfo.threeDSResult.authenticationStatus | string | No | Transactions status result identifier. Y - Successful Authentication N - Failed Authentication U - Unable to Complete Authentication A - Successful Attempts Transaction R - Authentication Rejected (Merchant must not submit for authorisation) | Y, N , U , A , R |
data.paymentDetails[].cardInfo.threeDSResult.eci | string | Yes | Electronic Commerce Indicator (ECI). Possible Values: 02 or 05 - Fully Authenticated Transaction 01 or 06 - Attempted Authentication Transaction 00 or 07 - Non 3-D Secure Transaction Mastercard - 02, 01, 00 Visa - 05, 06, 07 | |
data.paymentDetails[].cardInfo.threeDSResult.dsTransactionId | string | No | the Directory Server (DS)分配的唯一标识 | |
data.paymentDetails[].cardInfo.threeDSResult.cavv | string | No | Cardholder Authentication Verification Value (CAVV) Authentication Verification Value (AVV) Universal Cardholder Authentication Field (UCAF) | |
data.paymentDetails[].cardInfo.threeDSResult.xid | string | No | 身份验证结果标识 | |
data.paymentDetails[].cardInfo.avsResult | string | No | avs结果 | |
data.paymentDetails[].paymentTokenID | string | No | 绑卡支付场景下,用于支付的授权ID,默认有效期为卡有效期,可通过【removePaymentToken】接口置为无效。 | |
data.paymentDetails[].exchangeRate | string | No | 标价币种转换为支付币种的汇率 | |
data.paymentDetails[].payCurrency | string | No | 支付币种 | |
data.paymentDetails[].payAmount | number | No | 支付金额 | |
data.paymentDetails[].additionalData | object | No | 包含有关付款的更多详细信息 | |
data.paymentDetails[].additionalData.rrn | string | No | 交易检索号 | |
data.paymentDetails[].additionalData.authCode | string | No | 发卡行授权码 | |
data.fees | object | No | 费用信息,支付成功且存在费用时才返回 | |
data.fees.merFee | object | No | 商户费用 | |
data.fees.merFee.url | string | Yes | 发票地址,打开地址可预览发票 | |
data.fees.merFee.amount | string | Yes | 费用金额 | |
data.fees.merFee.currency | string | Yes | 费用币种 | |
data.reference | string | No | 商户自定义附加数据,回调中原样返回 | |
data.channelNo | string | No | 渠道订单号 | |
data.thirdChannelNo | string | No | 三方单号 | |
data.paymentCode | string | No | VA单号 | |
data.cashierCountry | string | No | 收银台模式下,在收银台上发起支付的国家。支付成功时返回。 | |
data.issuerResponseCode | string | No | 发卡行标准错误码 | |
data.issuerResponseMsg | string | No | 发卡行标准错误描述 |
Responses
200 — ## 错误码
| 分类 | 结果码 | 结果描述 |
|---|---|---|
| REQUEST_TIMEOUT | Request timeout or didn't get result, If you have finished to pay, pls wait for the result. | 请求超时;请联系PayerMax |
| UNEXPECTED_ERROR | No further information for the error, plz try it later. | 未知错误;请联系PayerMax |
| AMOUNT_LIMIT_MINIMUM | The order amount is lower than the minimum limit of the payment method. | 最小金额限制 |
| AMOUNT_LIMIT_MAXIMUM | The order amount exceeds the maximum limit of the payment method. | 最大金额限制 |
| AMOUNT_LIMIT | The amount doesn't match the payment method requirement. | 金额限制 |
| PAYMENT_PROCESSING | The payment is processing, pls check the result. | 支付处理中;请稍后重试 |
| ORDER_CLOSED | This order has been closed. | 订单关闭 |
| BALANCE_INSUFFICIENT | Insufficient balance to pay, please confirm payment account available balance. | 余额不足 |
| OTP_VERIFY_LIMIT | OTP verification exceeds limit. | OTP验证超过限制 |
| OTP_VERIFY_FAILED | OTP verification failed. | OTP验证失败 |
| OVER_VERIFY_LIMIT | Exceeded the number of verifications. | 超过验证次数 |
| BARCODE_REFRESH_LIMIT | Over barcode refresh times. | Barcode刷新限制 |
| BARCODE_REFRESH_FAILED | Barcode refresh failed. | Barcode刷新失败 |
| CARD_INVALID | Make sure the card number is correct. | 无效卡号 |
| CARD_EXPIRE_DATE_INVALID | Invalid card number validity period | 无效卡号有效期 |
| CARD_HOLDER_NAME_INVALID | Invalid cardholder name | 无效持卡人姓名 |
| CVV_INVALID | Cvv is incorrect, pls check. | 无效CVV |
| UNSUPPORT_CARD | This card don't support, please change another card. | 卡不支持 |
| ACCOUNT_INVALID | Your account is invalid or not active, please confirm and re-enter. | 无效账号 |
| PHONE_NUM_INVALID | The phone number is invalid, pls check and re-enter. | 无效的电话号码 |
| UPI_INVALID | UPI is incorrect. | 无效UPI |
| PIN_VERIFY_LIMIT | Pin verification exceeds limit | Pin验证超过限制 |
| PIN_INVALID | Pin is invalid | Pin无效 |
| BANKCODE_INVALID | Invalid bank card number. | 无效银行卡号 |
| ID_NUM_INVALID | Invalid ID number | 无效的证件号 |
| EMAIL_INVALID | Your email is invalid, or your account is not active, please confirm and re-enter. | 无效的Email |
| DOCUMENT_INVALID | Invalid document. | 无效的文档 |
| TCK_INVALID | TC Kimlik No. is incorrect. | 无效的TC Kimlik No. |
| DATE_INVALID | The data format is error, please check. | 无效的日期 |
| PAYEE_NAME_INVALID | Your name is invalid, or does not match, please confirm and re-enter. | 无效的付款人姓名 |
| REMARK_INVALID | Invalid remark | 无效的remark |
| CNIC_INVALID | The CNIC is incorrect, pls confirm and re-enter. | 无效的CNIC |
| ACCOUNT_BLOCKED | Payer account/card blocked or frozen. Pls confirm payment account/card status. | 账号被锁定/冻结 |
| PAYMENT_CANCELED | payment canceled. | 用户在第三方支付取消 |
| PAYMENT_TOKEN_ID_INVALID | PaymentTokenID is invalid. Please confirm if it has been authorized and bound | paymentTokenId不合法,请检查输入是否正确,或已经解绑 |
| ACCOUNT_VALIDATION_INVALID | Please complete the account verification firstly. | 账户未完成验证,请先完成账户验证 |
| PAYMENT_PROCESSING_BANKTRANSFER | The previous payment is still processing, please make sure that you have made the bank transfer. Otherwise, please wait for 10 minutes to initiate a new request. | 上一笔支付处理中,请确认已完成银行转账,否则请等待10分钟后重试 |
| REQUEST_PARAM_INVALID | [amount.value] must be greater than zero | 请求参数无效,金额必须大于零 |
| INSUF_BAL_FALLBACK | Your account balance is insufficient to cover the amount. Please check your account balance. | 账户余额不足,请检查账户余额 |
| ONLY_ONE_AUTH_CHANNEL_ALLOWED | only one authorization channel is allowed | 仅允许一个授权渠道 |
| ISSUER_PAYMENT_REJECTED | Transaction failed at issuer end due to risk control. Please try using a different card or contact your issuer for more detail. | 交易被发卡行风控拒绝,请更换银行卡或联系发卡行 |
| AMOUNT_LIMIT | The amount exceeds user amount limit. | 用户金额限制 |
| AMOUNT_LIMIT | The amount exceeds the limit for per transaction limit. | 单笔交易金额限制 |
| AMOUNT_LIMIT | The amount exceeds the limit for the day. | 日交易金额限制 |
| CARD_INVALID | Expired card. | 卡已过期 |
| CARD_INVALID | Card scheme is not supported. | 卡组织不支持 |
| CARD_INVALID | Only support the card which issue by local bank, pls change local card. | 仅支持本地银行卡 |
| OTP_VERIFY_FAILED | OTP verify failed. | OTP验证失败 |
| PAYMENT_FAILED | Transaction declined. | 交易被拒绝 |
| PAYMENT_FAILED | There is no channel to support the payment. | 无可用支付渠道 |
| PAYMENT_FAILED | Payment was not completed on time. | 支付超时未完成 |
| PAYMENT_FAILED | Provider failed to process. | 支付失败 |
| AUTHENTICATE_FAILED | Your payment was declined due to authentication failure. Please try using a different card or contact your issuer for more detail. | 授权失败 |
| AUTH_EXPIRED | The authorization has expired, pls rebind. | 授权过期 |
| AUTH_FAILED | Authorization failed. | 授权失败或不存在 |
| RISK_FAILED | This transaction was automatically blocked due to identified risk. | 该交易因存在确认性风险被拦截 |
| RISK_FAILED | The payment has reached the security limit. Please advise the user to try another payment method or attempt the transaction again later. | 用户支付已达到安全限额/限次,建议用户尝试其他支付方式 |
| RISK_FAILED | The payment has exhibited suspicious activity. We suggest that the user use a local card or disable their VPN before trying again. | 检测到支付行为异常,建议用户使用本地银行卡或关闭VPN后重试 |
| RISK_FAILED | The payment was declined due to unusual activity from the user. We recommend changing to a different payment method and attempting the transaction again. | 由于交易风险较高,支付已被拒绝,建议用户更换其他支付方式 |
| ISSUER_PAYMENT_REJECTED | Device IP restriction,please make sure your VPN is turned off when making the payment for security reason. | 设备IP受限,请关闭VPN后重试 |
| PAYMENT_REJECTED | Transaction failed at processor end due to risk control.Please try using a different payment method/card. | nan |
| RISK_BLACK_LIST_FAILED | The payment was declined due to high risk with the payment. | 此笔交易命中商户自身侧黑名单,黑名单详情可登录MMC查询 |
| ISSUER_PAYMENT_REJECTED | Transaction failed at issuer end due to risk control. Please contact your payment method issuer for more detail. | 交易被发卡行拒绝,详情请用户咨询发卡行确认 |
| Field | Type | Required | Description |
|---|---|---|---|
code | string | Yes | 仅可响应 ‘SUCCESS’(仅代表成功收到通知,不代表订单状态) |
msg | string | Yes | 响应 ‘Success’(仅代表成功收到通知,不代表订单状态) |
Enum Reference
data.status
SUCCESSFAILEDCLOSED
data.paymentDetails[].cardInfo.threeDSResult.enrolled
YUB
data.paymentDetails[].cardInfo.threeDSResult.authenticationStatus
YNUAR
