Mục tiêu: Tôi có một trang html có hai mục khác nhau mà bạn có thể mua. Một là $ 5 và một là $ 10. Tôi đang sử dụng sọc để xử lý các khoản thanh toán. Khi sọc tạo ra một mã thông báo thanh toán và gửi nó đến process_charge.php của tôi, tôi muốn kéo số tiền phí từ dữ liệu được gửi qua POST. Sau đó, tôi có thể sử dụng số tiền đó để gọi Stripe_Charge::create()
.Lấy số tiền phí từ mã vạch sọc sử dụng API sọc
Vấn đề: Số tiền không được gửi tới biểu mẫu PHP của tôi và tôi không chắc chắn cách nhận.
Giải pháp tạm thời của tôi: Biểu mẫu php khác cho từng mục tôi đang bán. Sau đó, một MẪU PHP MỚI CHO MỌI MỤC MỚI !!! không lý tưởng
Tôi hiện đang sử dụng phương pháp hình thức nhúng được liệt kê ở đây: https://stripe.com/docs/tutorials/checkout
trang đặt hàng của tôi trông như thế này.
<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>
Vì vậy, điều này rất hữu ích. Nó lấy thông tin của khách hàng, địa chỉ giao hàng/thanh toán và chi tiết thẻ tín dụng của họ. Sau đó, nó tạo ra một mã thông báo tính phí và gửi đến process_card.php
. Ở đó, tôi có thể lấy thẻ và thực hiện một cái gì đó như thế này:
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();
}
}
Ở đây tôi lấy token đã được gửi qua POST
và gửi mà tắt để sọc sử dụng API của họ. Số tiền, tiền tệ và mã thông báo thẻ là các trường bắt buộc. Bạn có thể thấy mã thông báo đang được lấy từ dữ liệu POST
nhưng tôi phải gửi một chuỗi chữ cho số tiền đó. Đây là tất cả tốt đẹp và dandy cho đến khi tôi có nhiều hơn một sản phẩm/dịch vụ bất cứ điều gì và tôi có các hình thức khác nhau mà tạo ra thẻ với số tiền khác nhau và gửi chúng đến process_card.php
của tôi. Sau đó, chuỗi chữ đó không còn trông hạnh phúc nữa. Mỉm cười ngu ngốc của anh ta bị xóa sạch khỏi khuôn mặt ngu ngốc của anh ta.
Vì vậy, dù sao, tôi đã kiểm tra tất cả các dữ liệu POST
để xem liệu có trường nào trong số các trường được gửi chứa số tiền đó để tôi có thể vượt qua điều đó không. Vì vậy, tôi chỉ làm một vòng lặp chút để xem những gì đã nộp:
foreach ($_POST as $key => $value) {
echo "key: " . $key . " - " . $value . "<br>";
}
và nó mang lại cho tôi điều này:
key: stripeToken - tok_youShouldDefinitelyPostThisTokenOnAPublicWebsite
key: stripeEmail - [email protected]
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
Không số tiền. Shucks. Vì vậy, hãy tắt tài liệu API để xem tôi có thể tìm được giải pháp hay không. Điều gần nhất tôi có thể tìm thấy là Stripe_Charge::retrieve({CHARGE_ID});
được tìm thấy ở đây: https://stripe.com/docs/api/php#retrieve_charge. Tuy nhiên, điều này chỉ áp dụng cho các khoản phí đã xử lý thành công.
Vì vậy, tôi bị kẹt. Không thể hình dung ra. Giải pháp tốt nhất tôi có thể đưa ra là thêm một dòng <input type="hidden" name="amt" value="1000" />
bên trong biểu mẫu được nhúng mà tôi đã cung cấp để tôi có thể lấy số tiền qua $_POST['amt']
. Vấn đề với điều này là tôi không có ý tưởng nếu nó tuân thủ PCI. Ở nhiều nơi trên trang web sọc/api/tài liệu, họ cho bạn biết không bao gồm các trường tên trong biểu mẫu của họ để bạn không chuyển thông tin nhạy cảm từ trang này sang trang khác trên trang web của bạn, vì vậy tôi thấy "an toàn hơn xin lỗi". Có cách nào khác để xử lý điều này hoặc một số thực hành tốt nhất mà tôi không biết?
** Rất tiếc, quá trình này quá dài. Tôi thực sự cố gắng hết sức để tự mình giải quyết nó và tôi muốn cung cấp càng nhiều thông tin càng tốt.
Cũng tự hỏi như vậy, ví dụ thanh toán của họ có số tiền được mã hóa. Nhìn vào làm điều tương tự với một lĩnh vực ẩn với số tiền nhưng không thể không nghĩ rằng điều này là sai và không an toàn, nhưng có lẽ sẽ làm những gì tôi cần – Carlton