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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/644298.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

[MRCTF2020]Xor

32位程序 主要逻辑 flagMSAWB~FXZ:J:tQJ"N bpdd}8g for i in range(len(flag)):print(chr(ord(flag[i])^i),end)

Nature Communications | 柔性半导体器件的大规模集成(柔性半导体器件/柔性电子)

韩国中央大学Sung Kyu Park、 韩国成均馆大学Jong-Woong Kim和Yong-Hoon Kim团队,在《Nature Communications》上发布了一篇题为“Full integration of highly stretchable inorganic transistors and circuits within molecular-tailored elastic substrates on a large scal…

【OpenGL实践12】关于缓存区Framebuffer的运用

文章目录 一、说明二、帧缓冲区三、创建新的帧缓冲区四、附属装饰4.1 纹理图像4.2 渲染缓冲区对象图像 五、使用帧缓冲区5.1 后期处理5.2 更改代码 六、后期处理效果6.1 色彩处理6.2 模糊6.3 Sobel算子 七、结论练习 一、说明 关于FrameBuffer的使用,是OpenGL的高级…

九、图形化脚本

多年来, shell脚本一直都被认为是枯燥乏味的。但如果你准备在图形化环境中运行脚本时,就未必如此了。有很多与脚本用户交互的方式并不依赖read和echo语句。 9.1 创建文本菜单 创建交互式shell脚本最常用的方法是使用菜单。提供各种选项可以帮助脚本用户…

从浮点数定义到FP8: AI模型中不同的数据类型

背景:AI模型中不同的数据类型对硬件算力和内存的需求是不同的,为了提高模型在硬件平台的吞吐量,减少数据通信带宽需求,往往倾向于将高位宽数据运算转向较低位宽的数据运算。本文通过重新回顾计算机中整数和浮点数的定义&#xff0…

从0开始带你成为Kafka消息中间件高手---第二讲

从0开始带你成为Kafka消息中间件高手—第二讲 那么在消费数据的时候,需要从磁盘文件里读取数据后通过网络发送出去,这个时候怎么提升性能呢? 首先就是利用了page cache技术,之前说过,kafka写入数据到磁盘文件的时候&…

Go微服务: Grpc服务注册在Consul的示例(非Go-Micro)

概述 现在,我们使用consul客户端的api来把GRPC服务实现注册到consul上,非Go-Micro的形式其实,consul官方提供了对应的接口调用来实现,golang中的consul/api包对其进行了封装我们使用consul/api来进行展示 目录结构 gitee.com/g…

微信小程序上线必备:SSL证书申请以及安装

一、认识ssl证书 1、ssl证书是什么? SSL证书,全称Secure Socket Layer Certificate,是一种数字证书,它遵循SSL(现在通常指TLS,Transport Layer Security)协议标准,用于在客户端&…

C++ vector类

目录 0.前言 1.vector介绍 2.vector使用 2.1 构造函数(Constructor) 2.1.1. 默认构造函数 (Default Constructor) 2.1.2 填充构造函数 (Fill Constructor) 2.1.3 范围构造函数 (Range Constructor) 2.1.4 拷贝构造函数 (Copy Constructor) 2.2 迭代器(Iterator) 2.2.…

封装了一个iOS水平方向瀑布流布局

首先查看效果图 是支持多分区的 思路就是和竖直方向上的瀑布流布局是一样的, 只不过这里记录的列是水平方向的,同时要记录下 当前最小的x 所在的列,其实原理和竖直方向上的是相同的 ,下面贴出代码 父类layout中的代码 // // …

08-Fortran基础--Fortran内置函数分类总结

08-Fortran基础--Fortran内置函数分类总结 0 引言1 Fortran内置函数1.1 常用到数学函数1.2 字符串函数:1.3 数组函数:1.4 数值查询函数1.5 文件操作函数: 2 结语 0 引言 Fortran是一种很古老的编程语言,但它仍然广泛使用于科学计算…

使用LoRA进行高效微调:基本原理

Using LoRA for efficient fine-tuning: Fundamental principles — ROCm Blogs (amd.com) [2106.09685] LoRA: Low-Rank Adaptation of Large Language Models (arxiv.org) Parametrizations Tutorial — PyTorch Tutorials 2.3.0cu121 documentation 大型语言模型&#xf…

基于地理坐标的高阶几何编辑工具算法(7)——矩形绘制

文章目录 工具步骤应用场景示意图算法原理工具步骤 点击矩形绘制工具,点击三个点完成矩形绘制。 应用场景 用于在地图上快速绘制任意方向的矩形。 示意图 算法原理 点第一个点确定矩形的一个角点P1,也作为平移后的坐标原点,生成平移矩阵。点第二个点P2,确定矩形的一条边…

Studio 3T 2024.3 (macOS, Linux, Windows) - MongoDB 的专业 GUI、IDE 和 客户端,支持自然语言查询

Studio 3T 2024.3 (macOS, Linux, Windows) - MongoDB 的专业 GUI、IDE 和 客户端,支持自然语言查询 The professional GUI, IDE and client for MongoDB 请访问原文链接:https://sysin.org/blog/studio-3t/,查看最新版。原创作品&#xff…

CentOS 7.9 邮箱部署——Postfix+Dovecot详细

PostfixDovecot 文章目录 PostfixDovecot资源列表基础环境一、部署DNS二、部署postfix和dovecot2.1、配置postfix2.2、配置dovecot2.3、创建邮件用户 三、发送邮件测试3.1、windows安装poxmail3.2、登录邮箱3.3、发送接收邮件 四、搭建SSL认证加密4.1、生成私钥4.2、生成公钥4.…

状态转换图

根据本章开头讲的结构化分析的第3条准则,在需求分析过程中应该建立起软件系统的行为模型。状态转换图(简称为状态图)通过描绘系统的状态及引起系统状态转换的事件,来表示系统的行为。此外,状态图还指明了作为特定事件的结果系统将做哪些动作(例如,处理数据)。因此,状态图提供了…

iMX6ULL 嵌入式linux开发 | 4G无线广播终端实现方案介绍

现有的有线广播,如村上的大喇叭,需要布线,施工麻烦。借助现有的4G网络,传输音频流完全没问题,4G网络结合流媒体技术和MQTT消息传递实现设备间的同步推拉流。这种方案可以避免有线布线的麻烦,同时实现4G无线…

基于springboot+vue的智慧外贸平台

开发语言:Java框架:springbootJDK版本:JDK1.8服务器:tomcat7数据库:mysql 5.7(一定要5.7版本)数据库工具:Navicat11开发软件:eclipse/myeclipse/ideaMaven包:…

Elasticsearch 分析器(内置分析器,自定义分析器,IK分析器)

Elasticsearch 分析器(内置分析器,自定义分析器,IK分析器) 内置分析器使用分析器自定义分析器中文分析器(IK分析器)安装使用添加词典 内置分析器 官网:https://www.elastic.co/guide/en/elasti…

如何确保大模型 RAG 生成的信息是基于可靠的数据源?

在不断发展的人工智能 (AI) 领域中,检索增强生成 (RAG) 已成为一种强大的技术。 RAG 弥合了大型语言模型 (LLM) 与外部知识源之间的差距,使 AI 系统能够提供更全面和信息丰富的响应。然而,一个关键因素有时会缺失——透明性。 我们如何能够…