搜索
推广与变现
游戏联运
广告联盟
应用联运
推广与变现/广告联盟/操作指南/广告接入/小游戏联运SDK接入文档
小游戏联运SDK接入文档更新时间: 2024-09-24 17:32:00

一. 接入前准备

1、注册开发者账号,并联系商务。

2、获得系统分配的参数appId、appkey和appSecret.

appId:小游戏对应用的唯一Id,每一款游戏有一个Id。

appKey:支付创建订单的时候用来签名。

appSecret:验证用户登录用来签名和支付回调的时候用来验证签名。

请您公司的服务器开发人员将如下IP加到IP白名单中,以免因为IP限制造成回调不成功。

42.62.48.246

223.202.68.237

42.62.103.0/26(42.62.103.1~42.62.103.62)

120.134.34.0/26(120.134.34.1~120.134.34.62)

183.84.4.0/26,118.26.209.0/24

61.155.4.99、61.155.4.100、61.155.4.101

二. 登录支付API

1、游戏登录

登录交互图:

qg.login(OBJECT)

参数:

参数名称类型描述
successFunction登录成功
failFunction失败回调
completeFunction完成回调

success返回值:

参数名称类型描述
appAccountIdInt游戏中心计费系统 用户Id,作为用户的唯一标识
sessionString本次登录游戏的会话ID(当前登录有效、会过期)

示例:

qg.login({
success: function(res) {
},
fail: function(res){}
});

2、 验证用户session(服务端)[必接]

  • 接口地址:https://mis.migc.xiaomi.com/api/biz/service/loginvalidate
  • 请求方式:POST
  • Headers:Content-Type: application/x-www-form-urlencoded

请求参数说明:

参数名称重要性说明
appId必须游戏ID
session必须用户sessionID
uid必须用户ID、和登录接口返回的appAccountId一致
signature必须签名,签名方法见后面说明 使用appSecret签名

例如:

POST https://mis.migc.xiaomi.com/api/biz/service/loginvalidate
appId=2882303761517239138&session=1nlfxuAGmZk9IR2L&uid=100010&signature=b560b14efb18ee2eb8f85e51c5f7c11f697abcfc

返回参数说明:

参数名称 重要性 说明
 errcode 必须状态码:
200   验证正确
1515 appId 错误
1516 uid 错误
1520 session 错误
1525 signature 错误
4002 appid, uid, session 不匹配(常见为session过期)
 errMsg 可选 错误信息
 adult 可选用户实名标识。
407 实名认证通过,年龄大于18岁
408 实名认证通过,年龄小于18岁
409 未进行实名认证

例如: { "errcode": 200,"adult":409 }

3、获取用户信息

NOTICE: 开发者调用时,平台会弹出用户授权弹窗,需要用户授权才能获取到用户信息,用户取消授权时会走失败回调,这时开发者需要处理用户取消授权的情况。

qg.getUserInfo(OBJECT)

参数:

参数名称类型必填描述
successFunction成功
failFunction失败回调
completeFunction完成回调

success返回值res:

参数名称类型描述
res.userInfoObject用户信息对象

userInfo参数说明:

参数名称类型描述
nickNameString用户昵称
avatarUrlString用户头像url
genderInt用户性别,0:未知,1:男,2:女

示例:

qg.getUserInfo({
  success: function(res) {
        console.log('nickName:${res.userInfo.nickName}')
  },
  fail: function(){
        console.log('user reject!')
  },
  complete: function(res){
        console.log('get userInfo complete')
  }
});

4、用户信息变化监听事件,用户同意授权后,用户信息更新才会回调

qg.onUserInfoChange(function callback)

参数

function callback 用户信息变化回调事件

callback参数res:

参数名称描述
res.userInfo用户信息

userInfo参数说明:

参数名称类型描述
nickNameString用户昵称
avatarUrlString用户头像url
genderInt用户性别,0:未知,1:男,2:女

示例:

qg.onUserInfoChange(function (res) {
  console.log(res.userInfo.nickName)
  console.log(res.userInfo.avatarUrl)  
  console.log(res.userInfo.gender)
})

5、取消用户信息变化监听事件

qg.offUserInfoChange(function callback)

参数

function callback 用户信息变化回调事件。

三. 游戏支付说明(游戏内包含支付能力必接)

1、创建支付订单

qg.pay(OBJECT)

参数:

参数名称类型描述
orderInfoOBJECT需要由游戏服务端生成的订单明细字符串,由下表中的基本参数,加上签名参数构成。参数使用URL编码成字符串
successFunction支付成功回调
failFunction失败回调
completeFunction完成回调

orderInfo参数说明:

参数名称参数类型描述
appIdString游戏唯一ID
appAccountIdint与登录接口返回的appAccountId一致
sessionString与登录接口返回的session一致
cpOrderIdString游戏订单号
cpUserInfoStringcp透传信息 (非空)
displayNameString支付的时候显示的商品名称
feeValueInt价格 单位分
signString签名 
注:签名的key为(AppKey 全是数字) (必传) 签名方式见下文 
必须先验证 用户session验证接口

示例:

qg.pay({
  orderInfo: {
    appId:"2882303761117490626",
    appAccountId:"74317",
    session:"TRQJzccscL9u6VvC",
    cpOrderId:'1556088963',
    cpUserInfo: '74317',
    displayName: '游戏元宝',
    feeValue: 100,
    sign: '22fea7804df43420dc9886a04c028b6f335d87b6',
  },
  success: function(data){
  //{memo: "支付成功", resultStatus: "9000"}
//9000: 支付成功
  },
  fail: function(data){
//{memo: "已取消支付", resultStatus: "6001"}
//6001: 已取消支付
//5000: 未安装微信
//5001: 微信订单未支付
  }
})

2、发货通知(服务端)[必接]

接口描述:该接口为通知游戏发货接口,SDK服务端会在客户端支付成功后将订单信息发送至开发者提供的支付回调地址,为防止被篡改,游戏需要对所收到的参数进行校验,确认收到的参数和下单的参数一致。

请求参数: 

参数名称是否必须参数类型描述
appIdstring游戏ID
cpOrderIdstring开发商订单ID
cpUserInfostring开发商透传信息
uidstring用户ID
orderIdstring游戏平台订单ID
orderStatusstring订单状态,TRADE_SUCCESS 代表成功
payFeestring支付金额,单位为“分”。
productCodestring商品代码
productNamestring商品名称
productCountstring商品数量
payTimestring支付时间,格式 yyyy-MM-dd HH:mm:ss
partnerGiftConsumestring优惠券金额(分) 非必填  
signaturestring签名,签名方法见后面说明 使用appSecret验证签名

回调示例:

http://ccc.com/notify.do?appId=2882303761517239138&cpOrderId=9786bffc-996d-4553-aa33-f7e92c0b29d5&orderConsumeType=10&orderId=21140990160359583390&orderStatus=TRADE_SUCCESS&payFee=1&payTime=2014-09-05%2015:20:27&productCode=com.demo_1&productCount=1&productName=%E9%93%B6%E5%AD%901%E4%B8%A4&uid=100010&signature=1388720d978021c20aa885d9b3e1b70cec751496

发货接口说明:

  • 服务端在订单支付完成之后将立即通知到CP发货接口。 
  • 服务器通知CP发货时,若未接收到CP接口成功返回,该笔订单将重复通知3次。 
  • 服务器在重复3次通知CP发货的过程中,若都未收到CP的成功回复,订单将进入后台轮询通知发货。每次轮询将有3次的通知;第一次轮询为订单新建之后的15分钟;24小时之内每半小时轮询通知一次;24小时之后每小时轮询通知一次;7天之后不再通知,CP可通过订单查询接口进行主动对账补偿。 
  • 服务器收到CP接口返回: {"errcode":200,"errMsg":"success"}  json串时将不再对该笔订单做重复通知。 
  • 服务器若对某笔订单重复通知,则CP需自行判断是否已经发货,若已发货则接口直接返回:  {"errcode":200,"errMsg":"success"}  json串,当作成功处理。 该接口优先GET方式,返回信息全部为json结构。 该接口中所有签名编码都为UTF-8,且加密结果均转换为小写字符。 

3、订单信息查询(服务端)[选接]

接口描述:服务端开发者调用该接口,可以查询具体订单信息。

  • 接口地址:https://mis.migc.xiaomi.com/api/biz/service/queryOrder.do
  • 请求方式:POST
  • Headers:Content-Type: application/x-www-form-urlencoded

请求参数:

参数名参数类型描述
appIdstring游戏ID
cpOrderIdstring开发商订单ID
uidstring用户ID
signaturestring签名,签名方法见后面说明

返回参数:

参数名称是否必须参数类型描述
appIdstring游戏ID
cpOrderIdstring开发商订单ID
cpUserInfostring开发商透传信息
uidstring用户ID
orderIdstring游戏平台订单ID
orderStatusstring订单状态,TRADE_SUCCESS代表成功WAIT_BUYER_PAY代表未支付REPEAT_PURCHASE订购关系已经存在
payFeestring支付金额,单位为分,即0.01米币
productCodestring商品代码
productNamestring商品名称
productCountstring商品数量
payTimestring支付时间,格式 yyyy-MM-dd HH:mm:ss
signaturestring签名,签名方法见后面说明

返回参数例如:

{
"signature": "eb30240cff8c66f856ec0e48354aa670b8cf037f",
"uid": "100010",
"appId": 2882303761517239300,
"cpOrderId": "9786bffc-996d-4553-aa33-f7e92c0b29d5",
"productCode": "com.demo_1",
"orderStatus": "TRADE_SUCCESS",
"productName": "%E9%93%B6%E5%AD%901%E4%B8%A4",
"productCount": 1,
"orderConsumeType": "10",
"orderId": "21140990160359583390",
"payFee": 1,
"payTime": "2014-09-05 15:20:27"
}

四.广告API

广告SDK接入文档

五、保存桌面API

小游戏中为开发者提供了可按需提示用户将小游戏icon保存到桌面的能力,可使用积分激励、复活等方法刺激用户保存;
请开发者一定实现该逻辑,保存icon后用户才会更方便找回并可push,从而提升留存。
请开发者不要随意使用,最终上线时会审核,如发现滥用将驳回。
参考效果如下:
提示保存桌面文档
该接口暂适用小米,联盟在统一进度中,使用前需要通过qg.getProvider判断当前是否为小米平台,非小米平台请处理不要调用避免发生错误;
Shortcut shortcut = qg.getShortcut();
获取全局唯一的Shortcut对象
具体实现建议如下:
shortcut.hasInstalled(OBJECT)
询问桌面是否有icon
可在进入游戏时获取桌面icon是否创建,如已创建可继续提示“看视频复活”,未创建提示“保存桌面复活“
参数:
示例:
shortcut.hasInstalled({ success: function() { console.log('handling success') } })
shortcut.install(OBJECT)
用户点击时提示保存
弹窗文案可修改,每行18个字最多请设置3行,请填充文案后看下效果。
假如用户选择“7天不再提醒”且点击“取消”时,框架会返回创建失败code“201”,请合作方保存该提示避免下次调用无反应,后续会将code分开。

参数名类型必填说明
successFunction成功回调。参数:true 已创建,false 未创建
failFunction失败回调
completeFunction执行结束后的回调

参数:

参数名类型必填说明
message 1030+String权限弹窗上的说明文字,用于向用户解释为什么要创建桌面图标
successFunction创建成功
failFunction创建失败
completeFunction执行结束后的回调

fail 返回错误代码

错误码说明
201用户拒绝创建

示例:

shortcut.install({ success: function() { console.log('handling success') } })
属性

名称参数类型是否可读是否可写描述
systemPromptEnabled 1020+ Boolean是否开启系统快捷方式创建弹窗,默认 true。不会持久化,只对当前运行有效

示例:

shortcut.systemPromptEnabled = false let enabled = shortcut.systemPromptEnabled console.log('system prompt enabled: ' + enabled)

六、退出游戏API

qg.exitApplication(Object object)

参数 Object object

属性类型默认值必填说明
successFunction接口调用成功的回调函数
failFunction接口调用失败的回调函数
completeFunction接口调用结束的回调函数(调用成功、失败都会执行)

七、签名相关

1、生成算法

生成带签名字符串表中各参数按字母顺序排序(不包含signature),如果第一个字母相同,按第二个字母排序,依次类推。排序后拼接成par1=val1&par2=val2&par3=val3的格式,所生成的字符串即为待签名的字符串。没有值的参数请不要参与签名。 由于有些数据根据HTTP协议需求,需要进行URLencoding,这样接收方才可以接收到正确的参数,但如果这个参数参与签名,那么待签名字符串必须 是字符串原值而非URLencoding的值。

例如:

在订单通知接口收到的回调信息如下:

appId=2882303761517239138&cpOrderId=9786bffc-996d-4553-aa33-f7e92c0b29d5&orderConsumeType=10&orderId=21140990160359583390&orderStatus=TRADE_SUCCESS&payFee=1&payTime=2014-09-05%2015:20:27&productCode=com.demo_1&productCount=1&productName=%E9%93%B6%E5%AD%901%E4%B8%A4&uid=100010&signature=1388720d978021c20aa885d9b3e1b70cec751496

这时候需要对每个参数的值进行URLdecode,decode后的字符如下:

appId=2882303761517239138&cpOrderId=9786bffc-996d-4553-aa33-f7e92c0b29d5&orderConsumeType=10&orderId=21140990160359583390&orderStatus=TRADE_SUCCESS&payFee=1&payTime=2014-09-05 15:20:27&productCode=com.demo_1&productCount=1&productName=银子1两&uid=100010&signature=1388720d978021c20aa885d9b3e1b70cec751496

而需要进行签名的字符串为:

appId=2882303761517239138&cpOrderId=9786bffc-996d-4553-aa33-f7e92c0b29d5&orderConsumeType=10&orderId=21140990160359583390&orderStatus=TRADE_SUCCESS&payFee=1&payTime=2014-09-05 15:20:27&productCode=com.demo_1&productCount=1&productName=银子1两&uid=100010

签名算法以AppSecret作为key,使用hmac-sha1带密钥(secret)的哈希算法对代签字符串进行签名计算。签名的结果由16进制表示。hmac-sha1 带密钥(secret)哈希算法的实现请参考

2、编码约定

任何涉及到需要使用非ASCII码字符的地方,统一使用UTF-8编码。

3、签名示例

HmacSHA1验证 在线加密解密

HmacSHA1 算法java实现参考






上一篇:
下一篇: