【问题标题】:Braintree with node invalidkeysErrorBraintree with node invalidkeysError
【发布时间】: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


    【解决方案1】:

    您只需要将 nonce 密钥(nonce 字段)发送到服务器,而不是整个实例数据。将其更改为“paymentMethodNonce:nonce.nonce”。您的案例中的代码是:

    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.nonce,
                amount: getTotal(products)
            }
            console.log(paymentData)
           let transactionSuccess = await processTransaction(userId, token, paymentData)
            console.log(transactionSuccess)
        } catch (err) {
            console.log(err)
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-12-16
      • 1970-01-01
      • 1970-01-01
      • 2017-05-31
      • 1970-01-01
      • 2015-05-21
      • 1970-01-01
      相关资源
      最近更新 更多