联想端游联运SDK接入指南

2024-05-26 09:20

本文主要是介绍联想端游联运SDK接入指南,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1. 接入流程

本文档主要介绍了 联想PC游戏SDK接入流程、联想游戏提供的功能、接入注意事项等。

1.1. 接入方式

1. 联想游戏SDK2.1版本支持“账号+防沉迷+支付”接入方式;

a. 联想提供账号注册、登录等能力

b. 联想提供防沉迷服务

c. 联想提供游戏内支付

1.2. 对接流程

1. cp的游戏接入主要流程包括:

a. 联系联想运营,提供游戏和公司信息,获取cpid、游戏id、登录key(用于登录和防沉迷校验)、支付key(仅用于支付)

b. 签订合同

c. 接入联想游戏SDK

d. 提包测试、提供物料、上线运营等;

1.3. SDK下载地址

链接: https://lecloud.lenovo.com/share/37a7r4fRuzjNta1EE

提取码:ep4b

2. 接入说明

2.1. 登陆接入

2.1.1. 登录物料准备

设计图准备

CP需提供以下物料至联想游戏运营

1. 游戏背景图,尺寸350*400

2. 游戏LOGO,尺寸106*48

3. 游戏官网地址

登录原型如下:

备案号准备

CP需要向国家新闻出版署申请备案号,并且在版署防沉迷后台与联想游戏防沉迷备案信息绑定。联想游戏防沉迷备案信息:

公司名称:北京神奇工场科技有限公司

统一社会信用代码:91110108318338204D

2.1.2. 登录流程说明

a) 集成联想网游 SDK,登录取得token

b) 将获取到的 token 传递到游戏服务器

c) 通过【获取用户信息接口】验证 token的有效性,同时获取用户的唯一 ID

2.2. 支付接入

2.2.1. 支付模式说明

联想SDK支持两种支付接入,可任选其中一种进行接入,两者的区别如下:

模式一:接入支付h5

联想游戏SDK仅提供支付H5页面,CP需要将支付相关参数拼接至支付url地址后,并自行开发页面容器展示该url。

模式二:直接调起SDK

联想游戏SDK提供支付页面,CP仅需要将相关参数上传,调用联想游戏SDK。

2.2.2. 模式一接入说明

2.2.2.1. 支付流程说明

2.2.2.2. 准备页面容器

1. 联想PC游戏SDK提供游戏内支付页面,支持用户直接在游戏内支付。使用该支付页时,游戏CP需要提供:

a. 页面容器:提供526px*398px的页面容器,在游戏内拉起web页;

b. 窗口标题栏:由游戏提供,下图为建议标准样式,接入资料zip包中附带标准素材;

2.2.2.3. 拼接参数至支付页url

接口说明

cp方拉起联想支付页URL时需要携带以下参数:(所有参数都需要进行urlEncode编码)

请求参数
urlhttps://hd.lenovomm.com/front-wdsdk/pay/index.html
接口协议HTTP[S] GET
请求参数参数名参数类型是否必填说明
partnerCPIDstring*是由联想运营提供
notifyUrl异步通知地址string*是CP方提供
outTradeNo订单号string双方对账使用,如未传订单号,会生成唯一订单号,后续对账以联想订单号为准。
appId游戏idint*是由联想运营提供(gameId)
totalFee指定金额int最小为1元,精确到小数点后2位。不传则用户可自定义充值金额
subject商品名称string*是商品的名称,例:月卡、元宝、钻石等(需要URL编码)
account用户账号string*是用户账号,需要脱敏
extraCommonParam透传参数json格式jsoncp业务透传参数
server区服名称string*是区服名称(需要URL编码)
role角色名称string*是角色名称(需要URL编码)
bizid游戏备案号string*是游戏备案号
tgt用户登录成功时返回的TGTstring*是用户唯一标识
sign使用支付参数生成的验签字符串string*是参考7.1.4签名备注
sign_type签名类型string*是签名类型固定值RSA2

2.2.3. 模式二接入说明

2.2.3.1. 支付流程说明

2.2.3.2. 传参说明

cp方拉起联想SDK时需要传递以下参数:

请求参数参数名参数类型是否必填说明
notifyUrl异步通知地址string*是CP方提供
outTradeNo订单号string双方对账使用,如未传订单号,会生成唯一订单号,后续对账以联想订单号为准。
totalFee指定金额int最小为1元,精确到小数点后2位。不传则用户可自定义充值金额
subject商品名称string*是商品的名称,例:月卡、元宝、钻石等
extraCommonParam透传参数json格式jsoncp业务透传参数
server区服名称string区服名称
role角色名称string角色名称

2.3. 防沉迷

2.3.1. 防沉迷流程说明

1. 联想PC游戏SDK提供防沉迷的接入能力,其中用户登陆时的实名校验、实名认证、未成年游戏限制均已包含在登陆的流程内,无需CP接入和二次开发。用户支付时的实名校验和消费限制包含在支付的流程内,无需CP接入和二次开发。

2. 但针对游戏内未成年用户时长超出国家游戏时长规定的场景,游戏SDK不提供直接踢出游戏的能力,而是提供一个【用户防沉迷接口】,可查询用户在当前时间是否可玩游戏,CP需要通过调用接口轮询用户在当前时间是否可玩游戏,若不可玩游戏,需要将用户踢出。

3. 联想端游SDK API介绍

3.1. 登陆的调用方式

1. 端游SDK以dll形式提供,名称为PCGameSDK.dll,可使用动态或静态加载方式使用该dll。ludp.dll为PCGameSDK.dll提供功能支持,并配有相关导入库和头文件PCGameSDK.lib,PCGameSdk.h。

2. PCGameSDK.dll使用说明:

a) 接口使用说明:

i. PCGameSDK.dll,ludp.dll需放在调用该dll的exe同级目录下。

ii. 调用LGSDKInit,该接口用来设置回调,用于接收SDK返回的数据。参数为LGSDKCallBack callback,其中

typedef bool(*LGSDKCallBack)(wchar_t* in_param);

接口返回说明 :

错误码说明
true成功
false失败

iii. 调用LGSDKLogin,该接口用来弹出登录窗口。传入参数为json字符串,如下:

 调起登录器参数:

参数说明
cpid联想游戏运营分配
appid游戏id,联想游戏运营分配
bizid游戏备案码,CP向国家新闻出版署申请
Key联想游戏运营分配

登陆成功后回传参数:

参数说明
TGT发起支付时携带,作为用户标识
Token用户token,结合Realm查询联想用户id作为用户唯一标识
Age用户年龄,防沉迷时携带

 接口返回说明 :

错误码说明
0成功
10初始化接口未调用
20登录窗已存在
30参数错误

b) 接口调用时机:

CP启动时应首先调用LGSDKInit,LGSDKLogin接口,弹出登录框,登录成功以后,再走CP 后续流程。

c) 接口调用示例代码:

std::wstring strParam = 
L"{\"appid\":\"此处替换成appid\",
\"cpid\":\"此处替换成cpid\",
\"bizid\":\"此处替换成bizid\",
\"key\":\"此处替换成key \"}";
int nSize = strParam.size();
bool bRet = LGSDKInit(SDKCallBackFunAsync);
wchar_t *pwszBuffer = new wchar_t[nSize + 1];
ZeroMemory(pwszBuffer, nSize + 1);
tcscpy_s(pwszBuffer, nSize + 1, strParam.c_str());
int statusCode = LGSDKLogin(pwszBuffer);
delete[] pwszBuffer;
pwszBuffer = nullptr;
return 0;

其中回调函数可以接收到SDK返回的数据,数据格式为json。

bool CTest::SDKCallBackFunAsync(wchar_t* in_param)
{if (in_param == nullptr)return false;::MessageBox(NULL, in_param, L"提示信息", MB_OK);return true;
}

3.2. 支付的调用方式

1.支付接口定义:

extern "C"  PCGAME_SDK_API int LGSDKPay(wchar_t* in_param);

入参:json格式 具体key值定义结构参考 2.2.3.2

返回说明:0- 成功 , 30-参数错误

2使用说明:用户登录成功后才能调用该接口  

3接口调用示例:

std::wstring strPayContent = L"{\"notifyUrl\":\"https://api.game.com\",  \
\"subject\" : \"1元礼包",\"totalFee\" : 1}";
int nRet = LGSDKPay((wchar_t*)strPayContent.c_str());                              

4. 服务端API介绍

4.1. 服务端获取用户信息接口

1. 请求地址https://auth.lenovomm.com/game-ms-id-auth-core/api/a ccount/identify

2. 请求类型:POST

3. Content-type: application/json

4. 参数(json字符串)

名称字段是否必填说明
标识realmY固定值,传pcgame.lenovomm.com
tokenlpsustY
当前时间戳毫秒值timestampY
随机字符串nonceY
游戏idappIdY
签名signY请看7.1.4签名备注
签名类型sign_typeY默认值RSA2

5. 返回值格式

{

 "code": 10000,    //10000表示正常,非10000表示业务异常

 "data": {},    //返回的数据

 "message": "string"  //错误提示信息

}

6. http状态码:

200-成功

400-缺少参数

401-签名错误

500-业务异常

4.2. 服务端支付通知接口

接口说明

用于通知用户支付状态。

请求参数

url游戏方接收支付通知URL (即下单时传递的notifyUrl参数)
接口协议HTTP[S] (POST)
请求参数参数名参数类型是否必填说明
sign签名string*是支付通知回调签名,参加下方签名规则
outTradeNo商户网站唯一订单号string*是商户系统内部订单号,同一商户下唯一
subject商品名称string*是商品的名称,例:月卡、元宝、钻石等
body商品描述string对一笔交易的具体描述信息
tradeNo支付宝、微信交易号string该交易在支付宝、微信系统中的交易流水号
tradeStatus交易状态string支付状态,TRADE_SUCCESS ——交易成功,其他值为失败状态
totalFee交易金额number该笔订单的资金总额,单位为元,精确到小数点后两位。
extraCommonParam公用回传参数string*是用于商户回传参数,该值不能包含“=”、“&”等特殊字符。如果用户请求时传递了该参数,则支付通知接口会回传该参数。

通知接口返回

1.  HTTP状态码为200,表明调用成功。其他状态为失败。

2.  接口返回“success”,则代表交易成功,返回其他值则代表通知失败。

3.  针对通知失败的订单,会定时发起重试请求。

支付签名规则

1.  参数排序

所有请求参数剔除sign以及值为空的参数,按照参数字母升序排

2.参数拼接

将排序后的参数与其对应值,按照参数=参数值的格式,并用“&”字符将其拼接成串,在最后追加上支付key。

3. 对拼接后字符串做MD5并转小写。

4. 支付key

支付接口中所用的key与登录接口的key不同,请注意区分

支付签名示例

支付key :2ppfQCHMWid1

明文字符串:outTradeNo=465215151893&partner=208810156864&subject=game &totalFee=102ppfQCHMWid1

加密字符串:1bbdebc58f85e8b6f83797109ce76d89

4.3. 服务端用户防沉迷接口

调用方法:

1. 请求路径https://vb.lenovomm.com/game-ms-user-identify-core/api/underagegamepreventaddiction

2. 请求类型:POST

3. Content-type: application/json

4. Header参数

名称字段是否必填说明
标识realmY固定值,传pcgame.lenovomm.com(不参与签名)
lpsusttokenY(不参与签名)

5. body参数(json字符串)

名称字段是否必填说明
当前时间戳毫秒值timestampY
随机字符串nonceY
游戏idappIdY
签名signY请看7.1.4备注
签名类型sign_typeY默认值RSA2
年龄ageY

6. 返回值格式

{

 "code": 10000, //10000表示正常,非10000表示业务异常

 "data": {

   "preventAddictionMsg": "限制登录提示信息",

   "preventAddictionType": 1-不限制登录,2限制登录

 },

 "message": "Success"

}

7. http状态码:

200-成功

400-缺少参数

401-签名错误

500-业务异常

5. SDK版本更新日志

5.1. V2.1.0内容变更

变更项接入说明
1、登录页置顶展示,且满足登录窗口拖动游戏登录页置顶在windows页面最顶层
2、获取用户信息接口新增返回年龄返回参数新增年龄字段
3、收银台支付封装,可直接调起联想SDK完成支付流程V2.1.0新增内容,V2.0.0可满足支付的情况下,无需更新

6. 接入注意事项

登录key和支付key不同,请区分使用

7. 其他说明

7.1. 安装包提供

1. 安装包需要同时提供2种形式:

a. 整包:需要将所需资源全部打包到一个安装程序中,安装过程无需下载额外资源;

b. 下载器:提供游戏下载器,安装时通过下载器下载游戏资源;

7.2. 游戏的更新

1. 更新资源小于1G的版本更新在游戏内完成,无需向联想游戏提供游戏更新包;

2. 更新资源大于1G的版本更新时,除游戏内更新外,还需要重新向联想游戏提供安装包,并提供版本更新说明;

3. 下载器如有更新,需要重新提供安装包;

7.3. 游戏数据

1. 游戏方需要提供游戏数据,包含:游戏安装完成数、游戏激活数、游戏卸载数、用户游戏局数分布、用户购买道具信息分布;

2. 建议以后台形式提供;

7.4. 签名备注

开发者需要自行实现签名,签名过程如下:

1.筛选并排序

获取所有请求参数,不包括字节类型参数,如文件,字节流,不包括请求路径中占位符的值,剔除sign字段,剔除值为空的参数,并按照第一个字符的键值ASCII码递增排序(字母升序排序),如果遇到相同字符则按照第二个字符的键值ASCII码递增排序,以此类推。

2.拼接

将排序后的参数与其对应值,组合成“参数=参数值”的格式,并且把这些参数用&字符连接起来,此时生成的字符串为待签名字符串。

3.签名

使用各自语言对应的SHA256WithRSA(对应sign_type为RSA2)或SHA1WithRSA(对应sign_type为RSA)签名函数利用开发者私钥对待签名字符串进行签名,并进行Base64编码。

4.拼接参数

将生成的签名赋值给sign参数,拼接到请求参数中,再将每个参数做urlencode(utf-8编码)后发起请求即可。 注: 请求类型为:application/x-www-form-urlencoded才需要编码,application/json 不用编码

示例:

一、签名准备

1. 原始内容: 【classifyCode=PC&v=&sign_type=RSA2&appId=20201028】

2. 签名私钥: 【MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQClcxcmpvWF8l0rjHtqmqCGXnzqnADYh3yirMlOVW+F8A+BboJfrOiyddwjLnNhwa02bSLu8jKdJ5QDLTKLvgQdQsEQviO9h22nu6ouFEfBT4rbxlc83B3vT1FZaT00DAHlATKDCARbjrQ0EEr57bkWX2SSKFEEOBCA06KwituJk/fGi6oNAD+e/KMxfPgdjzM2fwul2YxV1zHCSc/Xc7EBjjY/0tk/+/TehIBoE0zEpyzUXLVKt71i8qw0ygiRFO1Q3NTKT+Ht4ouK34827QvMpTQ/I0MGbdAtjZDLY6SNi1EoHp3X9xdr1kvP8XAggTiHG5lmL3EK62vTcbsA9KjzAgMBAAECggEBAJCNNH3tw3frICILVEz4miWr6kHkWQzVmzxZ8GvDU3PXIQT5s2i6HnjFZrdKPz76w0ZZJftUmooZ6US5OX9EXj3ec+YX6gwOhezVlsM5rtOjlnOcH94phvHt/+o5e2K81u7pE+PNnlkMHj+auJcSbvKwF6NnHBmujiSwQ2UxfMv+lwaazrTu/FFPFCMGtYkxeqC9Iwe9qJAQURCgE4lgzMuM2rUZqAPhZ298+c/lbovNWtV9tGb8jdiKprpUDuvYnJ4JHkUq5+V7WCtESzBUZVrXv0wkie2RJkN/OsirtwYFk+0MjX1sH4ciJFhY9atPfD1dZYBhhZezAQQuOU4ja1kCgYEA0Ia0Zo9z1GnWQbSyrdYwj9CgSm/fiZSU1nhVqmMJp3GWb9R42nMRcNk9Op4spreENCK1r55BZzmCMs4KIj9oiJz0ckczUgWoRHFUDwd5qWoMdCWlnJuQeFabd6bPxZRmXShIhIy1NQbk2lzIq4bpWKgEQ2TKSDaQ8S2JZj3q890CgYEAyx3M0pndOrpqyKYaJIJKsb+jX4NUSmFTzlWtASGKNG2MQeWwAHKkWi2GEv2g2w/XijNUL4FCkGwCT0o4v1HXRrs5LWRXislFHMDHAIdwrSWM5bouPesXDe67tC5hTmu8UhGsUfemB086uUgkqwZv23x0m9ZvHcfogN3FQS6faw8CgYBl6qB7S/uhwsSsQoPeAMSlVaMyHnGTzaHdHN1JtLQAObz8FU2n/vt0O0j4wFw0c5dS3/AK0H9I00u2Rwue53zQ4F19CR2lJgyyvu0Fl3K4AZPqpIfH/iRjHHlJxqbf+4L4Xvrqhdb+/sqViyms4/hik2PaCIXxO3Il3kq8RODzpQKBgQDCizlqIcs+e9zZcBasD0thsm7VheFPGKd/gpog8jIAg0iKuWd5FlUKtn2rZNgT2bmVehJRKdpKn9kafrmZrdamvZ5HNsuOd7bFknNIs3EdtlCcnFW8IpbDVnzcWGwFA7WtWZYWMEAK0j0px8qvMIwkyrCZrqpg+N9dxowvIWu5ywKBgGbULkj4HIuMOhCb68R1OLf2n8VloeuTnX0mHJWqvN2pFt2K8lm2ZWX4GpC09QZXw/1C0VM1syKsNbUe/2sprF0FYzbRrdvPk2yjvJbus5XhnPL5CW9zOUyu+KIHwsOOAVoNn37j3sZnQ3unS+it4Mpno+LbblCffGO/Czg68BX2】

二、生成待签名字符串:

1. 剔除参数名(和参数值)前后的空格: (正常业务下,参数值前后不应含有空格) 【classifyCode=PC&v=&sign_type=RSA2&appId=20201028】 删除空字段【v】

2. 剔除空值参数: 【classifyCode=PC&sign_type=RSA2&appId=20201028】

3. 排序: 【appId=20201028&classifyCode=PC&sign_type=RSA2】

三、生成签名: 【DZw/dCtCgRkvszdCRKekzKDe2m+J8pZxh4eCk1DNOXE7SKq4TE6pm/z7N49LaSauEpXyX4MJR5VZSRUeu8avO3K4ma6MGcDMKg2lWD7MLwoA9O0Q7QXVlY04ytwlXw9GVya8oL+Dyka0CspTSPJUZtKf5oJRK03XMRyWJw6+ERJuMb2HptgknNPYhsm7B2SqCyDRaVUa69h9NxIxhm17ora3RNbSkThnbkaFtxAXSol7GGWHHng23uekv8MJSalwFSZS4tuPhc4EMIAigC57+pdntgGlzmHj9AfnQ1FODV9bk0cJYDaK7eYUxUZx2T/OfKtzawKoM+qLHTw27fB/1g==】

7.5. SDK兼容性说明

SDK仅支持Win10以上操作系统

原文地址:https://open.lenovomm.com/developer/doc?id=1689213143070081026

联想开放平台地址:联想开放平台

联想开发者专属QQ客服(工作日9:30-18:00):联想开发平台首页右侧悬浮的在线客服聊天入口可直接会话,无需添加好友。也可搜索官方客服QQ号2881414004。

联想应用商店微信公众号:

这篇关于联想端游联运SDK接入指南的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1004059

相关文章

uniapp接入微信小程序原生代码配置方案(优化版)

uniapp项目需要把微信小程序原生语法的功能代码嵌套过来,无需把原生代码转换为uniapp,可以配置拷贝的方式集成过来 1、拷贝代码包到src目录 2、vue.config.js中配置原生代码包直接拷贝到编译目录中 3、pages.json中配置分包目录,原生入口组件的路径 4、manifest.json中配置分包,使用原生组件 5、需要把原生代码包里的页面修改成组件的方

打造坚固的SSH防护网:端口敲门入门指南

欢迎来到我的博客,代码的世界里,每一行都是一个故事 🎏:你只管努力,剩下的交给时间 🏠 :小破站 打造坚固的SSH防护网:端口敲门入门指南 前言什么是端口敲门端口敲门的优点1. 增强安全性2. 动态防火墙规则3. 隐匿服务4. 改善日志管理5. 灵活性和兼容性6. 低资源消耗7. 防御暴力破解和扫描8. 便于合法用户访问9. 适用于不同类型的服务 端口敲

Chromium 调试指南2024 - 远程开发(下)

1. 引言 在《Chromium 调试指南2024 - 远程开发(上)》中,我们探讨了远程开发的基本概念、优势以及如何选择合适的远程开发模式。掌握了这些基础知识后,接下来我们将深入了解如何在远程环境中高效地进行Chromium项目的调试工作。 调试是开发过程中至关重要的一环,特别是对于像Chromium这样复杂的大型项目。远程调试不仅可以充分利用远程服务器的强大计算资源,还能确保开发环境的一致

关于微信没有接入鸿蒙NEXT的思考

6月21日,纯血鸿蒙发布,国内的质疑声终于停止,不再被人喊叫换皮 Android 了.就连编程语言都是华为自研的。 可是发布会后微信却成了热点,因为余承东在感谢了一圈互联网企业,如:淘宝、支付宝、美团、京东、抖音、今日头条、钉钉、小红书、微博、B站、高德、WPS等等. 唯独没有感谢腾讯. 中国互联网巨头只有哪么几家,腾讯、阿里、字节、拼多多、美团、百度、京东、华为 他们这些派系又诞生了无数

在Qt5中创建、读取和写入JSON文件的完整指南

Qt5 提供了一个非常方便的JSON解析器,使得在C++中处理JSON数据变得非常简单。本文将详细介绍如何在Qt5中创建、读取和写入JSON文件。 读取JSON文件的示例 假设我们有一个名为test.json的JSON文件,内容如下: {"appDesc": {"description": "SomeDescription","message": "SomeMessage"},"appNam

写给Android开发的Binder指南

为什么选用binder? Linux 已经提供了管道、消息队列、共享内存和 Socket 等 IPC 机制。那为什么 Android 还要提供 Binder 来实现 IPC 呢?主要是基于性能、稳定性和安全性几方面的原因。 性能 Socket 作为一款通用接口,其传输效率低,开销大,主要用在跨网络的进程间通信和本机上进程间的低速通信。 消息队列和管道采用存储-转发方式,即数据先从发送方缓存区拷

C++初学者指南第一步---14.函数调用机制

C++初学者指南第一步—14.函数调用机制 文章目录 C++初学者指南第一步---14.函数调用机制1.记住:内存的结构2.函数调用是如何工作的3. 不要引用局部变量4. 常见编译器优化5. Inlining内联 1.记住:内存的结构 堆(自由存储) 用于动态存储期对象,例如 std::vector 的内容。空间大,可以用于大容量存储(大多数用于主内存)。可以根据需要分配

如何高效地为pip换源:详细操作指南

在Python开发中,pip是我们不可或缺的包管理工具。然而,默认的官方源下载速度较慢,尤其是在国内使用时可能会遇到网络问题。为了提高下载速度,我们可以通过更换国内的镜像源来解决这一问题。本文将详细介绍如何高效地为pip换源,让你的Python开发体验更加畅快。 一、什么是pip换源? pip默认使用的是Python官方的包管理仓库,即https://pypi.org/simple。由于网络等

导入别人的net文件报红问题sdk

1. 使用cmd命令 dotnet --info 查看自己使用的SDK版本 2.直接找到项目中的 global.json 文件,右键打开,直接修改版本为本机的SDK版本,就可以用了

Linux下手动查杀木马与Rootkit的实战指南

模拟木马程序的自动运行 黑客可以通过多种方式让木马程序自动运行,包括: 计划任务 (crontab):通过设置定时任务来周期性地执行木马脚本。开机启动:在系统的启动脚本中添加木马程序,确保系统启动时木马也随之运行。替换系统命令:通过替换系统常用的命令,如pwd,来触发木马的执行。 权限维持脚本编写 攻击者可能会编写权限维持脚本,这些脚本通过父进程检测子进程的存在,如果子进程被删除,父进程将