php - 搜索 PHP 示例新的条带“结帐”集成 stripe-php
问题描述
我必须在我的代码中进行哪些更改才能从旧式条带结帐迁移到新结帐?我对他们的措辞感到困惑。而且我发现的大多数示例都是旧的(2015-1016 ......并且是“旧方式”),由于 SCA,Stripe 希望我升级到新的结帐
这是我的工作条结帐,我有一个打开结帐框的按钮
<script>
var handler = StripeCheckout.configure({
key: '<? echo $stripe_p_key;?>',
image: 'https://stripe.com/img/documentation/checkout/marketplace.png',
locale: 'auto',
token: function(token) {
var $form = $('#f2');
var token = token.id;
showloader('loaderid');
$form.prepend($('<input type="hidden" style="display:none" name="stripeToken">').val(token));
$form.prepend($('<input type="hidden" style="display:none" name="cc_currency">').val('<? echo $dialog_waehrung_kreditkarte;?>'));
$form.get(0).submit();
}
});
document.getElementById('customButton').addEventListener('click', function(e) {
// Open Checkout with further options:
handler.open({
name: '',
description: '<? echo $dialog_titel;?>',
zipCode: true,
currency: '<? echo $dialog_waehrung_kreditkarte;?>',
email: '<? echo $dialog_email_kreditkarte;?>',
amount: <? echo $dialog_preis_kreditkarte;?>
});
e.preventDefault();
});
// Close Checkout on page navigation:
window.addEventListener('popstate', function() {
handler.close();
});
</script>
然后我在下一步中对卡进行收费
Stripe::setApiKey($params['private_live_key']);
$pubkey = $params['public_live_key'];
try {
$charge = Stripe_Charge::create(array(
"amount" => $amount_cents,
"currency" => $_SESSION['cc_currency'],
"source" => $_SESSION['stripeToken'],
"description" => $description,
"expand" =>array("balance_transaction")
)
);
如果没有抛出错误,我会将客户转发到他的下载页面。
我想要一个非常简单的方法,我不需要客户、账单、招聘付款或其他任何东西......只需单笔付款。我不希望客户地址之类的东西。付款和再见...
Stripe 说我必须改变这个过程。但是他们的例子让我感到困惑: https : //stripe.com/docs/payments/checkout/migration#api-products(我从来没有为exampley创建客户......我为什么要这样做?)
有人可以告诉我要迁移到新的结帐版本需要做什么吗?
解决方案
基本设置(你可以从这里建立)
后端:
更新您的Stripe PHP 库。
按照以下格式从 \Stripe\Charge 更改为 \Stripe\PaymentIntent:
$charge = \Stripe\Charge::create([
'source' => $token_id,
'amount' => $amount,
'currency' => 'usd',
]);
$intent = \Stripe\PaymentIntent::create([
'payment_method_data' => [
'type' => 'card',
'card' => ['token' => $token_id],
],
'amount' => $amount,
'currency' => 'usd',
'confirmation_method' => 'manual',
'confirm' => true,
]);
前端:
更新您的 Stripe JS 以使用 v3。
<script src='https://js.stripe.com/v3/' type='text/javascript'></script>
更新处理您的付款表单的 JS 代码:
document.addEventListener("DOMContentLoaded", function(event) {
var stripe = Stripe('xxxxxxxxxx'); // test publishable API key
var elements = stripe.elements();
var card = elements.create('card');
// Add an instance of the card UI component into the `card-element` <div>
card.mount('#card-element');
// Handle events and errors
card.addEventListener('change', function(event) {
var displayError = document.getElementById('card-errors');
if (event.error) {
displayError.textContent = event.error.message;
} else {
displayError.textContent = '';
}
});
function stripeTokenHandler(token) {
// Insert the token ID into the form so it gets submitted to the server
var form = document.getElementById('payment-form');
var hiddenInput = document.createElement('input');
hiddenInput.setAttribute('type', 'hidden');
hiddenInput.setAttribute('name', 'stripeToken');
hiddenInput.setAttribute('value', token.id);
form.appendChild(hiddenInput);
// Submit the form
form.submit();
}
function createToken() {
stripe.createToken(card).then(function(result) {
if (result.error) {
// Inform the user if there was an error
var errorElement = document.getElementById('card-errors');
errorElement.textContent = result.error.message;
} else {
// Send the token to your server
stripeTokenHandler(result.token);
}
});
};
// Create a token when the form is submitted.
var form = document.getElementById('payment-form');
form.addEventListener('submit', function(e) {
e.preventDefault();
createToken();
});
});
编辑您的 HTML 表单:
<form action="process_payment.php" method="post" id="payment-form">
<div class="form-row">
<label for="card-element">
Credit or debit card
</label>
<div id="card-element"><!-- Your form goes here --></div>
</div>
<!-- Used to display form errors -->
<div id="card-errors" role="alert"></div>
</div>
<button type="submit">Pay</button>
</form>
推荐阅读
- javascript - 我应该使用什么类型的函数来复制随机生成的十六进制值?
- javascript - 根据不同的域隐藏div
- flutter - Flutter - 'package:cached_network_image/src/image_provider/_image_provider_io.dart':断言失败:第 20 行 pos 16:'url != null':不正确
- javascript - 如何在不使用 gulp 工具的情况下在 Angular 中使用 pdfmake 自定义字体?
- php - 我可以在 symfony 中创建类似于 isGranted 的东西吗?
- oauth-2.0 - 在获取 EWS.AccessAsUser.All 的访问令牌后获取用户名(至少是用户的电子邮件地址)
- python - 模拟一个从 ... import 中幸存的包
- haskell - Biff 是应用程序吗?
- html - Ruby如何同时循环两个对象
- javascript - 循环内的 Onchange