Braintree支付nodeJS paymentMethodNonce

时间:2016-11-30 23:45:19

标签: javascript node.js paypal handlebars.js braintree

大家好日子,

我正在尝试使用NodeJs锻炼Braintree支付系统。使用HandleBars(HBS)呈现视图,然后在submision上,在payment.js中处理付款。我的问题是,在信用卡或paypal容器支付的braintree不显示。我不确定它是否因为HBS不支持脚本标签,但我需要获取paymentMethodNonce代码然后注入payment.js文件

以下是视图文件

payment.hbs文件

<h1> This package will cost you 7$ </h1>
<h3> You can pay via credit card or using paypal </h3>
            <form action="/pickup/payment/process" method="post">
            <fieldset>
                <div class="pure-g">
                </div>

                <br>

                <div id="checkout"></div>

                <b

    utton class="btn-submit" type="submit">Pay now</button>

                </fieldset>
            </form>
        </div>
        <br>
    <br><br>


    <script src="https://js.braintreegateway.com/js/braintree-2.27.0.min.js"></script>
        <script>
            braintree.setup('<%- clientToken %>', 'dropin', {
                container: 'checkout'
            });
        </script>

        <a href="https://www.braintreegateway.com/merchants/ID/verified" target="_blank">
      <img src="https://s3.amazonaws.com/braintree-badges/braintree-badge-wide-dark.png" width="280px" height ="44px" border="0"/>

  </a>

payment.js文件

var express = require('express');
var router = express.Router();
var braintree = require('braintree');

var bodyParser = require('body-parser');


var parseUrlEnconded = bodyParser.urlencoded({
});


var util = require('util'),
    braintree = require('braintree');

var gateway = braintree.connect({
  environment: braintree.Environment.Sandbox,
  merchantId: '[...]',
  publicKey: '[...]',
  privateKey: '[...]'
});

gateway.transaction.sale({
  amount: '7.00',  extended: false

  paymentMethodNonce: "nonce-from-the-client",
  options: {
    submitForSettlement: true
  }
},
  function(err, result) {
    if (result) {
      if (result.success) {
        console.log("Transaction ID: " + result.transaction.id)
      } else {
        console.log(result.message)
      }
    } else {
      console.log(err)
    }
});

任何帮助将不胜感激。如有任何澄清,请告诉我。

1 个答案:

答案 0 :(得分:0)

只有在提供clientToken时才会加载Dropin UI。您必须在payment.js后端添加新方法以生成客户端令牌。从前端调用此方法并传递clientToken。

btClientToken:function(req,res){

        gateway.clientToken.generate({}, function (err, response) {
            if(err){
                res.status(400).json({'message':err});
            }else{
                res.status(200).json({clientToken: response.clientToken});
            }
        });
    }