支付功能

可使用应用内购买所需的支付功能。

应用内商品查询功能


如要使用查询商店内商品信息的功能,请使用下列代码。

if (FGamePotSDKPluginModule::IsGamePotSdkAvailable())
    TArray<FNPurchaseItem> itemList = FGamePotSDKPluginModule::GetSharedGamePotSdk()->getPurchaseItems();


USTRUCT()
struct FNPurchaseItem
{
    UPROPERTY()
    FString productId;             // 商品ID

    UPROPERTY()
    FString type;                  // 商品类型。固定为"inapp"

    UPROPERTY()
    FString price;                 // 价格Google商店:$0.99,其他商店:0.99

    UPROPERTY()
    FString price_amount;        

    UPROPERTY()
    FString price_amount_micros;   // (显示于UI时推荐)货币与价格合并的值。ONE Store不会传输货币单位。例如)$0.99

    UPROPERTY()
    FString price_currency_code;   // 货币代码 例如KRW、USD

    UPROPERTY()
    FString price_with_currency;

    UPROPERTY()
    FString title;                  // 商品名称

    UPROPERTY()
    FString description;           // 商品描述
}

支付尝试功能


可以通过一个支付API,在Google Play商店、Apple App Store均可使用支付尝试功能。

如要使用支付尝试功能,请使用下列代码。

// productId:商店中添加的商品ID
// uniqueId:单独管理的发票号
// serverId:付费角色的服务器ID
// playerId:付费角色的角色ID
// etc     :付费角色的其他信息

if (FGamePotSDKPluginModule::IsGamePotSdkAvailable())
    FGamePotSDKPluginModule::GetSharedGamePotSdk()->purchase(FString productId, FString uniqueId, FString serverId, FString playerId, FString etc);

    /// 应用内支付成功
 void ASampleGameModeBase::OnPurchaseSuccess(FNPurchaseInfo NPurchaseInfo)
 {
 }

/// 取消应用内支付
 void ASampleGameModeBase::OnPurchaseCancel()
 {
 }

/// 应用内支付失败
 void ASampleGameModeBase::OnPurchaseFailure(FNError NError)
 {
       // 请使用NError.message显示错误消息。
 }

获取付费道具信息的功能


如要使用获取由商店传递的应用内付费道具信息功能,请使用下列代码。

USTRUCT()
struct FNPurchaseInfo
{
    UPROPERTY()
    FString price;                        // 付费道具的价格
    UPROPERTY()
    FString productId;                 // 付费道具的ID
    UPROPERTY()
    FString currency;                   // 支付价格货币(KRW/USD)
    UPROPERTY()
    FString orderId;                     // 商店的Order ID
    UPROPERTY()
    FString productName;           // 付费道具的名称
    UPROPERTY()
    FString gamepotOrderId;        // GAMEPOT生成的Order ID
    UPROPERTY()
    FString uniqueId;                   // 由开发商单独管理的发票ID
    UPROPERTY()
    FString serverId;                   // 付费角色的服务器ID
    UPROPERTY()
    FString playerId;                   // 付费角色的角色ID
    UPROPERTY()
    FString etc;                        // 进行支付的角色的其他信息
    UPROPERTY()
    FString signature;                 // 商店签名
    UPROPERTY()
    FString originalJSONData;  // 发票数据
}

发放付费道具的功能


可设置为与支付商店的发票明细进行对照并完成所有验证后向开发商服务器传递发放请求。

详细说明请参考道具发放请求

My Card支付


(参考) 关联My Card所需的FacServiceID/KEY值请联系My Card进行确认,然后在仪表盘中设置。

  1. 在仪表盘 >> 支付 >> IAP的商店类型:Google项目 > 添加价格 > 货币(例如TWD)/输入价格信息后进行保存。

  2. 在仪表盘 >> 项目设置 >> 第三方支付项目中添加My Card后,请确认相应的FacService ID / Sign Key是否正常输入。

  3. 支付时调用以下SDK代码。

    // productId:输入已添加至商店的商品ID。
    // uniqueId:输入单独管理的发票号。
    // serverId:输入进行付费的角色的服务器ID。
    // playerId:输入进行付费的角色的角色ID。
    // etc      : 输入付费角色的其他信息。
    
    if (FGamePotSDKPluginModule::IsGamePotSdkAvailable())
        FGamePotSDKPluginModule::GetSharedGamePotSdk()->purchase(FString productId, FString uniqueId, FString serverId, FString playerId, FString etc);
    • 使用My Card时付费道具的调用形式请使下方API。

      if (FGamePotSDKPluginModule::IsGamePotSdkAvailable())
      TArray<FNPurchaseItem> itemList = FGamePotSDKPluginModule::GetSharedGamePotSdk()->getPurchaseThirdPaymentsItems();
  4. $S(PluginDir)/GamePot_Android_UPL.xml文件须使用编辑器打开。

    ...
     <resourceCopies>
     ...
     <copyFile src="$S(PluginDir)/ThirdParty/Android/libs/gamepot-billing-mycard.aar" dst="$S(BuildDir)/libs/gamepot-billing-mycard.aar" />
     ....
    
    <buildGradleAdditions>
    ...
        dependencies {
       ...
       implementation(name: 'gamepot-billing-mycard', ext: 'aar')
       ...
    
       defaultConfig {
       ...
       resValue "string", "gamepot_store", "google"
       resValue "string", "gamepot_payment", "mycard"// 只有当商店为Google时才能运行。

  5. 请确认./ThirdParty/Android/libs/gamepot-billing-mycard.aar文件夹内是否包含gamepot-billing-mycard.aar。

第三方支付


如要关联第三方支付模块,首先参考第三方支付服务关联完成设置后使用下列代码。

// productId:已添加至商城的商品ID
if (FGamePotSDKPluginModule::IsGamePotSdkAvailable())
    FGamePotSDKPluginModule::GetSharedGamePotSdk()->purchaseThirdPayments(FString productId);


// 用于调用产品信息列表的API
if (FGamePotSDKPluginModule::IsGamePotSdkAvailable())
    TArray<FNPurchaseItem> itemList = FGamePotSDKPluginModule::GetSharedGamePotSdk()->getPurchaseThirdPaymentsItems();

Last updated