支付
业务场景
游戏内购买商品、月卡等游戏资源的时候需要调用本支付接口。用户支付成功后,由 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
参数名称 | 类型 | 说明 | 必传/可选 |
---|---|---|---|
amount | string | 价格,单位:元(小游戏中,受平台限制,只能支付规定的价格) | 必传 |
orderNo | string | CP 订单号,与服务端接入文档-支付回调中的"orderNo"对应,100 字符内,不能为空 | 必传 |
productId | string | CP 商品 Id | 必传 |
productName | string | 游戏道具名称,如元宝/月卡/钻石等 | 必传 |
productCount | long | 商品数量(小游戏中按比例处理,例如:比例是 1:10 ,比如金额 1 元,数量就是 10(钻石或元宝)) | 必传 |
roleInfo | RoleInfo | 角色信息 | 必传 |
sign | string | 支付验签参数,具体规则请查看服务端接入文档-下单签名 | 必传 |
extend | string | 自定义扩展字段(透传),与服务端接入文档-支付回调中的"extend"对应,1000 字符内,不能为空 | 必传 |
currency | string | 当前使用币种,如: USD | 可选 |
taskNum | int | 小游戏使用的标识,默认传 0,如果需要使用,SDK 侧运营会强调说明 | 可选 |
extstr | string | 支付额外参数,如无特殊说明,可不传 | 可选 |
localPrice | string | 本地货币金额, 如"0.99" 【海外必填】 | 可选 |
localCurrency | string | 海外: 本地货币代号, 如"USD" 【海外必填】 | 可选 |
出参:PaymentInfo info: 目前仅微信、抖音有以下情况,非必须处理
- scanCodeImageUrl : 扫码支付
- webPayUrl:链接支付
- webPayUrl + webPayImageUrl :扫码支付 + 链接支付
参数名称 | 类型 | 说明 | 最低版本 |
---|---|---|---|
scanCodeUrl | string | 支付地址,IOS 选择了扫码支付会下发 | |
scanCodeImageUrl | string | 扫码支付地址生成的二维码图片的 base64 数据,scanCodeUrl有值才会有数据 | |
webPayUrl | string | IOS 选择网页支付返回该字段,CP 需提示用户复制后微信浏览器打开即可支付 | |
webPayImageUrl | string | 网页支付地址生成的二维码图片的 base64 数据,webPayUrl有值才会有数据 |
错误码
暂无说明
FAQ
Q: 能不能根据支付完成回调判断用户已支付?
A: 不能,不是所有平台的支付流程都一致,例如:微信 IOS 需跳转客服支付,离开小游戏后,不能判断用户是否真实支付了。
Q: 支付失败,显示:您违反了储值相关规则,请联系官方客服。
A: 需配置支付白名单,方可进行支付测试。需提供设备ID和OpenId给我方进行配置。
Q: 使用extend字段,透传测试回调地址,下单时报“支付验签失败”
A: 原因是回调地址链接带上了“\”转义符,导致与我们服务器的验签不一致导致,需将“\”转义符去掉。
Q: 支付验签失败
A: 注意服务端验签规则,可自行使用在线验签工具检测一遍
