Microi吾码:开源低代码开发平台的高效解决方案
Microi吾码是一款开源低代码开发平台,专注于通过流程引擎、接口引擎和界面引擎等核心功能,简化业务逻辑开发、提升效率和降低技术门槛。其界面引擎支持可视化拖拽式设计,流程引擎实现业务流程的自动化,接口引擎负责高效的数据交互,帮助开发者和企业快速构建灵活、高效的应用程序。无论是后台管理、动态表单生成,还是复杂业务场景整合,Microi吾码都能提供高效解决方案,真正做到开发便捷、灵活扩展。
Microi吾码:开源低代码开发平台的高效解决方案
- 一、什么是 Microi吾码?
- 二、Microi吾码的核心功能
-
- 一,界面介绍
- 二,流程引擎
- 三,接口引擎
-
- 【参数】:
- 【业务逻辑】:
- 【相关微信官方文档】:
- 四,界面引擎
- 三,Microi吾码总结
本文只做体验,不是广告
一、什么是 Microi吾码?
Microi吾码是一款面向开发者的开源低代码平台,旨在通过简化开发流程、提升开发效率来帮助开发者和企业快速搭建高效、灵活的应用程序。它集成了强大的界面引擎、打印引擎等功能,同时提供了开源版、个人版和企业版三种版本,满足不同用户群体的需求。
二、Microi吾码的核心功能
一,界面介绍
Microi吾码的界面以用户友好和简洁设计为核心,分为以下模块:
- 主导航栏:提供快速访问各核心功能的入口,包括流程引擎、接口引擎、界面引擎等。
- 工作台:用户可管理任务、流程和接口,实时查看执行状态。
- 日志模块:记录引擎运行日志,便于排查问题。
- 可视化编辑器:支持拖拽式的流程与界面开发,降低代码量。
支持自由选择好看的壁纸
二,流程引擎
流程引擎主要负责业务流程的自动化和可视化管理,支持流程建模、执行和监控,帮助开发者快速实现复杂业务逻辑。
功能:
- 支持可视化的流程设计,用户通过拖拽即可定义复杂流程。
- 支持条件分支、循环、定时任务等高级功能。
- 与接口引擎无缝对接,调用外部服务或触发内部逻辑。
- 提供实时流程监控,便于调试和优化。
适用场景:
- 数据处理自动化
- 业务审批流编排
- 系统间的任务联动
三,接口引擎
Microi吾码的接口引擎是其核心组件之一,负责在系统内外部之间进行数据交互和业务逻辑调用。通过标准化接口管理,实现不同模块、第三方系统与平台间的无缝对接,提升系统的集成性和扩展性。
功能:
- 支持多种协议(HTTP、WebSocket、gRPC等)与数据格式(JSON、XML、SOAP等)。
- 可对接第三方 API,统一接口管理。
- 提供接口调试工具,支持参数动态注入。
- 支持高并发与异步处理,保障接口性能。
参数:
- 接口路径、请求方法(GET/POST等)、Header 信息、Body 参数等。
- 业务逻辑:
- 对接用户的后端服务或 API,将流程中的数据流与外部系统进行交互。
- 相关微信官方文档:
- 如涉及微信支付、公众号或小程序的接口对接,可参考微信开发文档。
比如:[业务]小程序授权登陆或自动注册或绑定已有帐号
【参数】:
- OsClient、LoginCode(用于无感自动登陆)、Code(用于用户手动授权手机号后登陆 或自动注册 或绑定已有帐号)、
- Account(可选,用户登陆帐号,若传入了Account+Pwd,表示前端用户操作为【绑定到已有帐号】)
- Pwd(可选,用户登陆密码,若只传入密码或未传密码,表示前端用户操作为【没有帐号,自动注册新帐号】,未传密码则自动生成密码并返回到前端)
【业务逻辑】:
1、前端进入小程序时调用wx.login获取到code,然后以LoginCode参数调用此接口(此操作无感,无需用户做任何操作,进入小程序时即可执行)
2、此接口根据LoginCode获取到小程序的openid,判断此openid是否已绑定帐号,若已绑定则直接返回用户token登陆信息,小程序则已实现了自动登陆;若未绑定,则小程序需要授权注册
3、若上面openid未绑定账号,则前端用户需要手动点击@getphonenumber事件授权,同意后获取到code,然后以Code参数再次调用此接口。
4、此接口判断缓存中是否存在该小程序的AccessToken(有效期7200秒),若不存在,则通过【获取接口调用凭据】获取AccessToken,并存入缓存
5、根据前端传入的Code+AccessToken通过getuserphonenumber接口获取到真实的手机号。
6、判断上一步获取到的手机号是否存在用户,若已存在,则直接返回用户token登陆信息。
7、若上一步获取到的手机号不存在用户,则直接自动注册帐号,若前端未传入Pwd,则随机生成用户密码,注册成功后则返回到前端让用户自动记录,并且同时返回token登陆信息。
【相关微信官方文档】:
https://developers.weixin.qq.com/miniprogram/dev/api/open-api/login/wx.login.html
https://developers.weixin.qq.com/miniprogram/dev/OpenApiDoc/user-login/code2Session.html
if(!V8.Param.OsClient || (!V8.Param.LoginCode && !V8.Param.Code)){
V8.Result = { Code : 0, Msg : '参数错误!' };
return;
}
var appid = V8.SysConfig.MiniProgramAppId;//多小程序使用Unionid
var secret = V8.SysConfig.MiniProgramSecret;
var userOpenId = '';
//逻辑点1-2:如果传入了LoginCode
var loginCode = V8.Param.LoginCode;
if(loginCode){
var url = `https://api.weixin.qq.com/sns/jscode2session?appid=${appid}&secret=${secret}&js_code=${loginCode}&grant_type=authorization_code`;
var getOpenIdResult = V8.Http.Post({
Url : url
});
//httpResult = {"session_key":"qXTqR9aC+1Q1ZeLgBpbXqw==","openid":"ouVQI46Ckf_WzhYnjGIvtvzC2nwo"} {"errcode":40163,"errmsg":"code been used, rid: 6541428b-113748e3-1ee4a651"}
var getOpenIdResultObj = JSON.parse(getOpenIdResult);
if(getOpenIdResultObj.errmsg){
V8.Result = { Code : 0, Msg : `获取openid失败:${getOpenIdResultObj.errcode}-${getOpenIdResultObj.errmsg}`};
return;
}
if(!getOpenIdResultObj.openid){
V8.Result = { Code : 0, Msg : `获取到的openid为空:${getOpenIdResult}`};
return;
}
userOpenId = getOpenIdResultObj.openid;
var sysUserResult = V8.FormEngine.GetFormData({
FormEngineKey : 'sys_user',
_Where : [{ Name : 'MiniProgramOpenId', Value : getOpenIdResultObj.openid, Type : '=' }]
});
if(sysUserResult.Code == 0){
V8.Result = { Code : 0, Msg : `获取用户信息时出现错误:` + sysUserResult.Msg};
return;
}
//已存在用户,直接返回token登陆信息
if(sysUserResult.Code == 1){
V8.Result = V8.Method.GetAccessToken({
OsClient : V8.Param.OsClient,
CurrentUser : sysUserResult.Data
});
return;
}
//不存在用户,则直接返回前端自动登陆失败
if(!V8.Param.Code){
V8.Result = { Code : 0, Msg : `小程序openid:[${getOpenIdResultObj.openid}]未绑定帐号!` };
return;
}
}
//逻辑点3、4
var accessToken = V8.Cache.Get(`MiniProgramAccessToken:${appid}`);
if(!accessToken){
var url = `https://api.weixin.qq.com/cgi-bin/token?appid=${appid}&secret=${secret}&grant_type=client_credential`;
var getAccessTokenResult = V8.Http.Post({
Url : url
});
var getAccessTokenObj = JSON.parse(getAccessTokenResult);
if(!getAccessTokenObj.access_token){
V8.Result = { Code : 0, Msg : '获取AccessToken失败:' + getAccessTokenResult };
return;
}
accessToken = getAccessTokenObj.access_token;
V8.Cache.Set(`MiniProgramAccessToken:${appid}`, accessToken, '0.01:45:00');
}
//逻辑点5
var url = `https://api.weixin.qq.com/wxa/business/getuserphonenumber?access_token=${accessToken}`;//?code=${V8.Param.Code}&access_token=${accessToken}
var getPhoneResult = V8.Http.Post({
Url : url,
PostParam:{
code : V8.Param.Code
},
Headers:{
"Content-Type" : "application/json",
},
ParamType : 'Json'
});
var getPhoneObj = JSON.parse(getPhoneResult);
//"{\"errcode\":0,\"errmsg\":\"ok\",\"phone_info\":{\"phoneNumber\":\"13308098884\",\"purePhoneNumber\":\"13308098884\",\"countryCode\":\"86\",\"watermark\":{\"timestamp\":1698911143,\"appid\":\"wx9649ffe0039af044\"}}}"
if(!getPhoneObj.phone_info || !getPhoneObj.phone_info.phoneNumber){
V8.Result = { Code : 0, Msg : '获取手机号失败:' + getPhoneResult };
return;
}
//逻辑点6
var sysUserResult = V8.FormEngine.GetFormData({
FormEngineKey : 'sys_user',
_Where : [{ Name : 'Account', Value : getPhoneObj.phone_info.phoneNumber, Type : '=' }]
});
if(sysUserResult.Code == 0){
V8.Result = { Code : 0, Msg : `获取用户信息时出现错误:` + sysUserResult.Msg};
return;
}
//如果存在用户,绑定此用户的openid,并返回登陆信息
if(sysUserResult.Code == 1){
//如果存在oepnid
if(userOpenId){
V8.FormEngine.UptFormData({
FormEngineKey : 'sys_user',
Id : sysUserResult.Data.Id,
_RowModel:{
MiniProgramOpenId : userOpenId
}
});
}
V8.Result = V8.Method.GetAccessToken({
OsClient : V8.Param.OsClient,
CurrentUser : sysUserResult.Data
});
return;
}
//如果不存在此用户,若传入了Account+Pwd则绑定帐号,若只传入了Pwd或未传入Pwd,则自动注册
if(!V8.Param.Account){
var pwd = V8.Param.Pwd;
if(!pwd){
pwd = Math.floor(Math.random() * 10000000).toString();//6-7位数字
}
//自动注册
var addSysUserModelResult = V8.FormEngine.AddFormData({
FormEngineKey : 'Sys_User',
_RowModel : {
No : '',//自动编号,目前这里必须要传个空值
Account : getPhoneObj.phone_info.phoneNumber,//帐号
Phone : V8.Param.Account,//帐号
Pwd : V8.EncryptHelper.DESEncode(pwd),//密码
Name : getPhoneObj.phone_info.phoneNumber,//名称
DeptId : '36f3ac88-01d6-4874-9b4c-6274371267e7',//组织机构Id:会员(勿删)
DeptName : '会员',//组织机构名称
DeptCode : '1-5-',//组织机构代码
RoleIds : '[{"Id":"021a9216-ae88-4e73-99e0-2c32914583fe","Name":"会员","Level":1}]',//角色
Level : 1,//级别
State : 1,//状态
}
});
if(addSysUserModelResult.Code != 1){
V8.Result = { Code : 0, Msg : '用户自动注册失败:' + addSysUserModelResult.Msg }
return;
}
var result = V8.Method.GetAccessToken({
OsClient : V8.Param.OsClient,
CurrentUser : addSysUserModelResult.Data
});
result.DataAppend = {
Pwd : pwd
};
V8.Result = result;
return;
}
//绑定已有帐号
V8.Result = { Code : 0, Msg : '绑定已有帐号功能暂未实现!' };
四,界面引擎
界面引擎是用于生成和渲染前端用户界面的核心模块,通过配置或代码生成的方式,实现高效的页面布局和交互功能,提升开发效率。
特点:
- 支持基于拖拽的界面设计,无需复杂代码即可生成美观的前端界面。
- 完美兼容 Vue2,方便开发者快速上手。
应用场景:
- 快速搭建管理后台。
- 动态表单生成。
- 复杂数据展示。
三,Microi吾码总结
Microi吾码是一款开源低代码开发平台,专注于通过流程引擎、接口引擎和界面引擎等核心功能,简化业务逻辑开发、提升效率和降低技术门槛。其界面引擎支持可视化拖拽式设计,流程引擎实现业务流程的自动化,接口引擎负责高效的数据交互,帮助开发者和企业快速构建灵活、高效的应用程序。无论是后台管理、动态表单生成,还是复杂业务场景整合,Microi吾码都能提供高效解决方案,真正做到开发便捷、灵活扩展。

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐
所有评论(0)