[ ['code' => '100000', 'http' => 200, 'retryable' => 'depends', 'meaning_zh' => '通用业务失败 / 鉴权失败统一码', 'meaning_en' => 'Generic business failure / unified auth-failure code', 'note_zh' => '订单未被受理时已实时置 failed,勿用同 out_order_no 重试;鉴权阶段统一为「认证失败」话术', 'note_en' => 'When the order is not accepted, it is set to failed in real time — do not retry with the same out_order_no; during auth it is a unified authentication-failed message'], ['code' => '100001', 'http' => 200, 'retryable' => 'no', 'meaning_zh' => '参数校验失败', 'meaning_en' => 'Parameter validation failed', 'note_zh' => 'message 为具体字段校验错误信息(英文,如 `"amount" must be a number`);amount 必须为 JSON 整数,字符串/小数均返回此码。修正参数后重发', 'note_en' => 'message carries the specific field validation error (in English, e.g. `"amount" must be a number`); amount must be a JSON integer — strings/decimals return this code. Fix params and resend'], ['code' => '100101', 'http' => 200, 'retryable' => 'yes', 'meaning_zh' => '请求过期', 'meaning_en' => 'Request expired', 'note_zh' => 'timestamp 超出 ±300 秒窗口;校准本地时间后重试', 'note_en' => 'timestamp is outside the ±300s window; calibrate local time and retry'], ['code' => '100102', 'http' => 200, 'retryable' => 'no', 'meaning_zh' => 'IP 不在白名单(message 含商户号与请求 IP)', 'meaning_en' => 'IP not in allowlist (message includes merchant_no and request IP)', 'note_zh' => '在商户后台把来源 IP 加入白名单后重试;正式密钥与测试密钥共用同一白名单', 'note_en' => 'Add the source IP to the allowlist in the merchant console and retry; prod and test keys share the same allowlist'], ['code' => '100103', 'http' => 200, 'retryable' => 'no', 'meaning_zh' => '重放 / 重复请求', 'meaning_en' => 'Replay / duplicate request', 'note_zh' => 'nonce 或签名指纹在 300 秒内重复;换新 nonce(或改参数)后重试', 'note_en' => 'nonce or signature fingerprint repeated within 300s; use a new nonce (or change params) and retry'], ['code' => '100104', 'http' => 200, 'retryable' => 'no', 'meaning_zh' => '签名错误', 'meaning_en' => 'Invalid signature', 'note_zh' => '核对密钥与签名算法(pay 用 api_secret_pay、payout 用 api_secret_payout)', 'note_en' => 'Check the secret and signing algorithm (pay uses api_secret_pay, payout uses api_secret_payout)'], ['code' => '100105', 'http' => 200, 'retryable' => 'no', 'meaning_zh' => 'IP 在黑名单', 'meaning_en' => 'IP in blocklist', 'note_zh' => '从黑名单移除来源 IP 后重试', 'note_en' => 'Remove the source IP from the blocklist and retry'], ['code' => '100106', 'http' => 200, 'retryable' => 'yes', 'meaning_zh' => '鉴权失败次数过多(限流)', 'meaning_en' => 'Too many auth failures (rate limited)', 'note_zh' => '同 merchant_no + 来源 IP 在 60 秒内鉴权失败达 60 次触发;等待约 60 秒再试', 'note_en' => 'Triggered when the same merchant_no + source IP fails auth 60 times within 60s; wait ~60s and retry'], ['code' => '200002', 'http' => 200, 'retryable' => 'no', 'meaning_zh' => '服务账户已禁用', 'meaning_en' => 'Service account disabled', 'note_zh' => '联系服务商处理', 'note_en' => 'Contact your service provider'], ['code' => '210002', 'http' => 200, 'retryable' => 'no', 'meaning_zh' => '商户已禁用', 'meaning_en' => 'Merchant disabled', 'note_zh' => '联系服务商处理', 'note_en' => 'Contact your service provider'], ['code' => '300101', 'http' => 200, 'retryable' => 'no', 'meaning_zh' => '商户订单号已存在', 'meaning_en' => 'Merchant order number already exists', 'note_zh' => '同一商户 out_order_no 重复提交一律拒绝(无论参数是否相同,不返回原单);请先查单或更换新单号', 'note_en' => 'Duplicate out_order_no is always rejected (regardless of params; original order is never returned). Query the order or use a new number.'], ['code' => '300201', 'http' => 200, 'retryable' => 'no', 'meaning_zh' => '商户代付单号已存在', 'meaning_en' => 'Merchant payout number already exists', 'note_zh' => '同一商户 out_payout_no 重复提交一律拒绝(无论参数是否相同,不返回原单);请先查单或更换新单号', 'note_en' => 'Duplicate out_payout_no is always rejected (regardless of params; original order is never returned). Query the order or use a new number.'], ['code' => '300301', 'http' => 200, 'retryable' => 'no', 'meaning_zh' => '订单不存在', 'meaning_en' => 'Order not found', 'note_zh' => '核对订单号(order_no / out_order_no / payout_no / out_payout_no)', 'note_en' => 'Check the order no. (order_no / out_order_no / payout_no / out_payout_no)'], ['code' => '300304', 'http' => 503, 'retryable' => 'yes', 'meaning_zh' => '建单暂不可用(订单未创建,可用同一外部单号重试)', 'meaning_en' => 'Order create temporarily unavailable (nothing persisted; retry with the same merchant order no.)', 'note_zh' => 'insert-first 并发冲突重试耗尽或风控版本分片缺失,均在 INSERT 之前 fail-closed;HTTP 503。请用同一 out_order_no / out_payout_no 稍后重试,勿换单号以免双单', 'note_en' => 'insert-first retry budget exhausted or risk-config version shard missing — fail-closed before INSERT; HTTP 503. Retry later with the same out_order_no / out_payout_no; do not change the number or you may create a duplicate'], ['code' => '300401', 'http' => 200, 'retryable' => 'no', 'meaning_zh' => '支付方式不可用 / 不存在', 'meaning_en' => 'Payment method unavailable / missing', 'note_zh' => '支付方式不可用或不存在', 'note_en' => 'The payment method is unavailable or does not exist'], ['code' => '300402', 'http' => 200, 'retryable' => 'yes', 'meaning_zh' => '支付方式配置不可用', 'meaning_en' => 'Payment method configuration unavailable', 'note_zh' => '当前请求未匹配到有效配置;修改参数或稍后重试', 'note_en' => 'No valid configuration matched the request; change parameters or retry later'], ['code' => '300403', 'http' => 200, 'retryable' => 'no', 'meaning_zh' => '费率未配置', 'meaning_en' => 'Fee rate not configured', 'note_zh' => '联系服务商配置费率后重试', 'note_en' => 'Contact your service provider to configure the fee rate, then retry'], ['code' => '300404', 'http' => 200, 'retryable' => 'yes', 'meaning_zh' => '当前条件下无可用支付方式', 'meaning_en' => 'No payment method is available for the request', 'note_zh' => 'country + currency + pay_method 未匹配到启用分组;核对参数或联系运营开通', 'note_en' => 'country + currency + pay_method matched no enabled group; check the parameters or contact operations to enable one'], ['code' => '300405', 'http' => 200, 'retryable' => 'no', 'meaning_zh' => '缺少必要附加信息(extra.customer)', 'meaning_en' => 'Missing required extra info (extra.customer)', 'note_zh' => '请按 `data.missing_fields` 补齐 extra.customer 中的字段', 'note_en' => 'Fill the fields listed in `data.missing_fields` under extra.customer'], ['code' => '300406', 'http' => 200, 'retryable' => 'no', 'meaning_zh' => '缺少必要下单参数(如 bank_code)', 'meaning_en' => 'Missing required order parameter (e.g. bank_code)', 'note_zh' => '补齐该路由必填字段后重试', 'note_en' => 'Fill the required field for that route and retry'], ['code' => '300407', 'http' => 200, 'retryable' => 'no', 'meaning_zh' => '银行编码非法', 'meaning_en' => 'Invalid bank code', 'note_zh' => '用「查询可用银行」(payout/banks/query) 返回的 code', 'note_en' => 'Use a code returned by Query Available Banks (payout/banks/query)'], ['code' => '300408', 'http' => 200, 'retryable' => 'no', 'meaning_zh' => '当前支付方式不支持代付凭证查询', 'meaning_en' => 'Payment method does not support payout proof query', 'note_zh' => '当前支付方式不支持凭证查询', 'note_en' => 'The payment method does not support proof queries'], ['code' => '300409', 'http' => 200, 'retryable' => 'yes', 'meaning_zh' => '代付凭证暂不可用', 'meaning_en' => 'Payout proof temporarily unavailable', 'note_zh' => '订单未成功 / 凭证暂未生成 / 超出查询窗口;确认成功且在窗口内再试', 'note_en' => 'Order is not successful / proof is not ready / outside the query window; confirm success and retry within the window'], ['code' => '300410', 'http' => 200, 'retryable' => 'yes', 'meaning_zh' => '代付收据暂不可用(订单非 success)', 'meaning_en' => 'Payout receipt temporarily unavailable (order not success)', 'note_zh' => '等订单出款成功后再试', 'note_en' => 'Retry after the payout succeeds'], ['code' => '300411', 'http' => 200, 'retryable' => 'yes', 'meaning_zh' => '收据生成失败', 'meaning_en' => 'Receipt generation failed', 'note_zh' => '渲染异常;稍后重试', 'note_en' => 'Rendering error; retry later'], ['code' => '300501', 'http' => 200, 'retryable' => 'yes', 'meaning_zh' => '余额不足', 'meaning_en' => 'Insufficient balance', 'note_zh' => '商户可用余额 < 冻结额(amount + fee);充值后重试', 'note_en' => 'Available balance < frozen amount (amount + fee); top up and retry'], ], ];