我正在实现Bambora中的Inline Checkout。授权步骤可以正常工作。但是当涉及到付款时,我总是收到错误Transaction not found

这是我的工作:

const options = {
    headers: { Authorization: `Basic ${ apiKey }` },
};
const { payload } = {
    amount
};
const { data } = await axios.post(`https://transaction-v1.api-eu.bambora.com/transactions/${ txnid }/capture`, payload, options);

我也尝试使用包含的transactionoperations发出请求:
const options = {
    headers: { Authorization: `Basic ${ apiKey }` },
};
const { payload } = {
    amount,
    transactionoperations: [{ id: txnid }],
};
const { data } = await axios.post(`https://transaction-v1.api-eu.bambora.com/transactions/${ txnid }/capture`, payload, options);

尝试获取交易信息时出现相同的错误:
const options = {
    headers: { Authorization: `Basic ${ apiKey }` },
};
const { data } = await axios.get(`https://merchant-v1.api-eu.bambora.com/transactions/${ txnid }`, options);

据我了解the documentation,我所做的一切都正确,但是我无法使其正常工作。

在PHP中查看Bamboras own implementation之后,我的代码看不到任何问题。

在URL中查看报表仪表板中的特定顺序后,该ID与我保存在数据库中的ID不匹配。内联结帐Authorize event上返回的txnid的值似乎不正确。

最佳答案

我离问题出在我们代码中的地方很远。在Bambora支持和@Evelijn的正确指导下,问题得以解决。

当从客户端向服务器发送txnid时,验证将确保该值仅包含数字。我错过的是它也将其更改为Number类型。
txnid是一个18位数字的字符串,javascript可以处理最大为17位数字的数字。当txnid更改为数字时,最后一位将四舍五入为0。

因此123456789012345678将变成123456789012345680

当我更改验证时,不将txnid转换为Number时,一切正常。

10-07 23:17