इंस्टॉल लिंक और डीप लिंक
इंस्टॉल लिंक से आप अपना Stripe App मार्केटप्लेस के बाहर भी बाँट सकते हैं, जबकि डीप लिंक यूज़र्स को सीधे आपके इंस्टॉल किए गए ऐप के किसी खास व्यू तक ले जाते हैं. सहज ऑनबोर्डिंग और इंटीग्रेशन फ़्लो के लिए दोनों ज़रूरी हैं.
इंस्टॉल लिंक
इंस्टॉल लिंक एक सीधा URL देते हैं जिससे मर्चेंट आपका ऐप इंस्टॉल कर सकते हैं. जब कोई यूज़र इंस्टॉल लिंक पर क्लिक करता है, तो Stripe इंस्टॉलेशन फ़्लो संभालता है और फिर आपके बताए गए URI पर वापस रीडायरेक्ट कर देता है.
ज़रूरी शर्तें
इंस्टॉल लिंक इस्तेमाल करने से पहले अपने ऐप मैनिफ़ेस्ट में allowed_redirect_uris कॉन्फ़िगर करें:
{ "id": "com.tajo.brevo-integration", "allowed_redirect_uris": [ "https://tajo.io/stripe/callback", "https://tajo.io/stripe/oauth/complete" ]}इंस्टॉल लिंक का फ़ॉर्मैट
https://marketplace.stripe.com/oauth/v2/authorize?client_id=APP_ID&redirect_uri=REDIRECT_URI&state=STATE_VALUE| पैरामीटर | ज़रूरी | विवरण |
|---|---|---|
client_id | हाँ | आपका ऐप ID (जैसे com.tajo.brevo-integration) |
redirect_uri | हाँ | आपके allowed_redirect_uris में से किसी एक से मेल खाना चाहिए |
state | अनुशंसित | CSRF सुरक्षा के लिए रैंडम स्ट्रिंग |
रीडायरेक्ट पैरामीटर
इंस्टॉलेशन सफल होने पर Stripe यूज़र को इन query पैरामीटर के साथ आपके redirect_uri पर रीडायरेक्ट करता है:
| पैरामीटर | विवरण |
|---|---|
user_id | इंस्टॉल कर रहे अकाउंट का Stripe यूज़र ID |
account_id | Stripe अकाउंट ID (जैसे acct_xxxxx) |
state | आपके दिए गए state की वैल्यू (CSRF सत्यापन के लिए) |
install_signature | HMAC सिग्नेचर, जिससे पुष्टि होती है कि इंस्टॉल वैध है |
रीडायरेक्ट URL का उदाहरण:
https://tajo.io/stripe/callback ?user_id=usr_xxxxx &account_id=acct_xxxxx &state=abc123random &install_signature=sig_xxxxxCSRF सुरक्षा
cross-site request forgery हमलों से बचने के लिए हमेशा state पैरामीटर इस्तेमाल करें:
import crypto from 'crypto';
// Generate a random state value and store it in the sessionconst generateInstallLink = (req, res) => { const state = crypto.randomBytes(32).toString('hex');
// Store state in session for later verification req.session.stripeInstallState = state;
const installUrl = new URL('https://marketplace.stripe.com/oauth/v2/authorize'); installUrl.searchParams.set('client_id', 'com.tajo.brevo-integration'); installUrl.searchParams.set('redirect_uri', 'https://tajo.io/stripe/callback'); installUrl.searchParams.set('state', state);
res.redirect(installUrl.toString());};
// Handle the redirect callbackconst handleInstallCallback = async (req, res) => { const { state, user_id, account_id, install_signature } = req.query;
// Verify state matches what we stored if (state !== req.session.stripeInstallState) { return res.status(403).json({ error: 'Invalid state parameter' }); }
// Clear the stored state delete req.session.stripeInstallState;
// Verify the install signature if (!verifyInstallSignature(install_signature, account_id)) { return res.status(403).json({ error: 'Invalid install signature' }); }
// Process the successful installation await processInstallation(user_id, account_id);
res.redirect('/dashboard/stripe-connected');};सिग्नेचर सत्यापन
अपने ऐप के signing secret की मदद से install_signature सत्यापित करें:
import crypto from 'crypto';
const verifyInstallSignature = (signature, accountId) => { const signingSecret = process.env.STRIPE_APP_SIGNING_SECRET;
const expectedSignature = crypto .createHmac('sha256', signingSecret) .update(accountId) .digest('hex');
return crypto.timingSafeEqual( Buffer.from(signature), Buffer.from(expectedSignature) );};Caution
टाइमिंग अटैक से बचने के लिए सिग्नेचर की तुलना हमेशा crypto.timingSafeEqual से करें. साधारण स्ट्रिंग समानता (===) का इस्तेमाल कभी न करें.
साइनिंग सीक्रेट
आपके ऐप का साइनिंग सीक्रेट Stripe डैशबोर्ड में आपके ऐप की सेटिंग्स के नीचे मिलता है. इसका इस्तेमाल इनके लिए करें:
- रीडायरेक्ट कॉलबैक से आए इंस्टॉल सिग्नेचर सत्यापित करना
- Stripe से आए वेबहुक पेलोड की जाँच करना
- अपने बैकएंड और Stripe के बीच की रिक्वेस्ट प्रमाणित करना
साइनिंग सीक्रेट को सुरक्षित तरीके से स्टोर करें:
# Set as environment variableexport STRIPE_APP_SIGNING_SECRET="whsec_xxxxx"साइनिंग सीक्रेट को अपने सोर्स कोड में कभी हार्डकोड न करें और न ही version control में कमिट करें.
डीप लिंक
डीप लिंक यूज़र्स को सीधे आपके इंस्टॉल किए गए Stripe App के किसी खास व्यू तक ले जाते हैं. इनका इस्तेमाल यूज़र्स को बाहरी संचार (ईमेल, नोटिफ़िकेशन, सपोर्ट पेज) से सही ऐप संदर्भ तक पहुँचाने के लिए करें.
डीप लिंक URL का फ़ॉर्मैट
https://dashboard.stripe.com/MODE/acct_ID/PAGE?apps[APP_ID][TARGET]=VIEWPORT_ID| घटक | विवरण | उदाहरण |
|---|---|---|
MODE | live या test | live |
acct_ID | लक्ष्य Stripe अकाउंट ID | acct_1234567890 |
PAGE | डैशबोर्ड पेज का पाथ | customers/cus_xxxxx |
APP_ID | आपके ऐप का ID | com.tajo.brevo-integration |
TARGET | drawer या modal | drawer |
VIEWPORT_ID | खोलने के लिए व्यूपोर्ट | stripe.dashboard.customer.detail |
Drawer बनाम Modal टारगेट
| टारगेट | व्यवहार | कब इस्तेमाल करें |
|---|---|---|
drawer | ऐप को साइड पैनल (drawer) में खोलता है | सामान्य ऐप इंटरैक्शन, पेज के साथ-साथ संदर्भ |
modal | ऐप को फ़ुल-स्क्रीन modal ओवरले में खोलता है | फ़ोकस्ड वर्कफ़्लो, ऑनबोर्डिंग, जटिल फ़ॉर्म |
डीप लिंक के उदाहरण
drawer में ग्राहक विवरण व्यू खोलें
https://dashboard.stripe.com/live/acct_xxxxx/customers/cus_xxxxx ?apps[com.tajo.brevo-integration][drawer]=stripe.dashboard.customer.detailmodal में सेटिंग्स खोलें
https://dashboard.stripe.com/live/acct_xxxxx/settings ?apps[com.tajo.brevo-integration][modal]=stripe.dashboard.settingsऑनबोर्डिंग फ़्लो खोलें
https://dashboard.stripe.com/live/acct_xxxxx/dashboard ?apps[com.tajo.brevo-integration][modal]=stripe.dashboard.onboardingtest मोड में पेमेंट विवरण व्यू खोलें
https://dashboard.stripe.com/test/acct_xxxxx/payments/pi_xxxxx ?apps[com.tajo.brevo-integration][drawer]=stripe.dashboard.payment.detailप्रोग्रामैटिक तरीके से डीप लिंक बनाना
const generateDeepLink = ({ accountId, mode = 'live', page, appId = 'com.tajo.brevo-integration', target = 'drawer', viewport,}) => { const baseUrl = `https://dashboard.stripe.com/${mode}/${accountId}/${page}`; const params = new URLSearchParams(); params.set(`apps[${appId}][${target}]`, viewport);
return `${baseUrl}?${params.toString()}`;};
// Generate a link to view a customer's Brevo profileconst customerLink = generateDeepLink({ accountId: 'acct_xxxxx', page: 'customers/cus_xxxxx', viewport: 'stripe.dashboard.customer.detail',});
// Generate a link to app settingsconst settingsLink = generateDeepLink({ accountId: 'acct_xxxxx', page: 'settings', viewport: 'stripe.dashboard.settings', target: 'modal',});संचार में डीप लिंक का इस्तेमाल
डीप लिंक खास तौर पर इनमें उपयोगी हैं:
- ईमेल नोटिफ़िकेशन: “इस ग्राहक के लिए Brevo सिंक की स्थिति देखें”
- सपोर्ट जवाब: “अपनी इंटीग्रेशन सेटिंग्स जाँचने के लिए यहाँ क्लिक करें”
- ऑनबोर्डिंग ईमेल: “अपना Brevo सेटअप पूरा करें”
- एरर अलर्ट: “ग्राहक X के लिए सिंक की समस्या की समीक्षा करें”
<!-- Example in an email template --><a href="https://dashboard.stripe.com/live/acct_xxxxx/customers/cus_xxxxx?apps[com.tajo.brevo-integration][drawer]=stripe.dashboard.customer.detail"> View Brevo Profile in Stripe</a>इंस्टॉल लिंक और डीप लिंक को साथ में इस्तेमाल करना
सबसे बेहतर ऑनबोर्डिंग अनुभव के लिए इंस्टॉल लिंक को इंस्टॉल के बाद वाले डीप लिंक के साथ जोड़ें:
- यूज़र आपकी वेबसाइट या ईमेल से किसी इंस्टॉल लिंक पर क्लिक करता है
- यूज़र ऐप इंस्टॉल करता है और आपके कॉलबैक URL पर रीडायरेक्ट हो जाता है
- आपका कॉलबैक इंस्टॉलेशन प्रोसेस करता है और यूज़र को उस डीप लिंक पर भेजता है जो ऑनबोर्डिंग व्यूपोर्ट खोलता है
const handleInstallCallback = async (req, res) => { const { account_id, install_signature, state } = req.query;
// Verify state and signature // ... (verification code)
// Process installation await processInstallation(account_id);
// Redirect to the app's onboarding view via deep link const onboardingLink = generateDeepLink({ accountId: account_id, page: 'dashboard', viewport: 'stripe.dashboard.onboarding', target: 'modal', });
res.redirect(onboardingLink);};Tip
यह पक्का करने के लिए कि इंस्टॉल लिंक और डीप लिंक हर एनवायरनमेंट में सही काम करें, इन्हें हमेशा live और test दोनों मोड में टेस्ट करें.