2014-07-12 3 views
6

धारी 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 

तो इस उदाहरण में, उन्होंने एपीआई कुंजी को एप्लिकेशन की गुप्त कुंजी के रूप में सेट किया। वे अनुरोध में किसी भी एक्सेस टोकन को पास नहीं करते हैं। तो मैं थोड़ी उलझन में हूं कि क्यों एक एक्सेस टोकन पिछले दस्तावेज़ में एक गुप्त एपीआई कुंजी के रूप में सेट किया जाएगा या क्यों मुझे प्रत्येक अनुरोध के साथ इसे पास करना चाहिए, जब उनके सभी उदाहरण दस्तावेज़ ऐसा भी नहीं करते हैं।

उत्तर

5

यह समझने के लिए, आपको पहले पता होना चाहिए कि धारी एपीआई कि दर्शकों के दो प्रकार की सेवा अनुप्रयोगों के निर्माण के लिए इस्तेमाल किया जा सकता है:

  • व्यापारी के रूप में अंत उपयोगकर्ताओं से भुगतान स्वीकार करने के लिए (सामान्य उपयोग-केस) और
  • ऐड-ऑन सेवाओं व्यापारियों के लिए अपने स्वयं के धारी होने प्रदान करने के लिए खातों (उदाहरण के लिए। एक सेवा मुझे ईमेल अलग धारी घटनाओं पर बाहर भेजे जाने के लिए)

इसलिए, सभी एपीआई अंतिमबिंदुओं कॉन्फ़िगर में मदद करता है लेखक हो सकता है दो तरीकों से ized:

  • एपीआई कुंजी तरीका जो आप सीधे अपने खाता सेटिंग्स से प्राप्त कर सकते हैं। यह आपकी स्ट्रिप खाता
  • स्ट्रिप कनेक्ट के माध्यम से पहुंच टोकन मार्ग की पहचान करता है। यह से जुड़े व्यापारी के स्ट्रिप खाते की पहचान करता है।

क्या धारी कनेक्ट डॉक्स आपको बता रहा है कि मान लीजिए आप एक आवेदन है कि इसके बाद के संस्करण में कार्य करता है यूज-केस # 2 का निर्माण कर रहे हैं, तो आप अपने एपीआई के प्रत्येक सही उपयोग के साथ टोकन कॉल करता है और नहीं अधिकृत करने के लिए याद रखना चाहिए है एक वैश्विक एपीआई कुंजी (जो, वैसे, उपयोग मामले # 1 के लिए पूरी तरह से स्वीकार्य है) क्योंकि आप गलत खाते में गलत तरीके से परिवर्तन कर रहे हैं।

तो, यदि केस # 1 का उपयोग करना है तो आप स्ट्रिप कनेक्ट के बारे में चिंता करने की ज़रूरत नहीं है।

+0

मामले # 1 के लिए, जो आप कहते हैं वह स्पष्ट लगता है। लेकिन मामले # 2 के लिए, स्ट्रिप कैसे पता चलेगा कि गुप्त एपी कुंजी सेट नहीं होने पर एक विशिष्ट कॉल मेरे एप्लिकेशन से निकलती है? उदाहरण के लिए, जब कोई चार्ज ऑब्जेक्ट बनाते हैं, तो हम 'application_fee' सेट कर सकते हैं जो एप्लिकेशन को लेनदेन का कटौती करने की अनुमति देता है। स्ट्रिप को कैसे पता चलेगा कि यह शुल्क एप्लिकेशन के स्ट्रिप खाते में रखा जाना चाहिए यदि सभी स्ट्रिप जानता है कि उपयोगकर्ता का एक्सेस टोकन है जो चार्ज ऑब्जेक्ट के साथ पास किया गया था? साथ ही, यदि मैं वैश्विक स्तर पर गुप्त कुंजी सेट नहीं करता हूं तो एप्लिकेशन पट्टी के साथ प्रमाणीकृत कैसे होगा? – rovim

+0

यदि आप ओएथ प्रवाह के हिस्से के रूप में अपनी क्लाइंट आईडी का आदान-प्रदान करते हैं तो आपको केवल एक्सेस टोकन मिलेगा। इसलिए, स्ट्रिप एक्सेस टोकन AFAIK से व्यापारी खाते और आपके ऐप (आपके स्ट्रिप खाते) दोनों की पहचान करता है। अपनी ग्राहक आईडी ढूंढने के लिए, खाता सेटिंग्स> ऐप्स पर जाएं। मदद करता है? –

संबंधित मुद्दे