排行榜数据更新接口

img (该排行榜功能在小游戏大厅“我的排行榜”场景内展示)

支持最低平台版本号'1040' (minPlatformVersion>='1040')

排行榜由开发者按照要求上报数据后,在 OPPO 小游戏相关场景展现的排行榜。该接口的调用方必须是 cp 服务端

请求URL https://play.open.oppomobile.com/instant-game-open/rank/update
HTTP Method POST
说明 CP服务端通过该接口来上报分数来更新排行榜
请求
Header
Content-Type application/x-www-form-urlencoded
参数 类型 是否必填 说明
userId string 用户id(通过 token 获取用户 userId)
pkgName string 游戏包名
rankScore string 上报的分数(不能超过2147483647, 不能小于0)
rankType string 排行榜类型: 0:大厅排行榜类型
timeStamp string 时间戳,毫秒,取当前时间值
sign string 签名
extension string 拓展字段
成功相应
HTTP状态码 200
Header
Content-Type application/json
对象 字段 类型 是否必填 说明
返回码,请求成功的话,返回“200” errCode string 返回码
请求成功的话,返回“请求成功” errMsg string 返回码提示信息
响应结构
字段 类型 是否必有 说明
errCode string 返回码
errMsg string 返回码提示信息


rankScore 来源要求和举例

要求:

  1. 该分数可以衡量游戏核心目标的完成情况
  2. 需要避免大量玩家并列排名的情况,可选择粒度较小的数值,或结合时间先后次序

举例:

  1. “欢喜斗地主”中的金豆数量

  2. “热血飞刀大战”的战力

  3. “子弹先生狙击战场”的金钱数量

  4. “贪吃蛇大作战”限时模式的当局分数

  5. “斗罗大陆”的战力

  6. “刀剑大作战”的当天最高击杀数

返回码列表

errCode errMsg 描述
200 请求成功 请求成功
500 系统异常 系统异常
501 参数错误 参数错误
502 签名错误 签名错误


签名生成

第一步,准备签名所需参数

pkgName(游戏包名)
appKey(游戏上架时分配的Key)
appSecret(游戏上架时分配的密钥)
userId(用户id)
rankScore(上报的分数)
rankType(排行榜类型)
timeStamp(时间戳)

第二步,将参数按照字典序排序,使用 URL 键值对的格式(即 key1=value1&key2=value2…)拼接成字符串

appKey = 11 & appSecret = 22 & pkgName = com.oppo.testgame & rankScore = 333 &
rankType = 0 & timeStamp = 15281 & userId = 1111111

注意 : 参数名区分大小写

第三步,使用 md5 算法对构造的源串进行加密,将得到的字符串所有字符转换为大写

F852521612103827E831175417C0276F

实例代码:

curl -H "Content-Type: application/x-www-form-urlencoded" -X POST  -v https://play.open.oppomobile.com/instant-game-open/rank/update -d "userId=2000060053&pkgName=com.lechang.leftright.kyx.nearme.gamecenter&rankType=0&rankScore=12&sign=BB20D131CDF4B0EA8D2128C829763C75&timeStamp=1556537240333"


签名参考代码:

package com.oppo.util;

import java.util.Iterator;
import java.util.Set;
import java.util.TreeMap;
import org.apache.commons.codec.digest.DigestUtils;

public class Example {
    public static String getSignContent() {

        TreeMap<String, String> signMap = new TreeMap<>();
        signMap.put("userId", userId);
        signMap.put("pkgName", pkgName);
        signMap.put("rankScore", rankScore);
        signMap.put("rankType", rankType);
        signMap.put("timeStamp", timeStamp);
        signMap.put("appKey", appKey);
        signMap.put("appSecret", appSecret);

        Set<String> keys = treeMap.keySet();
        StringBuilder sb = new StringBuilder();
        Iterator<String> iterator = keys.iterator();
        while (iterator.hasNext()) {
            String key = iterator.next();
            sb.append(key).append("=").append(treeMap.get(key)).append("&");
        }

        String signContent = sb.toString().substring(0, sb.length() - 1);

        return signContent;

    }

    public static String sign(String content) {
        String signString = DigestUtils.md5Hex(content).toUpperCase();
        return signString;
    }

    public static void main(String[] args) {
        String signContent = getSignContent();
        String sign = sign(signContent);
        System.out.println(sign);
    }
}
© 2020 OPPO. All rights reserved.

results matching ""

    No results matching ""