धारी API संदर्भ का कहना है इस बारे में authentication:स्ट्रिप एक्सेस टोकन और एपीआई एसके कुंजी के बीच क्या अंतर है?
उदाहरण वे दे यह है:
require "stripe"
Stripe.api_key = "sk_test_BQokikJOvBiI2HlWgH4olfQ2"
sk_test_BQokikJOvBiI2HlWgH4olfQ2
गुप्त कुंजी धारी वेबपेज का खाता सेटिंग्स में पाया जाता है। मैं समझता हूं कि स्ट्रिप के साथ बात करने के लिए मेरे आवेदन के लिए यह गुप्त एपीआई कुंजी है।
लेकिन तब मैं 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
)
यहाँ, पहुँच टोकन आवेदन करने के लिए वापस होने के बाद एक उपयोगकर्ता से जुड़ा है स्ट्रिप कनेक्ट के माध्यम से आवेदन। एक्सेस टोकन का उपयोग उस उपयोगकर्ता की तरफ से कार्य करने के लिए किया जा सकता है, जैसे कि कार्ड चार्ज करना।
तो, वे प्रत्येक अनुरोध के साथ एपीआई कुंजी पास करते हैं, लेकिन उपयोगकर्ता का एक्सेस टोकन एपीआई कुंजी क्यों होगा? मैंने पहले दस्तावेज से सोचा था कि एपीआई कुंजी को मेरे एप्लिकेशन की गुप्त एपीआई कुंजी माना जाता है? इसके बजाए, वे उपयोगकर्ता के पहुंच टोकन को सेट कर रहे हैं। स्ट्रिप मेरे एप्लिकेशन की पहचान कैसे करेगा यदि मैं उपयोगकर्ता की पहुंच टोकन सेट कर रहा हूं, न कि मेरी अपनी गुप्त कुंजी?
फिर, मैंने सिनात्रा के साथ स्ट्रिप चेकआउट को एकीकृत करने पर अपना उदाहरण पढ़ा। वे कोड नमूना देते हैं:
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
तो इस उदाहरण में, उन्होंने एपीआई कुंजी को एप्लिकेशन की गुप्त कुंजी के रूप में सेट किया। वे अनुरोध में किसी भी एक्सेस टोकन को पास नहीं करते हैं। तो मैं थोड़ी उलझन में हूं कि क्यों एक एक्सेस टोकन पिछले दस्तावेज़ में एक गुप्त एपीआई कुंजी के रूप में सेट किया जाएगा या क्यों मुझे प्रत्येक अनुरोध के साथ इसे पास करना चाहिए, जब उनके सभी उदाहरण दस्तावेज़ ऐसा भी नहीं करते हैं।
मामले # 1 के लिए, जो आप कहते हैं वह स्पष्ट लगता है। लेकिन मामले # 2 के लिए, स्ट्रिप कैसे पता चलेगा कि गुप्त एपी कुंजी सेट नहीं होने पर एक विशिष्ट कॉल मेरे एप्लिकेशन से निकलती है? उदाहरण के लिए, जब कोई चार्ज ऑब्जेक्ट बनाते हैं, तो हम 'application_fee' सेट कर सकते हैं जो एप्लिकेशन को लेनदेन का कटौती करने की अनुमति देता है। स्ट्रिप को कैसे पता चलेगा कि यह शुल्क एप्लिकेशन के स्ट्रिप खाते में रखा जाना चाहिए यदि सभी स्ट्रिप जानता है कि उपयोगकर्ता का एक्सेस टोकन है जो चार्ज ऑब्जेक्ट के साथ पास किया गया था? साथ ही, यदि मैं वैश्विक स्तर पर गुप्त कुंजी सेट नहीं करता हूं तो एप्लिकेशन पट्टी के साथ प्रमाणीकृत कैसे होगा? – rovim
यदि आप ओएथ प्रवाह के हिस्से के रूप में अपनी क्लाइंट आईडी का आदान-प्रदान करते हैं तो आपको केवल एक्सेस टोकन मिलेगा। इसलिए, स्ट्रिप एक्सेस टोकन AFAIK से व्यापारी खाते और आपके ऐप (आपके स्ट्रिप खाते) दोनों की पहचान करता है। अपनी ग्राहक आईडी ढूंढने के लिए, खाता सेटिंग्स> ऐप्स पर जाएं। मदद करता है? –