支付
业务场景
游戏内购买商品、月卡等游戏资源的时候需要调用本支付接口。用户支付成功后,由 SDK 服务端通知 CP 服务端进行发货处理。
注意事项
- 需在 SDK 初始化成功后调用
- 客户端上报的
RoleInfo
中的ServerId
需与服务端支付时参与签名的ServerId
一致,否则支付失败
流程图
接口介绍
/**
* 支付
*
* @param activity Android上下文
* @param info 支付参数
* @param callback 支付回调
*/
void pay(Activity activity, OrderInfo info, PaymentCallbackV2 callback);
调用示例
OrderInfo info = new OrderInfo();
info.setAmount("6"); // 当前档位对应的充值金额(单位:元,与currency配对)
info.setProductName("30钻石"); // 当前档位对应的商品名称
info.setProductCount(1); // 当前档位对应的商品数量,默认为:1
info.setProductId("product_1"); // 当前档位对应的商品id
info.setOrderNo("XXX"); // 当前档位对应的CP订单号,在服务端的支付回调通知里面SDK会原样透传给游戏侧
info.setSign("XXX"); // 支付验签参数,具体请查看服务端接入文档中的[下单校验]章节
info.setExtend("extend"); // 拓展字段,在服务端的支付回调通知里面SDK会原样透传给游戏侧
info.setRoleInfo(getRoleInfo()); // 角色信息
info.setCurrency("RMB"); // 币种,传入从商品列表接口中获取currency
info.setExtstr(""); // 小游戏使用的标识,默认传""
info.setTaskNum(0); // 小游戏使用的标识,默认传0
SDKManager.getInstance().pay(this, orderInfo, new PaymentCallbackV2() {
@Override
public void onPaymentCompleted() {
// 支付完成, 具体结果请以服务端通知为准
}
@Override
public void onPaymentCanceled() {
// 取消支付
// 游戏提示玩家取消支付,让玩家自行重试
}
@Override
public void onPaymentFailed(ErrorInfo error) {
// 支付失败, error: 失败信息
// 游戏提示玩家支付失败,让玩家自行重试
}
});
...
private RoleInfo getRoleInfo() {
RoleInfo info = new RoleInfo();
info.setServerId("99");// 游戏区服ID,需与服务端支付签名时的serverId一致
info.setServerName("测试1服"); // 游戏区服名称
info.setRoleId("101"); // 角色ID
info.setRoleName("角色名称"); // 角色名称
info.setRoleLevel("66"); // 角色等级
info.setRoleVipLevel("3"); // 角色vip等级
info.setRoleCreateTime(""); // 角色创建时间
info.setGameResVersion(""); // 游戏资源版本
info.setProperties(""); // 角色资产
info.setCombatValue(""); // 角色战力
return info;
}
参数说明
【入参】
OrderInfo:
参数名称 | 类型 | 说明 | 备注 |
---|---|---|---|
amount | String | 价格,单位:元 | 必传 |
orderNo | String | CP 订单号,与[服务端接入文档-支付回调]中的"orderNo"对应,100 字符内,不能为空,如没有可以传入当前时间戳 | 必传 |
productId | String | 商品 Id | 必传 |
productName | String | 游戏道具名称,如元宝/月卡/钻石等 | 必传 |
productCount | long | 商品数量 | 必传 |
roleInfo | RoleInfo | 角色信息 | |
sign | String | 支付验签参数,具体规则请查看服务端接入文档-下单签名 | 必传 |
extend | String | 自定义扩展字段(透传),与[服务端接入文档-支付回调]中的"extend"对应,1000 字符内,不能为空,如没有可以传入当前时间戳 | 必传 |
currency | String | 货币代号,如: USD | 可选 |
taskNum | int | 微信小游戏支付策略条件之一 | 可选 |
extstr | String | 手 Q 的必传参数 | 可选 |
错误码
错误码 | 说明 |
---|---|
-100000 | 网络不可用,请检查网络 |
-100022 | 请先初始化成功后再调支付 |
FAQ
Q:SDK 下单时,订单校验失败
A:
- 常见情况是金额不一致导致的,请先确认游戏服务端生成 sign 的金额单位用的是分,调用 SDK 支付接口的金额单位是元。
- 注意客户端和服务端的区服需要保持一致(常见:合服后,前后端区服不同)
- 若金额一致情况下,但还是验证不过,请使用在线验签工具自行查验一遍,如下图
- 支付验签使用的是 appKey 而非 signKey