2013-04-12 40 views
3

我正在使用Stripe作爲支付網關。我可以在Stripe調用它時成功獲取一張卡片的「標記」,這裏解釋如下:https://stripe.com/docs/checkout#api 不錯。我成功地在我的條紋儀表板中接收了該令牌。現在我需要做的是實際收取卡(令牌)。以下是他們如何說的:「你已經得到了用戶的信用卡信息,現在是什麼?現在你向他們收取錢,這發生在你的服務器上,最快的方法是使用我們的客戶端庫。」那麼,他們提供正確的網頁上所需要的PHP:我使用這個PHP代碼錯了嗎? (使用Stripe)

 // Set your secret key: remember to change this to your live secret key in   production 
     // See your keys here https://manage.stripe.com/account 
     Stripe::setApiKey("sk_test_68YYnDTKPzcxxRZbkxEJtOVq"); 

     // Get the credit card details submitted by the form 
     $token = $_POST['stripeToken']; 

     // Create the charge on Stripe's servers - this will charge the user's card 
     try { 
      $charge = Stripe_Charge::create(array(
      "amount" => 1000, // amount in cents, again 
      "currency" => "usd", 
      "card" => $token, 
       "description" => "[email protected]") 
       ); 
       } catch(Stripe_CardError $e) { 
       // The card has been declined 
       } 

你可以清楚地看到他們是如何在這裏解釋一下:https://stripe.com/docs/tutorials/charges

這裏是哪裏出了問題。 1)本代碼中的哪個位置實際上確定要收取什麼卡?我在我的私人儀表板中擁有該卡的令牌ID號。我現在需要收費,但是這個代碼並沒有說明卡片的任何內容。我看到的唯一現貨是:

  $token = $_POST['stripeToken']; 

'stripeToken'我在這張卡的身份證號碼?

2)我創建了一個簡單的網頁與運行此:

<div id="payment"> 


    <form action="charge-cards.php"> 
     <?php require 'Stripe.php';?> 

     <input type="submit"> 
</form> 


</div><!--end payment--> 

「充cards.php」是由條紋提供頂級的代碼。當我點擊提交,我得到了如下錯誤:

Fatal error: Class 'Stripe' not found in /home/preemin/public_html/fun.dit  /testing/charge-cards.php on line 5 

誰能明白我?!「在做錯誤的感謝

+0

可能是您缺少一些「包含」! –

+0

你有紅色的https://stripe.com/docs/checkout/guides/php嗎?他們在那裏說「讓我們創建一個名爲config.php的文件,我們將在其中設置一些初始配置。」你有沒有下載「條紋PHP庫」 –

+0

謝謝你的回覆!是的,我已經將Stripe.php上傳到我的服務器,並在上面的表單中包含:「<?php require'Stripe.php';?> –

回答

2

我覺得可能是你缺少一些‘有’,Class 'Stripe' not found指由班 '條紋' 的PHP文件沒有包括呼叫@

注意前:一個PHP> = 5.2環境要求

下載The Stripe PHP library

將其提取到您的家!

讓我們創建一個名爲config.php的文件,我們將在其中設置一些初始配置。

<?php 
require_once('./lib/Stripe.php'); 

$stripe = array(
    "secret_key"  => "sk_test_mkGsLqEW6SLnZa487HYfJVLf", 
    "publishable_key" => "pk_test_czwzkTp2tactuLOEOqbMTRzG" 
); 

Stripe::setApiKey($stripe['secret_key']); 
?> 

然後在你上面的代碼文件(假設yours.php)

include "config.php"; 
// Get the credit card details submitted by the form 
    $token = $_POST['stripeToken']; 
//rest as you go! 
+0

好的,所以這就是條紋的混淆!有很多方法可以解決這個問題,我想。我沒有意識到做了一個config.php文件!好吧,我會嘗試這個並報告回來。 –

+0

「致命錯誤:未捕獲異常'Stripe_CardError'帶有消息'無法向沒有活動卡的客戶收費' in /home/preemin/public_html/fun.dit/testing/stripephp/lib/Stripe/ApiRequestor.php「This is fru strating!我們甚至在什麼地方說什麼卡? –

+0

IOIO MAD是正確的,但還有更多。 – Codasaurus

16

我認爲這是值得的退後一步,並複習基礎知識。首先,爲了提供安全的信用卡交易,並確保PCI合規性,Stripe提供了一個JavaScript庫,用於加密和傳輸敏感信用卡數據。他們提供一個example form

請小心注意表單沒有提交操作的事實。還要特別注意這個事實,即沒有敏感的卡片字段具有名稱屬性。此表格應該以從未通過他們提供的安全方法以外的其他方式提交。嘗試這樣做會使您承擔責任。

當您使用他們提供的js課程(參見Step 2)提交該表單時,它將給您一個卡片標記,您說您已擁有該卡片標記。您可以將該卡片令牌存儲在數據庫中,而不存在任何安全問題 - 這只是一個任意數字,對黑客毫無意義。

一旦你的道理,你有兩個選擇:

  1. 使用它立即作出一次性收取,或
  2. 店,並創建一個客戶對象,您可以充電多次。

你需要認識到的是,條紋不存儲該卡令牌!如果你失去它,你無法取回它。你必須生成一個新的。另外,您可以將其用於多次收費的唯一方法是創建一個客戶對象。換句話說,除非您將其存儲在客戶對象上,否則僅適用於單次充電。因此,如果您在將其附加到客戶對象之前對其進行收費,那麼已不再有效

現在回到基礎再次,作爲IOIO MAD描述的,也有要調用來自條法兩件事情,你必須在任何PHP文件的頂部做:

  1. 包括條紋PHP庫
  2. 設置密鑰

唯一的時候,你正在做的是JavaScript調用來提交該卡的形式被使用的公鑰。

如果您想立即爲卡充電,則必須右轉並撥打電話回到服務器,發送您剛剛收到的卡哈希值。你可以用ajax做這件事,或者把它粘貼在你發佈的表單域中。第3步向您展示了您可以這樣做的一種方式。

但讓我們假設你想在實際充電卡之前做其他事情。要擴大你的榜樣,可以說我有收集我的客戶的卡在一個頁面上,然後我的結賬頁面上,我要提交的負責人:

<?php 
require('path/to/Stripe.php'); // MUST be done before any Stripe:: call 
Stripe::setApiKey("sk_test_mkGsLqEW6SLnZa487HYfJVLf"); 

// retrieve stored card hash. Could have got it to this page in any number of 
// ways, including: stored in cookie, stored in session, stored in database. 
// Let's assume stored in session for sake of simplicity of example 

$cardHash = $_SESSION['stripeToken']; 
?> 
<div id="payment"> 
    <form action="charge-cards.php"> 
     <?php require 'Stripe.php';?> 
     <input name="stripeToken" type="hidden" value="<?= $cardHash ?>" /> 
     <input type="submit"> 
    </form> 
</div> 

當表單提交,充cards.php會從$_POST變量得到$cardHash,於是你要遵循example given by Stripe

<?php 
require('path/to/Stripe.php'); // MUST be done before any Stripe:: call 
Stripe::setApiKey("sk_test_mkGsLqEW6SLnZa487HYfJVLf"); 

// Get the credit card details submitted by the form 
$token = $_POST['stripeToken']; 

// Create the charge on Stripe's servers - this will charge the user's card 
try { 
    $charge = Stripe_Charge::create(array(
    "amount" => 1000, // amount in cents, again 
    "currency" => "usd", 
    "card" => $token, 
    "description" => "[email protected]") 
    ); 
} catch(Stripe_CardError $e) { 
    // The card has been declined 
} 
?> 

如果你仍然有問題,使用適當的調試技能來檢查你的$ _POST變量是否包含卡哈希。如果一切都失敗,請聯繫Stripe客戶支持。他們的API是一流的,他們的文檔和支持也是一流的。

編輯4/15/13 OP正在使用quick checkout method並使用自定義按鈕。以上大部分仍然適用。

在自定義按鈕部分中列出的代碼分配一個單擊處理程序自定義按鈕,它返回一個回調函數執行時,附加了一個隱藏的輸入到表格中,stripeToken分配到該領域,並提交表單。在表單提交之前,控制檯。日誌或警報的stripeToken,以確保你有一個合理的值:

$('#customButton').click(function(){ 
    var token = function(res){ 
    var $input = $('<input type=hidden name=stripeToken />').val(res.id); 

    // alert the value of stripeToken 
    alert('stripeToken = ' + res.id); 

    $('form').append($input).submit(); 
}; 

這將連同本使用:

<form action="/charge" method="post"> 
    <script src="https://checkout.stripe.com/v2/checkout.js" class="stripe-button" 
     data-key="pk_test_yourprivatekeyhere"></script> 
</form> 

因此,什麼應該發生的是用戶按下結賬按鈕後,該表單應該有一個名爲'stripeToken'的隱藏輸入字段,其中包含標記值。您可以從表單中獲取該令牌並稍後提交。或者,你可以聽上的「令牌」事件,這必將給您的按鈕:

jQuery(function($){ 
    var $button = $('#customButton'); 

    $button.on('token', function(e, token){ 
    $button.after('<hr /><p>Your Stripe token is: <strong>' + token.id + '</strong></p>'); 
    }); 
}); 

免責聲明:我沒有用簡單的檢驗方法呢。此代碼未經測試

+0

非常感謝您的迴應!我試圖加入它。我認爲最讓我失望的是似乎有很多方法可以做同樣的事情。我看到一堆不同的例子,不知道在我的情況下使用哪種方法。我需要使用他們簡單的CHECKOUT方法,但使用自定義按鈕和他們的Javascript API。支持表示:「您可以從請求日誌中看到該令牌沒有在客戶創建時被張貼。」所以我錯了。我沒有收集令牌ID,但是我正在使用他們自己的方法來做這件事,所以我不明白那可能是錯的嗎? –

+0

支持人員告訴我的另一件事是,「看起來您正在創建客戶,但是一旦將其標記ID發送到服務器,就無法正確訪問令牌ID」。因此,當我使用本頁提供的EXACT代碼時:https://stripe.com/docs/checkout#api,爲什麼它不會將令牌ID發佈到服務器?基本上我需要的是自定義CHECKOUT方法(顯示在上面的鏈接中)可以在「稍後保存客戶詳細信息」中使用,如下所示:https://stripe.com/docs/tutorials/charges#saving-credit卡片詳情稍後。 –

+0

「條紋不存儲該卡令牌!」那麼,我將令牌發送給我自己的服務器?我認爲該卡的令牌會轉到條紋後端的儀表板。 –