基于 SuiteCRM 进行二次开发一些总结

最近公司需要一款 CRM (或者 ERP )系统来管理客户关系以及分发资料, 调研了 Salesforce 、SharePoint 、Dynamic 以及开源的方案之后,打算先基于开源的 SuiteCRM 先尝试开发看看效果。我也是第一次接触 CRM 管理系统,因为 SuiteCRM 是基于 PHP 写的,我写了很多 PHP 所以二次开发起来还算顺利。这里把我二次开发的一些经验和坑记录一下。

搭建 SuiteCRM 还好,为了方便我写了一个 Dockerfile,在里面装上 nginx+fpm,然后基于 GitHub 上官方文档进行安装,这个还是比较 easy 的。接下来就是流程业务问题了,我们的需求主要是给用户分发资料文档,分发的这些资料的方式有自己的一点特殊需求,然后资料文档的上线内部用户有审核机制(虽然目前看上去比较简单,但是后期可能会添加一些功能)。然后遇到的第一个难点就是熟悉 SuiteCRM 的用户权限系统,然后把这个权限系统拿来套我们自己的业务。官方的文档以及一些中文资源我也看了,看了蛮长时间的,有些功能选项我到现在还是没有搞清楚,但是基本的功能用法已经够用了。

在二次开发的时候说说我的一点经验,因为我们只是做一点改动来满足自己的需求,所以完全没有必要去理解 SuiteCRM 的那一套框架开发方法,只需要找到渲染对应组件的地方往里面塞自己的代码逻辑就 OK 了。把 XDEBUG 单步调试打开,便 debug 便写搞起来很快。

然后官方商店有一些付费的插件可以大幅度减轻我的工作量,我买了一个插件装上,然后去审计代码的时候发现里面全是 sql 注入漏洞,总之非常震惊。详情见:
https://www.reddit.com/r/PHP/comments/h06fxs/find_sql_injection_where_after_paid_a_suitecrm/。最后没办法只有自己基于官方的一个 joomla 插件二次开发了,就是这个插件: https://github.com/salesagility/SuiteCRM-Portal-Joomla 。

然后我又安装了一个 joomla,然后把插件装上发现功能蛮简陋的,需要做一些定制才行。后来发现可能是 SuiteCRM 版本更新了,有个函数变了但是这个插件没有更新,于是新建 Case 的时候部分信息会丢掉。我提了个 PR 给官方,见: https://github.com/salesagility/SuiteCRM/pull/8824,不过这个插件 N 年没人维护,所以有的用就不错了。由于这个 joomla 插件和 SuiteCRM 是通过 Rest API 来通信的,导致 XDEBUG 不太好调试,我最后摸索出来一个办法就是这个 Rest API 是 curl 写的,只需要在 curl 设置我本机的 fiddler 代理,就能抓到这些 http 的 api 请求了。然后用 fiddler 的重放功能触发 XDEBUG 就能很方便的调试了。

还有就是 SuiteCRM 内部的邮件系统需要去调整很久才能满足可用的状态,有时候还比较 tricky 。

发表评论

电子邮件地址不会被公开。 必填项已用*标注