支付

业务场景

游戏内购买商品、月卡等游戏资源的时候需要调用本支付接口。用户支付成功后,由 SDK 服务端通知 CP 服务端进行发货处理。

流程图

接口介绍

public void Pay(OrderInfo info)

调用示例

public void paySDK()
{
    SDKManager.GetInstance().Pay(GetOrderInfo());
}

private OrderInfo GetOrderInfo()
{
    OrderInfo info = new OrderInfo();
    info.amount = "1";
    info.currency = "USD";
    info.orderNo = "xxx";
    info.productId = "xxx";
    info.productName = "xxx";
    info.productCount = 1;
    // 特别说明:sign由游戏服务端生成,下发给游戏客户端使用,不能在游戏客户端生成!!!!
    info.sign = sign;
    info.extend = "xxxxx";
    info.roleInfo = getRoleInfo();
    return info;
}

private RoleInfo getRoleInfo()
{
    RoleInfo info = new RoleInfo();
    info.serverName = "serverName";
    info.serverId = "serverId";
    info.roleId = "roleId";
    info.roleName = "roleName";
    info.roleLevel = "roleLevel";
    info.roleCreateTime = "";
}

//重写监听方法
public override void OnPaymentCompleted(PaymentInfo info = null)
{
    // 支付流程完成回调,支付成功请以服务端发货为准,不能依赖客户端的结果
    if (info != null)
    {
        //小游戏使用
        bool scanCode = info.scanCodeImageUrl != null && info.scanCodeImageUrl != "";
        bool webImage = info.webPayImageUrl != null && info.webPayImageUrl != "";
        bool webUrl = info.webPayUrl != null && info.webPayUrl != "";
        if (webImage && webUrl)
        {
            // 二合一:扫码支付 + 链接支付
        }
        else if (scanCode)
        {
            // 扫码支付
        }
        else if (webUrl)
        {
            // 纯链接支付
        }
    }

}

public override void OnPaymentCanceled()
{
    // 取消支付
}

public override void OnPaymentFailed(ErrorInfo errorInfo)
{
    // 支付失败
}

参数说明

入参:OrderInfo orderInfo

参数名称类型说明必传/可选
amountstring价格,单位:元(小游戏中,受平台限制,只能支付规定的价格)必传
orderNostringCP 订单号,与服务端接入文档-支付回调中的"orderNo"对应,100 字符内,不能为空必传
productIdstringCP 商品 Id必传
productNamestring游戏道具名称,如元宝/月卡/钻石等必传
productCountlong商品数量(小游戏中按比例处理,例如:比例是 1:10 ,比如金额 1 元,数量就是 10(钻石或元宝))必传
roleInfoRoleInfo角色信息必传
signstring支付验签参数,具体规则请查看服务端接入文档-下单签名必传
extendstring自定义扩展字段(透传),与服务端接入文档-支付回调中的"extend"对应,1000 字符内,不能为空必传
currencystring当前使用币种,如: USD可选
taskNumint小游戏使用的标识,默认传 0,如果需要使用,SDK 侧运营会强调说明可选
extstrstring支付额外参数,如无特殊说明,可不传可选
localPricestring本地货币金额, 如"0.99" 【海外必填】可选
localCurrencystring海外: 本地货币代号, 如"USD" 【海外必填】可选

出参:PaymentInfo info: 目前仅微信、抖音有以下情况,非必须处理

  • scanCodeImageUrl : 扫码支付
  • webPayUrl:链接支付
  • webPayUrl + webPayImageUrl :扫码支付 + 链接支付
参数名称类型说明最低版本
scanCodeUrlstring支付地址,IOS 选择了扫码支付会下发
scanCodeImageUrlstring扫码支付地址生成的二维码图片的 base64 数据,scanCodeUrl有值才会有数据
webPayUrlstringIOS 选择网页支付返回该字段,CP 需提示用户复制后微信浏览器打开即可支付
webPayImageUrlstring网页支付地址生成的二维码图片的 base64 数据,webPayUrl有值才会有数据

错误码

暂无说明

FAQ

Q: 能不能根据支付完成回调判断用户已支付?

A: 不能,不是所有平台的支付流程都一致,例如:微信 IOS 需跳转客服支付,离开小游戏后,不能判断用户是否真实支付了。

Q: 支付失败,显示:您违反了储值相关规则,请联系官方客服。

A: 需配置支付白名单,方可进行支付测试。需提供设备ID和OpenId给我方进行配置。

Q: 使用extend字段,透传测试回调地址,下单时报“支付验签失败”

A: 原因是回调地址链接带上了“\”转义符,导致与我们服务器的验签不一致导致,需将“\”转义符去掉。

Q: 支付验签失败

A: 注意服务端验签规则,可自行使用在线验签工具检测一遍

pay_sign_tools