【发布时间】:2020-12-16 12:06:15
【问题描述】:
我正在我的节点/反应项目中集成 Braintree(目前为沙盒模式)。发送付款有效负载时,我收到错误提示
错误[invalidKeysError]:这些键无效:paymentMethodNonce[nonce]、paymentMethodNonce[details][expirationMonth]、paymentMethodNonce[details][expirationYear]、paymentMethodNonce[details][bin]、paymentMethodNonce[details][cardType]、 paymentMethodNonce[详情] [lastFour]、paymentMethodNonce[details][lastTwo]、paymentMethodNonce[type]、paymentMethodNonce[description]、paymentMethodNonce[binData][prepaid]、paymentMethodNonce[binData][healthcare]、paymentMethodNonce[binData][debit]、paymentMethodNonce[binData] [durbin监管] , paymentMethodNonce[binData][commercial], paymentMethodNonce[binData][payroll], paymentMethodNonce[binData][issuingBank], paymentMethodNonce[binData][countryOfIssuance], paymentMethodNonce[binData][productId]
我用于支付处理的路由控制器:
exports.braintreePayment = async (req, res) => {
let nonceFromClient = req.body.paymentMethodNonce;
let amountFromClient = req.body.amount;
console.log(nonceFromClient)
console.log(typeof amountFromClient)
let newTransaction = gateway.transaction.sale({
amount: amountFromClient,
paymentMethodNonce: nonceFromClient,
options: {
submitForSettlement: true
}
}, (err, result) => {
if (err) {
console.log(err)
res.status(500).json(err)
} else {
res.json(result)
}
})
}
Nonce 从前端返回(作为对象)
{
nonce: 'tokencc_bd_n6g4d4_38t2p2_8896c8_dj3wqq_6v2',
details: {
expirationMonth: '12',
expirationYear: '2021',
bin: '411111',
cardType: 'Visa',
lastFour: '1111',
lastTwo: '11'
},
type: 'CreditCard',
description: 'ending in 11',
binData: {
prepaid: 'Unknown',
healthcare: 'Unknown',
debit: 'Unknown',
durbinRegulated: 'Unknown',
commercial: 'Unknown',
payroll: 'Unknown',
issuingBank: 'Unknown',
countryOfIssuance: 'Unknown',
productId: 'Unknown'
}
}
来自客户的金额显示为 204,并以数字形式输入。
我没有看到任何说明必须填写所有“错误”字段才能处理付款的文件。关于我正在监督什么的任何线索?
以防万一前端获取调用
export const processTransaction = async (userId, token, paymentData) => {
try {
const braintreeTransaction = await fetch(`http://localhost/api/braintree/payment/${userId}`, {
method: 'POST',
headers: {
Accept: 'application/json',
"Content-Type": 'application/json',
Authorization: `Bearer ${token}`
},
body: JSON.stringify(paymentData)
})
return await braintreeTransaction.json();
} catch (err) {
console.log(err)
}
}
前端结账调用
const createPurchase = async () => {
// Send payment information thru nonce to backend
try {
let nonce = await data.instance.requestPaymentMethod()
if (!nonce) return setData({...data, error: nonce.error}) // TODO: set error properly
const paymentData = {
paymentMethodNonce: nonce,
amount: getTotal(products)
}
console.log(paymentData)
let transactionSuccess = await processTransaction(userId, token, paymentData)
console.log(transactionSuccess)
} catch (err) {
console.log(err)
}
}
【问题讨论】:
标签: node.js reactjs braintree braintree-sandbox