与Bambora进行支付交易时"未找到交易"

pst*_*trm 5 javascript payment-gateway node.js ecmascript-7 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);
Run Code Online (Sandbox Code Playgroud)

我也尝试过包含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);
Run Code Online (Sandbox Code Playgroud)

我在尝试获取交易信息时遇到同样的错误:

const options = {
    headers: { Authorization: `Basic ${ apiKey }` },
};
const { data } = await axios.get(`https://merchant-v1.api-eu.bambora.com/transactions/${ txnid }`, options);
Run Code Online (Sandbox Code Playgroud)

据我了解文档,我正在做的一切正确,但我无法让它工作.

在查看Bamboras自己在PHP中的实现之后,我看不到代码的任何问题.

查看报告仪表板中URL中的特定订单与我在数据库中保存的ID不匹配.txnidInline Checkout Authorize事件返回的值似乎不准确.

pst*_*trm 0

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

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

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

那么123456789012345678就会变成123456789012345680

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