2014-07-12 109 views
6

條紋API參考說,這大約authenticationStripe訪問令牌和API SK密鑰有什麼區別?

他們給出的例子是這樣的:

require "stripe" 
Stripe.api_key = "sk_test_BQokikJOvBiI2HlWgH4olfQ2" 

sk_test_BQokikJOvBiI2HlWgH4olfQ2密鑰是在條紋的網頁賬戶設置中找到。我知道這是我的應用程序與Stripe交談的祕密API關鍵。

但後來我就getting started with Stripe Connect閱讀本文檔:

When using our official API libraries, we recommend that you pass in the 
access_token with every request, instead of setting the API key globally. 
This is because the access_token used in any API request depends on the user 
you're charging on behalf of. 

他們給出的例子是:

# Not recommended: setting global API key state 
Stripe.api_key = ACCESS_TOKEN 
Stripe::Customer.create(
    :description => "[email protected]" 
) 

# Recommended: sending API key with every request 
Stripe::Customer.create(
    {:description => "[email protected]"}, 
    ACCESS_TOKEN # user's access token from the Stripe Connect flow 
) 

這裏,訪問令牌返回給應用程序的用戶連接到了後通過Stripe Connect應用程序。訪問令牌可用於代表該用戶執行操作,如爲其卡片充電。

因此,他們傳遞API密鑰與每個請求,但爲什麼用戶的訪問令牌是api密鑰?我從第一個文檔認爲api密鑰應該是我的應用程序的祕密api密鑰?相反,他們正在設置用戶的訪問令牌。 Stripe將如何識別我的應用程序,然後如果我設置用戶的訪問令牌而不是我自己的密鑰?

然後,我閱讀了關於將Sinipera與Stripe Checkout集成的示例。他們給出的代碼示例是:

require 'sinatra' 
require 'stripe' 

set :publishable_key, ENV['PUBLISHABLE_KEY'] 
set :secret_key, ENV['SECRET_KEY'] 

Stripe.api_key = settings.secret_key 

.... 

get '/' do 
    erb :index 
end 

post '/charge' do 
    # Amount in cents 
    @amount = 500 

    customer = Stripe::Customer.create(
    :email => '[email protected]', 
    :card => params[:stripeToken] 
) 

    charge = Stripe::Charge.create(
    :amount  => @amount, 
    :description => 'Sinatra Charge', 
    :currency => 'usd', 
    :customer => customer.id 
) 

    erb :charge 
end 

所以在這種情況下,他們設置了API的關鍵是應用程序的密鑰。它們也不會在請求中傳遞任何訪問令牌。所以我有點困惑,爲什麼一個訪問令牌會被設置爲上一個文檔中的祕密API密鑰,或者爲什麼我應該在每個請求中都傳遞它,當時他們的所有示例文檔都沒有這樣做。

回答

5

要理解這一點,你應該知道:第一,在條紋API可用於構建服務於觀衆的兩種應用:

  • 接受來自最終用戶支付的商戶(正常使用情況)和
  • 提供附加服務的商家有自己的條紋 帳戶(例如,一個服務可以幫助我配置不同的條紋事件被髮送出去的電子郵件)

因此,所有的API端點可以是作者可以通過兩種方式實現:

  • 您可以從您的帳戶設置直接獲取的API密鑰方式。這標識您的條紋帳戶
  • 通過條紋連接的訪問​​令牌方式。這標識了連接的商戶的Stripe賬戶。

什麼條紋連接文檔告訴你的是,假設你正在構建服務用例#2以上的應用程序,那麼你一定要記住授權每個API的使用權訪問調用令牌,而不必一個全球API密鑰(順便說一句,對於用例#1完全可以接受),因爲您可能會錯誤地更改錯誤的帳戶。

因此,如果用例#1是您想要做的事情,則根本不用擔心Stripe Connect。

+0

對於案例#1,你說的話似乎很清楚。但是對於第二種情況,如果沒有設置祕密api密鑰,stripe將如何知道特定的調用來自我的應用程序?例如,在構建計費對象時,我們可以設置一個'application_fee',它允許應用程序切割一個事務。如果Stripe知道的所有用戶的訪問令牌與費用對象一起傳遞,Stripe將如何知道應將此費用放入應用程序的Stripe帳戶中?另外,如果我沒有在全局設置密鑰,應用程序如何使用stripe進行身份驗證? – rovim

+0

如果您將客戶端ID作爲OAuth流程的一部分進行交換,則只會獲得訪問令牌。因此,Stripe從訪問令牌AFAIK中標識商家帳戶和您的應用(您的Stripe帳戶)。 要找到您的客戶ID,請轉到帳戶設置>應用程序。幫助? –

相關問題