我正在实现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时,一切正常。