跳到主要内容

支付

支持微信、支付宝;微信支付需安装微信 APP。

一、后端准备​

先完成后端内购支付接入:价格校验、订单创建通知、支付成功通知。推荐由游戏后端生成业务订单 cpOrderId,客户端携带此订单号调起支付。

二、调起支付​

SDK 初始化并成功回写登录态后,使用当前游戏 Activity 调用:

参数类型说明
contextContext传当前游戏 Activity
productIdString平台提供的 product_id,也称 activity_id
amountint商品数量,例如 1
moneyfloat展示金额,单位元;实际价格以服务端校验为准
extStringJSON 字符串,携带 cpOrderId 等业务信息,长度需满足后端 ext2 限制
paySignExtGamePayInfo.PaySignExt普通接入传 null;当前 H5 支付路径未使用此签名对象
payTypeInteger...可省略;当前版本未生效,不用于限制支付渠道

ext 字段​

字段类型填写要求说明
cpOrderIdString推荐传入游戏后端生成的业务订单号,用于校验价格和关联订单
productNameString推荐传入商品名称
serverIdString有区服时游戏区服 ID
roleIdString按业务需要游戏角色 ID,自定义字段
coopidString后端约定需要时平台游戏方 ID,SDK 已从初始化配置附带
gameIdString后端约定需要时平台游戏 ID,SDK 已从初始化配置附带
gameNameString后端约定需要时平台游戏名称,SDK 已从初始化配置附带
其他字段String / number按业务需要自定义信息,与后端 ext2 处理约定一致

调用示例​

以下方法放在游戏 Activity 中:

import org.json.JSONException;
import org.json.JSONObject;
import com.xunlei.niux.mobilegame.sdk.constants.UIResult;
import com.xunlei.niux.mobilegame.sdk.platform.NiuxMobileGame;

private void payGameOrder(String cpOrderId) {
if (!NiuxMobileGame.getInstance().isLogin()) {
return; // 提示先登录。
}
try {
JSONObject ext = new JSONObject();
ext.put("cpOrderId", cpOrderId); // 游戏后端生成的业务订单号
ext.put("productName", "充值商品");
// 按后端约定添加 serverId、roleId 等字段。
int result = NiuxMobileGame.getInstance().chargePay(
this, "平台提供的 product_id", 1, 10.00f, ext.toString(), null);
if (result != UIResult.Success) {
// 检查 SDK 初始化状态。
}
} catch (JSONException e) {
// 提示订单参数异常。
}
}

后端通知中的 ext2 格式见后端文档。sign_key 仅用于后端签名/验签,不要放进 ext。

三、确认到账​

支付操作结果通过初始化时的监听器返回:

@Override
public void onChargeFinish(int result, float money, String productId, String orderId) {
// 查询游戏后端当前业务订单的到账状态,更新界面。
}
result说明
0成功
-1取消
1失败
-101未登录
回调参数类型说明
resultint支付操作结果,见上表
moneyfloat调用时传入的展示金额,单位元
productIdString调用时传入的商品 ID
orderIdString平台订单号,可能为空

**发货以服务端支付成功通知为准,不能凭客户端回调发货。**后端应验签并保证幂等;客户端查询未到账时显示处理中。

chargePay 同步返回 200 表示 SDK 调用返回成功,500 表示未初始化,与上表支付结果不同。未登录时可能返回 200,同时回调 -101。