کد تخفیف و لینک پرداخت

getDiscountedPaymentLinks در Kotlin و Flutter و validateDiscountCode در وب، انتخاب آفرینگ و تفاوت خروجی قیمت و لینک.

اعتبارسنجی کد تخفیف به‌تنهایی خرید، مصرف کد یا تغییر قیمت کش نیست. مبلغ و مجوز تخفیف در شروع پرداخت دوباره توسط سرور محاسبه و کنترل می‌شوند.

Kotlin: فقط کد، خروجی لینک

import com.inappify.sdk.*

suspend fun discountedLinks(client: InappifyV2Client, code: String) {
    when (val result = client.getDiscountedPaymentLinks(code)) {
        is InappifyResult.Failure -> { /* Network/server failure, not invalid code. */ }
        is InappifyResult.Success -> {
            if (result.data.isValid != true) return
            val links = result.data.paymentLinks
            // Open only a destination accepted by client.isPaymentUrlAllowed(url).
        }
    }
}

ورودی فقط یک رشته کد است. کد نامعتبر یک نتیجه تجاری موفق با isValid == false است؛ شکست شبکه یا دیتابیس failure است. خروجی شامل وضعیت اعتبار، code، errorCode، درصد و paymentLinks واجد شرایط است. بازکردن لینک مجاز، flow موجود وب را ادامه می‌دهد؛ این متد کش آفرینگ را تخفیف‌خورده نمی‌کند.

Flutter: فرم ساده و Result

import 'package:inappify_sdk/inappify_sdk.dart';

Future<Map<String, Object?>> discountAlternatives(
  String code, String selectedOfferingId,
) async {
  // Native links, or Web current offering:
  final current = await InappifySdk.getDiscountedPaymentLinksResult(code);
  // Alternative for a selected Web offering:
  final selected = await InappifySdk.getDiscountedPaymentLinksResult(
    code, offeringIdentifier: selectedOfferingId,
  );
  if (!selected.isSuccess || selected.data?.isValid != true) return {};
  return {
    'current': current.data,
    'links': selected.data?.paymentLinks,
    'discountedOffering': selected.data?.offering,
  };
}

متد ساده getDiscountedPaymentLinks(code, offeringIdentifier: ...) مدل nullable می‌دهد. selector اختیاری و پیش‌فرض null است؛ فقط وب از آن برای انتخاب آفرینگ استفاده می‌کند. Android و iOS رفتار code-only لینک‌های فعلی را حفظ می‌کنند؛ ارسال selector آن‌ها را retarget نمی‌کند.

ساختار ValidateDiscountCodeData حفظ می‌شود: offering، code، isValid، errorCode و paymentLinks را متناسب با پلتفرم بررسی کنید. صرف success یا non-null بودن مدل به معنی معتبر بودن کد نیست.

Web: تخفیف آفرینگ انتخاب‌شده برای placement

import type { InAppify } from '@inappifylabs/web-sdk';

export async function discountedPayment(
  client: InAppify,
  code: string,
  savedAttemptId: string,
) {
  const selected = await client.getCurrentOffering('upgrade');
  if (!selected)
    return null;
  const validated = await client.validateDiscountCode(code, selected.identifier);
  if (!validated.discount.isValid)
    return null;
  const packageItem = validated.offering.packages[0];
  if (!packageItem)
    return null;
  return client.purchase({
    package: packageItem,
    discountCode: code,
    idempotencyKey: savedAttemptId,
  }, { redirect: false });
}

بدون شناسه، validateDiscountCode(code) آفرینگ جاری را می‌گیرد. با شناسه صریح، همان پیشنهاد بررسی می‌شود. شناسه خالی یا نامعتبر را به omission تبدیل یا با default retry نکنید. خروجی JS دارای discount و آفرینگ قیمت‌گذاری‌شده جداگانه است؛ all یا current اصلی SDK را با آن جایگزین نکنید.

در Flutter Web، شناسه selectedOffering.identifier را به getDiscountedPaymentLinksResult بدهید و از offering برگشتی و code در createCheckout استفاده کنید. InappifyPurchaseParams فلاتر ورودی discountCode ندارد؛ نمایش قیمت تخفیفی، کد را به پرداخت اضافه نمی‌کند. نمونه checkout فلاتر وب این مرحله را پوشش می‌دهد.

کارهایی که نباید انجام دهید

درصد یا مبلغ تخفیف را به‌عنوان قیمت معتبر سمت سرور ارسال نکنید، خطای سرور را کد نامعتبر اعلام نکنید، آفرینگ متفاوت را پنهانی جایگزین نکنید و نتیجه validation را به یک سبد خرید مستقل از پکیج اصلی تبدیل نکنید.

خرید · وب