# PI 服务器接口文档_Server(v1.0.x)
此文档接口只针对网游或者需要服务器发货的单机游戏。包括:登录认证,支付结果通知 和 支付结果查询
# 1. 登录认证(网游接入)
# 1.1 说明
客户端登录成功之后,PiServer返回userId和token等数据,客户端需要将该参数告诉游戏服务器,游戏服务器拿着这些参数,去PiServer进行一次登录认证。
# 1.2 请求
方向:游戏开发服务器 -> PI平台
协议: HTTP
方法: POST
URL: 正式环境:https://bi.yunbugame.com/api/cp/v1/account/verify
测试环境:https://bi.yunbugame.com/api/cp/v1/account/verify 请务必先在测试环境上测试通过
Body格式:
{
"userId":64,
"appKey":"bf89045b2c32de383800",
"token":"09147469BA928CB67B99B8A99338DF7966A2B00D6D1A582537545B7710AB25F8DFA1026118EC3B4CF0100A683ED57016f7cdad53ce3773494a11d1b131395f6a",
"sign":"8bf89045b2c32de383800cf5a64afbe7"
}
参数说明:
参数名 | 类型 | 说明 |
---|---|---|
userId | String | SDK返回的用户ID |
appKey | String | 游戏的AppKey,请跟运营联系获取 |
token | String | SDK返回的Token |
sign | String | md5("userId="+userId+"token="+token+appSecret);游戏服务器按照格式生成一个md5串(32位小写),appSecret是控制台创建游戏时,生成的AppSecret,请联系运营人员获取 |
# 1.3 响应
Json格式:
{
"code": 1,
"msg":"成功",
"data":
{
"userId":1324,
"userName":""
}
}
参数名 | 类型 | 说明 |
---|---|---|
code | Integer | 处理结果, 1 为成功,其它均为失败 |
msg | String | 失败的原因 |
data | Object | 返回的数据对象 |
userId | Integer | 用户在ZeusID |
userName | String | 用户昵称,一般是渠道生成 |
# 2. 支付结果通知
# 2.1 说明
用于通知开发者服务器支付结果。首先需要在 控制台 添加好游戏的回调地址。
通知重发: 若开发者返回结果为非成功响应(返回的result值不为0),将对同一笔订单的通知进行周期性重发。
重发机制: 共10次,前3次每20s尝试一次,4-10次每200s尝试一次。
注:为保证可靠性,系统具备补偿机制,所以可能出现通知比预期的多,因此需要开发者自行处理重复的通知。
# 2.2 请求
方向:PI平台 -> 开发者的游戏服务器
协议: HTTP
方法: POST
URL参数: 无
Body参数
参数名 | 类型 | 说明 |
---|---|---|
notifyId | String | 回调通知ID |
orderId | String | 游戏传入的订单ID(客户端上传) |
sdkOrderId | String | 渠道支付产生的订单ID |
channel | String | 渠道名称,如 oppo, huawei等 |
productId | String | 商品ID(客户端上传) |
productName | String | 商品名称(客户端上传) |
payAmount | Integer | 支付金额,单位为分 |
extra | String | 请求支付时上传的附加参数(客户端上传) |
signType | String | 签名方式:目前仅支持MD5 |
sign | String | 签名(见签名和验签) |
兼容性建议和原则
随业务发展,本接口可能增加新参数、删除已有参数或修改已有参数,可能引起兼容性问题。为避免该影响,特增加本建议和原则;
原则:在本接口有参数改变、增加、删除时,签名将以接口实际发送的全部(除 sign,signType 参数外)参数按如下 签名 章节描述的方式生成待签名串,之后完成签名;
开发者的回调通知接口实现时,建议取出请求中所有出现的参数, 除 sign,signType参数外, 按本文 签名 章节要求生产待签名串,之后完成验签。
签名的SecrectKey为创建游戏时的AppSecrect,请妥善保管,不要泄露。
# 2.3 响应
Json格式:{ "result":0, "message":"Success"}
参数名 | 类型 | 说明 |
---|---|---|
result | Integer | 处理结果,0 为成功,其它均为失败 |
message | String | 失败的原因,成功时可以不填 |
# 3. 支付结果查询
# 3.1 说明
用于开发者服务器向PI平台查询支付结果, 签名的SecrectKey为创建游戏时的AppSecrect.
# 3.2 请求
方向:游戏开发服务器 -> Pi服务器
协议: HTTP
方法: GET
URL:http://bi.yunbugame.com/api/cp/v1/order/check (正式环境)
http://test.yunbugame.com/api/cp/v1/order/check (测试环境)
参数:
参数名 | 类型 | 说明 |
---|---|---|
appKey | String | 应用的标识 |
orderId | String | 游戏的订单ID |
# 3.3 响应
成功:
{
"code": 1,
"msg":"成功",
"data":
{
"channel": "vivo",
"extra": null,
"occurTime": "2018-03-26 18:41:07",
"orderId": "C201709151018300003000124880",
"payAmount": 300,
"productId": "12",
"productName": "魔法箭枝",
"sdkOrderId": "150544191195093036879",
"sign": "8644f1e0e52b1effe7dd5a35f79b55b1",
"signType": "MD5"
}
}
Body参数
参数名 | 类型 | 说明 |
---|---|---|
code | Integer | 处理结果, 1 为成功,其它均为失败 |
msg | String | 失败的原因 |
data | JSON Object | 订单检查的内容 |
channel | String | 支付的渠道 |
extra | String | 支付时填入的扩展信息 |
occurTime | String | 使用时间 |
orderId | String | 订单ID |
payAmount | Integer | 支付的金额,以分单位 |
productId | String | 商品ID,兑换码对应的商品ID |
productName | String | 商品名称 |
sdkOrderId | String | 渠道支付的订单ID |
signType | String | 签名方式:目前仅支持MD5 |
sign | String | 签名(见签名和验签) |
失败
{
"code": 10001,
"msg":"参数无效",
"data":null
}
# 4.兑换码服务器通知
# 4.1 说明
用于将通知开发者服务器兑换码兑换结果。请联系我方运营提交兑换码通知地址以及获取签名SecretKey
通知重发: 若开发者返回结果为非成功响应(返回的result值不为0),将对同一笔订单的通知进行周期性重发。
重发机制: 共10次,前3次每20s尝试一次,4-10次每200s尝试一次。
注:为保证可靠性,系统具备补偿机制,所以可能出现通知比预期的多,因此需要开发者自行处理重复的通知。
# 4.2 请求
方向:Pi服务器 -> 游戏开发服务器
协议: HTTP
方法: POST
URL参数: 无
Body参数
参数名 | 类型 | 说明 |
---|---|---|
notifyId | String | 回调通知ID |
code | String | 使用的兑换码 |
occurTime | String | 使用时间 |
productId | String | 商品ID,兑换码对应的商品ID |
signType | String | 签名方式:目前仅持MD5 |
sign | String | 签名(见签名和验签) |
extra | String | 扩展信息(透传) |
兼容性建议和原则
随业务发展,本接口可能增加新参数、删除已有参数或修改已有参数,可能引起兼容性问题。为避免该影响,特增加本建议和原则;
原则:在本接口有参数改变、增加、删除时,签名将以接口实际发送的全部(除 sign,signType 参数外)参数按如下 签名 章节描述的方式生成待签名串,之后完成签名;
开发者的回调通知接口实现时,建议取出请求中所有出现的参数, 除 sign,signType参数外, 按本文 签名 章节要求生产待签名串,之后完成验签。
# 4.3 响应
Json格式:{ "result":0, "message":"Success"}
参数名 | 类型 | 说明 |
---|---|---|
result | Integer | 处理结果,0 为成功,其它均为失败 |
message | String | 失败的原因,成功时可以不填 |
# 5. 签名
# 5.1 签名算法
Pi服务器要求每次http请求都要对关键信息进行签名,通信对端接收到消息后,也必须对消息进行验签。目前Pi服务器仅支持MD5签名算法,交互过程中,该字段signType固定取值:MD5。
示例:对于如下的参数数组
sdkOrderId=GC201703272319263901692762304795668480&payAmount=1&productId=&orderId=C2017032723192400100015280&extra=ExtraMessage:1490627964499&channel=oppo&sign=1a07070acc80eddf599dccb39947cee7&signType=MD5¬ifyId=N201703311929460000117564&productName=100元宝
对数组里的每一个参数名称ASCII 码的增序排序,若遇到相同首字母,则看第二个字母,以此类推,排序完成之后,再把所有数组值以“&”字符连接起来signData:
channel=oppo&extra=ExtraMessage:1490627964499¬ifyId=N201703311929460000117564&orderId=C2017032723192400100015280&payAmount=1&productName=100元宝&sdkOrderId=GC201703272319263901692762304795668480
注:空值(NULL和"")不参与签名, sign 和 signType 也不参与签名
最后签名:
sign=to_lower_case(md5_hex(signData&to_lower_case(md5_hex(App-key))))
# 5.2 验签
获取签名时,直接调用Pi服务器提供的签名方法[下载Java签名文件 (opens new window)] [下载PHP签名文件]即可:
ZeusSignUtils.getSign(Map<String,String>para, String key)
该方法返回值即为签名:sign
验证签名时,直接调用Zeus提供的验签方法即可:
ZeusSignUtils.verifySignature(Map<String, String>para, String key)
该方法返回值为boolean,验签成功时为true,失败时为false
# 6. 注意事项
请使用UTF-8编码