支付结果通知
- Endpoint:
POST /collectResultNotifyUrl - Tags: 收单
Description
支付完成后,PayerMax 会把相关支付结果通过数据流的形式发送给商户,商户需要接收处理,并按文档规范返回应答。 提示:该地址无需商户主动请求,以下request.body为payermax对订单状态的回调内容,商户收到回调后需要响应
Parameters
| Field | In | Type | Required | Constraints | Description |
|---|---|---|---|---|---|
Content-Type | header | string | Yes | ||
sign | header | string | Yes | 签名信息请参考技术文档 |
Parameter Examples
Content-Type:"application/json"sign:"FPFVT3o227JrFRbqu19boZCpVVTF9KznxyRawUmxpfXilHV/0yK46haPhAjNu1hPUMy7Vw/ILXhfzffNm4Fj0apWknlTY9OJxnSoQxS9BTFtc61tn5yV1q69x/kkBl82/qwg+XTJ4fOzy7Mar3VaC1E2PlDA6RkkKBUyNE6RYgsdB+Su7an4+4HVTNAnoe74WyvBgxTLMNg28igBTdqxaO3w/UBY6ObVp7vkqkQGdL1Y+HgmMYaAVwrM3+ALWGId0sJ+YqTY4WJ+0xCRGhaSnybiIjZsQEYyID68WNUfuavDLDsEhaMm/HfQvf5p0R1Ltovp3wwJnEbQcjY458iX5A=="
Request Body
Content-Type: application/json
| Field | Type | Required | Constraints | Description | Enum |
|---|---|---|---|---|---|
code | string | Yes | maxLength: 32 | 返回码,交易成功时,code:APPLY_SUCCESS 且status:SUCCESS; 交易失败,code会返回交易失败错误码 且status为FAILED或CLOSED。 | |
msg | string | Yes | maxLength: 256 | 返回描述,交易成功时,msg:Success. 且status:SUCCESS; 交易失败,msg会返回交易失败错误msg 且status为FAILED或CLOSED。 | |
keyVersion | string | Yes | maxLength: 8 | 密钥版本。当前值为:1 | |
appId | string | Yes | maxLength: 64 | 商户app id | |
merchantNo | string | No | maxLength: 15 | 商户Id | |
notifyTime | string | Yes | maxLength: 32 | 通知时间,符合rfc3339规范,格式:yyyy-MM-dd'T'HH:mm:ss.SSSXXX | |
notifyType | string | Yes | maxLength: 16 | 通知类型 PAYMENT | |
data | object | Yes | |||
data.outTradeNo | string | Yes | maxLength: 64 | 商户订单号 | |
data.tradeToken | string | Yes | maxLength: 64 | PayerMax交易流水号 | |
data.totalAmount | number | Yes | 商户传入的订单金额,金额的单位为元 | ||
data.currency | string | Yes | maxLength: 3 | 标价币种 | |
data.country | string | No | maxLength: 2 | 用户支付的国家代码,大写字母 | |
data.status | string | Yes | maxLength: 32 | 交易状态: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 | maxLength: 32 | 目标机构,用户支付选择的目标机构,只有交易成功才会返回用户支付所选择的目标机构;支付方式为CARD的时候详见卡信息 | |
data.paymentDetails[].cardInfo | object | No | 卡信息 (如果需要返回请联系技术支持) | ||
data.paymentDetails[].cardInfo.cardOrg | string | No | maxLength: 32 | 卡组织,只有交易成功且用户选择卡组织支付时才返回。 | |
data.paymentDetails[].cardInfo.country | string | No | maxLength: 2 | 发卡国家 | |
data.paymentDetails[].cardInfo.cardType | string | No | maxLength: 32 | 卡类型,DEBIT、CREDIT等。 | |
data.paymentDetails[].cardInfo.totalCardOrg | array[string] | No | 卡的所有卡组织,双标卡会返回两个。 | ||
data.paymentDetails[].cardInfo.type | string | No | maxLength: 32 | 卡性质。PAN为真实卡;NETWORK_TOKEN为虚拟卡,如APPLEPAY。 | |
data.paymentDetails[].cardInfo.source | string | No | maxLength: 32 | 卡信息来源。CARD、APPLEPAY、GOOGLEPAY_PAN、GOOGLEPAY_CRYPTOGRAM、NETWORK_TOKEN | |
data.paymentDetails[].cardInfo.cardBinNo | string | No | maxLength: 16 | 卡bin号。 | |
data.paymentDetails[].cardInfo.cardNumber | string | No | maxLength: 32 | 卡号,掩码返回。 | |
data.paymentDetails[].cardInfo.cardHolderName | string | No | maxLength: 128 | 持卡人姓名,掩码返回。 | |
data.paymentDetails[].cardInfo.cardLast4 | string | No | maxLength: 4 | 真实卡号后四位。 | |
data.paymentDetails[].cardInfo.cardExpirationYear | string | No | maxLength: 2 | 卡有效年。 | |
data.paymentDetails[].cardInfo.cardExpirationMonth | string | No | maxLength: 2 | 卡有效月。 | |
data.paymentDetails[].cardInfo.cardIdentifierNo ⚠️ | string | No | maxLength: 19 | 卡号,当paymentMethod为CARD时掩码返回 | |
data.paymentDetails[].cardInfo.cardIdentifierName ⚠️ | string | No | maxLength: 192 | 卡姓名,当paymentMethod为CARD时掩码返回 | |
data.paymentDetails[].cardInfo.paymentTokenID ⚠️ | string | No | maxLength: 64 | 绑卡支付场景下,用于支付的授权ID,默认有效期为卡有效期,可通过【removePaymentToken】接口置为无效。 | |
data.paymentDetails[].cardInfo.threeDSResult | object | No | 3ds结果 | ||
data.paymentDetails[].cardInfo.threeDSResult.threeDSVersion | string | No | maxLength: 16 | 3ds版本 1.0.2, 2.1.0, 2.2.0 | |
data.paymentDetails[].cardInfo.threeDSResult.enrolled | string | No | maxLength: 1 | 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 | maxLength: 1 | 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 | maxLength: 2 | 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 | maxLength: 64 | the Directory Server (DS)分配的唯一标识 | |
data.paymentDetails[].cardInfo.threeDSResult.cavv | string | No | maxLength: 24 | Cardholder Authentication Verification Value (CAVV) Authentication Verification Value (AVV) Universal Cardholder Authentication Field (UCAF) | |
data.paymentDetails[].cardInfo.threeDSResult.xid | string | No | maxLength: 64 | 身份验证结果标识 | |
data.paymentDetails[].cardInfo.avsResult | string | No | maxLength: 32 | avs结果 | |
data.paymentDetails[].paymentTokenID | string | No | maxLength: 64 | 绑卡支付场景下,用于支付的授权ID,默认有效期为卡有效期,可通过【removePaymentToken】接口置为无效。 | |
data.paymentDetails[].exchangeRate | string | No | 标价币种转换为支付币种的汇率 | ||
data.paymentDetails[].payCurrency | string | No | maxLength: 3 | 支付币种 | |
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 | maxLength: 256 | 发票地址,打开地址可预览发票 | |
data.fees.merFee.amount | string | Yes | maxLength: 20 | 费用金额 | |
data.fees.merFee.currency | string | Yes | maxLength: 3 | 费用币种 | |
data.reference | string | No | maxLength: 512 | 商户自定义附加数据,回调中原样返回 | |
data.channelNo | string | No | maxLength: 64 | 渠道订单号 | |
data.thirdChannelNo | string | No | maxLength: 64 | 三方单号 | |
data.paymentCode | string | No | maxLength: 64 | VA单号 | |
data.cashierCountry | string | No | maxLength: 2 | 收银台模式下,在收银台上发起支付的国家。支付成功时返回。 | |
data.issuerResponseCode | string | No | 发卡行标准错误码 | ||
data.issuerResponseMsg | string | No | 发卡行标准错误描述 |
Example
json
{
"code": "APPLY_SUCCESS",
"msg": "",
"keyVersion": "1",
"appId": "3b242b56a8b64274bcc37dac281120e3",
"merchantNo": "020213827212251",
"notifyTime": "2022-01-17T09:33:54.540+00:00",
"notifyType": "PAYMENT",
"data": {
"outTradeNo": "P1642410680681",
"tradeToken": "T2024062702289232000001",
"totalAmount": 10000,
"currency": "IDR",
"country": "ID",
"status": "SUCCESS",
"completeTime": "2023-10-20T03:28:23.092Z",
"paymentDetails": [
{
"paymentMethodType": "WALLET",
"targetOrg": "DANA",
"paymentTokenID": "PMTOKEN20230710080439571142400031000"
}
],
"reference": "020213827524152"
}
}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 | Constraints | Description | Enum |
|---|---|---|---|---|---|
code | string | Yes | 仅可响应 ‘SUCCESS’(仅代表成功收到通知,不代表订单状态) | ||
msg | string | Yes | 响应 ‘Success’(仅代表成功收到通知,不代表订单状态) |
Response Example
json
{
"msg": "Success",
"code": "SUCCESS"
}Enum Reference
data.status
SUCCESSFAILEDCLOSED
data.paymentDetails[].cardInfo.threeDSResult.enrolled
YUB
data.paymentDetails[].cardInfo.threeDSResult.authenticationStatus
YNUAR
