Покупка продукта

Для вызова покупки продукта используйте метод PurchaseProduct

Вызов метода покупки продукта
long requestId = URuStoreBillingClient::Instance()->PurchaseProduct(
    productId,
    orderId,
    quantity,
    developerPayload,
    [](long requestId, TShardPtr<FURuStorePaymentResult, ESPMode::ThreadSafe> response) {
        // Process response
    }, 
    [](long requestId, TSharedPtr<FURuStoreError, ESPMode::ThreadSafe> error) {
        // Process error
    }
);
  • string productId  идентификатор продукта. 
  • int quantity  количество продуктов.
  • string developerPayload  дополнительная информация от разработчика AnyApp. 

Blueprint реализация:

image

image

image

Классы результата покупки:

Структура результата покупки
UCLASS(BlueprintType)
class RUSTOREBILLING_API URuStorePaymentResultBase : public UObject
{
    GENERATED_BODY()
};
 
USTRUCT(BlueprintType)
struct RUSTOREBILLING_API FURuStorePaymentResult
{
    GENERATED_USTRUCT_BODY()
 
    virtual ~FURuStorePaymentResult() {}
 
    virtual FString GetTypeName() { return "FURuStorePaymentResult"; }
};
Структура результата покупки
UCLASS(BlueprintType)
class RUSTOREBILLING_API URuStoreInvoiceResult : public URuStorePaymentResultBase
{
    GENERATED_BODY()
 
public:
    UPROPERTY(BlueprintReadOnly)
    FURuStoreInvoiceResult value;
};
 
USTRUCT(BlueprintType)
struct RUSTOREBILLING_API FURuStoreInvoiceResult : public FURuStorePaymentResult
{
    GENERATED_USTRUCT_BODY()
 
public:
    FURuStoreInvoiceResult()
    {
        invoiceId = "";
        finishCode = EURuStorePaymentFinishCode::RESULT_UNKNOWN;
    }
 
    virtual ~FURuStoreInvoiceResult() {}
 
    UPROPERTY(BlueprintReadOnly)
    FString invoiceId;
 
    UPROPERTY(BlueprintReadOnly)
    EURuStorePaymentFinishCode finishCode;
 
    virtual FString GetTypeName() override { return "FURuStoreInvoiceResult"; }
};
 
UENUM(BlueprintType)
enum class EURuStorePaymentFinishCode : uint8
{
    SUCCESSFUL_PAYMENT UMETA(DisplayName = "SUCCESSFUL_PAYMENT"),
    CLOSED_BY_USER UMETA(DisplayName = "CLOSED_BY_USER"),
    UNHANDLED_FORM_ERROR UMETA(DisplayName = "UNHANDLED_FORM_ERROR"),
    PAYMENT_TIMEOUT UMETA(DisplayName = "PAYMENT_TIMEOUT"),
    DECLINED_BY_SERVER UMETA(DisplayName = "DECLINED_BY_SERVER"),
    RESULT_UNKNOWN UMETA(DisplayName = "RESULT_UNKNOWN")
};
Структура результата покупки
UCLASS(BlueprintType)
class RUSTOREBILLING_API URuStoreInvalidInvoice : public URuStorePaymentResultBase
{
    GENERATED_BODY()
         
public:
    UPROPERTY(BlueprintReadOnly)
    FURuStoreInvalidInvoice value;
};
 
USTRUCT(BlueprintType)
struct RUSTOREBILLING_API FURuStoreInvalidInvoice : public FURuStorePaymentResult
{
    GENERATED_USTRUCT_BODY()
 
    FURuStoreInvalidInvoice()
    {
        invoiceId = "";
    }
 
    virtual ~FURuStoreInvalidInvoice() {}
 
    UPROPERTY(BlueprintReadOnly)
    FString invoiceId;
 
    virtual FString GetTypeName() override { return "FURuStoreInvalidInvoice"; }
};
Структура результата покупки
UCLASS(BlueprintType)
class RUSTOREBILLING_API URuStorePurchaseResult : public URuStorePaymentResultBase
{
    GENERATED_BODY()
 
public:
    UPROPERTY(BlueprintReadOnly)
    FURuStorePurchaseResult value;
};
 
USTRUCT(BlueprintType)
struct RUSTOREBILLING_API FURuStorePurchaseResult : public FURuStorePaymentResult
{
    GENERATED_USTRUCT_BODY()
 
    FURuStorePurchaseResult()
    {
        finishCode = EURuStorePaymentFinishCode::RESULT_UNKNOWN;
        orderId = "";
        purchaseId = "";
        productId = "";
        subscriptionToken = "";
    }
 
    virtual ~FURuStorePurchaseResult() {}
 
    UPROPERTY(BlueprintReadOnly)
    EURuStorePaymentFinishCode finishCode;
 
    UPROPERTY(BlueprintReadOnly)
    FString orderId;
 
    UPROPERTY(BlueprintReadOnly)
    FString purchaseId;
 
    UPROPERTY(BlueprintReadOnly)
    FString productId;
 
    UPROPERTY(BlueprintReadOnly)
    FString subscriptionToken;
 
    virtual FString GetTypeName() override { return "FURuStorePurchaseResult"; }
};
 
UENUM(BlueprintType)
enum class EURuStorePaymentFinishCode : uint8
{
    SUCCESSFUL_PAYMENT UMETA(DisplayName = "SUCCESSFUL_PAYMENT"),
    CLOSED_BY_USER UMETA(DisplayName = "CLOSED_BY_USER"),
    UNHANDLED_FORM_ERROR UMETA(DisplayName = "UNHANDLED_FORM_ERROR"),
    PAYMENT_TIMEOUT UMETA(DisplayName = "PAYMENT_TIMEOUT"),
    DECLINED_BY_SERVER UMETA(DisplayName = "DECLINED_BY_SERVER"),
    RESULT_UNKNOWN UMETA(DisplayName = "RESULT_UNKNOWN")
};
Структура результата покупки
UCLASS(BlueprintType)
class RUSTOREBILLING_API URuStoreInvalidPurchase : public URuStorePaymentResultBase
{
    GENERATED_BODY()
 
public:
    UPROPERTY(BlueprintReadOnly)
    FURuStoreInvalidPurchase value;
};
 
USTRUCT(BlueprintType)
struct RUSTOREBILLING_API FURuStoreInvalidPurchase : public FURuStorePaymentResult
{
    GENERATED_USTRUCT_BODY()
 
public:
    FURuStoreInvalidPurchase()
    {
        purchaseId = "";
        invoiceId = "";
        orderId = "";
        quantity = 0;
        productId = "";
        errorCode = 0;
    }
 
    virtual ~FURuStoreInvalidPurchase() {}
 
    UPROPERTY(BlueprintReadOnly)
    FString purchaseId;
 
    UPROPERTY(BlueprintReadOnly)
    FString invoiceId;
 
    UPROPERTY(BlueprintReadOnly)
    FString orderId;
 
    UPROPERTY(BlueprintReadOnly)
    int quantity;
 
    UPROPERTY(BlueprintReadOnly)
    FString productId;
 
    UPROPERTY(BlueprintReadOnly)
    int errorCode;
 
    virtual FString GetTypeName() override { return "FURuStoreInvalidPurchase"; }
};
Структура результата покупки
UCLASS(BlueprintType)
class RUSTOREBILLING_API URuStoreInvalidPaymentState : public URuStorePaymentResultBase
{
    GENERATED_BODY()
 
public:
    UPROPERTY(BlueprintReadOnly)
    FURuStoreInvalidPaymentState value;
};
 
USTRUCT(BlueprintType)
struct RUSTOREBILLING_API FURuStoreInvalidPaymentState : public FURuStorePaymentResult
{
    GENERATED_USTRUCT_BODY()
 
    virtual ~FURuStoreInvalidPaymentState() {}
 
    virtual FString GetTypeName() override { return "FURuStoreInvalidPaymentState"; }
};
  • URuStoreInvoiceResult  платежи завершились с результатом.
  • URuStoreInvalidInvoice  платежи завершились без указания инвойса. Вероятно, они были запущены с некорректным инвойсом (пустая строка, например).
  • URuStorePurchaseResult  результат успешного завершения покупки цифрового товара.
  • URuStoreInvalidPurchase  при оплате цифрового товара платежи завершились c ошибкой.
  • URuStoreInvalidPaymentState  при завершении платежей отсутствует PaymentState.

Статусы EUPaymentFinishCode:

  • SUCCESSFUL_PAYMENT  успешная оплата. 
  • CLOSED_BY_USER  отменено пользователем. 
  • UNHANDLED_FORM_ERROR  неизвестная ошибка. 
  • PAYMENT_TIMEOUT  ошибка оплаты по таймауту. 
  • DECLINED_BY_SERVER  отклонено сервером. 
  • RESULT_UNKNOWN  неизвестный статус оплаты. 
Обновлено 17 июля 2023 г.
Was this information helpful?