1 说明

1.1 文档编写目的

文档说明了星权益开放平台的接口协议,供使用该接口的合作商和本项目的后续开发维护人员使用。

1.2 名词解释

测试环境:提供开发过程中用于联调的环境,不会产生真实的交易,仅用于API接口的通讯与调试工作。

生产环境:商户开发完成并测试通过后,可通过星权益商户服务平台创建应用,自助申请并获得有关业务参数。

1.3 环境参数

环境 HTTP地址 HTTPS地址
生产环境 http://openapi.yunjinshuke.com/api/gateway 暂不支持
测试环境 http://test.openapi.yunjinshuke.com/api/gateway 暂不支持

2 签名规范

2.1 请求签名规则

1、将除sign参数之外的所有参数包装成Dictionary<string,string>字典;

2、将Dictionary<string,string>字典进行Json序列化;

3、将Json字符串转化为字符数组charObjectArray,然后将charObjectArray进行Array.Sort()排序;

4、将排序后的charObjectArray转化为字符串string,然后在string后直接拼接应用密钥;

5、将第4步拼接了应用密钥的字符串进行md5,最后将得到的值转化为小写字符串即得到sign签名值;

2.2 响应签名规则

1、将response响应结果中的result的值转换为字符数组charObjectArray,然后将charObjectArray进行Array.Sort()排序;

2、将排序后的charObjectArray转化为字符串string,然后在string后直接拼接应用密钥;

3、将第2步拼接了应用密钥的字符串进行md5,最后将得到的值转化为小写字符串即得到sign签名值;

2.3 签名Demo

测试环境参数:
appkey: BMgJkzAVdPJDqyDfBMv+AA==
sercret: 945d81d7d4ae44db9560277f293bf222
直充测试成功 1000000653
直充测试失败 1000000652
卡密测试 1000000651

签名JAVA示例:

加签过程:

 

3 卡密解密规范

		

public class AESEncryptUtil {
    public static final String ALGORITHM = "AES/ECB/PKCS7Padding";
    static {
        try {
            Security.addProvider(new BouncyCastleProvider());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    /**
     *
     * 基础数据(测试使用):
     * AppSecret:7f8a6819ceb84a32b9ec1b381d9c512d
     * cardNo:i1iVR5w9Qv+gq++70C+Ne+21+PaEMaleHPSBpvEhQJU=
     * password:gF/NDpbzKvZ1ysNGTXrqtquM+7ZWIVsiG6jpnv+UxkY=
     * 注意:第三方依赖:commons-codec-1.11.jar、gson-2.8.5.jar、bcprov-jdk15on.jar;
     *
     * Java解密示例代码
     * @Description:解密工具
     * Copyright:
     * Copyright(c) 2020
     * Company:湖南云金数科信息技术有限公司
     * @author
     * @version V1.0.0
     * @since 1.0
     * @date 2020 年3月23日 下午3:24:16
     */
    public static String aes256Decode(String str, byte[] key) {
        byte[] bytes = Base64.getDecoder().decode(str);
        String result = null;
        try {
            Cipher cipher = Cipher.getInstance(ALGORITHM, "BC");
            SecretKeySpec keySpec = new SecretKeySpec(key, "AES");
            cipher.init(Cipher.DECRYPT_MODE, keySpec);
            byte[] decoded = cipher.doFinal(bytes);
            result = new String(decoded, "UTF-8");
        } catch (Exception e) {
            e.printStackTrace();
        }
        return result;

    }

    public static void main(String[] args) throws Exception {
        String cardNo = "i1iVR5w9Qv+gq++70C+Ne+21+PaEMaleHPSBpvEhQJU=";
        String password = "i1iVR5w9Qv+gq++70C+Ne+21+PaEMaleHPSBpvEhQJU=";
        String appSecret = "7f8a6819ceb84a32b9ec1b381d9c512d";
        String cardNoValue = AESEncryptUtil.aes256Decode(cardNo, appSecret.getBytes());
        String passwordValue = AESEncryptUtil.aes256Decode(password, appSecret.getBytes());
        System.out.println("解密結果:" + cardNoValue);
        System.out.println("解密結果:" + passwordValue);
    }
}

4 接口列表

4.1 direct.add 直充下单接口

接口介绍:直充商品下单接口,供合作方针对直充类型商品进行下单;

1、POST请求,Content-Type必须设置为:application/json;

2、接口是异步,接口调用成功(即下单成功),不代表充值成功,最终“充值结果”,需要调用 [订单查询接口] 进行查询;

3、[订单查询接口]必须接入;

请求参数

参数名 类型 必填 长度 示例值 描述
appKey String 32 RvD4GzAFt3Wmp8cddgZ3ag== 分配给商户应用的appKey
method String 128 direct.add 接口方法名称
timestamp String 32 2014-07-24 03:07:50 时间戳,格式为:yyyy-MM-dd HH:mm:ss
version String 3 1.0 调用的接口版本
reqParams String 请求参数集合(注意:该参数是以json字符串的形式传输,详见reqParams参数列表)
sign String 128 详见示例 签名串

reqParams参数列表

参数名称 类型 必填 长度 示例值 描述
goodsCode Long 20 1000000018 商品编号
rechargeAccount String 32 11888888 充值账号
buyNumber int 10 1 购买数量
customerOrderNo String 32 201906281030191013526 外部订单号(每笔订单保持唯一)
extraParams String 游戏充值拓展参数集合,可以通过游戏直充模板查询接口获取参数(注意:该参数是以json字符串的形式传输,详见extraParams参数列表)

extraParams参数列表

参数名称 类型 必填 长度 示例值 描述
gameCode String YXA 游戏编号
regionCode String YXA_DXYQ 游戏区编号
ServerCode String DXYQ_DK 游戏服编号
rechargeTypeCode String CZ1 充值类型编号

响应参数

参数名称 类型 必填 长度 示例值 描述
code String 20 1000 返回码,详见《业务错误码》
message String 接口调用成功 返回码描述,详见《业务错误码》
result Object 响应结果,详见result格式说明
sign String d9f7b3bb99741fedcc265162bea6c626 签名串,签名规则详见“签名计算规则说明”

result格式说明

参数名称 类型 必填 长度 示例值 描述
orderId Long 20 19062837751058701652 订单编号
customerOrderNo String 32 201906281030191013526 外部订单号,每次请求必须唯一
orderStatus String processing 订单状态 (initial:未处理;waitprocess:待处理;processing:处理中;success:成功;failed:失败)
createTime String 2019-07-27 16:44:30 创建时间
completeTime String 订单完成时间,查单接口返回

请求示例

JSON

响应示例

JSON

异常实例示例

JSON

4.2 card.add 卡密下单接口

接口介绍:卡密商品下单接口,供合作方针对卡密类型商品进行下单;

1、POST请求,Content-Type必须设置为:application/json;

2、接口是异步,接口调用成功(即下单成功),不代表购买成功,最终“购买结果”,需要调用 [订单查询接口] 进行查询,由于取卡是异步操作,建议间隔1-3s循环调用,直至最终结果;

3、此接口不会返回卡密数据,需要再调用 [订单查询接口] 获取卡密信息;

4、[订单查询接口]必须接入;

请求参数

参数名 类型 必填 长度 示例值 描述
appKey String 32 RvD4GzAFt3Wmp8cddgZ3ag== 分配给商户应用的appKey
method String 128 card.add 接口方法名称
timestamp String 32 2014-07-24 03:07:50 时间戳,格式为:yyyy-MM-dd HH:mm:ss
version String 3 1.0 调用的接口版本
reqParams String 请求参数集合(注意:该参数是以json字符串的形式传输,详见reqParams参数列表)
sign String 128 详见示例 签名串

reqParams参数列表

参数名称 类型 必填 长度 示例值 描述
goodsCode Long 20 1000000018 商品编号
buyNumber int 10 1 购买数量
customerOrderNo String 32 201906281030191013526 外部订单号(每笔订单保持唯一)

响应参数

参数名称 类型 必填 长度 示例值 描述
code String 20 1000 返回码,详见《业务错误码》
message String 接口调用成功 返回码描述,详见《业务错误码》
result String 响应结果,详见result格式说明
sign String d9f7b3bb99741fedcc265162bea6c626 签名串,签名规则详见“签名计算规则说明”

result格式说明

参数名称 类型 必填 长度 示例值 描述
orderId Long 20 19062837751058701652 订单编号
customerOrderNo String 32 201906281030191013526 外部订单号,每次请求必须唯一
orderStatus String processing 订单状态 (initial: 未处理;waitprocess:待处理;processing:处理中;success:成功;failed:失败)
createTime String 2019-07-27 16:44:30 创建时间
completeTime String 2019-07-27 16:44:30 订单完成时间,查单接口返回

请求示例

JSON

响应示例

JSON

异常实例示例

JSON

4.3 order.query 订单查询接口

接口介绍:查询订单详情接口,供合作方查询订单充值或卡密购买结果时调用;

1、POST请求,Content-Type必须设置为:application/json;

2、如果是卡密取卡订单,此接口会返回卡密数据;

3、卡密为密文,需要进行解密使用,详情请查看 【卡密解密说明】

请求参数

参数名 类型 必填 长度 示例值 描述
appKey String 32 RvD4GzAFt3Wmp8cddgZ3ag== 分配给商户应用的appKey
method String 128 order.query 接口方法名称
timestamp String 32 2014-07-24 03:07:50 时间戳,格式为:yyyy-MM-dd HH:mm:ss
version String 3 1.0 调用的接口版本
reqParams String 请求参数集合(注意:该参数是以json字符串的形式传输,详见reqParams参数列表)
sign String 128 详见示例 签名串

reqParams参数列表

参数名称 类型 必填 长度 示例值 描述
customerOrderNo String 32 201906281030191013526 外部订单号(每笔订单保持唯一)

响应参数

参数名称 类型 必填 长度 示例值 描述
code String 20 1000 返回码,详见《业务错误码》
message String 接口调用成功 返回码描述,详见《业务错误码》
result Object 响应结果,详见result格式说明
sign String d9f7b3bb99741fedcc265162bea6c626 签名串,签名规则详见“签名计算规则说明”

result格式说明

参数名称 类型 必填 长度 示例值 描述
orderId Long 20 19062837751058701652 订单编号
customerOrderNo String 32 201906281030191013526 外部订单号,每次请求必须唯一
orderStatus String processing 订单状态 (initial: 未处理;waitprocess:待处理;processing:处理中;success:成功;failed:失败)
bizType int 1 交易类型 - 1:批采; 2:直充
createTime String 2019-07-27 16:44:30 创建时间
completeTime String 2019-07-27 16:44:30 订单完成时间,查单接口返回
data Array [{"cardNo":"12nCp6X/nALmrvr1erxK+D4L8n/kqz/RItKWUfvZrCU=",
"password":"9HeOgdv+NpLihh4+5Gm0Mj4L8n/kqz/RItKWUfvZrCU=",
"effectTime":"2019-06-30 11:15:32","invalidTime":"2019-06-30 11:15:32"},
{"cardNo":"12nCp6X/nALmrvr1erxK+BzfvN8D1qbXOYunJrydEWA=",
"password":"9HeOgdv+NpLihh4+5Gm0MhzfvN8D1qbXOYunJrydEWA=",
"effectTime":"2019-06-30 11:15:32","invalidTime":"2019-06-30 11:15:32"}]}]
卡密信息,仅卡密订单返回(注意:卡密是密文,需要进行解密使用)

data格式说明

参数名称 类型 必填 长度 示例值 描述
cardNo String 64 12nCp6X/nALmrvr1erxK+D4L8n/kqz/RItKWUfvZrCU= 卡号
password String 64 9HeOgdv+NpLihh4+5Gm0Mj4L8n/kqz/RItKWUfvZrCU= 密码
effectTime String 2019-07-27 16:44:30 生效时间
invalidTime String 2019-07-27 16:44:30 失效时间

请求示例

JSON

响应示例

JSON

异常实例示例

JSON

 

4.4 account.query 账户查询接口

接口介绍:获取商户账户信息接口(该接口没有请求参数,公共请求参数中的reqParams值为“{}”)

POST请求,Content-Type必须设置为:application/json;

请求参数

参数名 类型 必填 长度 示例值 描述
appKey String 32 RvD4GzAFt3Wmp8cddgZ3ag== 分配给商户应用的appKey
method String 128 account.query 接口方法名称
timestamp String 32 2014-07-24 03:07:50 时间戳,格式为:yyyy-MM-dd HH:mm:ss
version String 3 1.0 调用的接口版本
reqParams String 请求参数集合(注意:该参数是以json字符串的形式传输,详见reqParams参数列表)
sign String 128 详见示例 签名串

reqParams参数列表

参数名称 类型 必填 长度 示例值 描述

响应参数

参数名称 类型 必填 长度 示例值 描述
code String 20 1000 返回码,详见《业务错误码》
message String 接口调用成功 返回码描述,详见《业务错误码》
result Object 响应结果,详见result格式说明
sign String d9f7b3bb99741fedcc265162bea6c626 签名串,签名规则详见“签名计算规则说明”

result格式说明

参数名称 类型 必填 长度 示例值 描述
balance double 1888888.8800 账号余额(单位:元)
status int 1 账号状态 - 1:有效; 2:冻结

请求示例

JSON

响应示例

JSON

异常实例示例

JSON

4.5 直充/卡密订单通知接口

当直充/卡密订单状态为成功或者失败时,由星权益平台发起通知请求,开发者可进入商户服务后台自助设置订单结果通知的URL地址,操作路径:进入商户后台 -> 运营管理 -> 应用信息 -> 接口配置。

如果开发者平台接收请求并验证无误,请返回{"code":"0"},如无返回或者返回的字符不是{"code":"0"},星权益平台会不断重发通知。一般情况下,15s内完成3次通知(通知间隔频率一般是:0s,5s,10s),如果3次都未成功,将终止发起通知请求。

通知接口请求头设置

Content-Type="application/json;charset=UTF-8"

Accept="application/json;charset=UTF-8"

请求参数

参数名称 类型 必填 长度 示例值 描述
orderId Long 20 19062837751058701652 订单编号
customerOrderNo String 32 201906281030191013526 外部订单号,每次请求必须唯一
orderStatus String success 订单状态 (success:成功;failed:失败)
createTime String 2019-07-27 16:44:30 创建时间
completeTime String 2019-07-27 16:44:30 订单完成时间
sign String 128 详见示例 签名串

4.6 游戏模板接口

接口介绍:游戏充值模板查询接口,供合作方针对游戏直充类型商品进行查询充值模板;

POST请求,Content-Type必须设置为:application/json;

请求参数

 

参数名 类型 必填 长度 示例值 描述
appKey String 32 RvD4GzAFt3Wmp8cddgZ3ag== 分配给商户应用的appKey
method String 128 game.template 接口方法名称
timestamp String 32 2014-07-24 03:07:50 时间戳,格式为:yyyy-MM-dd HH:mm:ss
version String 3 1.0 调用的接口版本
reqParams String 请求参数集合(注意:该参数是以json字符串的形式传输,详见reqParams参数列表)
sign String 128 详见示例 签名串

reqParams参数列表

 

参数名称 类型 必填 长度 示例值 描述
goodsCode Long 20 1000000018 商品编号

响应参数

 

参数名称 类型 必填 长度 示例值 描述
code String 20 1000 返回码,详见《业务错误码》
message String 接口调用成功 返回码描述,详见《业务错误码》
result Object 响应结果,详见result格式说明
sign String d9f7b3bb99741fedcc265162bea6c626 签名串,签名规则详见“签名计算规则说明”

result格式说明

 

参数名称 类型 必填 长度 示例值 描述
gameTemplate String 详见示例 游戏充值模板信息
goodsCode Long 1000000018 商品编码

请求示例

JSON

响应示例

JSON

异常实例示例

JSON

5 业务返回码

返回码 描述 解决方案
0 接口调用成功 接口调用成功,按正常流程处理;下单接口中,接口调用成功表示下单成功,但是下单成功不表示订单充值成功,要想获得订单的充值结果,需要调用查单接口来获得订单充值状态
1000 系统异常 系统异常,联系运营处理
1001 应用异常 应用配置异常。联系运营处理
1002 appKey不能为空。 请检查接口参数
1003 method为空或无效 请检查接口参数
1004 timestamp为空或无效 请检查接口参数
1005 timestamp已过期 请检查接口参数
1006 version为空或者错误 version参数不能为空,必须传入版本号,目前的版本号参数值为:1.0
1007 reqParams不能为空 请检查接口参数
1008 reqParams格式有误 请检查接口参数
1009 reqParams缺少必要参数 请检查接口参数
1010 sign无效 签名错误,请检查密钥和签名算法
1011 无效的商品编码 请联系商务或登录商户后台获取商品编码
1012 商品已下架 请联系商务确认商品是否已下架
1013 账户已冻结 请联系商务确认资金账户是否已冻结
1014 账户不可用 请联系商务确认资金账户是否已注销
1015 余额不足 请及时充值
1016 已有相同的客户工单号 请检查订单号是否重复
1017 支付失败 请联系商务确认失败原因
1018 应用无效 请检查应用是否已失效
1019 商品未配置 请联系商务配置商品
1020 订单不存在 请检查订单号
1021 超过商品单次可购买数量 请联系商务确认商品数量
1022 未查询到游戏模板信息 请联系商务配置商品
1023 商品类型错误 请检查接口参数