Biblioteca de queries
Biblioteca de queriesCrear miles de códigos de descuento para AppSumo en FluentCart

Crear miles de códigos de descuento para AppSumo en FluentCart

Esta consulta se conecta a la API REST de FluentCart y crea cien códigos de descuento del 100% de una sola vez.

Ejecuta esta consulta varias veces para crear los 10.000 códigos necesarios para lanzar una campaña en AppSumo.

Debes proporcionar:

  • El nombre de usuario y la contraseña de aplicación para conectar con la API REST de FluentCart, mediante las variables $wpUsername y $wpApplicationPassword
  • El dominio de la tienda FluentCart, mediante la variable $fluentCartDomain
  • La(s) variante(s) de producto que serán canjeadas con ese código, mediante la variable $productVariationIDs

El código de descuento generado será una cadena aleatoria. Puedes añadir un prefijo al código (mediante la variable $codePrefix), indicar la longitud del código (mediante la variable $codeLength) y personalizar el nombre del código de descuento (mediante las variables $discountNamePrefix y $firstRecordNumber) para buscarlo en el panel de FluentCart.

Recopila todos los códigos de descuento recién creados proporcionando un $postId, y entonces todos los códigos se añadirán al final de esa entrada.

# Export FluentCart API config and build mutation inputs for creating coupons.
# FluentCart REST API: { fluentCartDomain }/wp-json/fluent-cart/v2
# Auth: WordPress Application Passwords (Basic auth: username + application_password)
# Create Coupon: POST /coupons — https://dev.fluentcart.com/restapi/operations/coupons/create-coupon
 
query ExportFluentCartAPIData(
  $fluentCartDomain: String!,
  $fluentCartBaseURL: String! = "wp-json/fluent-cart/v2",
  $postId: ID,
) {
  fluentCartCouponsURL: _sprintf(
    string: "%s/%s/coupons",
    values: [$fluentCartDomain, $fluentCartBaseURL]
  )
    @export(as: "fluentCartCouponsURL")
    @remove
 
  hasPostId: _notEmpty(value: $postId)
    @export(as: "hasPostId")
}
 
query CreateMutationInputs(
  $wpUsername: String!,
  $wpApplicationPassword: String!,
  $discountNamePrefix: String! = "AppSumo campaign",
  $discountNotes: String! = "",
  $codePrefix: String! = "",
  $numberCodes: Int! = 100,
  $codeLength: Int! = 16,
  $firstRecordNumber: Int! = 1,
  $productVariationIDs: [ID!],
)
  @depends(on: "ExportFluentCartAPIData")
{
  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: $fluentCartCouponsURL,
            method: POST,
            options: {
              auth: {
                username: $wpUsername,
                password: $wpApplicationPassword,
              },
              headers: [
                {
                  name: "Content-Type",
                  value: "application/json",
                },
              ],
              json: {
                title: $discountName,
                code: $discountCode,
                type: "percentage",
                amount: 100,
                status: "active",
                stackable: "no",
                show_on_checkout: "no",
                priority: 0,
                notes: $discountNotes,
                conditions: {
                  max_uses: 1,
                  included_products: $productVariationIDs
                }
              }
            }
          }
        },
        setResultInResponse: true
      )
    @export(as: "mutationInputs")
    @remove
}
 
query CreateCouponsInFluentCart
  @depends(on: "CreateMutationInputs")
{
  createCouponsInFluentCart: _sendJSONObjectItemHTTPRequests(inputs: $mutationInputs)
    @underEachArrayItem
      @underJSONObjectProperty(by: { path: "data.code" })
        @export(as: "discountCodes")
}
 
query PrintDiscountCodesFromFluentCart
  @depends(on: "CreateCouponsInFluentCart")
{
  discountCodes: _echo(value: $discountCodes)
}
 
query GetPostWithDiscountCodes($postId: ID)
  @depends(on: "CreateCouponsInFluentCart")
  @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
    }
  }
}

...pasando las siguientes variables:

{
  "fluentCartDomain": "{ fluentCartDomain }",
  "wpUsername": "{ username }",
  "wpApplicationPassword": "{ appPassword }",
  "codeLength": 24,
  "codePrefix": "APS2V1T1",
  "discountNamePrefix": "AppSumo campaign@2",
  "postId": "{ postId }",
  "discountNotes": "AppSumo campaign #2, starting on 26/03/2026",
  "productVariationIDs": [ "{ productVariationID }" ]
}