这是自动生成的译文

使用 Rapid Lodging API 和 3DS 2.0 进行测试

使用 API 支持的特定场景测试您的 SCA 实现。

要测试 Rapid Lodging API,请在 HTTP 请求中包含名为 test 的附加 HTTP 标头,并使用该 API 支持的值之一来测试支持的场景。

在强客户认证 (SCA) 预订流程中,也可以使用来自 Rapid API 的测试响应来测试 3D 安全 (3DS) 连接器库方法。

注册付款

以下测试标头值会在 API 响应中产生不同的 encoded_init_config 值和不同的 HTTP 响应代码。可以将 encoded_init_config 传递给 JavaScript 库的 initSession 调用,以触发 3DS 连接器库中的不同测试用例。

测试标头值HTTP 代码和响应initSession 测试案例
标准型车201–标准回复SUCCESS
init_skip201–未回复 encoded_init_configNot supported
init_fail201–标准回复FAILED
init_timeout201–标准响应TIMEOUT
internal_server_error500–内部服务器错误—
internal_server_error503 - 服务器不可用—

注意: 使用 init_skip 测试用例,这些用例位于 3DS 连接器库 encoded_init_config 中,可以传递给 initSession 并强制执行 statusCode 跳过。

创建预订

除了 Rapid Lodging API 的 non-SCA 预订流程的测试请求中定义的测试标头外,SCA 工作流还支持其他测试标头值。

>> 阅读更多关于提交测试申请的信息

测试头值会产生不同的 encodedChallengeConfig 值,这些值可以传递给 JavaScript 库的挑战调用,以触发各种测试用例。

测试标头值HTTP 代码和响应initSession 测试案例
complete_payment_session201 – Response with complete payment session linkSUCCESS without user iframe interaction
complete_payment_session_show201 – Response with complete payment session linkSUCCESS/FAILED with user iframe interaction
complete_payment_session_fail201 – Response with complete payment session linkFAILED without user iframe interaction
complete_payment_session_timeout201 – Response with complete payment session linkTIMEOUT
complete_payment_session_error201 – Response with complete payment session linkERROR

除了 Rapid Lodging API 的 non-SCA 预订流程的测试请求中定义的测试标头外,SCA 工作流还支持其他测试标头值。

>> 阅读更多关于提交测试申请的信息

测试头值会产生不同的 encodedChallengeConfig 值,这些值可以传递给 JavaScript 库的 challenge 调用,以触发各种测试用例。

测试标头值HTTP 代码和响应initSession 测试案例
complete_payment_session201 – Response with complete payment session linkSUCCESS without user iframe interaction
complete_payment_session_show201 – Response with complete payment session linkSUCCESS/FAILED with user iframe interaction
complete_payment_session_fail201 – Response with complete payment session linkFAILED without user iframe interaction
complete_payment_session_timeout201 – Response with complete payment session linkTIMEOUT
complete_payment_session_error201 – Response with complete payment session linkERROR

完成付款会话

测试标头值会导致在尝试完成付款和确认预订时可能出现的不同错误情况。

测试标头值HTTP 代码和响应
payment_declined400 - Payment declined response
price_mismatch409 - Price mismatch response
rooms_unavailable410 - Rooms unavailable response

3DS 连接器库和内嵌框架

要在没有外部依赖因素的情况下测试 3DS 连接器,特定的参数值应对应于支持的方法响应。仅当内嵌框架使用测试沙盒 URL 加载时才支持此行为。

初始化会话

可以通过改变 initSessionResponse statusCode 来测试 initSessionRequest encoded_init_config 支持的值。

statusCode 值测试 encodedInitConfig 值
SUCCESSW3sicHJvdmlkZXJJZCI6IDAsICJzYW5kYm94SW5pdE91dHB1dENvbmZpZyI6ICJTVUNDRVNTIn1d
FAILEDW3sicHJvdmlkZXJJZCI6IDAsICJzYW5kYm94SW5pdE91dHB1dENvbmZpZyI6ICJGQUlMRUQifV0=
TIMEOUTW3sicHJvdmlkZXJJZCI6IDAsICJzYW5kYm94SW5pdE91dHB1dENvbmZpZyI6ICJUSU1FT1VUIn1d
SKIPPED目前不支持。

注:encoded_init_config 值也可以使用注册付款信息 API 的受支持测试标头生成。

挑战

可以通过改变 challengeResponse statusCode 来测试 challengeRequest encoded_challenge_config 支持的值。

statusCode 值测试 encoded_Challenge_config 值说明
SUCCESSW3sicHJvdmlkZXJJZCI6IDAsICJzYW5kYm94Q2hhbGxlbmdlT3V0cHV0Q29uZmlnIjogIlNVQ0NFU1MifV0没有用户内嵌框架互动
SUCCESS/FAILEDW3sicHJvdmlkZXJJZCI6IDAsICJzYW5kYm94Q2hhbGxlbmdlT3V0cHV0Q29uZmlnIjogIlNIT1cifV0没有用户内嵌框架互动
FAILEDW3sicHJvdmlkZXJJZCI6IDAsICJzYW5kYm94Q2hhbGxlbmdlT3V0cHV0Q29uZmlnIjogIkZBSUxFRCJ9XQ没有用户内嵌框架互动
TIMEOUTW3sicHJvdmlkZXJJZCI6IDAsICJzYW5kYm94Q2hhbGxlbmdlT3V0cHV0Q29uZmlnIjogIlRJTUVPVVQifV0
ERRORW3sicHJvdmlkZXJJZCI6IDAsICJzYW5kYm94Q2hhbGxlbmdlT3V0cHV0Q29uZmlnIjogIkVSUk9SIn1d

也可以使用 Booking API 的 SCA 流程支持的测试标头生成 encoded_init_config 值。

注意: 当根据用户对 iframe 的输入测试挑战状态代码值为 SUCCESS 或 FAILED 时,挑战方法响应将等待 iframe 中模拟身份验证界面的完成。

3DS 内嵌框架中的 UI 示例:

3DS 内嵌框架示例

示例用法

本示例演示了如何使用预定义的参数值来测试库的 3DS 挑战,而无需用户与 iframe 进行交互。

var c = new PayThreeDSConnector.ThreeDSConnector('threedsiframe', 'https://static.pay.expedia.com'); // change to match the 3DS iframe ID
c.setup({ referenceId: '1000' })
    .then((setupResponse) => {
        console.log('Setup Output: ', setupResponse);
        return c.initSession({
            paymentSessionId: 1,
            encodedInitConfig: 'W3sicHJvdmlkZXJJZCI6IDAsICJzYW5kYm94SW5pdE91dHB1dENvbmZpZyI6ICJTVUNDRVNTIn1d',
        }); // SUCCESS
    })
    .then((initResponse) => {
        console.log('InitSession Output: ', initResponse);
        $('#threedsIframeModal').modal(); // replace with code to show the modal containing the 3DS iframe
        return c.challenge({
            paymentSessionId: 1,
            encodedChallengeConfig:
                'W3sicHJvdmlkZXJJZCI6IDAsICJzYW5kYm94Q2hhbGxlbmdlT3V0cHV0Q29uZmlnIjogIlNVQ0NFU1MifV0=',
        }); // SUCCESS
    })
    .then((challengeResponse) => {
        console.log('Challenge Output: ', challengeResponse);
    })
    .finally(() => {
        $('#threedsIframeModal').modal('hide'); // replace with code to hide the modal containing the 3DS iframe
    });

3DS 认证和稍后付款

使用 pay-later 型号进行预订时,Expedia 不会从卡中扣款。相反,我们会将其发送给供应商进行处理。商家可能会使用此信息在预订前验证信用卡。旅客需在抵达时亲自支付费用。

然而,有时计划会发生变化,在这种情况下,供应商可能会收取 no-show 费用。这些费用可能会受到强客户认证 (SCA) 法规的影响,因为它们涉及在旅行者不在场的情况下从信用卡扣款。

如果交易受到影响,付款可能会失败,或者如果收费是 non-compliant,供应商可能会面临信用卡品牌的处罚。

为了保护我们与供应商的关系并继续为我们的合作伙伴服务,Expedia Group 提供了一种可选的合规途径:Expedia Group 可以代表他们提供身份验证。这样一来,供应商就能保护自己的业务,并确保 Rapid API 能够继续提供同样多样化的选择。

在 Rapid Lodging API 中,这是以属性内容文件和属性内容中的标志 payment_registration_recommended=true 的形式存在的,它可以帮助您识别可能与项目相关的属性。

对整合的潜在影响

如果您想提供需要安全身份验证的供应商,那么预订流程应该支持 3DS。如果不支持 3DS,且 card-issuing 银行确定交易需要身份验证,则预订这些选项可能会失败。

当收取 no-show 费用时,Rapid API 将是记录在案的商户。信用卡账单上的收费描述将由您的组织定义,而不是由酒店定义。要自定义此文本,请联系 Rapid 合作伙伴支持。

为了符合卡组织的要求和 Rapid API 启动流程,请使用 Accepted Payments API 来显示processing_country在 no-show 的情况下,请在 check-out 页面上查看。对于所有 Rapid API 为记录商户的交易,都需要进行此操作;如果使用 3DS 并且出现 no-show,则可能会发生这种情况。

如何减轻整合带来的影响

如果 Rapid API 集成不支持预订流程中的安全身份验证,则可以通过排除不符合规定的供应商来降低预订失败的风险。请联系 Rapid Partner 支持团队,将受影响的费率从您的可用性 API 响应中移除。

使用代理工具时,根据相关规定,交易可免于强客户认证 (SCA)。使用可用性 APIsales_channel用于指示此内容的字段。

错误处理

创建预订 API 和完成付款会话 API 可能会导致确认的预订和付款交易。

您的集成应考虑以下说明,以避免财务损失和客户操作案例:

来源功能建议的超时设置错误恢复过程所需操作
Rapid API注册付款令牌的预订前价格检查10 秒重试或选择其他住宿、房型或房价-
JavaScript3DS 连接器设置10 秒重试相同的请求-
Rapid API注册付款会话10 秒重试同一请求,但不执行“Expect: 100-continue”流程。-
JavaScript启动付款会话10 秒重试相同的请求-
Rapid API创建预订90 秒重试相同的请求对于所有错误:使用 affiliate_reference_id 检索预订
JavaScript显示身份验证挑战10 秒重试相同的请求-
JavaScript等待 challenge.statusCode180 ~ 1200 秒请求完成付款会话-
Rapid API完成付款会话90 秒重试相同的请求对于所有错误:使用 affiliate_reference_id 检索预订
Rapid API对于所有错误:使用 affiliate_reference_id 检索预订30 秒重试相同的请求对于所有错误:等待 90 秒后再重试,以通过 API 响应代码 404 或 200 确认预订的最终状态

>> 阅读更多关于 SCA 的信息

>> 阅读我们基于 3DS 2.0 的 SCA 解决方案

该页面有帮助吗?
我们该如何改进这些内容?
感谢您帮助我们改进!