sud.requestVirtualPayment
发起虚拟支付请求。signData、paySig、signature 三个产物必须全部由 Game SVR 生成,客户端只做原样透传。
参数
Object object
| 属性 | 类型 | 默认值 | 必填 | 说明 |
|---|---|---|---|---|
| signData | string | 是 | Game SVR 构造的签名数据(JSON 字符串),字段见下方 signData 表 | |
| paySig | string | 是 | 支付态签名,算法见支付签名规范 | |
| signature | string | 是 | 用户态签名,算法见开放数据校验与解密 | |
| success | function | 否 | 支付成功回调 | |
| fail | function | 否 | 支付失败回调 | |
| complete | function | 否 | 接口结束回调,成功、取消或失败均执行 |
signData 的字段
| 字段 | 类型 | 默认值 | 必填 | 说明 |
|---|---|---|---|---|
| mode | string | 是 | goods 表示道具直购,coin 表示游戏币购买 | |
| env | number | 是 | 0 正式环境,1 测试环境 | |
| productId | string | 特殊 | 道具直购场景必填 | |
| unitPrice | number | 是 | 商品单价,单位为分(道具直购场景必填) | |
| quantity | number | 是 | 购买游戏币数量,必须属于产品配置的固定档位 | |
| currency | string | 是 | 币种,当前仅支持 CNY | |
| outTradeNo | string | 是 | 业务订单号,由 Game SVR 生成,须全局唯一 | |
| attach | string | 否 | 业务透传数据,发货回调时原样返回 |
回调参数
success
| 属性 | 类型 | 说明 |
|---|---|---|
| sudTradeNo | string | SUD 业务订单号 |
fail
| 属性 | 类型 | 说明 |
|---|---|---|
| errCode | number | 错误码 |
| errMsg | string | 错误信息 |
complete 不携带参数,在 success 或 fail 之后调用,单次请求只执行一次。
注意事项
- 客户端不得参与
signData的拼装或签名计算,也不得接触pay_sign_key与session_key。三个产物由 Game SVR 下发后原样传入本接口。 signData必须原格式传递(包括其中的空格与换行)。严禁先签名、再把 JSON 反序列化后重新序列化,任何重新序列化都可能改变空格、键顺序或转义形式而导致验签失败。success回调只表示客户端支付流程结束,不代表已发货。 严禁依据success直接向玩家发放资产。发货必须以 Game SVR 收到的服务端回调为准,见虚拟支付配置 - 道具直购第 5 节。- 同一笔订单不要并发发起多次支付。上一笔尚未确认到账时应先阻断新的下单请求。
complete在成功、用户取消、失败三种情况下都会执行,不要把complete当作成功信号。
示例代码
javascript
// signData / paySig / signature 均来自 Game SVR 的下单接口,客户端不要自行构造
sud.requestVirtualPayment({
signData: orderFromGameServer.signData,
paySig: orderFromGameServer.paySig,
signature: orderFromGameServer.signature,
success: (res) => {
// 仅表示客户端支付流程结束,发货以服务端回调为准
console.log('客户端支付流程结束', res.sudTradeNo);
},
fail: (err) => {
console.error('支付失败或已取消', err.errCode, err.errMsg);
},
complete: () => {
console.log('支付调用结束');
},
});