Bibliothèque de queries
Bibliothèque de queriesCréer des milliers de codes de réduction pour AppSumo dans LemonSqueezy

Créer des milliers de codes de réduction pour AppSumo dans LemonSqueezy

Cette requête se connecte à l'API LemonSqueezy et crée cent codes de réduction à 100% en une seule fois.

Exécutez cette requête plusieurs fois pour créer les 10 000 codes nécessaires au lancement d'une campagne AppSumo.

Vous devez fournir :

  • Le jeton d'accès pour se connecter à l'API Lemon Squeezy, via la variable $lemonSqueezyAccessToken
  • La boutique Lemon Squeezy, via la variable $storeID
  • Le ou les produit(s) à échanger avec ce code, via la variable $variantIDs

Le code de réduction généré sera une chaîne aléatoire. Vous pouvez ajouter un préfixe au code (via la variable $codePrefix), indiquer la longueur du code (via la variable $codeLength) et personnaliser le nom du code de réduction (via les variables $discountNamePrefix et $firstRecordNumber) pour le retrouver dans le tableau de bord Lemon Squeezy.

Collectez tous les codes de réduction nouvellement créés en fournissant un $postId, puis tous les codes seront ajoutés à la fin de cet article.

query ExportLemonSqueezyAPIData(
  $lemonSqueezyAccessToken: String!,
  $variantIDs: [String!]!,
  $postId: ID,
) {
  bearerToken: _sprintf(
    string: "Bearer %s",
    values: [$lemonSqueezyAccessToken]
  )
    @remove
 
  lemonSqueezyAPIHeaders: _echo(value: [
    {
      name: "Accept",
      value: "application/vnd.api+json"
    },
    {
      name: "Content-Type",
      value: "application/vnd.api+json"
    },
    {
      name: "Authorization",
      value: $__bearerToken
    }
  ])
    @export(as: "lemonSqueezyAPIHeaders")
    @remove
 
  variants: _echo(value: $variantIDs)
    @underEachArrayItem(
      passValueOnwardsAs: "variantID"
    )
      @applyField(
        name: "_echo",
        arguments: {
          value: {
            type: "variants",
            id: $variantID,
          }
        }
        setResultInResponse: true
      )
    @export(as: "variants")
 
  hasPostId: _notEmpty(value: $postId)
    @export(as: "hasPostId")
}
 
query CreateMutationInputs(
  $storeID: String!,
  $discountNamePrefix: String! = "AppSumo campaign",
  $codePrefix: String! = "",
  $numberCodes: Int! = 100,
  $codeLength: Int! = 16,
  $firstRecordNumber: Int! = 1,
  $isTestMode: Boolean! = false,
)
  @depends(on: "ExportLemonSqueezyAPIData")
{
  mutationInputs: _arrayPad(array: [], length: $numberCodes, value: null)
    @underEachArrayItem(
      passIndexOnwardsAs: "key"
      affectDirectivesUnderPos: [1, 2, 3, 4, 5]
    )
      @applyField(
        name: "_generateRandomString",
        arguments: {
          length: $codeLength,
          characters: "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789",
        },
        passOnwardsAs: "randomCode"
      )
      @applyField(
        name: "_strAppend",
        arguments: {
          after: $codePrefix,
          append: $randomCode,
        },
        passOnwardsAs: "discountCode"
      )
      @applyField(
        name: "_intAdd",
        arguments: {
          add: $key,
          to: $firstRecordNumber,
        },
        passOnwardsAs: "recordNumber"
      )
      @applyField(
        name: "_sprintf",
        arguments: {
          string: "%s #%s",
          values: [$discountNamePrefix, $recordNumber],
        },
        passOnwardsAs: "discountName"
      )
      @applyField(
        name: "_echo",
        arguments: {
          value: {
            url: "https://api.lemonsqueezy.com/v1/discounts",
            method: POST,
            options: {
              headers: $lemonSqueezyAPIHeaders
              json: {
                data: {
                  type: "discounts",
                  attributes: {
                    name: $discountName,
                    code: $discountCode,
                    amount: 100,
                    amount_type: "percent",
                    is_limited_to_products: true,
                    is_limited_redemptions: true,
                    max_redemptions: 1,
                    test_mode: $isTestMode,
                  },
                  relationships: {
                    store: {
                      data: {
                        type: "stores",
                        id: $storeID,
                      }
                    },
                    variants: {
                      data: $variants
                    }
                  }
                }
              }
            }
          }
        },
        setResultInResponse: true
      )
    @export(as: "mutationInputs")
    @remove
}
 
query CreateDiscountCodesInLemonSqueezy
  @depends(on: "CreateMutationInputs")
{
  createDiscountCodesInLemonSqueezy: _sendJSONObjectItemHTTPRequests(inputs: $mutationInputs)
    @underEachArrayItem
      @underJSONObjectProperty(by: { path: "data.attributes.code" })
        @export(as: "discountCodes")
}
 
query PrintDiscountCodesFromLemonSqueezy
  @depends(on: "CreateDiscountCodesInLemonSqueezy")
{
  discountCodes: _echo(value: $discountCodes)
}
 
query GetPostWithDiscountCodes($postId: ID)
  @depends(on: "CreateDiscountCodesInLemonSqueezy")
  @include(if: $hasPostId)
{
  post(by: { id: $postId }, status: any) {
    title
    postContent: rawContent
 
    discountCodesAsContent: _arrayJoin(
      array: $discountCodes,
      separator: "\n"
    )
    updatedPostContent: _sprintf(
      string: "%s\n%s"
      values: [$__postContent, $__discountCodesAsContent]
    )
      @export(as: "updatedPostContent")
  }
}
 
mutation UpdatePostWithDiscountCodes($postId: ID)
  @depends(on: "GetPostWithDiscountCodes")
  @include(if: $hasPostId)
{
  updatePost(input: {
    id: $postId,
    contentAs: { html: $updatedPostContent },
  }) {
    status
    errors {
      __typename
      ...on ErrorPayload {
        message
      }
    }
    post {
      title
      rawContent
    }
  }
}