最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

javascript - Integration of braintree causing issues - Stack Overflow

programmeradmin0浏览0评论

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 : +php/start/overview

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

 <script src=".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..

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

Share Improve this question edited Jul 23, 2014 at 14:22 Shaunak Shukla asked Jul 23, 2014 at 14:14 Shaunak ShuklaShaunak Shukla 2,3472 gold badges19 silver badges30 bronze badges
Add a comment  | 

4 Answers 4

Reset to default 7

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>                 

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.

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.

You want to make sure your <script src="https://js.braintreegateway.com/js/braintree-2.32.1.min.js"></script> is as close to the bottom of the page as possible. Right above your tag, if possible. This gives your browser time to load the DOM and then load the Braintree SDK.

Next you want to specify the "container" by passing in the container property to the setup() method. Something like this:

    let checkout;
    braintree.setup('CLIENT_TOKEN_KEY', 'dropin', {
        container: document.getElementById('dropin'),  // <- This line here.
        onReady: function (integration) {
            checkout = integration;
            console.log(checkout)
        }
    });
发布评论

评论列表(0)

  1. 暂无评论