Android SDK_支付功能

GAMEPOT结算仅支持游戏内消耗性商品类型的结算。只有V17版本支持One Store应用内SDK。
包含ONE Store应用内SDK : gamepot-billing-onestore.aar
包含GALAXY Store应用内SDK: gamepot-billing-galaxystore.aar
包含My Card应用内SDK : gamepot-billing-mycard.aar ( 请避免用于Google Store环境的构建程序。)

可使用用于在APP内购买商品的支付功能。支付结果值以Listener形式实现。

设置MainActivity.java


若要设置MainActivity.java文件以使用支付功能,请使用下列代码。

import io.gamepot.common.GamePot;
import io.gamepot.common.GamePotPurchaseInfo;
import io.gamepot.common.GamePotPurchaseListener;
import io.gamepot.common.GamePotError;

public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // 请先调用setup API。
        GamePot.getInstance().setup(getApplicationContext());

        ...
        GamePot.getInstance().setPurchaseListener(new GamePotPurchaseListener<GamePotPurchaseInfo>() {
            @Override
            public void onSuccess(GamePotPurchaseInfo info) {
                // 支付成功。道具发放请求以Server to Server传递至Webhook中设置的地址。
                // 仅在此处处理结果,请不要实际发放道具。
            }

            @Override
            public void onFailure(GamePotError error) {
                // 支付失败。请使用error.getMessage()显示错误消息。
            }

            @Override
            public void onCancel() {
                // 付款过程中用户取消时
            }
        });
        ...
    }
}

支付尝试功能


通过一个支付API,可在Google PlayStore、Apple APPStore使用支付尝试功能。

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

  • 尝试一般支付

import io.gamepot.common.GamePot;

// productId:商店中注册的商品ID
GamePot.getInstance().purchase("product id");
  • 单独管理支付尝试及发票号

import io.gamepot.common.GamePot;

// productId:商店中注册的商品ID
// uniqueId:单独管理的发票号
GamePot.getInstance().purchase("product id", "uniqueId");
  • 另行管理支付尝试及发票编号,向Webhook传达角色信息 OneStore版本时,uniqueId+serverId+playerId+etc的长度之和小于85byte方可进行支付。

import io.gamepot.common.GamePot;

// productId:在Store注册的商品ID
// uniqueId:单独管理的发票号
// serverId:付费角色的服务器ID
// playerId:付费角色的角色ID
// etc:付费角色的其他信息
GamePot.getInstance().purchase("product id","uniqueId","serverId","playerId","etc");

获取付款道具列表功能


若要使用获取由Store传递的应用内付费道具列表功能,请使用下列代码。

作为登录成功后应当调用的API,由于getPurchaseDetailList API是提供从Store应用内SDK非同步获取的内容的API,因此可根据调用的时间以空值形式发送。(以可支付的环境为准)

import io.gamepot.common.GamePot;

//[case1]
GamePotPurchaseDetailList details = GamePot.getInstance().getPurchaseDetailList();

//[case2]
GamePot.getInstance().getPurchaseDetailListAsync(new GamePotListener<GamePotPurchaseDetailList>() {
    @Override
    public void onSuccess(GamePotPurchaseDetailList data) {
        //data : In-app information
    }

    @Override
    public void onFailure(GamePotError error) {
        // api error
    }
});

发放付费道具功能


对照付款Store的发票明细,全部完成验证后,方可设置向开发公司服务器发送发放请求。

详细内容请参阅道具发放请求

Mycard支付


Mycard库:gamepot-billing-mycard.aar

(参考) 关联Mycard所需的FacServiceID / KEY值请联系Mycard进行确认,然后在Dashboard中设置。

  1. 请填写Dashboard >> 支付 >> IAP的Store类型:Google项目 > 添加价格 > 货币(ex.TWD)/价格信息后保存相关信息。

  2. 在Dashboard >> 项目设置 >> 外部支付项目中添加MyCard,并确认是否正常输入相应FacService ID / Sign Key。

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

    GamePot.getInstance().purchase("product id");

    • MyCard使用过程中以付费道具的调用形式调用GamePot.getInstance().getPurchaseDetailList();时将出现错误。为应对这一问题,请调用GamePot.getInstance().getPurchaseThirdPaymentsDetailList();。

  4. 删除./AndroidManifest.xml文件中标签的name。

   <application
       android:allowBackup="false"
       android:icon="@mipmap/ic_launcher"
       android:label="@string/app_name"
       android:roundIcon="@mipmap/ic_launcher_round"
       tools:replace="android:allowBackup" >
  1. build.gradle文件设置如下。

resValue "string", "gamepot_store", "google"
resValue "string", "gamepot_payment", "mycard" // 只有当商店为Google时才适用。
  1. 确认../libs文件夹内是否包含gamepot-billing-mycard.aar。

  2. 确认是否已设置为开发时build.gradle文件内包含库。

ex) implementation(name: 'gamepot-billing-mycard', ext: 确认文件夹内是否包含'aar')。

外部支付功能


以OnrStore为例:若要关联不使用OnrStore支持的应用内SDK的外部支付模块,请参阅关联外部支付服务完成相应设置后使用下列代码。

  • 尝试付款

import io.gamepot.common.GamePot;

// activity:当前Activity
// product id:在Dashboard登记的支付ID
GamePot.getInstance().purchaseThirdPayments(activity, product id);
  • 获取付款道具列表

import io.gamepot.common.GamePot;

GamePotPurchaseDetailList thirdPaymentsDetailList = GamePot.getInstance().getPurchaseThirdPaymentsDetailList();

Last updated