---
title: "इंस्टॉल लिंक और डीप लिंक | Tajo"
description: "ऐप डिस्ट्रिब्यूशन के लिए इंस्टॉल URL बनाएं और यूज़र्स को ऐप के खास व्यू तक ले जाने वाले डीप लिंक तैयार करें"
url: https://tajo.io/hi/docs/stripe-apps/install-links/
markdown: https://tajo.io/hi/docs/stripe-apps/install-links.md
lang: hi-IN
author: "Set Noa"
author_url: https://tajo.io/hi/set-noa/
robots: noindex
---

अर्ली एक्सेस का अनुरोध करें

अपना पहला नाम और कार्यस्थल का ईमेल पता दर्ज करें। Tajo एक्सेस अनुरोध की पुष्टि के लिए हम आपको एक लिंक ईमेल करेंगे।

# इंस्टॉल लिंक और डीप लिंक

[Set Noa](https://tajo.io/hi/set-noa/)

इंस्टॉल लिंक से आप अपना Stripe App मार्केटप्लेस के बाहर भी बाँट सकते हैं, जबकि डीप लिंक यूज़र्स को सीधे आपके इंस्टॉल किए गए ऐप के किसी खास व्यू तक ले जाते हैं. सहज ऑनबोर्डिंग और इंटीग्रेशन फ़्लो के लिए दोनों ज़रूरी हैं.

Caution

**स्थिति: नियोजित, अभी बना नहीं.** Tajo के पास कोई Stripe App नहीं है, इसलिए इस सेक्शन में से आज कुछ भी इंस्टॉल नहीं किया जा सकता. इस पेज पर दिए गए ऐप आइडेंटिफ़ायर, URL और क्रेडेंशियल उदाहरण के लिए रखे गए प्लेसहोल्डर हैं, लाइव एंडपॉइंट नहीं.

## इंस्टॉल लिंक

इंस्टॉल लिंक एक सीधा URL देते हैं जिससे मर्चेंट आपका ऐप इंस्टॉल कर सकते हैं. जब कोई यूज़र इंस्टॉल लिंक पर क्लिक करता है, तो Stripe इंस्टॉलेशन फ़्लो संभालता है और फिर आपके बताए गए URI पर वापस रीडायरेक्ट कर देता है.

### ज़रूरी शर्तें

इंस्टॉल लिंक इस्तेमाल करने से पहले अपने ऐप मैनिफ़ेस्ट में `allowed_redirect_uris` कॉन्फ़िगर करें:

```json
{
  "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_xxxxx
```

### CSRF सुरक्षा

cross-site request forgery हमलों से बचने के लिए हमेशा `state` पैरामीटर इस्तेमाल करें:

```javascript
import crypto from 'crypto';

// Generate a random state value and store it in the session
const 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 callback
const 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` सत्यापित करें:

```javascript
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 के बीच की रिक्वेस्ट प्रमाणित करना

साइनिंग सीक्रेट को सुरक्षित तरीके से स्टोर करें:

```bash
# Set as environment variable
export 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.detail
```

#### modal में सेटिंग्स खोलें

```
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.onboarding
```

#### test मोड में पेमेंट विवरण व्यू खोलें

```
https://dashboard.stripe.com/test/acct_xxxxx/payments/pi_xxxxx
  ?apps[com.tajo.brevo-integration][drawer]=stripe.dashboard.payment.detail
```

### प्रोग्रामैटिक तरीके से डीप लिंक बनाना

```javascript
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 profile
const customerLink = generateDeepLink({
  accountId: 'acct_xxxxx',
  page: 'customers/cus_xxxxx',
  viewport: 'stripe.dashboard.customer.detail',
});

// Generate a link to app settings
const settingsLink = generateDeepLink({
  accountId: 'acct_xxxxx',
  page: 'settings',
  viewport: 'stripe.dashboard.settings',
  target: 'modal',
});
```

### संचार में डीप लिंक का इस्तेमाल

डीप लिंक खास तौर पर इनमें उपयोगी हैं:

- **ईमेल नोटिफ़िकेशन**: “इस ग्राहक के लिए Brevo सिंक की स्थिति देखें”
- **सपोर्ट जवाब**: “अपनी इंटीग्रेशन सेटिंग्स जाँचने के लिए यहाँ क्लिक करें”
- **ऑनबोर्डिंग ईमेल**: “अपना Brevo सेटअप पूरा करें”
- **एरर अलर्ट**: “ग्राहक X के लिए सिंक की समस्या की समीक्षा करें”

```html
<!-- 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>
```

## इंस्टॉल लिंक और डीप लिंक को साथ में इस्तेमाल करना

सबसे बेहतर ऑनबोर्डिंग अनुभव के लिए इंस्टॉल लिंक को इंस्टॉल के बाद वाले डीप लिंक के साथ जोड़ें:

1. यूज़र आपकी वेबसाइट या ईमेल से किसी **इंस्टॉल लिंक** पर क्लिक करता है
2. यूज़र ऐप इंस्टॉल करता है और आपके कॉलबैक URL पर रीडायरेक्ट हो जाता है
3. आपका कॉलबैक इंस्टॉलेशन प्रोसेस करता है और यूज़र को उस **डीप लिंक** पर भेजता है जो ऑनबोर्डिंग व्यूपोर्ट खोलता है

```javascript
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 दोनों मोड में टेस्ट करें.
