5.0.0
该门户网站正在开发中。文档的完整版本请看这里.
实现示例
为了正确集成支付,建议您参阅示例应用程序:
https://gitflic.ru/project/rustore/godot-rustore-billing/file?file=example&branch=master
支付条件
为了进行支付,必须遵守以下条件:
- 用户的设备上必须安装 RuStore。
- 用户必须在 RuStore 中获得授权。
- 用户和应用程序不应在RuStore中被封锁。
- 应用程序必须在 RuStore 控制台中启用购买功能。
在项目中集成
为了在您的项目中进行集成,您需要从 https://gitflic.ru/project/rustore/godot-rustore-billing/release页面下载归档文件。
解压缩 zip 文件,并将 rustore-billing.aar 和 RustoreBilling.gdap 文件添加到您项目的 /android/plugins 文件夹中。android/plugins
example/ \`\`android/ \`\`plugins/ \`\`rustore-billing-release.aar \`\`RustoreBilling.gdap
处理deeplink
为了通过第三方应用程序(如快速支付系统(SBP)或SberPay)正确进行支付,您需要正确实现 deeplink 的处理。为此,您需要在 android/build/AndroidManifest.xml 中指定带有您项目方案的 intent-filter:
\<activity \`\`android:name= \".sample.MainActivity\" \> \`\`\<intent-filter\> \`\`\<action android:name= \"android.intent.action.MAIN\" /\> \`\`\<category android:name= \"android.intent.category.LAUNCHER\" /\> \`\`\</intent-filter\> \`\`\<intent-filter\> \`\`\<action android:name= \"android.intent.action.VIEW\" /\> \`\`\<category android:name= \"android.intent.category.DEFAULT\" /\> \`\`\<category android:name= \"android.intent.category.BROWSABLE\" /\> \`\`\<data android:scheme= \"yourappscheme\" /\> \`\`\</intent-filter\> \</activity\>
中"yourappscheme" - 是您的 deeplink 方案,可以更改为其他方案。
这个方案应与 init() 方法中传递的方案匹配。
项目导出与连接插件
为了在您的Godot项目中使用插件,您需要在导出设置中启用它。
完成所有设置后,您可以在项目中使用插件。
初始化
在调用库的方法之前,需要先进行其初始化。要进行初始化,请调用 init() 方法:
if Engine.has_singleton( \"RustoreBilling\" ): \`\`billing = Engine.get_singleton( \"RustoreBilling\" ) \`\`billing.init( \"123456\" , \"yourappscheme://iamback\" ) \`\`billing.rustore_is_available.connect(\_on_availability) \`\`billing.rustore_purchase_product.connect(\_on_purchase) \`\`billing.rustore_delete_purchase.connect(\_on_delete) \`\`billing.rustore_confirm_purchase.connect(\_on_confirm) \`\`billing.rustore_get_purchases.connect(\_on_get_purchases) \`\`billing.rustore_get_purchase.connect(\_on_get_purchase) \`\`billing.rustore_get_products.connect(\_on_get_products)
123456 - 来自 RuStore 控制台的应用程序代码(例如:https://console.rustore.ru/apps/123456)。
- yourappscheme://iamback - 用于通过第三方应用程序支付后返回您的应用程序的deeplink方案 (例如SberPay 或 快速支付系统(SBP))。SDK 会为这个方案生成它自己的宿主。
要的是, 传递给 deeplinkScheme 的 deeplink 方案必须与 AndroidManifest.xml 中"处理 deeplink"部分指定的方案匹配。
插件初始化后,将连接到所有可用的信号。
检查支付功能的可用性
为了检查支付的可用性,需要满足以下条件:
- 用户的设备上必须安装 RuStore。
- RuStore 必须支持支付功能。
- 用户必须在 RuStore 中获得授权。
- 用户和应用程序不应在RuStore中被封锁。
- 应用程序必须在 RuStore 控制台中启用购买功能。
果所有条件都满足,isAvailable() 方法将返回 true 值。
func \_availability(): \`\`if billing ! = null: \`\`billing.isAvailable()func \_on_availability(data: Dictionary): \`\`if data\[ \'status\' \] = = \'success\' : \`\`print ( \'success\' ) \`\`print (data\[ \'result\' \]) \`\`elif data\[ \'status\' \] = = \'failure\' : \`\`print ( \'failure\' ) \`\`print (data\[ \'message\' \])
_on_availability(data: Dictionary) 方法 - 处理 rustore_is_available 信号的处理器,它接收关于 RuStore 可用性的消息。
通过 data['status'] 键存储的请求状态。可能的值包括:
success
- 请求成功完成。在这种情况下,data['result'] 键将存储 true(如果 RuStore 可用)或 false(如果不可用)。failure
- 请求出错。错误信息存储在 data['message'] 键中。
获取产品列表
为了获取产品,您需要使用 getProducts(ids) 方法。
func \_get_products(): \`\`if billing ! = null: \`\`billing.getProducts(\[ \`\`\"example1\" , \`\`\"example2\" \`\`\])func \_on_get_products(data: Dictionary): \`\`if data\[ \'status\' \] = = \'success\' and data.has( \'items\' ): \`\`var items = data\[ \'items\' \] \`\`for key in items: \`\`print (items\[key\]) \`\`elif data\[ \'status\' \] = = \'failure\' : \`\`print ( \'failure\' ) \`\`print (data\[ \'message\' \])
_on_get_products(data: Dictionary) 方法 - 处理 rustore_get_products 信号的处理器,它接收包含可用产品列表的消息。
ids
- 产品标识符列表。
过 data['status'] 键存储请求的执行状态。可能的值包括:
success
- 请求成功完成。在这种情况下,data['items'] 键将存储可用产品的列表。failure
- 请求出错。错误信息存储在 data['message'] 键中。
品的可用字段:
product_id
- 产品标识符;product_type
- 产品类型;product_status
- 产品状态;price_lable
- 格式化的产品价格,包括[language]语言的货币符号;price
- 以最小单位(戈比)表示的价格;currency
- ISO 4217货币代码;language
- 使用 BCP 47 编码指定的语言;title
- 产品名称,以[language]语言表示;description
- 产品描述,以[language]语言表示;image_url
- 图片链接;promo_image_url
- 促销图片链接;subscription
- 订阅描述,仅对于类型为 subscription 的产品返回。
用字段:subscription
subscription_period
- 订阅周期;free_trial_period
- 订阅试用期;grace_period
- 订阅宽限期;introductory_price
- 格式化的介绍性订阅价格,包括product:language语言的货币符号;introductory_price_amount
- 以货币最小单位(戈比)表示的介绍性价格;introductory_price_period
- 介绍性价格计算周期。
用于 subscription_period, free_trial_period, grace_period 和 introductory_price_period 键的字段:introductory_price_period
years
- 年数;months
- 月数;days
- 天数。
获取购买列表
要获取购买列表,请使用getPurchases()方法:
func \_get_purchases(): \`\`if billing ! = null: \`\`billing.getPurchases()func \_on_get_purchases(data: Dictionary): \`\`if data\[ \'status\' \] = = \'success\' and data.has( \'items\' ): \`\`var items = data\[ \'items\' \] \`\`for key in items: \`\`print (items\[key\]) \`\`elif data\[ \'status\' \] = = \'failure\' : \`\`print ( \'failure\' ) \`\`print (data\[ \'message\' \])
_on_get_purchases(data: Dictionary) 方法 - 处理 rustore_get_purchases 信号的处理器,它接收包含可用购买列表的消息。
通过 data['status'] 键存储请求的执行状态。可能的值包括:
success
- 请求成功完成。在这种情况下,data['items'] 键将存储可用购买的列表。failure
- 请求出错。错误信息存储在 data['message'] 键中。
买的可用字段:
purchase_id
- 购买标识 符;product_id
- 产品标识符;product_type
- 产品类型;invoice_id
- 账单标识符;description
- 购买描述;language
- 使用 BCP 47 编码指定的语言;purchase_time
- 购买时间(RFC 3339 格式);order_id
- 应用程序生成的唯一支付标识符(uuid);amount_lable
- 格式化的购买价格,包括[language]语言的货币符号;amount
- 以最小货币单位表示的价格;currency
- ISO 4217货币代码;quantity
- 产品数量;purchase_state
- 购买状态;developer_payload
- 开发者指定的字符串,包含关于订单的附加信息;subscription_token
- 用于在服务器端验证购买的令牌。有关服务器端购买验证的更多信息,请参阅购买的服务器端验证部分。
买状态的可能值:
CREATED
- 已创建;INVOICE_CREATED
- 已创建,等待支付;CONFIRMED
- 已确认;PAID
- 已支付;CANCELLED
- 购买已取消;CONSUMED
- 已确认购买消耗;CLOSED
- 订阅已取消。
关购买状态模型的更多信息,请参阅"获取用户购买列表"部分
获取购买信息
要获取购买列表,请使用purchaseInfo()方法:
func \_purchase_info( id : String): \`\`if billing ! = null: \`\`billing.purchaseInfo( id )func \_on_get_purchase(data: Dictionary): \`\`if data\[ \'status\' \] = = \'success\' : \`\`print ( \'success\' ) \`\`print (data\[ \'purchase\' \]) \`\`elif data\[ \'status\' \] = = \'failure\' : \`\`print ( \'failure\' ) \`\`print (data\[ \'message\' \])
_on_get_purchase (data: Dictionary) 方法 - 处理 rustore_get_purchase 信号的处理器,它接收包含购买的消息。
id
- 购买标识符。
过 data['status'] 键存储的请求状态。可能的值包括:
success
- 请求成功完成。在这种情况下,data['items'] 键将存储可用购买的列表。failure
- 请求出错。错误信息存储在 data['message'] 键中。
买的可用字段data['purchase']
-
purchase_id
- 购买标识符; -
product_id
- 产品标识符; -
product_type
- 产品类型; -
invoice_id
- 账单标识符; -
description
- 购买描述; -
language
- 使用 BCP 47 编码指定的语言; -
purchase_time
- 购买时间(RFC 3339 格式); -
order_id
- 应用程序生成的唯一支付标识符(uuid); -
amount_lable
- 格式化的购买价格,包括[language]语言的货币符号; -
amount
- 以最小货币单位表示的价格; -
currency
- ISO 4217货币代码; -
quantity
- 产品数量; -
purchase_state
- 购买状态; -
developer_payload
- 开发者指定的字符串,包含关于订单的附加信息; -
subscription_token
- 用于在服务器端验证购买的令牌。有关服务器端购买验证的更多信息,请参阅购买的服务器端验证部分。 -
购买状态的可能值:
-
CREATED
- 已创建; -
INVOICE_CREATED
- 已创建,等待支付; -
CONFIRMED
- 已确 认; -
PAID
- 已支付; -
CANCELLED
- 购买已取消; -
CONSUMED
- 已确认购买消耗; -
CLOSED
- 订阅已取消。
关购买状态模型的更多信息,请参阅"获取用户购买列表"部分
购买产品
您可以使用 purchaseProduct(id) 方法来进行购买:
func \_purchase( id : String): \`\`var params = { \`\`\"order_id\" : \"1234\" , \`\`\"quantity\" : 1 , \`\`\"payload\" : \"example\" \`\`} \`\`if billing ! = null: \`\`billing.purchaseProduct( id , params)func \_on_purchase(data: Dictionary): \`\`if data\[ \'status\' \] = = \'cancelled\' : \`\`print ( \'cancelled\' ) \`\`if data\[ \'purchase\' \] ! = \'\': \`\`\_delete(data\[ \'purchase\' \]) \`\`elif data\[ \'status\' \] = = \'success\' : \`\`print ( \'success\' ) \`\`print (data) \`\`elif data\[ \'status\' \] = = \'failure\' : \`\`print ( \'failure\' ) \`\`print (data\[ \'message\' \])
_on_purchase(data: Dictionary) 方法 - 处理 rustore_purchase_product 信号的处理器,它接收包含购买的消息。
id
- 产品标识符;order_id
- 订单标识符,在AnyApp端创建(可选。如果未指定,则会自动生成);quantity
- 产品数量(可选);payload
- AnyApp 开发者的附加信息(可选)。
过 data['status'] 键存储的请求状态。可能的值包括:
success
- 请求成功完成。failure
- 请求出错。错误信息存储在 data['message'] 键中。cancelled
- 用户取消了购买。
买的可用字段:
purchase_id
- 购买标识符;order_id
- 订单标识符,在AnyApp端创建(可选。如果未指定,则会自动生成);invoice_id
- 账单标识符;product_id
- 产品标识符;quantity
- 产品数量(可选);payload
- AnyApp 开发者的附加信息(可选)。error_code
- 错误代码,如果请求状态为 failure。
购买确认
RuStore 包含以下类型的产品:
CONSUMABLE
- 消耗的(可以多次购买,例如应用中的水晶)。NON_CONSUMABLE
非消耗的(只能购买一次,例如禁用应用程序中的广告)。SUBSCRIPTION
- 订阅(可以购买一段时间,例如流媒体服务的订阅)。
有处于 purchase_state == "PAID" 状态的 CONSUMABLE
类型产品需要消耗。
您可以使用 confirmPurchase(id) 方法来消耗购买:
func \_confirm( id : String): \`\`var params = { \`\`\"payload\" : \"123\" \`\`} \`\`if billing ! = null: \`\`billing.confirmPurchase( id , params)func \_on_confirm(data: Dictionary): \`\`print (data) \`\`if data\[ \'status\' \] = = \'success\' : \`\`print ( \'success\' ) \`\`elif data\[ \'status\' \] = = \'failure\' : \`\`print ( \'failure\' ) \`\`print (data\[ \'message\' \])
_on_confirm(data: Dictionary)方法处理 rustore_get_purchase 信号的处理器,它接收包含购买的消息。
id
- 购买标识符。payload
- 开发者指定的字符串,包含订单的附加信息(可选)。
过 data['status'] 键存储的请求状态。可能的值包括:
success
- 请求成功完成。failure
- 请求出错。错误信息存储在 data['message'] 键中
取消购买
要取消购买,您可以使用 deletePurchase(id) 方法:
func \_delete( id : String): \`\`if billing ! = null: \`\`billing.deletePurchase( id )func \_on_delete(data: Dictionary): \`\`print (data) \`\`if data\[ \'status\' \] = = \'success\' : \`\`print ( \'success\' ) \`\`elif data\[ \'status\' \] = = \'failure\' : \`\`print ( \'failure\' ) \`\`print (data\[ \'message\' \])
_on_delete(data: Dictionary) 方法 - 处理 rustore_delete_purchase 信号的处理器,它接收包含删除购买的消息。
id
- 购买标识符。
过 data['status'] 键存储的请求状态。可能的值包括:
success
- 请求成功完成。failure
- 请求出错。错误信息存储在 data['message'] 键中。
果您有与删除购买相关的逻辑,请使用此方法。购买将在20分钟后自动取消,或者在同一客户端进行重复购买时取消。