支付

业务场景

游戏内购买商品、月卡等游戏资源的时候需要调用本支付接口。用户支付成功后,由 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:

参数名称类型说明备注
amountString价格,单位:元必传
orderNoStringCP 订单号,与[服务端接入文档-支付回调]中的"orderNo"对应,100 字符内,不能为空,如没有可以传入当前时间戳必传
productIdString商品 Id必传
productNameString游戏道具名称,如元宝/月卡/钻石等必传
productCountlong商品数量必传
roleInfoRoleInfo角色信息
signString支付验签参数,具体规则请查看服务端接入文档-下单签名必传
extendString自定义扩展字段(透传),与[服务端接入文档-支付回调]中的"extend"对应,1000 字符内,不能为空,如没有可以传入当前时间戳必传
currencyString货币代号,如: USD可选
taskNumint微信小游戏支付策略条件之一可选
extstrString手 Q 的必传参数可选

错误码

错误码说明
-100000网络不可用,请检查网络
-100022请先初始化成功后再调支付

FAQ

Q:SDK 下单时,订单校验失败
A: image.png

  • 常见情况是金额不一致导致的,请先确认游戏服务端生成 sign 的金额单位用的是,调用 SDK 支付接口的金额单位是
  • 注意客户端和服务端的区服需要保持一致(常见:合服后,前后端区服不同)
  • 若金额一致情况下,但还是验证不过,请使用在线验签工具自行查验一遍,如下图

image.png

  • 支付验签使用的是 appKey 而非 signKey