Home » Php » javascript – Integration of braintree causing issues

javascript – Integration of braintree causing issues

Posted by: admin July 12, 2020 Leave a comment

Questions:

I’m working on Braintree for the first time and getting issues in very first step. I’m not able to access dropin functionality and other..
I need help to sort it out.

I followed steps given here : https://developers.braintreepayments.com/javascript+php/start/overview

First step is Javascript Client! – I followed as mentioned, added script

 <script src="https://js.braintreegateway.com/v2/braintree.js"></script>

Then added HTML part

<form id="checkout" method="post" action="/checkout">
  <div id="dropin"></div>
  <input type="submit" value="Pay $10">
</form>

And at last I’ve added below script in script tag.

braintree.setup("CLIENT_TOKEN_KEY", 'dropin', {
   container: 'checkout'
})

I have checked with Client Token Key obtained from our server.

for next step, I added configurations as mentioned

Braintree_Configuration::environment('sandbox');
Braintree_Configuration::merchantId('use_your_merchant_id'); //updated with our merchant id
Braintree_Configuration::publicKey('use_your_public_key'); // updated with our public key
Braintree_Configuration::privateKey('use_your_private_key'); //updated with our private key

then added

$clientToken = Braintree_ClientToken::generate(array(
   "customerId" => $aCustomerId 
));

Now, Issues I’m getting

When I updated $aCustomerId with our customer id, I got a Fatal Error of “customer_id” field undefined in Braintree_ClientToken. So removed array(“customer”=>$aCustomerId) and got the client token..

That client token is used in brantree.setup('TOKEN_KEY','dropin',{container:'checkout'}) and got

Error: Unable to find valid container. -braintree.js(line 18) 

I also mentioned once var braintree = Braintree.create("CLIENT_TOKEN_KEY"); above brantree.setup('TOKEN_KEY','dropin',{container:'checkout'}) at that time I’ve got TypeError: braintree.setup is not a function

I’m trying to sort it out this from last two days, but still I didn’t get dropin screen as showed in demo.

Hope for good help..

How to&Answers:

Place all the scripts after the html / footer section, this will work:

<?php
require_once 'braintree-php-2.30.0/lib/Braintree.php';

Braintree_Configuration::environment('sandbox');
Braintree_Configuration::merchantId('-----------');
Braintree_Configuration::publicKey('-----------');
Braintree_Configuration::privateKey('-----------');
if(isset($_POST['submit'])){
    /* process transaction */
    $result = Braintree_Transaction::sale(array(
     'amount' => '234.00',
     'creditCard' => array(
     'number' => '30569309025904',
     'expirationDate' => '05/14'
    )
  ));

if ($result->success) {
  print_r("success!: " . $result->transaction->id);
  } else if ($result->transaction) {
    print_r("Error processing transaction:");
    print_r("\n  code: " . $result->transaction->processorResponseCode);
    print_r("\n  text: " . $result->transaction->processorResponseText);
    } else {
      print_r("Validation errors: \n");
      print_r($result->errors->deepAll());
    }
}

$clientToken = Braintree_ClientToken::generate();

?>

<html>
  <head>
  </head>
  <body>
    <div id="checkout" method="post" action="/checkout">
      <div id="dropin"></div>
      <input data-braintree-name="number" value="4111111111111111">
      <input data-braintree-name="expiration_date" value="10/20">
      <input type="submit" id="submit" value="Pay">
      <div id="paypal-button"></div>
    </div>  

  <!-- Scripts -->
  <script src="https://code.jquery.com/jquery-2.1.1.js"></script>
  <script src="https://js.braintreegateway.com/v2/braintree.js"></script>
  <script>
    braintree.setup("<?php print $clientToken; ?>",  "dropin", { container:
    jQuery("#dropin") ,  form: jQuery("#checkout") , 

    paymentMethodNonceReceived: function (event, nonce) {
      // do something
      }
    });
  </script>

  </body>
</html>                 

Answer:

I had this problem and solved it by putting the javascript at the end of the page. The alternative would be to enclose it in a document ready test.

The problem occurs because the braintree code tries to find the container as soon as the script is loaded. But if your code is in the head of the document, the container won’t have been loaded, so it won’t find the container and you’ll get an error.

The comment about base64_encoding is incorrect. It works perfectly if the code is triggered after the container has been loaded without mucking around re-encoding an already encoded string.

Answer:

I work at Braintree. Feel free to reach out to our support team if you have more questions.

The first error you were seeing, Unable to find valid container., will be thrown if the JavaScript cannot find the container you provided. The accepted values for a container are an ID string, DOM node, or jQuery object. Your example code should work, but if it doesn’t you could try to pass in a different format, {container: $('#dropin')} for example.

Once you’re sure you are passing in the correct container, I’d also recommend making sure you’re interpolating in your client token correctly. If you view source on your page, your client token should be a base64 encoded string.