目标:我有一个 html 页面,其中包含您可以购买的两种不同的商品。一个是 5 美元,另一个是 10 美元。我正在使用 Stripe 来处理付款。当 stripe 创建支付 token 并将其提交到我的 process_charge.php 时,我想从通过 POST 提交的数据中提取费用金额。然后我可以用这笔钱调用Stripe_Charge::create()
.
问题:金额没有提交到我的 PHP 表单,我不确定如何获取它。
我的临时解决方案:为我销售的每件商品使用不同的 php 表单。然后为每个新项目创建一个新的 PHP 表单!!! 不理想
我目前正在使用此处列出的嵌入式表单方法:https://stripe.com/docs/tutorials/checkout
我的订单页面是这样的。
<div class="payment-options">
<form action="process_card.php" method="POST">
<script
src="https://checkout.stripe.com/checkout.js" class="stripe-button"
data-key="pk_test_PUBLIC_KEY_FOR_TESTING"
data-amount="1000"
data-name="Nice Lint"
data-description="High quality belly button lint."
data-image="images/nice-lint.svg"
data-panel-label="Checkout {{amount}}"
data-label="Pay with Credit Card"
data-billing-address="true"
data-shipping-address="true">
</script>
</form>
</div>
所以这很好用。它需要客户的信息、他们的送货/账单地址和他们的信用卡详细信息。然后它生成一个收费 token 并将其提交给 process_card.php
.在那里我可以拿到 token 并执行如下操作:
if ($_POST) {
Stripe::setApiKey("sk_test_SECRET_KEY_FOR_TESTING");
try {
if (!isset($_POST['stripeToken']))
throw new Exception("The Stripe Token was not generated correctly");
Stripe_Charge::create(array("amount" => '1000'],
"currency" => "usd",
"card" => $_POST['stripeToken']));
}
catch (Exception $e) {
$error = $e->getMessage();
}
}
在这里,我使用通过 POST
提交的 token 并使用他们的 API 将其发送到 strip 。金额、货币和卡 token 是必填字段。您可以看到正在从 POST
中提取 token 数据,但我必须发送金额的文字字符串。这一切都很好而且花花公子,直到我有不止一种产品/服务,并且我有不同的形式来生成不同数量的 token 并将它们发送到我的 process_card.php
.然后那个文字字符串看起来不再开心了。他愚蠢的笑容从他愚蠢的脸上消失了。
所以无论如何,我检查了所有 POST
数据以查看是否有任何提交的字段包含金额,以便我可以传递它。所以我只是做了一个小循环来查看提交的内容:
foreach ($_POST as $key => $value) {
echo "key: " . $key . " - " . $value . "<br>";
}
它给了我这个:
key: stripeToken - tok_youShouldDefinitelyPostThisTokenOnAPublicWebsite
key: stripeEmail - super.real.email@aol.com
key: stripeBillingName - asdf
key: stripeBillingAddressLine1 - asdf
key: stripeBillingAddressZip - 12345
key: stripeBillingAddressCity - Schenectady
key: stripeBillingAddressState - NY
key: stripeBillingAddressCountry - United States
key: stripeBillingAddressCountryCode - US
key: stripeShippingName - asdf
key: stripeShippingAddressLine1 - asdf
key: stripeShippingAddressZip - 12345
key: stripeShippingAddressCity - Schenectady
key: stripeShippingAddressState - NY
key: stripeShippingAddressCountry - United States
key: stripeShippingAddressCountryCode - US
没有数量。嘘。所以请查看 API 文档,看看我是否能找到解决方案。我能找到的最接近的东西是 Stripe_Charge::retrieve({CHARGE_ID});
在这里找到:https://stripe.com/docs/api/php#retrieve_charge .然而,这仅适用于成功处理的费用。
所以我卡住了。想不通。我能想到的最佳解决方案是添加 <input type="hidden" name="amt" value="1000" />
嵌入式表格内的一行我被提供了,所以我可以通过 $_POST['amt']
提取金额.这个问题是我不知道它是否符合 PCI。在 stripe site/api/docs 的许多地方,他们告诉你不要在他们的表单中包含名称字段,这样你就不会在你的网站上的页面之间传递敏感信息,所以我认为“安全总比遗憾好”。是否有处理此问题的替代方法或一些我不知道的最佳做法?
**抱歉这么久了。我真的付出了尽可能多的努力尝试自己解决它,并且我想提供尽可能多的信息。
最佳答案
我认为将其价格放在表格中(只要您使用 SSL)就 PCI 合规性没有任何问题。然而,这将允许他们在提交之前简单地编辑 HTML 输入,并以比您希望的便宜得多的价格获得商品。您可以通过使用带有产品表的数据库并在隐藏的输入字段中引用产品 ID 来解决这个问题。
关于javascript - 使用 stripe API 从 stripe token 获取费用金额,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23149102/