小7商城接入帮助
介绍

为适应专服游戏运营节奏,需要不断探索、设计一些新的运营活动,提升用户游戏体验,延长游戏生命周期,达到促留存、拉充值等目的; 研发只需对接一次商城相关接口,接入小7商城SDK后运营便可通过后台自定义运营活动对游戏进行调优,减轻研发负担。

业务流程


流程如下:

1. 玩家打开游戏

2. 游戏服务器携带角色信息请求小7接口,根据返回参数判断是否需要展示小7商城入口

3. 玩家点击游戏内小7商城入口,游戏客户端携带角色信息调起小7SDK商城界面

4. 玩家在小7SDK商城页面参与通行证及礼包等活动,完成支付操作

5. 玩家在小7SDK商城活动详情页面点击领取道具

6. 小7服务器通知游戏服务器发放道具

接口规范

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

请求方式

POST

请求格式

application/x-www-form-urlencoded

响应格式

JSON

请求字段定义

Request字段 类型 必选 说明
bizParams String 业务参数,值为每个接口对应业务参数的JSON字符串
apiMethod String 接口名称
reqTime String 请求时间,格式使用ISO8601规范,示例:2025-04-19T10:35:28+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规范,示例:2025-04-19T10:35:28+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 请求方向 说明
道具查询 x7mall.propQuery 小7Server => 游戏Server 游戏方提供道具编码,通过此接口传递可查询对应道具信息
角色查询 x7mall.roleQuery 小7Server => 游戏Server 通过此接口传递roleId可查询对应角色信息,也需支持按guid批量查
道具发放 x7mall.propIssue 小7Server => 游戏Server 通过此接口可给指定角色发放道具
商城入口 x7mall.mallEntry 游戏Server => 小7Server 通过此接口可查询是否需要展示小7商城入口
订单通告 x7mall.orderNotify 小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.2025-04-19T10:35:28+0800{"role":{"roleId":"","guid":"","roleName":"","serverId":"","serverName":"","roleLevel":"","roleCE":"","roleStage":"","roleRechargeAmount":""}}

③ 具体流程

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;
接口说明

接口apiMethod

x7mall.propQuery

请求方向

小7Server => 游戏Server

请求bizParams

bizParams字段 类型 必选 说明
propCode String[] 道具编码数组

响应bizResp

bizResp字段 类型 必选 说明
respCode String 响应码,SUCCESS代表成功
respMsg String 响应提示信息
props Prop[] 道具信息数组
Prop字段 类型 必选 说明
propCode String 道具编码
propName String 道具名称
propDesc String 道具描述信息
propIcon String 道具图标URL地址(需支持https)

若无法提供道具图标对应的URL地址(需要为https访问),propIcon字段请返回道具图标的路径及名称,将道具图标严格按照接口返回的路径名称打包发给小7对接人员手动上传。如有疑问请咨询对接人员。


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

接口apiMethod

x7mall.roleQuery

请求方向

小7Server => 游戏Server

请求bizParams

bizParams字段 类型 必选 说明
roleId String 游戏角色ID
guid String 小7小号ID

注意:

1. 此接口为角色查询接口V2版本的子集。

2. roleId和guid参数一般不会同时传递,但需要保证同时传递时接口也可正常使用。

3. 传递的roleId来源于点击商城图标调起SDK商城界面时传递的角色信息或使用guid参数调用此接口查询返回的角色信息。

4. (重要)对于roleId需要保证游戏内的唯一性,必要时可拼接其他参数实现唯一性。

响应bizResp

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

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

接口apiMethod

x7mall.propIssue

请求方向

小7Server => 游戏Server

请求bizParams

bizParams字段 类型 必选 说明
issueOrderId String 发放订单号,对同一订单号发放道具需要进行幂等性校验
roleId String 发放角色ID
guid String 角色所属小号ID
serverId String 角色所属区服ID
serverName String 角色所属区服名称
issueTime String 发放时间,格式为ISO8601,示例:2025-04-19T10:35:28+0800
mailTitle String 邮件标题
mailContent String 邮件内容
isTest Boolean 是否为测试发放
issuedProps IssuedProp[] 发放的道具信息
IssuedProp字段 类型 必选 说明
propCode String 道具编码
propName String 道具名称
propQuantity String 道具数量

响应bizResp

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

注意:

1. 为了保证道具成功发放,订单可能会重发多次(即使已经成功),因此对相同订单号发放道具需要进行幂等性校验,避免重复发放道具

2. 对于未正确返回 SUCCESS响应的请求会进行延时重发;已经发放道具情况下,如果后续还有请求也需要返回SUCCESS

3. 除了立即请求一次外,重发请求的延时间隔分别为:30, 60, 120, 120, 300, 1800, 3600, 7200, 28800(距离上一次发送的间隔时间,单位秒)


公共参数
双端使用相同appkey对接时,请正确选择系统类型
业务参数
道具

邮件
结果
接口说明

接口apiMethod

x7mall.mallEntry

请求方向

游戏Server => 小7Server

请求bizParams

bizParams字段 类型 必选 说明
role Role 游戏角色信息
Role字段 类型 必选 说明
roleId String 游戏角色ID
guid String 小7小号ID
roleName String 角色名称
serverId String 角色所属区服ID
serverName String 角色所属区服名称
roleLevel String 角色等级, 示例:100
roleCE String 角色战力,示例:20000
roleStage String 角色关卡,示例:2-3
roleRechargeAmount Float 角色总充值,精度为小数点后2位

响应bizResp

bizResp字段 类型 必选 说明
respCode String 响应码,SUCCESS代表成功
respMsg String 响应提示信息
isOpen Boolean 商城是否开放
showNotification Boolean 是否显示小红点引导

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

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

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

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

3. 请求测试调用接口地址(非正式地址):https://pay.x7sy.com/x7mall_helper/gateway

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

结果
接口说明

接口apiMethod

x7mall.orderNotify

请求方向

小7Server => 游戏Server

请求bizParams

bizParams字段 类型 必选 说明
orderId String 订单号,对同一订单号需要做幂等性校验
x7Goid String 小7订单ID
guid String 小号ID
roleId String 角色ID
roleName String 角色名称
serverId String 角色所属区服ID
serverName String 区服名称
activityName String 商城活动名称
subject String 订单商品信息
price String 商品原价,精度为小数点后2位
couponValue String 代金券面值,精度为小数点后2位
payPrice String 订单实际支付金额,精度为小数点后2位
createTime String 订单创建时间,格式为ISO8601,示例:2025-04-19T10:35:28+0800
successTime String 订单成功支付时间,格式为ISO8601

响应bizResp

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

注意:

1. 对相同订单号接收订单通告需要进行幂等性校验

2. 对于未正确返回 SUCCESS响应的请求会进行延时重发;已经正确记录订单情况下,如果后续还有请求也需要返回SUCCESS

3. 除了立即请求一次外,重发请求的延时间隔分别为:60, 120, 120, 300, 1800, 3600, 7200, 28800(单位秒)


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

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

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

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

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

结果

服务端SDK资源下载

php

下载地址:x7sdk-php-1.0.1.zip

支持composer方式引入:composer require x7sy/x7, 仓库地址:点击跳转github

Java

下载地址:小7商城接入API-java.rar

Java SDK使用参见压缩包内说明文档

更多资源

小7手游-开放平台-资源下载

签名的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

商城所有接口都必须要接入吗?
除了订单通告接口之外,商城的其他接口都是必接的,不接入无法实现商城的基本功能。

商城入口查询接口在何时调用?
玩家登录游戏选择角色后即可将角色信息传给商城入口查询接口,根据接口返回数据判断是否需要展示。

游戏内的商城入口图标怎么显示?
游戏可以根据游戏主界面风格自行设置一个合适的商城入口图标,如果没有合适的图标资源,可以将游戏主界面截图给小7对接人员,并说明需要提供图标资源。商城入口图标显示与否由商城入口查询接口的返回数据决定。

商城道具查询是要查询什么道具呢?
商城道具查询接口查询的为游戏中玩家可获取的道具,一般只在配置活动之前调用,需要尽可能支持游戏内所有道具的查询,查询的道具信息将用于商城内道具展示与发放。

道具编码是什么?
道具编码是游戏内道具的唯一标识,所有接口接入成功后,需要将道具编码csv文件发送给小7对接人员。

角色查询接口角色战力、等级、充值、关卡等数据是否一定要确定的信息?
是的,商城有通行证活动,是需要角色的等级、战力这些,没有就做不了对应的活动;如果游戏没有某项数据,字段值留空并向对接人员说明。

游戏角色id不唯一怎么办?
商城道具领取与发放是以角色为主体,需要保证角色id在整个游戏内唯一,如果现有id不唯一,可以通过拼接区服id等参数实现唯一性。

如何获取商城的消费数据? 订单通告接口有什么作用?
玩家在商城内支付参与通行证或礼包等活动成功时,小7服务器会将玩家支付的订单金额及活动信息等参数通过订单通告接口发送给游戏服务器。如果未接入商城订单通告接口,小7手游开放平台的手游数据统计页面已经包含了商城的消费数据,可以前往查看。

道具发放接口的道具可以发放多个吗?
是的,道具发放接口需要支持一次发放多种不同的道具,并且每个道具可以配置不同的数量。

道具发放issueOrderId和订单通告orderId有关联关系吗?
对于部分需要购买的道具两个id是存在关联关系的,但是并不是所有道具发放订单issuerOrderId都会关联orderId,因此游戏接入时不需要关注此问题,分别接入两个接口即可。