我正在尝试实施端到端概念验证来练习Adyen 的 Web Drop-In。粗略地说,这涉及三个步骤,如该 URL 所示,但为了方便起见,在此重复:
步骤1在服务器上完成,会话数据返回到浏览器。那部分工作正常。第 2 步必须在浏览器中完成,因为它需要 DOM,这(自然)是 CORS 问题出现的地方。这是有问题的代码:
const configuration = {
environment: "test",
clientKey: "test_APV***...",
session: {
id: uuidv4(),
sessionData: "Ab02b4c0!BQABAgBdJVhguRV6hEN..."
},
onPaymentCompleted: (result, component) => {
console.info(result, component);
},
onError: (error, component) => {
console.error(error.name, error.message, error.stack, component);
}
};
AdyenCheckout(configuration)
.then(checkout => {
const dropinComponent = checkout.create('dropin').mount('#dropin-container');
})
.catch(error => {
console.error('Creating Adyen Checkout: ', error.message)
})
}
Run Code Online (Sandbox Code Playgroud)
该行AdyenCheckout(configuration)失败,这会将执行线程放入处理程序中onError。在浏览器控制台中可以看到两个错误:
Adyen 的文档允许像这样嵌入 JS
const configuration = {
environment: "test",
clientKey: "test_APV***...",
session: {
id: uuidv4(),
sessionData: "Ab02b4c0!BQABAgBdJVhguRV6hEN..."
},
onPaymentCompleted: (result, component) => {
console.info(result, component);
},
onError: (error, component) => {
console.error(error.name, error.message, error.stack, component);
}
};
AdyenCheckout(configuration)
.then(checkout => {
const dropinComponent = checkout.create('dropin').mount('#dropin-container');
})
.catch(error => {
console.error('Creating Adyen Checkout: ', error.message)
})
}
Run Code Online (Sandbox Code Playgroud)
我的理解是,“完整性”和“跨域”属性是为了允许跨域请求......但这似乎不起作用。
“无效的 ClientKey”错误也令人费解:我确信我使用的 ClientKey 是有效的,并且与我用来生成会话数据的 API 密钥关联的客户端密钥相同。
希望有人有使用 Adyen 的 Web Drop-In 的经验,并且可以阐明我做错了什么。如果我自己能解决这个问题,我会报告。