條紋API參考說,這大約authentication:Stripe訪問令牌和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密鑰,或者爲什麼我應該在每個請求中都傳遞它,當時他們的所有示例文檔都沒有這樣做。
對於案例#1,你說的話似乎很清楚。但是對於第二種情況,如果沒有設置祕密api密鑰,stripe將如何知道特定的調用來自我的應用程序?例如,在構建計費對象時,我們可以設置一個'application_fee',它允許應用程序切割一個事務。如果Stripe知道的所有用戶的訪問令牌與費用對象一起傳遞,Stripe將如何知道應將此費用放入應用程序的Stripe帳戶中?另外,如果我沒有在全局設置密鑰,應用程序如何使用stripe進行身份驗證? – rovim
如果您將客戶端ID作爲OAuth流程的一部分進行交換,則只會獲得訪問令牌。因此,Stripe從訪問令牌AFAIK中標識商家帳戶和您的應用(您的Stripe帳戶)。 要找到您的客戶ID,請轉到帳戶設置>應用程序。幫助? –