联想端游联运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

相关文章

Retrieval-based-Voice-Conversion-WebUI模型构建指南

一、模型介绍 Retrieval-based-Voice-Conversion-WebUI(简称 RVC)模型是一个基于 VITS(Variational Inference with adversarial learning for end-to-end Text-to-Speech)的简单易用的语音转换框架。 具有以下特点 简单易用:RVC 模型通过简单易用的网页界面,使得用户无需深入了

Java 创建图形用户界面(GUI)入门指南(Swing库 JFrame 类)概述

概述 基本概念 Java Swing 的架构 Java Swing 是一个为 Java 设计的 GUI 工具包,是 JAVA 基础类的一部分,基于 Java AWT 构建,提供了一系列轻量级、可定制的图形用户界面(GUI)组件。 与 AWT 相比,Swing 提供了许多比 AWT 更好的屏幕显示元素,更加灵活和可定制,具有更好的跨平台性能。 组件和容器 Java Swing 提供了许多

基于UE5和ROS2的激光雷达+深度RGBD相机小车的仿真指南(五):Blender锥桶建模

前言 本系列教程旨在使用UE5配置一个具备激光雷达+深度摄像机的仿真小车,并使用通过跨平台的方式进行ROS2和UE5仿真的通讯,达到小车自主导航的目的。本教程默认有ROS2导航及其gazebo仿真相关方面基础,Nav2相关的学习教程可以参考本人的其他博客Nav2代价地图实现和原理–Nav2源码解读之CostMap2D(上)-CSDN博客往期教程: 第一期:基于UE5和ROS2的激光雷达+深度RG

消除安卓SDK更新时的“https://dl-ssl.google.com refused”异常的方法

消除安卓SDK更新时的“https://dl-ssl.google.com refused”异常的方法   消除安卓SDK更新时的“https://dl-ssl.google.com refused”异常的方法 [转载]原地址:http://blog.csdn.net/x605940745/article/details/17911115 消除SDK更新时的“

如何掌握面向对象编程的四大特性、Lambda 表达式及 I/O 流:全面指南

这里写目录标题 OOP语言的四大特性lambda输入/输出流(I/O流) OOP语言的四大特性 面向对象编程(OOP)是一种编程范式,它通过使用“对象”来组织代码。OOP 的四大特性是封装、继承、多态和抽象。这些特性帮助程序员更好地管理复杂的代码,使程序更易于理解和维护。 类-》实体的抽象类型 实体(属性,行为) -》 ADT(abstract data type) 属性-》成

使用条件变量实现线程同步:C++实战指南

使用条件变量实现线程同步:C++实战指南 在多线程编程中,线程同步是确保程序正确性和稳定性的关键。条件变量(condition variable)是一种强大的同步原语,用于在线程之间进行协调,避免数据竞争和死锁。本文将详细介绍如何在C++中使用条件变量实现线程同步,并提供完整的代码示例和详细的解释。 什么是条件变量? 条件变量是一种同步机制,允许线程在某个条件满足之前进入等待状态,并在条件满

用了虚拟机后,本机摄像头打不开了(联想电脑thinkpad)

虚拟机有摄像头,我断开了连接,现在本机的摄像头打开就是一个锁 我先把虚拟机的摄像头关了 然后把本机的vm usb关闭了 Win+R),输入services.msc,找到VMware USB Arbitration Service,确保其状态为“关闭 然后打开桌面助手 开启 参考: 联想知识库

Java 入门指南:Java 并发编程 —— 并发容器 ConcurrentLinkedDeque

文章目录 ConcurrentLinkedDeque特点构造方法常用方法使用示例注意事项 ConcurrentLinkedDeque ConcurrentLinkedDeque 是 Java 并发工具包(java.util.concurrent 包)中的一个线程安全的双端队列(Deque)实现,实现了 Deque 接口。它使用了链表结构,并且针对高并发环境进行了优化,非常适合

使用Nginx部署前端Vue项目的详细指南

在本文中,我们将详细介绍如何使用Nginx部署一个前端Vue项目。此过程涵盖Vue项目的构建、Nginx的安装与配置、以及最后的项目启动。下面是步骤的详细说明。 步骤 1: 准备你的Vue项目 确保你已经创建并构建了一个Vue项目。如果你尚未创建Vue项目,可以使用以下命令创建一个: # 安装Vue CLInpm install -g @vue/cli# 创建一个新的Vue项目vue c

入门指南 | Datavines 安装部署篇

摘要:本文主要介绍基于源码部署 Datavines 和执行检查作业,内容主要分为以下几个部分: 平台介绍快速部署运行数据质量检查作业 Datavines 的目标是成为更好的数据可观测性领域的开源项目,为更多的用户去解决元数据管理和数据质量管理中遇到的问题。在此我们真诚欢迎更多的贡献者参与到社区建设中来,和我们一起成长,携手共建更好的社区。 https://github.com/dat