マーケットプレイスパートナー

GitLabは一部のディストリビューションマーケットプレイスにおいて、作成者であるチャネルパートナーへのGitLab製品の販売を処理するための自動化をサポートしています。マーケットプレイスパートナーはGitLabマーケットプレイスAPIを使用して、GitLabとシステムをインテグレーションし、そのサイトでGitLabサブスクリプションを販売することができます。

このドキュメントの対象読者は、マーケットプレイスパートナーのサードパーティ開発者です。

マーケットプレイスAPIの仕組み

Marketplace APIはCustomers Portalでホストされています。カスタマーズポータルでは、個人のお客様がGitLabサブスクリプションを購入・管理したり、パートナーがお客様に代わって販売を行うためのAPIをサポートしています。カスタマーポータルは、ZuoraやSalesforceを含むGitLabの他のサービスとインテグレーションし、ユーザーにタスク指向のインターフェースを提供します。

次の例は、以下のコンポーネント間のリクエストとレスポンスの典型的な購入フローを示しています:

  • お客様
  • マーケットプレイスパートナーシステム
  • 顧客ポータル
  • ズオラ
  • Salesforce
sequenceDiagram participant Customer participant Marketplace partner system participant Customers Portal participant Zuora participant Salesforce Customer ->> Marketplace partner system: Place order to purchase GitLab subscription Marketplace partner system ->> Customers Portal: Get OAuth token Customers Portal ->> Marketplace partner system: Access token Marketplace partner system ->> Customers Portal: Place order Customers Portal ->> Zuora: Create Zuora subscription Customers Portal ->> Salesforce: Create Salesforce objects Zuora ->> Customers Portal: Success response with Zuora subscription data Customers Portal ->> Marketplace partner system: Success response with order ID Zuora ->> Customers Portal: Zuora callout event Customers Portal ->> Customer: send license notification Marketplace partner system ->> Customers Portal: Poll order status Customers Portal ->> Marketplace partner system: Success response with order status

マーケットプレイスAPI仕様

Marketplace API の OpenAPI 仕様は、Marketplace インタラクティブ API ドキュメントで入手できます。

Marketplace API にアクセス

Marketplace APIにアクセスするには、以下が必要です:

  • GitLabにアクセスをリクエストします。
  • OAuthアクセストークンを取得します。

Marketplace API エンドポイントはOAuth 2.0 でセキュリティ保護されています。OAuthは、マーケットプレイスのパートナーアプリケーションのようなサードパーティまたはクライアントアプリケーションに、カスタマーポータルのようなHTTPサービス上のリソースへの限定的なアクセスを許可する作成者フレームワークです。

OAuth 2.0では、クライアントアプリケーションが_アクセストークンの_形で認可を取得する方法を記述する_グラントタイプ_(または_フロー_)を使用します。アクセストークンは、クライアントアプリケーションがリソースサーバーに認可されたリクエストを行うために使用する文字列です。

Marketplace API では、client_credentials グラントタイプを使用します。クライアントアプリケーションは、ユーザーに代わってリソースにアクセスするのではなく、自身のリソースにアクセスするためにアクセストークンを使用します。

ステップ 1: アクセスのリクエスト

Marketplace APIを使用する前に、Marketplaceパートナーマネージャに連絡するか、partnerorderops にメールしてアクセスをリクエストする必要があります。アクセスをリクエストすると、GitLabは以下のアカウントと認証情報を設定します:

  1. クライアントの認証情報。Marketplace API は OAuth 2.0 でセキュリティ保護されています。クライアント認証情報には、OAuth アクセストークンを取得するために必要なクライアント ID とクライアントシークレットが含まれます。
  2. Zuora システムの請求書オーナーアカウント。請求書処理に必要です。
  3. Salesforce システムの販売代理店アカウント。
  4. Salesforce システムの取引先アカウント。GitLabはバリデーションをパスするために、取引先IDを許可リストに追加します。

ステップ2:アクセストークンの取得

アクセストークンを取得します、

  • 以下の必須パラメータを指定して、/oauth/token エンドポイントに POST リクエストを行います:
パラメータ種類必須説明
client_id文字列です。yesカスタマーポータルのクライアントアプリケーションレコードのID。GitLabから受信。
client_secret文字列です。yesカスタマーズポータルのクライアントアプリケーションレコードのシークレット。GitLabから受け取りました。
grant_type文字列です。yesクレデンシャルフローのタイプを指定します。client_credentials を使用します。
scope文字列です。yesアクセス・レベルを指定します。読み取り専用アクセスにはmarketplace.order:read を使用します。作成アクセスにはmarketplace.order:create を使用します。

リクエストに成功すると、レスポンス本文に、以降のリクエストで使用できるアクセストークンが含まれます。成功したレスポンスの例については、Marketplace インタラクティブ API ドキュメントを参照してください。

リクエストが失敗した場合、レスポンスボディにはエラーとエラーの説明が含まれます。エラーには次のようなものがあります:

ステータス説明
400スコープが無効です。scopemarketplace.order:read またはmarketplace.order:createであることを確認してください。
401クライアントが無効です。クライアント固有の資格情報にタイプミスや余分なスペースがないことを確認してください。不正なclient_id またはclient_secret

ステップ3:アクセストークンの使用

クライアントアプリケーションからアクセストークンを使用するには、以下の手順に従います:

  1. リクエストのAuthorization ヘッダをBearer <your_access_token> に設定します。
  2. エンドポイントに必要なパラメータやデータを設定し、リクエストを送信します。

リクエストの例

curl \
  --url "https://customers.staging.gitlab.com/api/v1/marketplace/subscriptions/:external_subscription_id" \
  --header "Authorization: Bearer NHb_VhZhPOnBTSNfBSzmCmt28lLDWb2xtwr_c3DL148"

新規顧客サブスクリプションの作成

マーケットプレイスパートナーのクライアントアプリケーションから新しい顧客サブスクリプションを作成するには、以下の手順に従います、

  • Customers Portal の/api/v1/marketplace/subscriptions エンドポイントに、JSON 形式で以下のパラメータを指定して、作成者指定の POST リクエストを送信します:
パラメータ種類必須説明
externalSubscriptionId文字列です。yesマーケットプレイスパートナーシステム上のサブスクリプションのID。
tradingPartnerId文字列です。yesSalesforce の取引先アカウントの ID。GitLabから受信。
customerオブジェクトを返します。yes顧客に関する情報。会社名を含む必要があります。連絡先にはfirstNamelastNameemailを含めてください。アドレスにはcountryを含めてください。
orderLinesアレイyes購入した製品を指定します。quantityproductId を含む必要があります。

リクエストが成功した場合、レスポンスボディには新しく作成された購読番号が含まれます。完全なリクエストボディの例については、Marketplace インタラクティブ API ドキュメントを参照してください。

サブスクリプションの作成が失敗した場合、レスポンスボディにはエラーの原因についての詳細を含むエラーメッセージが含まれます。

サブスクリプションのステータスの確認

指定したサブスクリプションのステータスを取得するには

リクエストには、ステータスを取得するサブスクリプションのマーケットプレイス・パートナー・システムIDを含める必要があります。

リクエストに成功すると、レスポンスボディにサブスクリプションのステータスが含まれます。ステータスは次のとおりです:

  • 作成中
  • 作成
  • 失敗
  • プロビジョニング

渡されたexternal_subscription_id を使用してサブスクリプションが見つからない場合、レスポンスは 404 Not Found ステータスになります。