# أمثلة بلغات الواجهة الخلفية

أنماط تكامل الخادم الخلفي لـ DRM-X 6.0 بلغات PHP وASP.NET Core وNode.js وPython وJava وGo وRuby باستخدام Playback Session API واحدة وآمنة.

كيف يُصرَّح بتشغيل الفيديو

يحدد خادم التطبيق من يحق له المشاهدة. توفر DRM-X تصريح التشغيل، ويستخدمه المشغّل لطلب ترخيص DRM.

- 01**المشاهد**

يسجّل الدخول إلى خدمتك ويطلب مشاهدة فيديو.

- 02**خادم التطبيق لديك**

يتحقق من عملية الشراء أو الاشتراك أو أي صلاحية أخرى للمشاهدة لدى المستخدم.

- 03**DRM-X**

تطبّق قواعد التشغيل المختارة وتعيد إعدادات التشغيل والتصريح.

- 04**المشغّل**

يستخدم التصريح المستلَم لطلب ترخيص DRM اللازم للتشغيل.

DRM-X يُنفّذُ السياسةَ الموقّعةَ، وسائلِ الإعلام المشفرة و DRM رخصِ إتّباع مساراتِ تسليم منفصلةِ.

## طلب الاعتماد على اللغة[#](#the-language-independent-request)

```
POST /api/v1/playback/environments/{siteId}/sessions
X-DRMX-Client-Id: {siteKey}
X-DRMX-Client-Secret: {accessKey}

{
  "contentId": "trusted-content-id",
  "contentType": "vod",
  "drmSystem": "widevine",
  "subject": "authenticated-user-id",
  "sessionId": "new-id-for-this-attempt",
  "licensePolicyTemplate": "multi-tier-standard",
  "useEnvironmentDefaults": true
}
```



## اختر [ ](#choose-your-backend)

### PHP 8.2+

(استخدمي (يورل) مع (JSON) إستثناءات، بروتوكولات (HTTPS-ونلي) وتوقيت (12) الثاني، و التعامل الصريح مع حالة الاستجابة The complete PHP app includes login, entitlement, direct-token-proxy, diagnostics, and release.

[Run PHP sample](https://developer.drm-x.com/php-sample/)

### ASP.NET Core

(استخدمي المصادقة على الخيارات الموفرة، (`HttpClient`) الكاتبة، الإلغاء، (`JsonContent`) و مساعد نقطة النهاية وقيم التجمع واضحة في القانون الخاص بالركض الأول مع تعليق البدائل السرية.

### Node.js / TypeScript

استخدمي (`fetch`) مع (`AbortSignal.timeout`) والتشكيل الخادميّ فقط، التثبيت الكيميائيّ للردّ، و(`Cache-Control: no-store`).

### Python 3.11+

استخدمي عميلة (HTTPS) مع مواعيد واضحة، تسلسل (JSON)، فحص الحالة، والحقن السري من وقت الإنتاج.

### Java 21+

استخدمي (`HttpClient`) مع طلب وقت مستقطع، مُعلّمين مُصدّقين، (JSON) مُحقّق، ولا إعادة توجيه إلى مُنشأ غير مُسندة.

### Go or Ruby

استخدمي سياق الطلب/التوقيت، حقول (JSON)، فحص دقيق للوضع، ولا تطبعي أبداً أجساد الإبداع أو الاستعادة الناجحة.



## جيم - قيم الأعمال التجارية المتحركة بأمان[#](#map-business-values-safely)

| الطلب الميداني | المصدر | 
| --- | --- |

| `contentId` | مسح الخادم من كتالوجك إلى ملف محمية منشور. | 

| `subject` | مستعملك المصادق عليه ID؛ لا هويّة مقدّمة أبداً | 

| `licensePolicyTemplate` | مسح سيرفر من الخطة الموثوق بها، الإيجار، المسار، أو مستوى المحتوى. | 

| `drmSystem` | قدرات العملاء المقيّمة، مقصورة على DRM نظم دعمك للتكامل. | 

| `sessionId` | هويّة جديدة غير متوقعة مُنشأة من مُساندتك لهذه المُحاولة. | 



## استخدام القيم الرمزية المباشرة فقط للمرحلة الأولى[#](#use-direct-code-values-only-for-the-first-run)

فالعينات تجعل من السهل، عن قصد، العثور على مجموعة صغيرة من البيئات، ومن أجل الإنتاج، تفكك البيئة الموثقة/البديل السري، وتزيل الأسرار المشفرة، وتتناوب الزبون، وتمنح فقط `license-tokens:create`.



تدريب الموظفين 

## نسمي نفس نقطة النهاية من لغات المساندة الشعبية[#](#call-the-same-endpoint-from-popular-backend-languages)



In every example, authenticate the viewer and check entitlement before this call. PHP and ASP.NET show direct code values for the first run; move the Access Key to a secret manager for production and never log request headers or the successful response body.

PHP 8.2+



```
$drmx = [
    'platformApi' => 'https://api6.drm-x.com',
    'siteId' => 'your-development-environment-uuid',
    'siteKey' => 'drmx_your_environment_scoped_client_id',
    'accessKey' => 'paste-your-one-time-access-key',
];

$payload = [
    'contentId' => $trustedContentId,
    'contentType' => 'vod',
    'drmSystem' => $drmSystem,
    'subject' => $authenticatedUserId,
    'playbackMode' => 'streaming',
    'licensePolicyTemplate' => 'multi-tier-standard',
    'useEnvironmentDefaults' => true,
    'maximumQualityTier' => 'auto',
];

$curl = curl_init($drmx['platformApi'] . '/api/v1/playback/environments/' .
    rawurlencode($drmx['siteId']) . '/sessions');
curl_setopt_array($curl, [
    CURLOPT_POST => true,
    CURLOPT_POSTFIELDS => json_encode($payload, JSON_THROW_ON_ERROR),
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_TIMEOUT => 12,
    CURLOPT_PROTOCOLS => CURLPROTO_HTTPS,
    CURLOPT_HTTPHEADER => [
        'Accept: application/json',
        'Content-Type: application/json',
        'X-DRMX-Client-Id: ' . $drmx['siteKey'],
        'X-DRMX-Client-Secret: ' . $drmx['accessKey'],
    ],
]);
$body = curl_exec($curl);
```



بدءاً من العينة الكاملة القابلة للتنفيذ؛ وهي تشمل قطع الأشجار، والاستحقاق، والأسلوب المكشوف مباشرة، وطريقة التعامل مع المكسور، وعمليات التشخيص المقيد، ومناولة الإطلاقات.

Node.js / TypeScript



```
const response = await fetch(
  `${process.env.DRMX_PLATFORM_API}/api/v1/playback/environments/${
    encodeURIComponent(process.env.DRMX_PLAYBACK_SITE_ID!)
  }/sessions`,
  {
    method: "POST",
    headers: {
      "Accept": "application/json",
      "Content-Type": "application/json",
      "X-DRMX-Client-Id": process.env.DRMX_PLAYBACK_SITE_KEY!,
      "X-DRMX-Client-Secret": process.env.DRMX_PLAYBACK_ACCESS_KEY!,
    },
    body: JSON.stringify({
      contentId: trustedContentId,
      contentType: "vod",
      drmSystem,
      subject: authenticatedUser.id,
      playbackMode: "streaming",
      licensePolicyTemplate: "multi-tier-standard",
      useEnvironmentDefaults: true,
      maximumQualityTier: "auto",
    }),
    signal: AbortSignal.timeout(12_000),
  },
);
const playback = await response.json();
```

Python 3.11+



```
import json, os, urllib.request

payload = json.dumps({
    "contentId": trusted_content_id,
    "contentType": "vod",
    "drmSystem": drm_system,
    "subject": authenticated_user_id,
    "playbackMode": "streaming",
    "licensePolicyTemplate": "multi-tier-standard",
    "useEnvironmentDefaults": True,
    "maximumQualityTier": "auto",
}).encode("utf-8")

url = (
    os.environ["DRMX_PLATFORM_API"] +
    "/api/v1/playback/environments/" +
    os.environ["DRMX_PLAYBACK_SITE_ID"] + "/sessions"
)
request = urllib.request.Request(url, data=payload, method="POST", headers={
    "Accept": "application/json",
    "Content-Type": "application/json",
    "X-DRMX-Client-Id": os.environ["DRMX_PLAYBACK_SITE_KEY"],
    "X-DRMX-Client-Secret": os.environ["DRMX_PLAYBACK_ACCESS_KEY"],
})
with urllib.request.urlopen(request, timeout=12) as response:
    playback = json.load(response)
```

ASP.NET Core/C#



```
builder.Services.AddDrmXPlayback(options =>
{
    options.PlatformApi = "https://api6.drm-x.com";
    options.SiteId = "your-development-environment-uuid";
    options.SiteKey = "drmx_your_environment_scoped_client_id";
    options.AccessKey = "paste-your-one-time-access-key";
    options.ApplicationId = "customer-aspnet-website";
    options.LicensePolicyTemplate = "multi-tier-standard";
});

var payload = new {
    contentId = trustedContentId,
    contentType = "vod",
    drmSystem,
    subject = authenticatedUserId,
    playbackMode = "streaming",
    licensePolicyTemplate = "multi-tier-standard",
    useEnvironmentDefaults = true,
    maximumQualityTier = "auto"
};

using var request = new HttpRequestMessage(HttpMethod.Post,
    $"{platformApi}/api/v1/playback/environments/{Uri.EscapeDataString(siteId)}/sessions") {
    Content = JsonContent.Create(payload)
};
request.Headers.Add("X-DRMX-Client-Id", siteKey);
request.Headers.Add("X-DRMX-Client-Secret", accessKey);
using var response = await httpClient.SendAsync(request, cancellationToken);
```

Java 21 / Spring services



```
String payload = objectMapper.writeValueAsString(Map.of(
    "contentId", trustedContentId,
    "contentType", "vod",
    "drmSystem", drmSystem,
    "subject", authenticatedUserId,
    "playbackMode", "streaming",
    "licensePolicyTemplate", "multi-tier-standard",
    "useEnvironmentDefaults", true,
    "maximumQualityTier", "auto"
));

HttpRequest request = HttpRequest.newBuilder()
    .uri(URI.create(platformApi + "/api/v1/playback/environments/" +
        URLEncoder.encode(siteId, StandardCharsets.UTF_8) + "/sessions"))
    .timeout(Duration.ofSeconds(12))
    .header("Accept", "application/json")
    .header("Content-Type", "application/json")
    .header("X-DRMX-Client-Id", siteKey)
    .header("X-DRMX-Client-Secret", accessKey)
    .POST(HttpRequest.BodyPublishers.ofString(payload))
    .build();
HttpResponse<String> response = client.send(request,
    HttpResponse.BodyHandlers.ofString());
```

Go 1.23+



```
payload, _ := json.Marshal(map[string]any{
    "contentId": trustedContentID,
    "contentType": "vod",
    "drmSystem": drmSystem,
    "subject": authenticatedUserID,
    "playbackMode": "streaming",
    "licensePolicyTemplate": "multi-tier-standard",
    "useEnvironmentDefaults": true,
    "maximumQualityTier": "auto",
})

url := platformAPI + "/api/v1/playback/environments/" +
    url.PathEscape(siteID) + "/sessions"
req, _ := http.NewRequestWithContext(ctx, http.MethodPost, url, bytes.NewReader(payload))
req.Header.Set("Accept", "application/json")
req.Header.Set("Content-Type", "application/json")
req.Header.Set("X-DRMX-Client-Id", siteKey)
req.Header.Set("X-DRMX-Client-Secret", accessKey)
response, err := httpClient.Do(req)
```

Ruby 3.3+



```
uri = URI("#{ENV.fetch('DRMX_PLATFORM_API')}/api/v1/playback/environments/" \
          "#{ERB::Util.url_encode(ENV.fetch('DRMX_PLAYBACK_SITE_ID'))}/sessions")
request = Net::HTTP::Post.new(uri)
request['Accept'] = 'application/json'
request['Content-Type'] = 'application/json'
request['X-DRMX-Client-Id'] = ENV.fetch('DRMX_PLAYBACK_SITE_KEY')
request['X-DRMX-Client-Secret'] = ENV.fetch('DRMX_PLAYBACK_ACCESS_KEY')
request.body = JSON.generate(
  contentId: trusted_content_id,
  contentType: 'vod',
  drmSystem: drm_system,
  subject: authenticated_user_id,
  playbackMode: 'streaming',
  licensePolicyTemplate: 'multi-tier-standard',
  useEnvironmentDefaults: true,
  maximumQualityTier: 'auto'
)
response = Net::HTTP.start(uri.host, uri.port, use_ssl: true) { |http| http.request(request) }
```

<!-- Canonical: https://docs.drm-x.com/ar/integrations/backend-languages -->
<!-- Language: ar -->
