"Transaction not found" 在使用 Bambora 捕获支付交易时

"Transaction not found" when Capturing payment transaction with Bambora

我正在实施来自 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 不匹配。在线结帐 Authorize event 返回的 txnid 值似乎不准确。

我离我们的代码中的问题还远着呢。在 Bambora 支持和@Evelijn 的帮助下,问题得到了解决。

当从客户端向服务器发送 txnid 时,验证确保该值仅包含数字。我错过的是它也将其更改为数字类型。

txnid是一个18位的字符串,javascript可以处理最多17位的数字。当 txnid 更改为数字时,最后一位将四舍五入为 0。

所以 123456789012345678 会变成 123456789012345680

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