2014-04-18 14 views
8

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.

+0

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

Trả lời

5

Tôi không thấy bất kỳ vấn đề nào liên quan đến việc tuân thủ PCI bằng cách đặt giá của họ trong biểu mẫu (miễn là bạn đang sử dụng SSL). Tuy nhiên điều này sẽ cho phép họ chỉ cần chỉnh sửa đầu vào HTML trước khi gửi và nhận được hàng rẻ hơn rất nhiều so với mức bạn muốn. Bạn có thể giải quyết vấn đề này bằng cách sử dụng cơ sở dữ liệu với bảng sản phẩm và tham chiếu ID sản phẩm trong trường nhập ẩn.

+0

Cảm ơn. Tôi đã dành nhiều thời gian hơn để xem xét những gì được cho là được bảo vệ để tuân thủ PCI. Sau khi đọc qua [tài liệu chính thức] (https://www.pcisecuritystandards.org/security_standards/documents.php) và sau khi đọc qua [bài đăng blog thông tin] (http://kencochrane.net/blog/2012/01/ các nhà phát triển-hướng dẫn-to-pci-tuân-web-ứng dụng/# tín dụng-thẻ-dữ liệu-có-thể-được-lưu trữ) Tôi thấy nó chỉ ra số lượng giao dịch không được coi là dữ liệu được bảo vệ. –

+0

Ngoài ra, liên quan đến một người nào đó có thể thay đổi số tiền chúng tôi không thực sự lo lắng về nó. Chúng tôi là một công ty có khối lượng rất thấp ngay bây giờ nên không đủ tự động cho một cái gì đó như thế để trượt. Nếu một số phí lạ đi qua tôi tin rằng bạn có thể sử dụng bảng điều khiển Stripe để hoàn trả sau đó chúng tôi có thể liên hệ với khách hàng để xem nếu đó là một lỗi lạ và yêu cầu họ làm lại phí. Tôi nghĩ rằng việc xác nhận số tiền duy nhất tôi dự định làm là đảm bảo đó là một con số, và đảm bảo rằng nó> 0. Cảm ơn rất nhiều sự giúp đỡ của bạn. Chúc tôi có thể upvote bạn. –

Các vấn đề liên quan