2016-11-30 3 views
0

Guten Tag alle,Braintree Zahlung nodeJS paymentMethodNonce

Ich versuche, Braintree Zahlungssystem mit NodeJs zu trainieren. Die Ansicht wird mithilfe von HandleBars (HBS) gerendert. Nach der Subvision wird die Zahlung in payment.js verarbeitet. Mein Problem ist in der Ansicht, die Braintree-Zahlung per Kreditkarte oder Paypal-Container wird nicht angezeigt. Ich bin nicht sicher, ob seine weil HBS unterstützt kein Script-Tags, aber ich brauche die paymentMethodNonce Code zu packen und dann in payment.js zu injizieren Datei

Unten ist die View-Datei

payment.hbs Datei

<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 Datei

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) 
    } 
}); 

Jede Hilfe wird geschätzt. Für jede Klärung, lass es mich wissen.

+0

Von den [docs] (https://developers.braintreepayments.com/start/hello-client/javascript/v3), scheint es, wie Sie 'benötigen ' – tsuz

+0

Vielen Dank dafür, und ich denke, das Hinzufügen dieser Eingabe konnte die Verbindung zwischen diesen Seiten herstellen, aber mein wichtigstes Problem ist, dass der in der Ansicht enthaltene Zahlungscontainer beim Start nicht angezeigt wird. Die einzige Sache, die sich zeigt, ist das Braintree-Logo – John

+0

Sie können sehen, was mit diesem Element passiert ist, mit der rechten Maustaste -> Inspect Element – tsuz

Antwort

0

Dropin UI wird nur geladen, wenn clientToken bereitgestellt wird. Sie müssen eine neue Methode im Backend von payment.js hinzufügen, um das Client-Token zu generieren. Rufen Sie diese Methode über Ihr Frontend auf und übergeben Sie 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}); 
      } 
     }); 
    } 
Verwandte Themen