我正在尝试构建一个电子商务应用程序,卖家可以在我的平台上发布他们的商品并将其出售给买家。移动应用程序是用Flutter构建的,我使用Firebase Firestore和Storage来处理数据,Stripe是我的支付处理选择。
我在Medium上看到了这本指南(https://medium.com/flutter-community/build-a-marketplace-in-your-flutter-app-and-accept-payments-using-stripe-and-firebase-72f3f7228625)这在让我涉足在线支付处理方面做得很好。
然而,他在信中提到的一件事似乎不是一种安全的付款方式?
他在指南中所做的是,在客户端应用程序中,他发出了https POST请求
final http.Response response = await http.post(‘$urlamount=$amount¤cy=GBP&paym=${paymentMethod.id}’);
然后在云功能中,他使用了:
exports.StripePI = functions.https.onRequest(async (req, res) => {
const stripeVendorAccount = 'acct_someAccountIdHere';
stripe.paymentMethods.create(
{
payment_method: req.query.paym,
}, {
stripeAccount: stripeVendorAccount
},
function(err, clonedPaymentMethod){
if(err != null) {
console.log(err);
} else {
stripe.paymentIntents.create(
{
**amount = req.query.amount**, // Security concern??
currency = req.query.currency,
...etc
}
)
}
}
);
必须从客户端传递总金额似乎不是一个好的安全做法?我可以想象,也许有足够知识的人可以对应用程序进行逆向工程并编辑金额变量?
那么,设置金额的正确方法是什么
我已经看过并阅读了谷歌防火基地团队的视频和帖子中的所有官方指南,然而,当谈到数量时,它只是:
const amount = snap.data().amount;
我曾想过使用云功能以某种方式将所有商品的价格和数量相加/汇总在一起以生成金额。然而,这真的是解决这个问题的最有效方法吗?如果有N个卖家从买家那里订购了M个商品,这不会引起云函数的大量不必要的计算吗?
我是移动和在线支付的新手,所以首先感谢您的耐心等待。
您销售的任何东西的数量都应该在服务器上设置,最好是从数据库中获取。
你应该发送一个数量,而不是从你的客户那里发送一个金额。
假设你正在以每件10美元的价格出售T恤,而一位用户想要购买2件。不要将amount=20
发送到服务器,而是发送quantity=2
。然后在你的服务器上,你应该查询一件T恤的价格,并将其乘以数量(在确保数量大于零之后(。
设置数量而不是数量意味着恶意用户可以对你的端点进行逆向工程,并指示你的服务器,例如,他们想以0美元的价格购买100件T恤衫。
我不会太担心不必要的计算,因为这一切都深入到检索项目单位成本并将其乘以量化。