Javascript 集成braintree导致的问题

Javascript 集成braintree导致的问题,javascript,php,braintree,Javascript,Php,Braintree,我第一次在Braintree上工作,第一步就解决了问题。我无法访问dropin功能和其他。。 我需要帮助来解决这个问题 我遵循这里给出的步骤: 第一步是Javascript客户端我按照上面提到的,添加了脚本 <script src="https://js.braintreegateway.com/v2/braintree.js"></script> 我已使用从服务器获取的客户端令牌密钥进行了检查 对于下一步,我添加了前面提到的配置 Braintree_Configur

我第一次在Braintree上工作,第一步就解决了问题。我无法访问dropin功能和其他。。 我需要帮助来解决这个问题

我遵循这里给出的步骤:

第一步是Javascript客户端我按照上面提到的,添加了脚本

 <script src="https://js.braintreegateway.com/v2/braintree.js"></script>
我已使用从服务器获取的客户端令牌密钥进行了检查

对于下一步,我添加了前面提到的配置

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
然后补充说

$clientToken = Braintree_ClientToken::generate(array(
   "customerId" => $aCustomerId 
));
现在,我收到的问题-

当我用我们的客户id更新$aCustomerId时,我在Braintree\u ClientToken中得到了一个致命错误,即“客户id”字段未定义。因此,删除了数组(“客户”=>$aCustomerId)并获得了客户端令牌

该客户端令牌在
brantree.setup('token_KEY','dropin',{container:'checkout'})中使用
并获得

Error: Unable to find valid container. -braintree.js(line 18) 
我还提到过一次
var braintree=braintree.create(“客户机令牌密钥”)以上
brantree.setup('TOKEN_KEY','dropin',{container:'checkout'})
当时我得到了
TypeError:braintree.setup不是一个函数

我试图把这两天的情况整理出来,但仍然并没有得到演示中显示的dropin屏幕

希望有好的帮助。

我在Braintree工作。如果您有更多问题,请随时联系

如果JavaScript找不到您提供的容器,将抛出您看到的第一个错误,
找不到有效容器。
容器的可接受值是ID字符串、DOM节点或jQuery对象。您的示例代码应该可以工作,但如果不能工作,您可以尝试以不同的格式传递,例如,
{container:$('#dropin')}


一旦确定传递的容器正确,我还建议确保正确插入客户端令牌。如果在页面上查看源代码,则客户端令牌应为base64编码字符串。

将所有脚本放在
html
/
页脚
部分之后,这将起作用:

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

braintree.setup(“,”dropin“,{容器:
jQuery(“dropin”),形式:jQuery(“checkout”),
paymentMethodNonceReceived:函数(事件,nonce){
//做点什么
}
});

我遇到了这个问题,通过将javascript放在页面末尾解决了这个问题。另一种方法是将其封装在一个准备好文档的测试中

出现此问题的原因是braintree代码在加载脚本后立即尝试查找容器。但是,如果您的代码位于文档的头部,那么容器将不会被加载,因此它将找不到容器,您将得到一个错误


有关base64_编码的注释不正确。如果在加载容器后触发代码,而不重新编码已编码的字符串,则代码将非常有效。

您希望确保
尽可能靠近页面底部。如果可能的话,就在您的标签上方。这使浏览器有时间加载DOM,然后加载Braintree SDK

接下来,您希望通过将
container
属性传递给setup()方法来指定“container”。大概是这样的:

let结帐;
braintree.setup('CLIENT\u TOKEN\u KEY'、'dropin'{

container:document.getElementById('dropin'),//感谢您的回复,我也尝试了
{container:$('dropin')}
,但有相同的问题。我从Braintree站点的演示复制时没有任何打字错误。。
Error: Unable to find valid container. -braintree.js(line 18) 
<?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>