以下是从真实集成经验中整理出的常见问题和解决方案。若未找到对应答案,请联系你的 UQPAY 客户经理。Documentation Index
Fetch the complete documentation index at: https://developers-sandbox.uqpaytech.com/llms.txt
Use this file to discover all available pages before exploring further.
认证与 API Key
如何获取 API Key 和商户凭证?
如何获取 API Key 和商户凭证?
调用 API 时返回 `unauthorized_error: invalid auth token format`,怎么回事?
调用 API 时返回 `unauthorized_error: invalid auth token format`,怎么回事?
生成新 Token 后旧 Token 失效,这是预期行为吗?
生成新 Token 后旧 Token 失效,这是预期行为吗?
expired_at 字段表示,默认 TTL 为 30 分钟。参见 Request Access Token。`x-idempotency-key` 是什么?什么时候需要传?
`x-idempotency-key` 是什么?什么时候需要传?
在生产环境请求 Access Token 时返回 `Invalid client id`(HTTP 400),该检查什么?
在生产环境请求 Access Token 时返回 `Invalid client id`(HTTP 400),该检查什么?
x-client-id 不存在,或与生产环境不匹配。请确认使用的是从生产账户(https://app.uqpay.com)生成的 Client ID,而非沙盒门户(https://app-sandbox.uqpaytech.com)的凭证。两套环境使用各自独立的凭证。沙盒测试
沙盒是否需要走真实的 KYC?
沙盒是否需要走真实的 KYC?
https://api-sandbox.uqpaytech.com。沙盒会校验卡号和 CVC 吗?
沙盒会校验卡号和 CVC 吗?
`merchant_order_id` 必须唯一吗?可以复用吗?
`merchant_order_id` 必须唯一吗?可以复用吗?
merchant_order_id 的唯一性做校验 —— 可以多次提交相同的值,系统会创建多个 PaymentIntent。在 UQPAY 内部,请使用 payment_intent_id(API 返回、以 PI... 开头的 ID)作为权威订单标识。建议: 在你这侧为每笔订单分配唯一的 merchant_order_id。这样对账更简单,也可以避免上游渠道强校验唯一性带来的问题 —— 例如 Alipay CN 要求 merchant_order_id 唯一,重复提交会导致 Alipay 侧报错。支付生命周期与状态
PaymentIntent(PI)和 PaymentAttempt(PA)有哪些状态,哪些代表支付成功?
PaymentIntent(PI)和 PaymentAttempt(PA)有哪些状态,哪些代表支付成功?
应该根据 PI 还是 PA 状态判断支付成功?
应该根据 PI 还是 PA 状态判断支付成功?
SUCCEEDED 作为支付成功的权威依据。但由于 PA 失败会让 PI 退回到 REQUIRES_PAYMENT_METHOD 而不是立即变为 FAILED,你还应当同时监听 PA 状态,及时感知失败。推荐做法:同时订阅 acquiring.payment_attempt.succeeded(或 acquiring.payment_intent.succeeded)和 acquiring.payment_attempt.failed webhook,显式取消的场景则使用 acquiring.cancel.succeeded。PaymentIntent 多久后自动关闭?
PaymentIntent 多久后自动关闭?
取消和退款有什么区别?
取消和退款有什么区别?
- 取消适用于尚未进入终态的支付 —— 各支付方式的可取消规则参见 Cancellation。
- 退款适用于已完成的支付 —— 可退条件、可退金额和手续费处理参见 Refunds。
卡支付成功请款后还可以取消吗?
卡支付成功请款后还可以取消吗?
SUCCEEDED),就无法再取消。如需撤销已完成请款的交易,必须使用退款接口。哪些支付方式在成功后仍支持取消,参见 Cancellation。3D Secure 集成
如何控制是否触发 3DS?需要传哪些字段?
如何控制是否触发 3DS?需要传哪些字段?
three_ds_action、browser_info、ip_address)以及响应处理(next_action.redirect_iframe 与 next_action.redirect_to_url 的区别)参见 3DS Integration Guide — Option 1 和 Option 2。3DS 完成后用户没有跳转回我的 `return_url`,是什么原因?
3DS 完成后用户没有跳转回我的 `return_url`,是什么原因?
- 未设置 return_url:3DS 场景请使用
three_ds.return_url字段(而非顶层的return_url)。3DS 认证和支付成功后,用户会被重定向到该 URL。 - Query 参数被截断:如果
return_url带有 query 参数,请确认它们经过正确的 URL 编码且未被截断。这是已知问题,现已修复 —— 若仍出现截断,请联系技术支持。 - 成功与失败都会回跳:以往只有成功的支付才会跳转到
return_url,失败的会跳转到 UQPAY 的错误页。现已调整为两种结果都跳转到return_url。你的结果页应通过 API 查询订单状态,而不是仅凭跳转本身判定支付成功。
Web 支付时收到 `device_id is invalid`,可以不传 device ID 吗?
Web 支付时收到 `device_id is invalid`,可以不传 device ID 吗?
device_id 通常无法获取。该字段对 Web 场景的请求不是必填,浏览器端集成可以省略。伪造 device ID 不但没有帮助,还可能导致拒绝率升高。Webhooks
如何配置 webhook endpoint?
如何配置 webhook endpoint?
配置了 webhook URL 但收不到事件,该检查什么?
配置了 webhook URL 但收不到事件,该检查什么?
- IP 白名单:如果你的服务器按 IP 限制入站连接,请将 UQPAY 的 webhook 源 IP 加入白名单 —— 参见 Webhooks Overview 中的 IP 白名单部分。
- 订阅范围:确认已在门户订阅了正确的事件类型。
- 多环境并存:如果你的预发和生产系统都连接 UQPAY 生产环境,可以在同一个订阅中配置多个 webhook URL。注意两个 URL 都会收到所有事件 —— 请确保系统正确处理(例如避免重复写库)。
退款
发起退款时收到 `Insufficient balance`,为什么?
发起退款时收到 `Insufficient balance`,为什么?
- 已结算的订单:退款从
Available to pay out余额扣除。 - 未结算的订单:退款从
Available soon(待结算)余额扣除。
沙盒什么时候可以发起退款?
沙盒什么时候可以发起退款?
SUCCEEDED 状态。沙盒订单不会自动结算,因此在订单达到正确状态之前发起退款可能返回 Invalid order status。若需在沙盒中测试完整的退款流程,请联系技术支持手动触发结算。如果收到 Refund is processing, please try again after,表示同一笔订单的另一个退款请求正在处理中。请等该请求完成后再提交新的退款。参见 Refunds 和 Testing in Sandbox。退款在我这侧成功,但被发卡行拒绝,怎么办?
退款在我这侧成功,但被发卡行拒绝,怎么办?
PROCESSING 或 INITIATED,随后变为 FAILED。常见原因是发卡行的反欺诈或合规规则 —— 与你的集成参数无关。如果退款是偶发性失败、而不是持续失败,原因通常在发卡行一侧,而非配置问题。UQPAY 会代你向卡组织提交工单,但最终结果取决于发卡行。结算与对账
结算报表在哪里查看?
结算报表在哪里查看?

