Cybersource API C#:Token化信用卡捕获付款时id参数取值疑问
解决Cybersource令牌化信用卡捕获付款的Id参数问题
首先明确:当使用令牌化信用卡完成授权后,调用CapturePayment时需要传入的是授权交易的Transaction ID,而非支付令牌(Token)的ID。
问题原因
你当前传入的id是令牌ID而非授权交易ID,Cybersource捕获接口不接受令牌ID作为参数,因此抛出Cannot call with a TOKEN错误。
正确步骤(C#示例)
发起授权请求(使用令牌)
确保你的SimpleAuthorizationInternet.Run()方法返回授权交易的完整响应,而非仅令牌ID。修改该方法,返回授权接口返回的TransactionId:// 示例:SimpleAuthorizationInternet.Run() 内部逻辑 public AuthorizationResponse Run() { var apiInstance = new AuthorizationApi(); var requestObj = new CreateAuthorizationRequest(); // 使用令牌而非信用卡号设置支付工具 requestObj.PaymentInstrument = new Ptsv2paymentsPaymentInstrument { TokenId = "你的支付令牌ID(如 tok_xxxxxx)" }; // 补充金额、商户信息等必要参数 var response = apiInstance.CreateAuthorization(requestObj); // 返回完整授权响应,包含TransactionId return response; }获取授权交易ID并调用捕获接口
在捕获付款时,从授权响应中提取TransactionId作为参数传入:var authResponse = SimpleAuthorizationInternet.Run(); var captureApiInstance = new CaptureApi(); var captureRequest = new CreateCaptureRequest(); // 设置捕获请求的金额等参数 // 传入授权交易的TransactionId,而非令牌ID var captureResponse = captureApiInstance.CapturePayment(captureRequest, authResponse.TransactionId);
关键注意事项
- 令牌仅用于发起授权/付款请求,后续的捕获、退款等操作都需要使用对应交易的
TransactionId。 - 确认
SimpleAuthorizationInternet.Run()方法返回的是授权接口的完整响应对象,若之前仅返回令牌ID,需调整返回值类型以获取TransactionId。
内容的提问来源于stack exchange,提问作者user2660603
相关产品推荐
相关产品推荐

