Appearance
支付相关
WARNING
支付接口中的参数,请不要传空值,请按实际值传入,否则影响数据的统计。
支付
当玩家点击游戏内商品充值项时,调用支付接口。 请在UI主线程中调用该接口。
java
UGOrder order = new UGOrder();
order.setProductID("1");
order.setProductName("测试商品");
order.setProductDesc("测试商品描述");
order.setServerID("2");
order.setServerName("test_1");
order.setRoleID("1");
order.setRoleName("test_role_1");
order.setRoleLevel("1");
order.setVip("1");
order.setPrice(99);
order.setCurrency("USD");
order.setCpOrderID(System.currentTimeMillis()+"");
order.setExtra("extra data");
order.setPayNotifyUrl("http://pay.game.com/pay/notify"); //游戏服务器的支付通知回调地址
UGPlatform.getInstance().pay(activity, order);UGOrder对象的结构说明如下:
| 参数名称 | 参数类型 | 参数说明 |
|---|---|---|
| productID | String | 充值商品ID,游戏内的商品ID |
| productName | String | 商品名称,比如100元宝,500钻石... |
| productDesc | String | 商品描述,比如 充值100元宝,赠送20元宝 |
| serverID | String | 玩家所在服务器的ID,不要为空 |
| serverName | String | 玩家所在服务器的名称,不要为空 |
| roleID | String | 玩家角色ID,不要为空 |
| roleName | String | 玩家角色名称,不要为空 |
| roleLevel | String | 玩家角色等级,不要为空 |
| vip | String | 玩家vip等级 |
| price | int | 充值金额(单位:分) |
| currency | String | 货币单位,USD |
| cpOrderID | String | 游戏订单号,最大长度64字符 |
| payNotifyUrl | String | 游戏服务器支付回调地址,SDK支付成功,异步通知该地址,如果不设置,需要提供回调地址,配置到SDK后台 |
| extra | String | 自定义数据, 支付回调通知给游戏服务器时,原封不动返回该值 |
处理支付回调事件
当渠道SDK支付成功或失败时,会通过UGSDKListener中下面对应的函数通知给游戏层:
java
@Override
public void onPaySuccess(UGOrder order) {
// 支付成功回调, 可能非UI线程, 如果需要操作UI,请在UI线程中操作
MainActivity.this.runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(MainActivity.this, "pay success", Toast.LENGTH_LONG).show();
}
});
}
@Override
public void onPayFailed(int code, String msg) {
// 支付失败回调, 可能非UI线程, 如果需要操作UI,请在UI线程中操作
MainActivity.this.runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(MainActivity.this, "pay failed", Toast.LENGTH_LONG).show();
}
});
}查询商品金额
如果游戏层需要查询商品的本地价格,可以调用如下接口(Google支持):
java
UGPlatform.getInstance().getAllProducts(activity);查询到的结果,会通过UGSDKListener中下面对应的函数通知给游戏层:
java
@Override
public void onProductsResult(int code, List<UGProduct> products) {
// 获取商品信息回调
Log.d(Constants.TAG, "onProductsResult. code:"+code);
if (products != null) {
Log.d(Constants.TAG, "curr products::");
for (UGProduct product : products) {
Log.d(Constants.TAG, "local product id:" + product.getLocalProductID() +";platform product id:" + product.getPlatformProductID() + ";local price:" + product.getPrice()/100f + ";locale price:" + product.getLocalePrice()+";locale currency:" + product.getLocaleCurrency());
}
}
}UGProduct对象的结构说明如下:
| 参数名称 | 参数类型 | 参数说明 |
|---|---|---|
| localProductID | String | 游戏内商品ID |
| platformProductID | String | Google或AppStore后台配置的商品ID |
| price | Integer | 商品价格,单位分(USD) |
| name | String | 商品名称 |
| localePrice | String | 当前地区的支付价格,比如:HK$8.00 |
| localeCurrency | String | 当前地区的货币单位 |
处理服务端发货通知
玩家在客户端支付成功后, 支付平台都会通知给SDK服务端。 接着, SDK服务端会按统一的协议通知给游戏服务器。
游戏服务器需要实现服务端API集成->支付回调通知协议,用来接收SDK的发货通知请求。
收到请求并验证通过后, 才能给玩家发放道具。