小7手游 通用接口 接入帮助
接口规范

接收请求的地址可以为统一的网关地址,也可以为每个接口配置单独的url;处理请求时需要根据传递的apiMethod区分不同的接口; 接口接入需要参照如下规范,所有接口的请求和响应均需要进行签名,字段统一为Request和Response表格中的定义, 业务请求参数bizParams和业务响应参数bizResp根据apiMethod有所不同。

请求方式

POST

请求格式

application/x-www-form-urlencoded

响应格式

JSON

请求字段定义

Request字段 类型 必选 说明
bizParams String 业务参数,值为每个接口对应业务参数的JSON字符串
apiMethod String 接口名称
reqTime String 请求时间,格式使用ISO8601规范,示例:2024-06-22T05:07:39+0800
appkey String 游戏appkey,如果双端使用相同appkey接入,osType字段必传
gameType String 游戏端类型,网游为client H5游戏为 h5
signature String 请求签名(签名方式参见下文)
osType String 系统类型,iosandroid

查看示例

//原始参数
object (size=7)
'bizParams' => string '{"roleId": "123", "guids": ["1234", "5678"], "guid": "", "serverId": ""}' (length=72)
'apiMethod' => string 'common.roleQuery' (length=16)
'reqTime' => string '2006-01-02T15:04:05+0800' (length=24)
'appkey' => string '0b9ce7b64b02fab5cd4ed3fas2as2ef6' (length=32)
'gameType' => string 'client' (length=6)
'signature' => string 'v371vuk4pv/TYGkmI0Mhm0U1a2Uk8aW/rc2dg3it9iywNUV0dcDdcbKew9ngq3zOWJ+tYP6EfK3F17LEO0LmLU4Phjs+wjDFOF0vj5OLWMUNNtF4jj/LZhpCxGBmyaBA91wb4ZaLNqqQYLHnEiptDy3aaYT+qL/nYQv/8yVunRo=' (length=172)
'osType' => string 'android' (length=7)

//查询字符串
string (length=396)
'bizParams={"roleId": "123", "guids": ["1234", "5678"], "guid": "", "serverId": ""}&apiMethod=common.roleQuery&reqTime=2006-01-02T15:04:05+0800&appkey=0b9ce7b64b02fab5cd4ed3fas2as2ef6&gameType=client&signature=v371vuk4pv/TYGkmI0Mhm0U1a2Uk8aW/rc2dg3it9iywNUV0dcDdcbKew9ngq3zOWJ+tYP6EfK3F17LEO0LmLU4Phjs+wjDFOF0vj5OLWMUNNtF4jj/LZhpCxGBmyaBA91wb4ZaLNqqQYLHnEiptDy3aaYT+qL/nYQv/8yVunRo=&osType=android'

//最终结果,urlencode后的查询字符串(发送请求时需要urlencode,生成签名时不需要)
string (length=480)
'bizParams=%7B%22roleId%22%3A+%22123%22%2C+%22guids%22%3A+%5B%221234%22%2C+%225678%22%5D%2C+%22guid%22%3A+%22%22%2C+%22serverId%22%3A+%22%22%7D&apiMethod=common.roleQuery&reqTime=2006-01-02T15%3A04%3A05%2B0800&appkey=0b9ce7b64b02fab5cd4ed3fas2as2ef6&gameType=client&signature=v371vuk4pv%2FTYGkmI0Mhm0U1a2Uk8aW%2Frc2dg3it9iywNUV0dcDdcbKew9ngq3zOWJ%2BtYP6EfK3F17LEO0LmLU4Phjs%2BwjDFOF0vj5OLWMUNNtF4jj%2FLZhpCxGBmyaBA91wb4ZaLNqqQYLHnEiptDy3aaYT%2BqL%2FnYQv%2F8yVunRo%3D&osType=android' 

响应字段定义

Response字段 类型 必选 说明
bizResp String 响应参数,值为每个接口对应响应参数的JSON字符串
apiMethod String 接口名称
respTime String 响应时间,格式使用ISO8601规范,示例:2024-06-22T05:07:39+0800
appkey String 游戏appkey
gameType String 游戏端类型,网游为client H5游戏为 h5
signature String 响应签名(签名方式参见下文)
osType String 系统类型,iosandroid

查看示例

{"bizResp":"{\"respCode\":\"SUCCESS\",\"respMsg\":\"\u67e5\u8be2\u6210\u529f\",\"role\":{\"roleId\":\"1\",\"guid\":\"1234\",\"roleName\":\"\u5c0f\u53ef\u7231\",\"serverId\":\"S1\",\"serverName\":\"1\u670d\",\"roleLevel\":\"100\",\"roleCE\":\"20000\",\"roleStage\":\"2-3\",\"roleRechargeAmount\":1314520},\"guidRoles\":[{\"roleId\":\"1\",\"guid\":\"1234\",\"roleName\":\"\u5c0f\u53ef\u7231\",\"serverId\":\"S1\",\"serverName\":\"1\u670d\",\"roleLevel\":\"100\",\"roleCE\":\"20000\",\"roleStage\":\"2-3\",\"roleRechargeAmount\":1314520},{\"roleId\":\"2\",\"guid\":\"1234\",\"roleName\":\"\u5c0f\u50bb\u74dc\",\"serverId\":\"S1\",\"serverName\":\"1\u670d\",\"roleLevel\":\"50\",\"roleCE\":\"10000\",\"roleStage\":\"1-3\",\"roleRechargeAmount\":520}]}","apiMethod":"common.roleQuery","respTime":"2006-01-02T15:04:05+0800","appkey":"0b9ce7b64b02fab5cd4ed3fas2as2ef6","gameType":"client","signature":"v371vuk4pv\/TYGkmI0Mhm0U1a2Uk8aW\/rc2dg3it9iywNUV0dcDdcbKew9ngq3zOWJ+tYP6EfK3F17LEO0LmLU4Phjs+wjDFOF0vj5OLWMUNNtF4jj\/LZhpCxGBmyaBA91wb4ZaLNqqQYLHnEiptDy3aaYT+qL\/nYQv\/8yVunRo=","osType":"android"}
接口概览
接口名称 apiMethod 请求方向 说明
角色查询(v2) common.roleQuery 小7Server => 游戏Server 通过此接口传递roleId可查询对应角色信息,也需支持按guid批量查询指定区服下的所有小号
角色信息上报 common.roleReport 游戏Server => 小7Server 通过此接口将角色信息推送给小7
IP白名单查询 common.ipWhiteListQuery 游戏Server => 小7Server 游戏通过此接口查询获得ip白名单列表,可针对列表内的ip进行放行等操作
开服查询 common.serverQuery 小7Server => 游戏Server 通过此接口可查询指定时间范围内开服信息
签名与验签

1. 获取RSA秘钥对

签名验签过程需要两对RSA秘钥:

小7私钥 + 小7公钥:小7公钥在小7手游开放平台游戏管理>游戏详情页面获取。

游戏私钥 + 游戏公钥:游戏密钥对需要自行生成(可使用支付宝开放平台开发助手生成),公钥提交给小7对接人员进行配置,私钥妥善保管。

1. 发送请求给小7时(游戏Server => 小7Server):使用游戏私钥给请求参数签名,对小7接口返回的响应数据使用小7公钥进行验签。

2. 接收小7请求时(小7Server => 游戏Server):使用小7公钥对接收到的请求参数进行验签,响应请求时使用游戏私钥签名。

2. 签名验签规则及流程

① 请求与响应生成的签名的规则是不同的

对于请求方向为游戏Server => 小7Server的接口,发送请求给小7时,需要使用Request对应的参数与游戏私钥生成签名,接收到小7响应时,需要使用小7响应内容Response中的字段与小7公钥进行验签;

对于请求方向为小7Server => 游戏Server的接口,接收到小7请求时,需要使用小7请求体Request中对应的参数与小7公钥进行验签,对请求进行响应时,需要使用Response中的字段与游戏私钥生成签名;


② payload生成

发送请求(Request)生成签名所需的payload拼接生成方式如下:

POST + 空格 + $apiMethod + @ + $appkey + # + $gameType + . + $reqTime + \n\n + $bizParams

响应请求(Response)生成签名所需的payload拼接生成方式如下:

POST + 空格 + $apiMethod + @ + $appkey + # + $gameType + . + $respTime + \n\n + $bizResp

生成示例:

POST x7mall.mallEntry@0b9ce7b64b02fb17cc948c0b9a6eb462#client.2024-06-22T05:07:39+0800{"roleId": "123", "guids": ["1234", "5678"], "guid": "", "serverId": ""}

③ 具体流程

a. 根据各接口定义获取业务参数bizParams或bizResp的json字符串,只需json_encode一次即可

b. 根据上述payload生成规则获取payload,注意请求和响应的payload是不一样的

c. 对请求签名时,将payload与游戏私钥使用openssl sha256算法进行运算生成原始签名,再将原始签名进行base64编码,得到最终signature的值

d. 验签时,将接收到signature进行base64解码,再将解码后的原始签名与payload一起使用小7公钥进行openssl sha256签名验证


④ 调试流程

签名验证不通过时,可参考以下流程排查问题:

a. 使用签名助手按照说明进行调试,确认可以调试通过;若不通过,请检查payload是否拼接正确,需要与签名助手结果窗口返回的payload一致。

b. 若是在响应小7请求时提示签名验证不通过,确认代码中使用的游戏私钥与在调试页面上填写的游戏公钥是否为一对秘钥;如果在调试页面未填写公钥进行调试,那么实际使用的游戏公钥为已提供给小7对接人员配置好的游戏公钥,可以与小7对接人员确认。

c. 若是对小7请求数据或响应数据进行签名验证不通过,确认代码中使用的小7公钥是否为开放平台对应游戏管理内页中提供的小7公钥。

3. Java代码参考

 
import org.apache.commons.codec.binary.Base64;

import java.security.KeyFactory;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.security.Signature;
import java.security.spec.PKCS8EncodedKeySpec;
import java.security.spec.X509EncodedKeySpec;


/**
 * RSA cipher util
 *
 */
public class RSA {

    /**
     * 加密算法RSA
     */
    public static final String KEY_ALGORITHM = "RSA";

    /**
     * 签名算法
     */
    public static final String SIGNATURE_ALGORITHM_SHA256 = "SHA256withRSA";


    /**
     *
     * 用私钥对信息生成数字签名
     * 
     *
     * @param data 已加密数据
     * @param privateKey 私钥(BASE64编码)
     *
     * @return
     * @throws Exception
     */
    public static String sign(byte[] data, String privateKey) throws Exception {
        byte[] keyBytes = Base64.decodeBase64(privateKey);
        PKCS8EncodedKeySpec pkcs8KeySpec = new PKCS8EncodedKeySpec(keyBytes);
        KeyFactory keyFactory = KeyFactory.getInstance(KEY_ALGORITHM);
        PrivateKey privateK = keyFactory.generatePrivate(pkcs8KeySpec);
        Signature signature = Signature.getInstance(SIGNATURE_ALGORITHM_SHA256);
        signature.initSign(privateK);
        signature.update(data);
        return Base64.encodeBase64String(signature.sign());
    }

    /**
     * 
     * 校验数字签名
     * 
     *
     * @param data 已加密数据
     * @param publicKey 公钥(BASE64编码)
     * @param sign 数字签名
     *
     * @return
     * @throws Exception
     *
     */
    public static boolean verify(byte[] data, String publicKey, String sign)
            throws Exception {
        byte[] keyBytes = Base64.decodeBase64(publicKey);
        X509EncodedKeySpec keySpec = new X509EncodedKeySpec(keyBytes);
        KeyFactory keyFactory = KeyFactory.getInstance(KEY_ALGORITHM);
        PublicKey publicK = keyFactory.generatePublic(keySpec);
        //SIGNATURE_ALGORITHM
        Signature signature = Signature.getInstance(SIGNATURE_ALGORITHM_SHA256);
        signature.initVerify(publicK);
        signature.update(data);
        return signature.verify(Base64.decodeBase64(sign));
    }

    //=== Testing ===
    public static void main(String[] args) {
        try {

            String payload = "POST x7mall.mallEntry@0b9ce7b64b02fb17cc948c0b9a6eb462#client.2021-01-13T14:54:52+0800" +
                    "\n\n" +
                    "{\"role\":{\"roleId\":\"\",\"guid\":\"\",\"roleName\":\"\",\"serverId\":\"\",\"serverName\":\"\",\"roleLevel\":\"\",\"roleCE\":\"\",\"roleStage\":\"\",\"roleRechargeAmount\":\"\"}}";

            //私钥和公钥字符串,可从签名助手页面下载测试秘钥
            String publicKey = "";
            String privateKey = "";
            //签名
            String sign = sign(payload.getBytes(), privateKey);

            //验签
            Boolean passed = verify(payload.getBytes(), publicKey, sign);

            System.out.println("payload=" + payload);
            System.out.println("---------------------");
            System.out.println("signature=" + sign);
            System.out.println("---------------------");


            System.out.println("passed ? " + (passed.equals(true)));

        } catch (Exception e) {
            e.printStackTrace();
        }
    }


}

4. PHP代码参考

<?php

//------------------------------------------------
// 签名加签函数PHP代码参考
//------------------------------------------------


class Signature
{

    /**
     * 签名
     *
     * @param string $payload
     * @param string $rsaPrivateKey
     * @param int $algo
     * @return string
     */
    public static function sign($payload, $rsaPrivateKey, $algo = OPENSSL_ALGO_SHA256)
    {
        $formatPrivateKey = self::formatRsaPrivateKey($rsaPrivateKey);
        openssl_sign($payload, $signature, $formatPrivateKey, $algo);
        return base64_encode($signature);
    }

    /**
     * 验签
     *
     * @param string $payload
     * @param string $signature
     * @param string $rsaPublicKey
     * @param int $algo
     * @return int
     */
    public static function verify($payload, $signature, $rsaPublicKey, $algo = OPENSSL_ALGO_SHA256)
    {
        $rawSignature = base64_decode($signature);
        $formatPublicKey = self::formatRsaPublicKey($rsaPublicKey);
        return openssl_verify($payload, $rawSignature, $formatPublicKey, $algo);
    }

    /**
     * 生成payload
     *
     * @param string $apiMethod
     * @param string $appkey
     * @param string $datetime
     * @param string $body
     * @param string $gameType
     * @param string $method
     * @return string
     */
    public static function genPayload($apiMethod, $appkey, $datetime, $body, $gameType, $method = "POST")
    {
        $payload = $method . " " . $apiMethod . "@" . $appkey . "#" . $gameType . "."
            . $datetime . "\n\n" . $body;
        return $payload;
    }


    /**
     * 格式化公钥
     *
     * @param string $publicKey
     * @return string
     */
    public static function formatRsaPublicKey($publicKey)
    {
        return "-----BEGIN PUBLIC KEY-----\r\n" . wordwrap($publicKey, 64, "\r\n", TRUE) . "\r\n-----END PUBLIC KEY-----";
    }

    /**
     * 格式化私钥
     *
     * @param string $privateKey
     * @return string
     */
    public static function formatRsaPrivateKey($privateKey)
    {
        return "-----BEGIN RSA PRIVATE KEY-----\r\n" . wordwrap($privateKey, 64, "\r\n", TRUE) . "\r\n-----END RSA PRIVATE KEY-----";
    }
}


$httpMethod = "POST";
$apiMethod = "x7mall.mallEntry";
$appkey = "0b9ce7b64b02fb17cc948c0b9a6eb462";
$reqTime =  "2021-01-13T14:54:52+0800";
$gameType = "client";
$bizParams = '{"role":{"roleId":"","guid":"","roleName":"","serverId":"","serverName":"","roleLevel":"","roleCE":"","roleStage":"","roleRechargeAmount":""}}';


//RSA密钥对,可以从签名助手页面获取测试秘钥对
$rsaPrivateKey = "";
$rsaPublicKey = "";

//生成payload
$payload = Signature::genPayload($apiMethod, $appkey, $reqTime, $bizParams, $gameType);

//生成签名
$signature = Signature::sign($payload, $rsaPrivateKey);

//签名校验
$passed = Signature::verify($payload, $signature, $rsaPublicKey);

echo "--------------------------------------------------------------", PHP_EOL;
echo "payload=", $payload, PHP_EOL;
echo "--------------------------------------------------------------", PHP_EOL;
echo "signature=", $signature, PHP_EOL;
echo "--------------------------------------------------------------", PHP_EOL;
echo "passed=", $passed ? "true" : "false", PHP_EOL;
接口说明

角色查询v2接口用于试玩有奖、竞技场等模块的游戏角色数据查询。

查询方式①,使用小7小号guids和游戏区服serverId(可为空)可以获取这一批小7账号下在指定区服的的所有游戏角色数据guidRoles;

查询方式②,使用角色roleId单独查询指定角色信息role

接口apiMethod

common.roleQuery

请求方向

小7Server => 游戏Server

请求bizParams

bizParams字段 类型 必选 说明
roleId String 游戏角色ID
guids String[] 多个小7小号ID
serverId String 区服ID,限定guids参数对应的区服,对roleId此参数无效

注意:

1. (重要)对于roleId需要保证游戏内的唯一性,如果角色id会重复,可通过拼接区服ID等其他参数等方式实现唯一性。

2. 响应参数role只需返回请求参数roleId对应的角色信息;响应参数guidRoles只需返回请求参数guids对应的角色信息。

3. 按guids查询时,如果传递了serverId,则只需要返回小号下对应区服的角色数据(使用场景:试玩有奖、竞技场等)。

响应bizResp

bizResp字段 类型 必选 说明
respCode String 响应码,SUCCESS代表成功
respMsg String 响应提示信息
role Role 角色信息,返回请求参数roleId对应的角色信息,roleId请求参数为空时可返回空对象 {}
guidRoles Role[] 角色信息数组,返回请求参数guids对应小号拥有的所有角色信息,若传递了serverId,则只需返回对应区服的角色数据;未传递guids请求参数查询或没有角色数据时可返回空数组[]
Role字段 类型 (长度) 必选 说明
roleId String (64) 游戏角色ID
guid String (64) 小7小号ID
roleName String (100) 角色名称
serverId String (64) 角色所属区服ID
serverName String (64) 角色所属区服名称
roleLevel String (100) 角色等级, 示例:100,无此属性可留空
roleCE String (100) 角色战力,示例:20000,无此属性可留空
roleStage String (100) 角色关卡,示例:2-3,无此属性可留空
roleRechargeAmount Float (10,2) 角色总充值,精度为小数点后2位,无此属性可留空
roleGuild String (100) 角色所属公会,无此属性可不传

公共参数
网游双端使用相同appkey对接时,请正确选择系统类型
业务参数
结果
接口说明

非必接接口,角色数据发生变动时调用此接口上报,用于小7平台活动及其他功能模块,具体咨询小7对接人员。

接口apiMethod

common.roleReport

请求方向

游戏Server => 小7Server

请求bizParams

bizParams字段 类型 必选 说明
role Role 游戏角色信息,字段参见下表
Role字段 类型 (长度) 必选 说明
roleId String (64) 游戏角色ID
guid String (64) 小7小号ID
roleName String (100) 角色名称
serverId String (64) 角色所属区服ID
serverName String (64) 角色所属区服名称
roleLevel String (100) 角色等级, 示例:100,无此属性可留空
roleCE String (100) 角色战力,示例:20000,无此属性可留空
roleStage String (100) 角色关卡,示例:2-3,无此属性可留空
roleRechargeAmount Float (10,2) 角色总充值,精度为小数点后2位,无此属性可留空
roleGuild String (100) 角色所属公会,无此属性可不传

注意:

0.(重要)对于roleId需要保证游戏内的唯一性,如果角色id会重复,可通过拼接其他参数等方式实现唯一性。

响应bizResp

bizResp字段 类型 必选 说明
respCode String 响应码,SUCCESS代表成功
respMsg String 响应提示信息

公共参数
网游双端使用相同appkey对接时,请正确选择系统类型
业务参数
调试说明

0. 调用接口前需要生成游戏密钥对,并将游戏公钥发给小7对接人员进行配置

1. 填写以上公共参数和业务参数并提交

2. 参数设置成功提交后,测试接口地址一小时内返回的数据为配置的值,(若请求数据格式错误情况则会一直返回失败)

3. 请求测试调用接口地址(非正式地址):https://api.x7sy.com/vendorApi/sample?apiMethod=common.roleReport

4. 接口调试完毕,在上线之前需要切换为下面的正式接口地址

结果
接口说明

小7为用户提供了云游戏服务,多个用户使用云游戏游玩时,游戏内获取的用户ip可能是相同的;若游戏存在多账号登入同IP会判为异常登入进行封禁或限制,请接入此接口获取云游戏IP名单做不封禁白名单处理

接口apiMethod

common.ipWhiteListQuery

请求方向

游戏Server => 小7Server

请求bizParams

bizParams字段 类型 必选 说明
ipType String ip白名单类型,支持类型:client用户ip

响应bizResp

bizResp字段 类型 必选 说明
respCode String 响应码,SUCCESS代表成功
respMsg String 响应提示信息
ipList Array ip白名单数组
公共参数
网游双端使用相同appkey对接时,请正确选择系统类型
业务参数
调试说明

0. 调用接口前需要生成游戏密钥对,并将游戏公钥发给小7对接人员进行配置

1. 填写以上公共参数和业务参数并提交

2. 参数设置成功提交后,测试接口地址一小时内返回的数据为配置的值

3. 请求测试调用接口地址(非正式地址):https://api.x7sy.com/vendorApi/sample?apiMethod=common.ipWhiteListQuery

4. 接口调试完毕,在上线之前需要切换为下面的正式接口地址

结果

接口说明

此接口用于查询指定时间范围内的开服数据

接口apiMethod

common.serverQuery

请求方向

小7Server => 游戏Server

请求bizParams

bizParams字段 类型 必选 说明
startTime String 开始时间,为空时表示不限制开始时间,格式使用ISO8601规范,示例:2024-06-22T05:07:39+0800
endTime String 截止时间,为空时表示不限制截止时间,格式使用ISO8601规范

响应bizResp

bizResp字段 类型 必选 说明
respCode String 响应码,SUCCESS代表成功
respMsg String 响应提示信息
serverList Server[] 对应时间端的开服信息,无开服可返回空对象 {}
Server字段 类型 必选 说明
serverId String 区服ID(区服编号)
serverTime String 开服时间,格式使用ISO8601规范,示例:2024-06-22T05:07:39+0800
serverName String 区服名称,可为空
apiServer String api区服,如不为空,角色信息查询等接口会优先使用此值作为serverId进行调用查询

公共参数
网游双端使用相同appkey对接时,请正确选择系统类型
业务参数
结果
接口说明

当有新开服时,使用此接口发送通知给小7

接口apiMethod

common.serverNotify

请求方向

游戏Server => 小7Server

请求bizParams

bizParams字段 类型 必选 说明
serverList Server[] 开服数据
Server字段 类型 必选 说明
serverId String 区服ID(区服编号)
serverTime String 开服时间,格式使用ISO8601规范,示例:2024-06-22T05:07:39+0800
serverName String 区服名称,可为空
apiServer String api区服,如不为空,角色信息查询等接口会优先使用此值作为serverId进行调用查询

响应bizResp

bizResp字段 类型 必选 说明
respCode String 响应码,SUCCESS代表成功
respMsg String 响应提示信息

公共参数
网游双端使用相同appkey对接时,请正确选择系统类型
业务参数
调试说明

0. 调用接口前需要生成游戏密钥对,并将游戏公钥发给小7对接人员进行配置

1. 填写以上公共参数和业务参数并提交

2. 参数设置成功提交后,测试接口地址一小时内返回的数据为配置的值,(若请求数据格式错误情况则会一直返回失败)

3. 请求测试调用接口地址(非正式地址):https://api.x7sy.com/vendorApi/sample?apiMethod=common.serverNotify

4. 接口调试完毕,在上线之前需要切换为下面的正式接口地址

结果
签名调试
调试说明

1. 签名助手使用测试RSA密钥对,私钥下载公钥下载,此密钥对仅供此页面测试使用,勿做其他用途

2. 自行拼接payload,并使用测试私钥生成签名后,将签名及签名payload使用的参数填写至上方表单中

3. 提交表单之后可自动验证签名是否计算正确

4. 实际请求接口时,注意请求内容格式为application/x-www-form-urlencoded(形如key=value&key=value...),对value需要进行urlencode(在生成签名之后)

结果

签名的RSA秘钥如何获取与使用,它们有什么区别?

签名验签过程需要两对RSA秘钥:

小7私钥 + 小7公钥:小7公钥在小7手游开放平台游戏管理>游戏详情页面获取。

游戏私钥 + 游戏公钥:游戏密钥对需要自行生成(可使用支付宝开放平台开发助手生成),公钥提交给小7对接人员进行配置,私钥妥善保管。

1. 发送请求给小7时(游戏Server => 小7Server):使用游戏私钥给请求参数签名,对小7接口返回的响应数据使用小7公钥进行验签。

2. 接收小7请求时(小7Server => 游戏Server):使用小7公钥对接收到的请求参数进行验签,响应请求时使用游戏私钥签名。


签名助手可以对响应数据进行签名校验吗?
可以。签名助手既可以对Request参数签名进行校验,也可以对Response参数签名进行校验;在填写响应参数进行校验时,respTime可以填写至reqTime字段中,bizResp可以填写至bizParams字段中。

签名助手调试签名通过,但是在接口调试助手发起请求时签名不通过?

1. 签名助手使用rsa秘钥对为测试密钥对,实际请求时不可使用测试密钥对

2. 如果在调试助手调试时填写了游戏公钥,则需要确认代码中用来生成签名的游戏私钥与填写的游戏公钥为匹配的密钥对

3. 签名助手填写信息时不需要urlencode,实际发送请求时需要对Request参数进行urlencode


有接入SDK可以使用吗?
目前提供了Java和PHP版本的小7商城接入SDK,接入小7商城可以直接使用,接入其他接口也可以参考SDK相关代码进行开发,点击前往下载SDK