API/Autodoc/Files/RuStorePayClient.cs.md


Namespaces

Name

Classes

Name
class RuStore::PayClient::RuStorePayClient — Класс реализует API для интегрирации платежей в мобильное приложение.

Source code

#nullable enable

using System;
using RuStore.CoreClient;
using RuStore.PayClient.Internal;
using System.Collections.Generic;
using UnityEngine;

namespace RuStore.PayClient {

    public class RuStorePayClient {

        public static string PluginVersion = "10.3.1";

        private static RuStorePayClient? instance;
        private AndroidJavaObject? clientWrapper { get; }

        public static RuStorePayClient Instance {
            get {
                if (instance == null)
                    instance = new RuStorePayClient();

                return instance;
            }
        }

        private RuStorePayClient() {
            if (!IsPlatformSupported()) return;

            CallbackHandler.InitInstance();
            using (var clientJavaClass = new AndroidJavaClass("ru.rustore.unitysdk.payclient.RuStoreUnityPayClient")) {
                clientWrapper = clientJavaClass.GetStatic<AndroidJavaObject>("INSTANCE");
            }
        }

        public void GetUserAuthorizationStatus(Action<RuStoreError> onFailure, Action<UserAuthorizationStatus> onSuccess) {
            if (!IsPlatformSupported(onFailure)) return;

            var listener = new UserAuthorizationStatusListener(onFailure, onSuccess);
            clientWrapper?.Call("getUserAuthorizationStatus", listener);
        }

        public void GetPurchaseAvailability(Action<RuStoreError> onFailure, Action<PurchaseAvailabilityResult> onSuccess) {
            if (!IsPlatformSupported(onFailure)) return;

            var listener = new PurchaseAvailabilityListener(onFailure, onSuccess);
            clientWrapper?.Call("getPurchaseAvailability", listener);
        }

        [Obsolete("Deprecated. Use RuStoreCore.Instance.IsRuStoreInstalled instead.")]
        public bool IsRuStoreInstalled() {
            if (!IsPlatformSupported()) return false;

            return RuStoreCoreClient.Instance.IsRuStoreInstalled();
        }

        public void GetProducts(ProductId[] productsId, Action<RuStoreError> onFailure, Action<List<Product>> onSuccess) {
            if (!IsPlatformSupported(onFailure)) return;

            var ids = Array.ConvertAll(productsId, p => p.value);
            var listener = new ProductsResponseListener(onFailure, onSuccess);
            clientWrapper?.Call("getProducts", ids, listener);
        }

        public void GetPurchases(Action<RuStoreError> onFailure, Action<List<IPurchase>> onSuccess) =>
            GetPurchases(null, null, onFailure, onSuccess);

        public void GetPurchases(ProductType? productType, Enum? purchaseStatus, Action<RuStoreError> onFailure, Action<List<IPurchase>> onSuccess) {
            if (!IsPlatformSupported(onFailure)) return;

            var _purchaseStatus = purchaseStatus != null
                ? $"{purchaseStatus.GetType().Name}.{purchaseStatus}"
                : null;

            var listener = new PurchasesResponseListener(onFailure, onSuccess);
            clientWrapper?.Call("getPurchases", productType?.ToString(), _purchaseStatus, listener);
        }

        public void GetPurchase(PurchaseId purchaseId, Action<RuStoreError> onFailure, Action<IPurchase> onSuccess) {
            if (!IsPlatformSupported(onFailure)) return;

            var listener = new PurchaseResponseListener(onFailure, onSuccess);
            clientWrapper?.Call("getPurchase", purchaseId.value, listener);
        }

        public void Purchase(ProductPurchaseParams parameters, PreferredPurchaseType preferredPurchaseType, Action<RuStoreError> onFailure, Action<ProductPurchaseResult> onSuccess, PurchaseEventListener? purchaseEventListener = null)
            => Purchase(parameters, preferredPurchaseType, SdkTheme.LIGHT, onFailure, onSuccess, purchaseEventListener);

        public void Purchase(ProductPurchaseParams parameters, PreferredPurchaseType preferredPurchaseType, SdkTheme sdkTheme, Action<RuStoreError> onFailure, Action<ProductPurchaseResult> onSuccess, PurchaseEventListener? purchaseEventListener = null) {
            if (!IsPlatformSupported(onFailure)) return;

            var listener = new ProductPurchaseResultListener(onFailure, onSuccess);
            clientWrapper?.Call(
                "purchase",
                parameters.productId.value,
                parameters.appUserEmail?.value,
                parameters.appUserId?.value,
                parameters.orderId?.value,
                parameters.quantity != null ? parameters.quantity.value : 1,
                parameters.developerPayload?.value,
                preferredPurchaseType.ToString(),
                sdkTheme.ToString(),
                listener,
                purchaseEventListener);
        }

        public void PurchaseTwoStep(ProductPurchaseParams parameters, Action<RuStoreError> onFailure, Action<ProductPurchaseResult> onSuccess, PurchaseEventListener? purchaseEventListener = null)
            => PurchaseTwoStep(parameters, SdkTheme.LIGHT, onFailure, onSuccess, purchaseEventListener);

        public void PurchaseTwoStep(ProductPurchaseParams parameters, SdkTheme sdkTheme, Action<RuStoreError> onFailure, Action<ProductPurchaseResult> onSuccess, PurchaseEventListener? purchaseEventListener = null) {
            if (!IsPlatformSupported(onFailure)) return;

            var listener = new ProductPurchaseResultListener(onFailure, onSuccess);
            clientWrapper?.Call(
                "purchaseTwoStep",
                parameters.productId.value,
                parameters.appUserEmail?.value,
                parameters.appUserId?.value,
                parameters.orderId?.value,
                parameters.quantity != null ? parameters.quantity.value : 1,
                parameters.developerPayload?.value,
                sdkTheme.ToString(),
                listener,
                purchaseEventListener);
        }

        public void ConfirmTwoStepPurchase(PurchaseId purchaseId, DeveloperPayload? developerPayload, Action<RuStoreError> onFailure, Action onSuccess) {
            if (!IsPlatformSupported(onFailure)) return;

            var listener = new ConfirmTwoStepPurchaseResponseListener(onFailure, onSuccess);
            clientWrapper?.Call("confirmTwoStepPurchase", purchaseId.value, developerPayload?.value, listener);
        }

        public void CancelTwoStepPurchase(PurchaseId purchaseId, Action<RuStoreError> onFailure, Action onSuccess) {
            if (!IsPlatformSupported(onFailure)) return;

            var listener = new CancelTwoStepPurchaseResponseListener(onFailure, onSuccess);
            clientWrapper?.Call("cancelTwoStepPurchase", purchaseId.value, listener);
        }

        private bool IsPlatformSupported(Action<RuStoreError>? onFailure = null) {
            if(Application.platform != RuntimePlatform.Android) {
                onFailure?.Invoke(new RuStoreError() {
                    name = "RuStorePayClientError",
                    description = "Unsupported platform"
                });
                return false;
            }

            return true;
        }
    }
}

Назад