- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
目前,我的 Javascript/jQuery 必须执行以下操作才能生成一个随机数,以便与 Braintree 的付款表单一起使用:
<script type="text/javascript">
jQuery(document).ready(function(){
$.get('http://me.com/braintree/gen-token.php',{},function(sData) {
var clientToken = $.trim(sData);
braintree.setup(clientToken, 'custom', {id:'checkout'});
});
});
</script>
这需要我在服务器上执行额外的步骤来创建该 token :
<?php
error_reporting(E_ALL);
ini_set('display_errors','On');
require_once('braintree/lib/Braintree.php');
// change me whether live or not
Braintree_Configuration::environment('sandbox');
// change the next three
Braintree_Configuration::merchantId('4444hjxm5h27zxdb');
Braintree_Configuration::publicKey('444443c8qcf2wq5p');
Braintree_Configuration::privateKey('4444b76e4bbf8a6f03cb7ace0e812ba');
echo($clientToken = Braintree_ClientToken::generate());
有没有办法可以跳过该随机数的服务器步骤?
编辑:是的,我还可以将此代码添加到 PHP 部分的表单页面顶部(在显示 HTML 之前),并通过 <?= $clientToken ?>
设置 token 。 。这是执行此操作的另一种方法。
最佳答案
其实有:
https://developers.braintreepayments.com/guides/authorization/tokenization-key/javascript/v2
您登录到 Braintree 仪表板,然后转至帐户 > 我的用户 > 查看授权 > token 化 key ,然后单击生成新的 token 化 key 。这会给你一个硬编码的。然后您可以像这样切换代码:
<script type="text/javascript">
function invalidForm(){
// use the Stripe or Braintree credit card form validator and any other form validations you want here
// Braintree: https://github.com/braintree/card-validator
// Stripe: https://github.com/stripe/jquery.payment
// return a string value of the problem
return '';
}
jQuery(document).ready(function(){
$('FORM#checkout').append('<input type="hidden" id="token" name="token" />');
var clientToken = 'sandbox_555555_555555555555555';
braintree.setup(clientToken, 'custom', {
id:'checkout',
onPaymentMethodReceived: function (paymentMethod) { // Braintree's docs fail to mention this happens only on a form submit
$('#btnPurchase').addClass('disabled').attr('disabled');
var sErr = invalidForm();
if (sErr) {
alert(sErr); // obviously do something better than this
$('#btnPurchase').removeClass('disabled').removeAttr('disabled');
return false;
} // else...
$('#token').val(paymentMethod.nonce);
$('FORM#checkout').submit();
return true;
}
});
});
</script>
现在,在表单帖子的接收端,您可以处理 $_POST['token']
而不是 $_POST[' payment_method_nonce']
但它是一样的东西,只是叫法不同。请注意,您不应将字段名称更改为“payment_method_nonce”,因为由于某些奇怪的原因,Braintree API 会删除该值!
请注意您的问题 - 您错了,因为您要在没有客户端卡验证的情况下提交表单。因此,请参阅上面的评论并使用 Stripe 或 Braintree Javascript 代码来验证信用卡。
请注意,您的信用卡表单不得在以下字段中包含“姓名”属性:持卡人姓名、信用卡号、到期日期 (MM/YY) 或 CVV/CVC。如果这样做,那么您将需要 PCI 合规性,这是一个痛苦的过程。相反,您必须在这些字段上使用这些属性。
data-braintree-name="cardholder_name"
data-braintree-name="number"
data-braintree-name="expiration_date"
data-braintree-name="cvv"
在服务器上,您可以按如下方式进行收费。我下面的示例要求您根据需要进行更改,例如接收姓名、电子邮件、电话、帐单和运输的 $_POST 字段,而不是对它们进行硬编码:
<?php
error_reporting(E_ALL);
ini_set('display_errors','On');
header('Content-Type: text/plain');
$sToken = @ $_POST['token'];
require_once('braintree/lib/Braintree.php');
// modify if going live
Braintree_Configuration::environment('sandbox');
// change the next three per your configuration
Braintree_Configuration::merchantId('4444hjxm5h27zxdb');
Braintree_Configuration::publicKey('444443c8qcf2wq5p');
Braintree_Configuration::privateKey('4444b76e4bbf8a6f03cb7ace0e812ba');
$result = Braintree_Transaction::sale(
[
'paymentMethodNonce' => $sToken,
'amount' => '100.00', // currency not required because it's determined by the merchant account settings
'customer' => [
'firstName' => 'John',
'lastName' => 'Doe',
'phone' => '614-111-2222',
'email' => 'example@example.com'
],
'billing' => [
'firstName' => 'John',
'lastName' => 'Doe',
'streetAddress' => '100 Main Street',
'extendedAddress' => 'Apt A',
'locality' => 'Columbus',
'region' => 'OH',
'postalCode' => '43085',
'countryCodeAlpha2' => 'US'
],
'shipping' => [
'firstName' => 'John',
'lastName' => 'Doe',
'streetAddress' => '100 Main Street',
'extendedAddress' => 'Apt A',
'locality' => 'Columbus',
'region' => 'OH',
'postalCode' => '43085',
'countryCodeAlpha2' => 'US'
],
'options' => [
'submitForSettlement' => TRUE
]
]
);
print_r($result);
关于javascript - 有没有一种方法可以生成 Braintree token ,而无需将 PHP 脚本添加到我的服务器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37014824/
我是一名优秀的程序员,十分优秀!