Pustaka queries
Pustaka queriesBuat ribuan kode diskon untuk AppSumo di FluentCart

Buat ribuan kode diskon untuk AppSumo di FluentCart

Query ini terhubung ke REST API FluentCart dan membuat seratus kode diskon 100% sekaligus.

Jalankan query ini beberapa kali untuk membuat 10.000 kode yang diperlukan untuk menjalankan kampanye AppSumo.

Anda harus menyediakan:

  • Nama pengguna dan kata sandi aplikasi untuk terhubung ke REST API FluentCart, melalui variabel $wpUsername dan $wpApplicationPassword
  • Domain toko FluentCart, melalui variabel $fluentCartDomain
  • Variasi produk yang akan ditukarkan dengan kode tersebut, melalui variabel $productVariationIDs

Kode diskon yang dihasilkan akan berupa string acak. Anda dapat menambahkan awalan pada kode (melalui variabel $codePrefix), menentukan panjang kode (melalui variabel $codeLength), dan menyesuaikan nama kode diskon (melalui variabel $discountNamePrefix dan $firstRecordNumber) untuk mencarinya di dasbor FluentCart.

Kumpulkan semua kode diskon yang baru dibuat dengan menyediakan $postId, lalu semua kode akan ditambahkan di akhir posting tersebut.

# 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
    }
  }
}

...dengan meneruskan variabel berikut:

{
  "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 }" ]
}