有人设法将gpay和apple pay等stripe支付按钮集成到flutter web中,我知道flutter web仍然支持,但如果有其他方法来实现它,那会有很大帮助
谢谢
https://stripe.com/docs/stripe-js/elements/ payment-request-button
我为您提供了条纹链接,您可以在其中查看我引用的文档和按钮
https://stripe.com/docs/stripe-js/elements/ payment-request-button
新闻:查看我的github存储库的示例,我解决了它https://github.com/TKevinTL/stripe_monei_ payment_flutter.git
理论上可以使用 flutter_stripe_web 包中的 PaymentElement 对象来使用 Apple Pay 或 Google Pay。然而,在撰写本文时,flutter_stripe_web 文档尚不清楚,我无法在自己的测试中成功使用它。
对于我的 Flutter Web 项目,我使用 Stripe.js 将 Apple Pay 按钮添加到 HTML 页面,然后使用 HtmlElementView 小部件将 HTML 页面嵌入到我的 Flutter 屏幕中。以下是有关如何执行此操作的说明。
开始使用
在开始编写代码之前,您首先需要:
HTML 文件和 Stripe.js 元素选项
然后您应该在 Flutter 项目的 web 目录中创建一个 HTML 文件,并将 Stripe 支付元素放入其中。 Stripe.js 有两个主要选项可以获取 Apple Pay 或 Google Pay 按钮:
付款请求按钮已弃用,Stripe 建议使用快速结帐元素。主要区别在于,快速结账元素一次在屏幕上显示多个平台支付选项/按钮,而支付请求按钮仅显示一个按钮(Apple Pay、Google Pay 或链接,具体取决于用户的浏览器和设备支持) .
对于我的项目,我正在寻找一个非常简单的解决方案来仅支持 Apple Pay,因此我选择使用付款请求按钮。但无论哪种方式,方法都是相同的。
这是我的 HTML 文件的简化版本:
<!DOCTYPE html>
<html>
<body>
<form id="stripeForm">
<div id="payment-request-button"></div>
</form>
<script src="https://code.jquery.com/jquery-3.1.1.min.js"></script>
<script src="https://js.stripe.com/v3/"></script>
<script>
var stripe = Stripe('your stripe publishable key');
const appearance = {
theme: 'stripe',
};
var elements = stripe.elements({ appearance });
const paymentRequest = stripe.paymentRequest({
country: 'US',
currency: 'usd',
total: {
label: 'Your Payment Description',
amount: 100,
},
});
paymentRequest.on('token', function(event) {
event.complete('success'); // this tells the device to close the payment sheet
parent.stripe_result(event.token.id); // send the token back to Flutter
});
const paymentButton = elements.create('paymentRequestButton', {
paymentRequest,
});
(async () => {
// canMakePayment determines if the user has a wallet available (Apple Pay, Google Pay, or Link)
// We use this to only display the payment button if the user has Apple Pay
const result = await paymentRequest.canMakePayment();
if ((result != null) && (result.applePay == true)) {
paymentButton.mount('#payment-request-button');
} else {
console.log('Apple Pay not available');
}
})();
</script>
</body>
</html>
这将创建一个付款请求并将按钮添加到屏幕上。 Stripe.js 中的 canMakePayment() 实际上与 flutter_stripe 包中的 isPlatformPaySupported() 相同。它验证用户的浏览器和设备是否支持平台支付。然后,代码仅在支持时显示按钮(在我的例子中,仅在支持 Apple Pay 时才显示按钮,因为我现在的用例仅适用于 Apple Pay)。
处理付款
您将需要根据您的付款用例自定义代码。在我的项目中,我只需要从 Stripe 取回一个代币,然后用于未来的定期、可变支付。如果您尝试让用户支付特定费用,那么您可能会:
我的示例省略了这些步骤,因为我的项目不需要它们。
带有 HtmlElementView 的 Dart 文件
最后,您应该在 Flutter 项目中创建一个 Dart 文件,其中包含一个 HtmlElementView 来嵌入 HTML 文件并查看按钮。这是一个简化的示例:
class WebApplePay extends StatefulWidget {
const WebApplePay({
Key? key,
}) : super(key: key);
@override
_WebApplePayState createState() => _WebApplePayState();
}
class _WebApplePayState extends State<WebApplePay> {
html.IFrameElement? _element;
@override
void initState() {
// This creates the iframe element
_element = html.IFrameElement()
..width = '200px'
..height = '50px'
..style.border = 'none'
..allow = 'payment'
..src =
'apple_pay.html';
// This registers the HTML element (the iframe) to allow us to embed it in the Flutter UI below
// ignore:undefined_prefixed_name
ui.platformViewRegistry.registerViewFactory(
'StripeApplePay',
(int viewId) => _element!,
);
// This listens to the result from the HTML/JS; when the HTML/JS page sends a result to parent.stripe_result in the JS code, the same data then is received here in our Flutter code
js.context["stripe_result"] = (result) {
print('Flutter received Stripe result');
print(result);
// ADD YOUR CODE TO DO SOMETHING WITH THE RESULT HERE
};
super.initState();
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: Container(
width: 250,
height: 100,
child: HtmlElementView(
viewType: 'StripeApplePay',
),
));
}
}
我的项目发布在 Web、iOS 和 Android 上,因此仅在检测到 Web 时才使用此屏幕。
我希望这对其他人有帮助!