API/Autodoc/Files/RuStoreGodotPay.gd.md


Source code

# @brief Класс реализует API для интеграции платежей в мобильное приложение.
class_name RuStoreGodotPayClient extends Object

const SINGLETON_NAME = "RuStoreGodotPay"

var _isInitialized: bool = false
var _clientWrapper: Object = null

var _core_client: RuStoreGodotCoreUtils = null

# @brief Действие, выполняемое при успешном завершении операции get_user_authorization_status.
signal on_get_user_authorization_status_success

# @brief Действие, выполняемое в случае ошибки get_user_authorization_status.
signal on_get_user_authorization_status_failure

# @brief Действие, выполняемое при успешном завершении операции get_purchase_availability.
signal on_get_purchase_availability_success

# @brief Действие, выполняемое в случае ошибки get_purchase_availability.
signal on_get_purchase_availability_failure

# @brief Действие, выполняемое при успешном завершении операции get_products.
signal on_get_products_success

# @brief Действие, выполняемое в случае ошибки get_products.
signal on_get_products_failure

# @brief Действие, выполняемое при успешном завершении операции get_purchases.
signal on_get_purchases_success

# @brief Действие, выполняемое в случае ошибки get_purchases.
signal on_get_purchases_failure

# @brief Действие, выполняемое при успешном завершении операции get_purchase.
signal on_get_purchase_success

# @brief Действие, выполняемое в случае ошибки get_purchase.
signal on_get_purchase_failure

# @brief Действие, выполняемое при успешном завершении операции purchase.
signal on_purchase_success

# @brief Действие, выполняемое в случае ошибки purchase.
signal on_purchase_failure

# @brief Действие, выполняемое при успешном завершении операции purchase_two_step.
signal on_purchase_two_step_success

# @brief Действие, выполняемое в случае ошибки purchase_two_step.
signal on_purchase_two_step_failure

# @brief Действие, выполняемое при успешном завершении операции confirm_two_step_purchase.
signal on_confirm_two_step_purchase_success

# @brief Действие, выполняемое в случае ошибки confirm_two_step_purchase.
signal on_confirm_two_step_purchase_failure

# @brief Действие, выполняемое при успешном завершении операции cancel_two_step_purchas.
signal on_cancel_two_step_purchase_success

# @brief Действие, выполняемое в случае ошибки cancel_two_step_purchas.
signal on_cancel_two_step_purchase_failure

# @brief Действие, выполняемое при успешном завершении платежа.
signal on_payment_completed

# @brief Действие, выполняемое при ошибке платежа.
signal on_payment_failed

# @brief Действие, выполняемое при начале процесса оплаты.
signal on_payment_started

# @brief Действие, выполняемое при отмене покупки пользователем.
signal on_purchase_cancelled

# @brief Действие, выполняемое при создании покупки.
signal on_purchase_created

static var _instance: RuStoreGodotPayClient = null


#   Если экземпляр еще не создан, создает его.
static func get_instance() -> RuStoreGodotPayClient:
    if _instance == null:
        _instance = RuStoreGodotPayClient.new()
    return _instance


func _init():
    _core_client = RuStoreGodotCoreUtils.get_instance()
    _clientWrapper = Engine.get_singleton(SINGLETON_NAME)
    _clientWrapper.rustore_on_get_user_authorization_status_success.connect(_on_get_user_authorization_status_success)
    _clientWrapper.rustore_on_get_user_authorization_status_failure.connect(_on_get_user_authorization_status_failure)
    _clientWrapper.rustore_get_purchase_availability_success.connect(_on_get_purchase_availability_success)
    _clientWrapper.rustore_get_purchase_availability_failure.connect(_on_get_purchase_availability_failure)
    _clientWrapper.rustore_on_get_products_success.connect(_on_get_products_success)
    _clientWrapper.rustore_on_get_products_failure.connect(_on_get_products_failure)
    _clientWrapper.rustore_on_get_purchases_success.connect(_on_get_purchases_success)
    _clientWrapper.rustore_on_get_purchases_failure.connect(_on_get_purchases_failure)  
    _clientWrapper.rustore_on_get_purchase_success.connect(_on_get_purchase_success)
    _clientWrapper.rustore_on_get_purchase_failure.connect(_on_get_purchase_failure)
    _clientWrapper.rustore_on_purchase_success.connect(_on_purchase_success)
    _clientWrapper.rustore_on_purchase_failure.connect(_on_purchase_failure)
    _clientWrapper.rustore_on_purchase_two_step_success.connect(_on_purchase_two_step_success)
    _clientWrapper.rustore_on_purchase_two_step_failure.connect(_on_purchase_two_step_failure)
    _clientWrapper.rustore_on_confirm_two_step_purchase_success.connect(_on_confirm_two_step_purchase_success)
    _clientWrapper.rustore_on_confirm_two_step_purchase_failure.connect(_on_confirm_two_step_purchase_failure)
    _clientWrapper.rustore_on_cancel_two_step_purchase_success.connect(_on_cancel_two_step_purchase_success)
    _clientWrapper.rustore_on_cancel_two_step_purchase_failure.connect(_on_cancel_two_step_purchase_failure)
    _clientWrapper.rustore_on_payment_completed.connect(_on_payment_completed)
    _clientWrapper.rustore_on_payment_failed.connect(_on_payment_failed)
    _clientWrapper.rustore_on_payment_started.connect(_on_payment_started)
    _clientWrapper.rustore_on_purchase_cancelled.connect(_on_purchase_cancelled)
    _clientWrapper.rustore_on_purchase_created.connect(_on_purchase_created)


# @brief Проверка статуса авторизации пользователя.
func get_user_authorization_status():
    _clientWrapper.getUserAuthorizationStatus()

func _on_get_user_authorization_status_success(data: String):
    var obj = ERuStorePayUserAuthorizationStatus.Item.get(data)
    if obj != null:
        on_get_user_authorization_status_success.emit(obj as ERuStorePayUserAuthorizationStatus.Item)
    else:
        var error = RuStoreError.new()
        error.name = "InvalidPurchaseStatus"
        error.description = "Received unknown purchase status: '%s'" % data
        on_get_user_authorization_status_failure.emit(obj)

func _on_get_user_authorization_status_failure(data: String):
    var obj = RuStorePayJsonParser.to_RuStorePaymentException_classes(data)
    on_get_user_authorization_status_failure.emit(obj)


# @brief Проверка доступности платежей.
func get_purchase_availability():
    _clientWrapper.getPurchaseAvailability()

func _on_get_purchase_availability_success(data: String):
    var obj = RuStorePayJsonParser.ToPurchaseAvailabilityResult(data)
    on_get_purchase_availability_success.emit(obj)

func _on_get_purchase_availability_failure(data: String):
    var obj = RuStorePayJsonParser.to_RuStorePaymentException_classes(data)
    on_get_purchase_availability_failure.emit(obj)


# @deprecated
func is_rustore_installed() -> bool:
    return _clientWrapper.isRuStoreInstalled()


#   Список продуктов имеет ограничение в размере 1000 элементов.
func get_products(productIds: Array[RuStorePayProductId]):
    var ids: Array[String] = []
    for item in productIds:
        ids.push_back(item.value)
    _clientWrapper.getProducts(ids)

func _on_get_products_success(data: String):
    var obj_arr: Array[RuStorePayProduct] = []
    var str_arr = JSON.parse_string(data)
    for str_item in str_arr:
        var obj_item: RuStorePayProduct = RuStorePayJsonParser.ToPayProduct(str(str_item))
        obj_arr.append(obj_item)
    on_get_products_success.emit(obj_arr)

func _on_get_products_failure(data: String):
    var obj = RuStorePayJsonParser.to_RuStorePaymentException_classes(data)
    on_get_products_failure.emit(obj)


# @brief Получение списка покупок пользователя.
func get_purchases(
        product_type: Variant = null, # ERuStorePayProductType.Item
        purchase_status: Variant = null # ERuStorePayPurchaseStatusFilter.Item
    ):
    var type = _get_enum_key_or_empty(ERuStorePayProductType.Item, product_type)
    var status = ""
    
    var status_value = _get_enum_key_or_empty(ERuStorePayPurchaseStatusFilter.Item, purchase_status)
    match status_value:
        "PAID":
            status = "ProductPurchaseStatus.PAID"
        "CONFIRMED":
            status = "ProductPurchaseStatus.CONFIRMED"
        "ACTIVE":
            status = "SubscriptionPurchaseStatus.ACTIVE"
        "PAUSED":
            status = "SubscriptionPurchaseStatus.PAUSED"
    
    _clientWrapper.getPurchases(type, status)

func _get_enum_key_or_empty(enum_type: Dictionary, value: Variant, prefix: String = "") -> String:
    if value == null:
        return ""
    if not enum_type.values().has(value):
        push_error("Invalid enum value: ", value)
        return ""
    return prefix + enum_type.keys()[value]

func _on_get_purchases_success(data: String):
    var obj_arr: Array[RuStorePayPurchase] = []
    var str_arr = JSON.parse_string(data)
    for str_item in str_arr:
        var obj_item = RuStorePayJsonParser.ToPayPurchase(str(str_item))
        obj_arr.append(obj_item)
    on_get_purchases_success.emit(obj_arr)

func _on_get_purchases_failure(data: String):
    var obj = RuStorePayJsonParser.to_RuStorePaymentException_classes(data)
    on_get_purchases_failure.emit(obj)


# @param purchaseId Идентификатор продукта, который был присвоен продукту в консоли RuStore.
func get_purchase(purchase_id: RuStorePayPurchaseId):
    _clientWrapper.getPurchase(purchase_id.value)

func _on_get_purchase_success(data: String):
    var obj = RuStorePayJsonParser.ToPayPurchase(data)
    on_get_purchase_success.emit(obj)

func _on_get_purchase_failure(purchase_id: String, data: String):
    var id = RuStorePayPurchaseId.new(purchase_id)
    var obj = RuStorePayJsonParser.to_RuStorePaymentException_classes(data)
    on_get_purchase_failure.emit(purchase_id, obj)


# @param enable_purchase_event_listener Дополнительный набор callback функций.
func purchase(
        parameters: RuStorePayProductPurchaseParams,
        preferred_purchase_type: ERuStorePayPreferredPurchaseType.Item = ERuStorePayPreferredPurchaseType.Item.ONE_STEP,
        sdk_theme: ERuStorePaySdkTheme.Item = ERuStorePaySdkTheme.Item.LIGHT,
        enable_purchase_event_listener: bool = false,
    ):
    var params: Dictionary = { "productId" : parameters.productId.value }
    if parameters.appUserEmail != null:
        params["appUserEmail"] = parameters.appUserEmail.value
    if parameters.appUserId != null:
        params["appUserId"] = parameters.appUserId.value
    if parameters.developerPayload != null:
        params["developerPayload"] = parameters.developerPayload.value
    if parameters.orderId != null:
        params["orderId"] = parameters.orderId.value
    if parameters.quantity != null:
        params["quantity"] = parameters.quantity.value
    _clientWrapper.purchase(
        params,
        ERuStorePayPreferredPurchaseType.Item.keys()[preferred_purchase_type],
        ERuStorePaySdkTheme.Item.keys()[sdk_theme],
        enable_purchase_event_listener,
    )

func _on_purchase_success(data: String):
    var obj = RuStorePayJsonParser.to_ProductPurchaseResult(data)
    on_purchase_success.emit(obj)

func _on_purchase_failure(productId: String, data: String):
    var id = RuStorePayProductId.new(productId)
    var obj = RuStorePayJsonParser.to_RuStorePaymentException_classes(data)
    on_purchase_failure.emit(id, obj)


# @param enable_purchase_event_listener Дополнительный набор callback функций.
func purchase_two_step(
        parameters: RuStorePayProductPurchaseParams,
        sdk_theme: ERuStorePaySdkTheme.Item = ERuStorePaySdkTheme.Item.LIGHT,
        enable_purchase_event_listener: bool = false,
    ):
    var params: Dictionary = { "productId" : parameters.productId.value }
    if parameters.appUserEmail != null:
        params["appUserEmail"] = parameters.appUserEmail.value
    if parameters.appUserId != null:
        params["appUserId"] = parameters.appUserId.value
    if parameters.developerPayload != null:
        params["developerPayload"] = parameters.developerPayload.value
    if parameters.orderId != null:
        params["orderId"] = parameters.orderId.value
    if parameters.quantity != null:
        params["quantity"] = parameters.quantity.value
    _clientWrapper.purchaseTwoStep(
        params,
        ERuStorePaySdkTheme.Item.keys()[sdk_theme],
        enable_purchase_event_listener
    )

func _on_purchase_two_step_success(data: String):
    var obj = RuStorePayJsonParser.to_ProductPurchaseResult(data)
    on_purchase_two_step_success.emit(obj)

func _on_purchase_two_step_failure(productId: String, data: String):
    var id = RuStorePayProductId.new(productId)
    var obj = RuStorePayJsonParser.to_RuStorePaymentException_classes(data)
    on_purchase_two_step_failure.emit(id, obj)

func _on_payment_completed(data: String) -> void:
    _emit_purchase_event(on_payment_completed, data)

func _on_payment_failed(data: String) -> void:
    _emit_purchase_event(on_payment_failed, data)

func _on_payment_started(data: String) -> void:
    _emit_purchase_event(on_payment_started, data)

func _on_purchase_cancelled(data: String) -> void:
    _emit_purchase_event(on_purchase_cancelled, data)

func _on_purchase_created(data: String) -> void:
    _emit_purchase_event(on_purchase_created, data)

func _emit_purchase_event(sig: Signal, data: String) -> void:
    var d := RuStorePayJsonParser.to_purchase_event_payload(data)
    sig.emit(d["productId"], d["purchaseId"], d["invoiceId"])


# @param developer_payload Строка, содержащая дополнительную информацию о заказе (необязательный параметр).
func confirm_two_step_purchase(purchase_id: RuStorePayPurchaseId, developer_payload: RuStorePayDeveloperPayload = null):
    var params: Dictionary = { "purchaseId" : purchase_id.value }
    if developer_payload != null:
        params["developerPayload"] = developer_payload.value
    _clientWrapper.confirmTwoStepPurchase(params)

func _on_confirm_two_step_purchase_success(purchase_id: String):
    var id = RuStorePayPurchaseId.new(purchase_id)
    on_confirm_two_step_purchase_success.emit(id)

func _on_confirm_two_step_purchase_failure(purchase_id: String, data: String):
    var id = RuStorePayPurchaseId.new(purchase_id)
    var obj = RuStorePayJsonParser.to_RuStorePaymentException_classes(data)
    on_confirm_two_step_purchase_failure.emit(id, obj)


# @param purchase_id Идентификатор покупки.
func cancel_two_step_purchase(purchase_id: RuStorePayPurchaseId):
    _clientWrapper.cancelTwoStepPurchase(purchase_id.value)

func _on_cancel_two_step_purchase_success(purchase_id: String):
    var id = RuStorePayPurchaseId.new(purchase_id)
    on_cancel_two_step_purchase_success.emit(id)

func _on_cancel_two_step_purchase_failure(purchase_id: String, data: String):
    var id = RuStorePayPurchaseId.new(purchase_id)
    var obj = RuStorePayJsonParser.to_RuStorePaymentException_classes(data)
    on_cancel_two_step_purchase_failure.emit(id, obj)

Назад