单机渠道支付参数配置

单机渠道支付参数配置

1

1.1 介绍

本文主要描述某些单机渠道在支付时需要特殊处理的一些逻辑。如果游戏要接入的渠道未在本文提及,说明支付相关的规则与网游的一致。
单机渠道的支付接口与网游支付接口相同,如无特殊说明,参数传递规则也与网游接口一致:

/**
 * 游戏商品(道具)支付
 *
 * @param activity   上下文Activity
 * @param goodsId    商品ID
 * @param goodsName  商品名,钻石,宝刀
 * @param goodsCount 商品个数
 * @param totalPrice 总价
 * @param extraInfo  游戏扩展字段
 * @param exraIntent 渠道自定义扩展参数,没有特殊需要可以传null
 * @param callback   支付回调
 *
 */
public void pay(Activity activity,
        String goodsId, String goodsName, int goodsCount, int totalPrice,
        String extraInfo,
        Intent extraIntent,
        IXPayListener callback)

注意:
对于接口的extraIntent参数,调用Intent.putExtra()接口时,所有的参数都为String类型。

2

百度单机渠道 查看

此处说明的渠道包含百度助手单机渠道(d2bdzs)、百度91单机渠道(d2bd91)、百度多酷单机渠道(d2bddk)、百度贴吧单机渠道(d2bdtb)。

2.1 渠道自定义扩展参数(extraIntent)

百度单机支付接口需要多个支付渠道的参数,它们可以通过extraIntent参数传递给支付接口。生成extraIntent的示例如下(其中ExtraIntent类的实现详见开发包中ixsdk_sms目录下对应的Java源代码):

    ...
    if (ExtraIntent.isBaiduDjChannel(this)) {
        // 当前渠道为百度单机的渠道
        String gamePropsInfoPropsId = "001";
        String gamePropsInfoTitle = "002";
        String dkCmmdoDataPropsId = "003";
        String dkCmmdoDataCode = "004";
        String dkCmmdoDataDest = "005";
        String dkCmmdoDataChannelNum = "006";
        String cmmmPayCode = "007";
        String cmgbBillingIndex = "008";
        String dkCMYBKDataYbkKey = "009";
        String dkCMYBKDataPayCode = "010";
        extraIntent = ExtraIntent.getD2baiduExtraIntent(
                gamePropsInfoPropsId, gamePropsInfoTitle,
                dkCmmdoDataPropsId, dkCmmdoDataCode,
                dkCmmdoDataDest, dkCmmdoDataChannelNum,
                cmmmPayCode, cmgbBillingIndex,
                dkCMYBKDataYbkKey, dkCMYBKDataPayCode);
    }
    ...

3

百度品宣单机渠道 查看

此处说明的渠道包含百度品宣助手单机渠道(d2bdpxzs)、百度品宣91单机渠道(d2bdpx91)、百度品宣多酷单机渠道(d2bdpxdk)、百度品宣贴吧单机渠道(d2bdpxtb)。

3.1渠道自定义扩展参数(extraIntent)

百度品宣单机支付接口需要多个支付渠道的参数,它们可以通过extraIntent参数传递给支付接口。生成extraIntent的示例如下(其中ExtraIntent类的实现详见开发包中ixsdk_sms目录下对应的Java源代码):

    ...
    if (ExtraIntent.isBaiduPXDjChannel(this)) {
        // 当前渠道为百度品宣渠道
        String gamePropsInfoPropsId = "001"; // 此处的值为示例,需要根据计费信息修改
        String gamePropsInfoTitle = "002"; // 此处的值为示例,需要根据计费信息修改
        String dkCmmdoDataPropsId = "003"; // 此处的值为示例,需要根据计费信息修改
        String dkCmmdoDataCode = "004"; // 此处的值为示例,需要根据计费信息修改
        String dkCmmdoDataDest = "005"; // 此处的值为示例,需要根据计费信息修改
        String dkCmmdoDataChannelNum = "006"; // 此处的值为示例,需要根据计费信息修改
        String dkCMYBKDataYbkKey = "007"; // 此处的值为示例,需要根据计费信息修改
        String dkCMYBKDataPayCode = "008"; // 此处的值为示例,需要根据计费信息修改
        extraIntent = ExtraIntent.getD2baiduPXExtraIntent(
                gamePropsInfoPropsId,
                gamePropsInfoTitle,
                dkCmmdoDataPropsId,
                dkCmmdoDataCode,
                dkCmmdoDataDest,
                dkCmmdoDataChannelNum,
                dkCMYBKDataYbkKey,
                dkCMYBKDataPayCode);
        }
    }
    ...

4

UC单机渠道(d2uc) 查看

4.1 渠道自定义扩展参数(extraIntent)

UC单机渠道SDK本身就支持运营商短代,因此可以将短信计费代码通过extraIntent参数传给支付接口。生成extraIntent的示例如下(其中ExtraIntent类的实现详见开发包中ixsdk_sms目录下对应的Java源代码):

    ...
    if (ExtraIntent.isD2UCChannel(this)) {
        // 当前渠道为UC单机
        // 运营商短信计费代码,需要根据当前手机号码判断运营商,
        // 使用相应的计费代码,如果没有可以传null
        String smsPayCode = "005";
        extraIntent = ExtraIntent.getD2UcExtraIntent(smsPayCode);
    }
    ...

4.2 获取历史订单接口

UC单机SDK在初始化时,可能会返回一些历史订单数据,如果游戏需要这些数据,可以通过SDK扩展接口extFunc获取。接口调用示例如下:


    /**
     * 获取历史订单扩展接口的funcNum定义
     */
    private static final int EXT_FUNC_CODE_GET_HISTORY_ORDERS = 2101;
    private void getHistoryOrders() {
        IXProxy.getInstance().extFunc(this, new IXExtFuncListener() {

            @Override
            public void onExtFuncCallback(int funcNum, Intent intent) {
                if (intent != null) {
                    String orders = intent.getStringExtra("orders");
                    try {
                        JSONArray jaOrders = new JSONArray(orders);
                        int l = jaOrders.length();
                        for (int i = 0; i < l ; ++i) {
                            JSONObject joOrder = jaOrders.getJSONObject(i);
                            if (null == joOrder) {
                                continue;
                            }
                            // 获取订单号
                            String orderId = joOrder.getString("order");
                            // 获取渠道订单号,可能为空串
                            String channelTradeId =
                                    joOrder.getString("channelTradeId");
                            // 获取订单金额
                            int amount = joOrder.getInt("amount");
                            // 获取订单中的商品名称
                            String goodsName = joOrder.getString("goodsName");
                            Log.d("historyOrders", "get history order: "
                                    + orderId
                                    + " " + channelTradeId
                                    + " " + amount + " "
                                    + goodsName);
                        }

                    } catch (Throwable tr) {
                        tr.printStackTrace();
                    }
                }
            }
        }, EXT_FUNC_CODE_GET_HISTORY_ORDERS, null);
    }

5

酷狗单机渠道(d2kugou) 查看

5.1渠道自定义扩展参数(extraIntent)

酷狗单机渠道中的支付使用的是星云集成的运营商三网融合SDK,调用支付接口时,需要游戏通过extraIntent参数告知SDK使用运营商三网融合的短信计费,并传入计费代码。生成extraIntent的示例如下(其中ExtraIntent类的实现详见开发包中ixsdk_sms目录下对应的Java源代码):

    ...
    if (ExtraIntent.isD2KugouChannel(this)) {
        // 当前渠道为酷狗单机渠道,支付时只能使用运营商短信支付
        // 计费代码,需要根据当前手机号码判断运营商,使用相应的计费代码
        String smsPayCode = "005";
        extraIntent = ExtraIntent.getIXSmsPayExtraIntent(true, smsPayCode);
    }
    ...