内购
一、后端对接
请完成后端内购的支付成功回调,在后端实现对应接口后,再执行下一步操作。
未实现后端接口就进行页面对接,可能会触发平台服务器的告警。
二、前端对接
导入 SDK
请先确保已经导入 SDK,再执行下一步操作。
生成签名
在调用 SDK 前,需要对必传参数使用 sign_key
算出 sign
供平台方校验参数对合法性。
1. 签名规则
- 必传参数都参与签名
- 值为空字符串的字段不参与签名。
- 将参与签名的参数按属性名升序排序,然后拼接为
k1=v1&k2=v2
格式(类似于浏览器的 URLSearchParams 但不需要对字符进行转义 ) - 将游戏的签名密钥
sign_key
拼接到上面k1=v1&k2=v2
字符串的末尾,得到k1=v1&k2=v2sign_key
。 - 对上面得到的字符串
k1=v1&k2=v2sign_key
进行 MD5 计算,得到 32 位小写字符串,即MD5(k1=v1&k2=v2sign_key)
。
2. 签名计算示例
假设签名密钥 sign_key
为 test_key_e3654407c996bd0f8a45a14
,必传的参数如下:
const params = {
cpOrderId: "123456",
gameId: "2222",
productName: "元宝",
price: 100,
server_id: "123",
role_id: "456",
role_name: "测试&角色",
};
// 由于role_name需要兼容数据作为 URL 参数传输,故需对该参数进行urlEncode,如在js中:
params.role_name = encodeURIComponent(params.role_name); // %E6%B5%8B%E8%AF%95%26%E8%A7%92%E8%89%B2
将必传参数按属性名升序排序,然后拼接为 k1=v1&k2=v2
格式:
const signString =
"cpOrderId=123456&gameId=2222&price=100&productName=元宝&role_id=456&role_name=%E6%B5%8B%E8%AF%95%26%E8%A7%92%E8%89%B2&server_id=123";
将签名密钥 sign_key
拼接字符串的末尾:
const signStringWithKey =
"cpOrderId=123456&gameId=2222&price=100&productName=元宝&role_id=456&role_name=%E6%B5%8B%E8%AF%95%26%E8%A7%92%E8%89%B2&server_id=123test_key_e3654407c996bd0f8a45a14";
MD5 计算字符串,得到签名(32 位小写字符串):
const sign = MD5(signStringWithKey) = "af28cafd597965beaa62ecbace94c75e"
SDK 方法名称
superPay
调用示例
XL_GAME.callApp(
'superPay',
{
cpOrderId: '123456',
gameId: '2222',
productName: '元宝',
price: 100,
server_id: '123',
role_id: '456',
role_name: encodeURIComponent('测试&角色'); // %E6%B5%8B%E8%AF%95%26%E8%A7%92%E8%89%B2
sign: 'a11495d293065e07bc128182d00f1978',
key1: '我是自定义字段1', // cp自定义字段1(非必要,仅仅是举例,不参与签名)
key2: 123 // cp自定义字段2(非必要,仅仅是举例,不参与签名)
...
},
(res) => console.log(res),
);
调用参数说明
参数 | 类型 | 必选 | 说明 |
---|---|---|---|
cpOrderId | string | 是 | 游戏方的订单号 |
gameId | string | 是 | 平台的游戏 ID |
productName | string | 是 | 商品名称 |
price | number | 是 | 商品价格,单位“分” |
server_id | string | 是 | 区服 ID |
role_id | string | 是 | 角色 ID |
role_name | string | 是 | 角色名称, 需进行 urlEncode |
sign | string | 是 | 通过 MD5 加密算法对上述参数进行加密获得的 32 位小写字符串,供平台方校验参数是否被篡改 |
其它字段 | string / number | 否 | 其它自定义字段,回调游戏方接口时数据会写到 ext2 参数里面,参数不宜过多过长,数据不宜为嵌套的 JSON 格式(由于平台侧下单时会二次 encode,使用复杂的 JSON 数据可能会导致游戏方发货失败) |
回调返回参数说明
支付回调的返回参数是一个对象,各参数语义说明如下:
参数 | 说明 |
---|---|
errorCode | 错误码。errorCode = 0 为支付成功,其它均为失败 |
errorMsg | 错误信息 |
payment | 支付方式,可选值:alipay weixin |
orderId | 订单 ID |