Appearance
支付相关
WARNING
使用母包测试渠道测试支付时,是模拟支付, 客户端无需实际付钱, 点击支付成功后, 聚合服务端会回调通知游戏服务器,给玩家发道具。
请不要将母包泄露,防止造成损失。
支付
当玩家点击游戏内商品充值项时,调用支付接口。 请在UI主线程中调用该接口。
java
PayParams params = new PayParams();
params.setBuyNum(1); //购买数量,固定1
params.setCoinNum(100); //当前玩家身上拥有的游戏币数量
params.setCpOrderId(System.currentTimeMillis()+""); //游戏自己的订单号, 最大64字符
params.setExtension(System.currentTimeMillis()+""); //游戏自定义数据,充值成功,回调游戏服的时候,会原封不动返回; 最大64字符
params.setPrice(1); //单位 整数 元
params.setProductId("1"); //产品ID, 不能为空
params.setProductName("元宝"); //产品名称,不能为空
params.setProductDesc("购买100元宝"); //产品描述,不能为空
params.setRoleId("1"); //角色ID,不能为空
params.setRoleLevel(1); //角色等级,不能为空
params.setRoleName("测试角色名"); //角色名称, 不能为空
params.setServerId("10"); //服务器ID, 不能为空
params.setServerName("测试"); //服务器名称, 不能为空
params.setVip("vip1"); //角色VIP等级
params.setPayNotifyUrl("http://www.game.com/pay/callback"); //可选。 玩家支付成功,U8聚合SDK会优先通过该地址,通知游戏服务器,给玩家发货。 如果该地址没设置, 会使用后台配置的地址
U8Platform.getInstance().pay(activity, params);
PayParams对象的结构说明如下:
参数名称 | 参数类型 | 参数说明 |
---|---|---|
productId | String | 充值商品ID,游戏内的商品ID, |
productName | String | 商品名称,比如100元宝,500钻石等, |
productDesc | String | 商品描述,比如 充值100元宝,赠送20元宝, |
price | int | 充值金额(单位:元), |
buyNum | int | 购买数量,固定为1 |
coinNum | int | 玩家当前身上剩余的游戏币,默认0 |
serverID | String | 玩家所在服务器的ID, |
serverName | String | 玩家所在服务器的名称, |
roleID | String | 玩家角色ID, |
roleName | String | 玩家角色名称, |
roleLevel | String | 玩家角色等级, |
vip | String | 玩家vip等级 |
payNotifyUrl | String | 玩家支付成功,U8聚合SDK会优先通过该地址,通知游戏服务器,给玩家发货。 如果该地址没设置, 会使用后台配置的地址 |
cpOrderId | String | 游戏自己的订单号,最大长度64字符;支付成功之后,U8聚合SDK原样返回给游戏服务器 |
extension | String | 自定义数据,最大长度:64字符;支付成功之后,U8聚合SDK原样返回给游戏服务器 |
处理支付回调事件
当渠道SDK支付成功或失败时, 聚合SDK会通过初始化接口中传入的U8InitListener->onPayResult函数,通知给游戏层:
java
@Override
public void onPayResult(int code, String msg) {
Log.d("U8SDK", "pay result. code:"+code);
switch(code){
case U8Code.CODE_PAY_SUCCESS:
//因为部分SDK支付成功回调触发的时机并不是真的支付成功,所以这里最好不要主动给用户提示, 以SDK充值界面中显示的状态为准。
break;
case U8Code.CODE_PAY_FAIL:
//因为部分SDK支付界面关闭可能也会触发支付失败回调,所以这里最好不要主动给用户提示, 以SDK充值界面中显示的状态为准。
break;
case U8Code.CODE_PAY_CANCEL:
Toast.makeText(MainActivity.this, "支付取消", Toast.LENGTH_LONG).show();
break;
case U8Code.CODE_PAY_UNKNOWN:
Toast.makeText(MainActivity.this, "未知错误", Toast.LENGTH_LONG).show();
break;
}
}
处理服务端发货通知
玩家在客户端支付成功后, 各个渠道平台都会通知给U8聚合SDK服务端。 接着, U8聚合SDK服务端会按统一的协议通知给游戏服务器。
游戏服务器需要实现服务端->支付回调通知协议,用来接收U8聚合SDK的发货通知请求。
收到请求并验证通过后, 才能给玩家发放道具。