如何不使用sessionId和sessionResult通过reference获取支付详情?
仅通过Reference获取Adyen托管会话/支付详情的方案
Adyen的Checkout Sessions API本身没有提供直接通过商户传入的Reference查询会话详情的端点,但可以通过Payments API的列表查询接口,基于Reference过滤找到关联的支付记录,进而获取对应的会话和支付详情,无需依赖sessionId、sessionResult或webhook。
具体实现(Go SDK)
复用创建会话时的客户端配置,调用List Payments接口并指定Reference过滤条件:
import ( "context" "github.com/adyen/adyen-go-api-library/v9/src/common" "github.com/adyen/adyen-go-api-library/v9/src/adyen" "github.com/adyen/adyen-go-api-library/v9/src/checkout" ) // 使用和创建会话一致的客户端配置 client := adyen.NewClient(&common.Config{ ApiKey: "ADYEN_API_KEY", Environment: common.TestEnv, }) // 构造列表查询请求 listRequest := checkout.ListPaymentsRequest{ MerchantAccount: "YOUR_MERCHANT_ACCOUNT", Filter: &checkout.PaymentFilter{ Reference: "YOUR_PAYMENT_REFERENCE", // 传入创建会话时的reference }, // 可选:添加时间范围过滤,减少返回结果数量 // CreatedSince: "2023-05-17T00:00:00Z", // CreatedUntil: "2023-05-19T23:59:59Z", PageSize: 10, } // 执行API调用 service := client.Checkout() res, httpRes, err := service.PaymentsApi.ListPayments(context.Background(), listRequest) if err != nil { // 错误处理逻辑 panic(err) } // 遍历结果获取目标支付/会话详情 for _, payment := range res.Payments { if payment.Reference == "YOUR_PAYMENT_REFERENCE" { // payment对象包含核心支付信息:状态、金额、关联会话ID等 println("支付状态:", *payment.Status) println("关联会话ID:", *payment.CheckoutSessionId) // 可选:如需完整会话信息,可通过sessionId调用Get Session接口 // sessionReq := service.PaymentsApi.SessionsInput().SessionId(*payment.CheckoutSessionId) // sessionRes, _, err := service.PaymentsApi.GetSession(context.Background(), sessionReq) } }
补充说明
- 若同一
Reference被多次使用,建议结合CreatedSince/CreatedUntil时间范围过滤,避免返回无关记录。 - 返回的
payment对象已包含支付状态、金额等核心业务信息,若仅需确认支付结果,无需额外调用会话查询接口。 - 确保使用的API密钥拥有
Payments Read权限,否则会返回权限错误。
内容的提问来源于stack exchange,提问作者ARIF MAHMUD RANA
相关产品推荐
相关产品推荐

