`
喵喵大神
  • 浏览: 38363 次
文章分类
社区版块
存档分类
最新评论

PhpSms 稳定可靠的php短信发送库

PHP 
阅读更多

可能是目前最聪明、优雅的PHP短信发送库了。从此不再为各种原因造成的个别短信发送失败而烦忧!

phpsms的任务均衡调度功能由toplan/task-balancer提供。

GitHub地址:https://github.com/toplan/phpsms

 

特点

  • 支持发送均衡调度,可按代理器权重值均衡选择服务商发送。
  • 支持语音验证码。
  • 支持一个或多个备用代理器(服务商)。
  • 允许推入队列,并自定义队列实现逻辑(与队列系统松散耦合)。
  • 短信/语音发送前后钩子。
  • 支持国内主流短信服务商
  • 自定义代理器寄生代理器

服务商

服务商 模板短信 内容短信 语音验证码 最低消费 最低消费单价
Luosimao × ¥850(1万条) ¥0.085/条
云片网络 × ¥55(1千条) ¥0.055/条
容联·云通讯 × 充值¥500 ¥0.055/条
SUBMAIL × × ¥100(1千条) ¥0.100/条
云之讯 × -- ¥0.050/条
聚合数据 × -- ¥0.035/条
阿里大鱼 × -- ¥0.045/条
SendCloud × -- ¥0.048/条

安装

[php] view plain copy
 
 在CODE上查看代码片派生到我的代码片
  1. composer require 'toplan/phpsms:~1.6.0'  

安装开发中版本:

 

[php] view plain copy
 
 在CODE上查看代码片派生到我的代码片
  1. composer require 'toplan/phpsms:dev-master'  

 

快速上手

1. 配置

  • 配置代理器所需参数

 

为你需要用到的短信服务商(即代理器)配置必要的参数。可以在config\phpsms.php中键为agents的数组中配置,也可以手动在程序中设置,示例如下:

 

[php] view plain copy
 
 在CODE上查看代码片派生到我的代码片
  1. //example:  
  2. Sms::config([  
  3.     'Luosimao' => [  
  4.         //短信API key  
  5.         'apikey' => 'your api key',  
  6.         //语音验证API key  
  7.         'voiceApikey' => 'your voice api key',  
  8.     ],  
  9.     'YunPian'  => [  
  10.         //用户唯一标识,必须  
  11.         'apikey' => 'your api key',  
  12.     ]  
  13. ]);  

 

  • 配置代理器调度方案

可在config\phpsms.php中键为scheme的数组中配置。也可以手动在程序中设置,示例如下:

 

[php] view plain copy
 
 在CODE上查看代码片派生到我的代码片
  1. //example:  
  2. Sms::scheme([  
  3.     //被使用概率为2/3  
  4.     'Luosimao' => '20',  
  5.   
  6.     //被使用概率为1/3,且为备用代理器  
  7.     'YunPian' => '10 backup',  
  8.   
  9.     //仅为备用代理器  
  10.     'YunTongXun' => '0 backup',  
  11. ]);  

 

调度方案解析: 如果按照以上配置,那么系统首次会尝试使用LuosimaoYunPian发送短信,且它们被使用的概率分别为2/31/3。 如果使用其中一个代理器发送失败,那么会启用备用代理器,按照配置可知备用代理器有YunPianYunTongXun,那么会依次调用直到发送成功或无备用代理器可用。 值得注意的是,如果首次尝试的是YunPian,那么备用代理器将会只使用YunTongXun,也就是会排除使用过的代理器。

2. Enjoy it!

[php] view plain copy
 
 在CODE上查看代码片派生到我的代码片
  1. require('path/to/vendor/autoload.php');  
  2. use Toplan\PhpSms\Sms;  
  3.   
  4. // 接收人手机号  
  5. $to = '1828****349';  
  6. // 短信模版  
  7. $templates = [  
  8.     'YunTongXun' => 'your_temp_id',  
  9.     'SubMail'    => 'your_temp_id'  
  10. ];  
  11. // 模版数据  
  12. $tempData = [  
  13.     'code' => '87392',  
  14.     'minutes' => '5'  
  15. ];  
  16. // 短信内容  
  17. $content = '【签名】这是短信内容...';  
  18.   
  19. // 只希望使用模板方式发送短信,可以不设置content(如:云通讯、Submail、Ucpaas)  
  20. Sms::make()->to($to)->template($templates)->data($tempData)->send();  
  21.   
  22. // 只希望使用内容方式放送,可以不设置模板id和模板data(如:云片、luosimao)  
  23. Sms::make()->to($to)->content($content)->send();  
  24.   
  25. // 同时确保能通过模板和内容方式发送,这样做的好处是,可以兼顾到各种类型服务商  
  26. Sms::make()->to($to)  
  27.     ->template($templates)  
  28.     ->data($tempData)  
  29.     ->content($content)  
  30.     ->send();  
  31.   
  32. // 语音验证码  
  33. Sms::voice('02343')->to($to)->send();  
  34.   
  35. // 语音验证码兼容模版语音(如阿里大鱼的文本转语音)  
  36. Sms::voice('02343')  
  37.     ->template('Alidayu''your_tts_code')  
  38.     ->data(['code' => '02343'])  
  39.     ->to($to)->send();  

3. 在laravel中使用

如果你只想单纯的在laravel中使用phpsms的功能可以按如下步骤操作, 当然也为你准备了基于phpsms开发的laravel-sms

  • 在config/app.php中引入服务提供器
[php] view plain copy
 
 在CODE上查看代码片派生到我的代码片
  1. //服务提供器  
  2. 'providers' => [  
  3.     ...  
  4.     Toplan\PhpSms\PhpSmsServiceProvider::class,  
  5. ]  
  6.   
  7. //别名  
  8. 'aliases' => [  
  9.     ...  
  10.     'PhpSms' => Toplan\PhpSms\Facades\Sms::class,  
  11. ]  
 
  • 生成配置文件
[php] view plain copy
 
 在CODE上查看代码片派生到我的代码片
  1. php artisan vendor:publish  

 

生成的配置文件为config/phpsms.php,然后在该文件中按提示配置。

  • 使用

详见API,示例:

 

[php] view plain copy
 
 在CODE上查看代码片派生到我的代码片
  1. PhpSms::make()->to($to)->content($content)->send();  

 

API

API - 全局配置

Sms::scheme([$name[, $scheme]])

设置/获取代理器的调度方案。

调度配置在调度系统启动后(创建Sms实例时会自动启动)就不能修改。

  • 设置

手动设置代理器调度方案(优先级高于配置文件),如:

 

[php] view plain copy
 
 在CODE上查看代码片派生到我的代码片
  1. Sms::scheme([  
  2.     'Luosimao' => '80 backup'  
  3.     'YunPian' => '100 backup'  
  4. ]);  
  5. //或  
  6. Sms::scheme('Luosimao''80 backup');  
  7. Sms::scheme('YunPian''100 backup');  

 

  • 获取

通过该方法还能获取所有或指定代理器的调度方案,如:

 

[php] view plain copy
 
 在CODE上查看代码片派生到我的代码片
  1. //获取所有的调度方案:  
  2. $scheme = Sms::scheme();  
  3.   
  4. //获取指定代理器的调度方案:  
  5. $scheme['Luosimao'] = Sms::scheme('Luosimao');  

 

scheme静态方法的更多使用方法见高级调度配置

Sms::config([$name[, $config][, $override]]);

设置/获取代理器的配置数据。

代理器参数配置在应用系统的整个运行过程中都是能修改的,这点和调度配置有所不同。

  • 设置

手动设置代理器的配置数据(优先级高于配置文件),如:

 

[php] view plain copy
 
 在CODE上查看代码片派生到我的代码片
  1. Sms::config([  
  2.    'YunPian' => [  
  3.        'apikey' => ...,  
  4.    ]  
  5. ]);  
  6. //或  
  7. Sms::config('YunPian', [  
  8.    'apikey' => ...,  
  9. ]);  

 

  • 获取

通过该方法还能获取所有或指定代理器的配置参数,如:

 

[php] view plain copy
 
 在CODE上查看代码片派生到我的代码片
  1. //获取所有的配置:  
  2. $config = Sms::config();  
  3.   
  4. //获取指定代理器的配置:  
  5. $config['Luosimao'] = Sms::config('Luosimao');  

 

Sms::cleanScheme()

清空所有代理器的调度方案,请谨慎使用该接口。

Sms::cleanConfig()

清空所有代理器的配置数据,请谨慎使用该接口。

Sms::beforeSend($handler[, $override]);

发送前钩子,示例:

 

[php] view plain copy
 
 在CODE上查看代码片派生到我的代码片
  1. Sms::beforeSend(function($task$prev$index$handlers){  
  2.     //获取短信数据  
  3.     $smsData = $task->data;  
  4.     ...  
  5.     //如果返回false会终止发送任务  
  6.     return true;  
  7. });  

 

更多细节请查看task-balancer的“beforeRun”钩子

Sms::beforeAgentSend($handler [, $override]);

代理器发送前钩子,示例:

 

[php] view plain copy
 
 在CODE上查看代码片派生到我的代码片
  1. Sms::beforeAgentSend(function($task$driver$prev$index$handlers){  
  2.     //短信数据:  
  3.     $smsData = $task->data;  
  4.     //当前使用的代理器名称:  
  5.     $agentName = $driver->name;  
  6.     //如果返回false会停止使用当前代理器  
  7.     return true;  
  8. });  

 

更多细节请查看task-balancer的“beforeDriverRun”钩子

Sms::afterAgentSend($handler [, $override]);

代理器发送后钩子,示例:

 

[php] view plain copy
 
 在CODE上查看代码片派生到我的代码片
  1. Sms::afterAgentSend(function($task$result$prev$index$handlers){  
  2.      //$result为代理器的发送结果数据  
  3.      $agentName = $result['driver'];  
  4.      ...  
  5. });  

 

更多细节请查看task-balancer的“afterDriverRun”钩子

Sms::afterSend($handler [, $override]);

发送后钩子,示例:

 

[php] view plain copy
 
 在CODE上查看代码片派生到我的代码片
  1. Sms::afterSend(function($task$result$prev$index$handlers){  
  2.     //$result为发送后获得的结果数组  
  3.     $success = $result['success'];  
  4.     ...  
  5. });  

 

更多细节请查看task-balancer的“afterRun”钩子

Sms::queue($enable, $handler)

该方法可以设置是否启用队列以及定义如何推送到队列。

$handler匿名函数可使用的参数:

  • $sms : Sms实例
  • $data : Sms实例中的短信数据,等同于$sms->getData()

定义如何推送到队列:

 

[php] view plain copy
 
 在CODE上查看代码片派生到我的代码片
  1. //自动启用队列  
  2. Sms::queue(function($sms$data){  
  3.     //define how to push to queue.  
  4.     ...  
  5. });  
  6.   
  7. //第一个参数为true,启用队列  
  8. Sms::queue(true, function($sms$data){  
  9.     //define how to push to queue.  
  10.     ...  
  11. });  
  12.   
  13. //第一个参数为false,暂时关闭队列  
  14. Sms::queue(false, function($sms$data){  
  15.     //define how to push to queue.  
  16.     ...  
  17. });  

 

如果已经定义过如何推送到队列,还可以继续设置关闭/开启队列:

 

[php] view plain copy
 
 在CODE上查看代码片派生到我的代码片
  1. Sms::queue(true);//开启队列  
  2. Sms::queue(false);//关闭队列  

 

获取队列启用情况:

 

[php] view plain copy
 
 在CODE上查看代码片派生到我的代码片
  1. $enable = Sms::queue();  
  2. //为true,表示当前启用了队列。  
  3. //为false,表示当前关闭了队列。  

 

API - 发送相关

Sms::make()

生成发送短信的sms实例,并返回实例。

 

[php] view plain copy
 
 在CODE上查看代码片派生到我的代码片
  1. $sms = Sms::make();  
  2.   
  3. //创建实例的同时设置短信内容:  
  4. $sms = Sms::make('【签名】这是短信内容...');  
  5.   
  6. //创建实例的同时设置短信模版:  
  7. $sms = Sms::make('YunTongXun''your_temp_id');  
  8. //或  
  9. $sms = Sms::make([  
  10.     'YunTongXun' => 'your_temp_id',  
  11.     'SubMail' => 'your_temp_id',  
  12.     ...  
  13. ]);  

 

Sms::voice()

生成发送语音验证码的sms实例,并返回实例。

 

[php] view plain copy
 
 在CODE上查看代码片派生到我的代码片
  1. $sms = Sms::voice();  
  2.   
  3. //创建实例的同时设置验证码/语音文件ID  
  4. $sms = Sms::voice($code);  

 

  • 如果你使用Luosimao语音验证码,还需用在配置文件中Luosimao选项中设置voiceApikey
  • 语音文件ID即是在服务商配置的语音文件的唯一编号,比如阿里大鱼语音通知voice_code
  • 模版语音是另一种语音请求方式,它是通过模版ID和模版数据进行的语音请求,比如阿里大鱼的文本转语音通知

$sms->to($mobile)

设置发送给谁,并返回实例。

 

[php] view plain copy
 
 在CODE上查看代码片派生到我的代码片
  1. $sms->to('1828*******');  

 

 

$sms->template($templates)



指定代理器设置模版id或批量设置,并返回实例。

 

[php] view plain copy
 
 在CODE上查看代码片派生到我的代码片
  1. //设置指定服务商的模板id  
  2. $sms->template('YunTongXun''your_temp_id')  
  3.     ->template('SubMail''your_temp_id');  
  4.   
  5. //一次性设置多个服务商的模板id  
  6. $sms->template([  
  7.     'YunTongXun' => 'your_temp_id',  
  8.     'SubMail' => 'your_temp_id',  
  9.     ...  
  10. ]);  

 

 

 

$sms->data($data)

设置模板短信的模板数据,并返回实例对象,$data必须为数组。

 

 

[php] view plain copy
 
 在CODE上查看代码片派生到我的代码片
  1. $sms->data([  
  2.     'code' => $code,  
  3.     'minutes' => $minutes  
  4. ]);  

 

 

通过templatedata方法的组合除了可以实现模版短信的数据填充,还可以实现模版语音的数据填充。

 

$sms->content($text)

 

设置内容短信的内容,并返回实例对象。一些内置的代理器(如YunPian,Luosimao)使用的是内容短信(即直接发送短信内容),那么就需要为它们设置短信内容。

 

[php] view plain copy
 
  1. $sms->content('【签名】这是短信内容...');  

 

$sms->getData([$key])

获取Sms实例中的短信数据,不带参数时返回所有数据,其结构如下:

 

[php] view plain copy
 
  1. [  
  2.     'type'         => ...,  
  3.     'to'           => ...,  
  4.     'templates'    => [...],  
  5.     'content'      => ...,  
  6.     'templateData' => [...],  
  7.     'voiceCode'    => ...,  
  8. ]  

 

$sms->agent($name)

临时设置发送时使用的代理器(不会影响备用代理器的正常使用),并返回实例,$name为代理器名称。

 

[php] view plain copy
 
  1. $sms->agent('YunPian');  

 

通过该方法设置的代理器将获得绝对优先权,但只对当前短信实例有效。

$sms->send()

请求发送短信/语音验证码。

 

[php] view plain copy
 
  1. //会遵循是否使用队列:  
  2. $result = $sms->send();  
  3.   
  4. //忽略是否使用队列:  
  5. $result = $sms->send(true);  

 

$result数据结构请参看task-balancer

高级调度配置

代理器的高级调度配置可以通过配置文件(config/phpsms.php)中的scheme项目配置,也可以通过scheme静态方法设置。 值得注意的是,高级调度配置的值的数据结构是数组。

指定代理器类

如果你自定义了一个代理器,类名不为FooAgent或者命名空间不为Toplan\PhpSms,那么你还可以在调度配置时指定你的代理器使用的类。

  • 配置方式:

通过配置值中agentClass键来指定类名。

  • 示例:
[php] view plain copy
 
  1. Sms::scheme('agentName', [  
  2.     '10 backup',  
  3.     'agentClass' => 'My\Namespace\MyAgentClass'  
  4. ]);  

寄生代理器

如果你既不想使用内置的代理器,也不想创建文件写自定义代理器,那么寄生代理器或许是个好的选择,无需定义代理器类,只需在调度配置时定义好发送短信和语音验证码的方式即可。

  • 配置方式:

通过配置值中sendSms和voiceVerify键来设置发送短信和语音验证码的方式。

  • 示例:
[php] view plain copy
 
  1. Sms::scheme([  
  2.     'agentName' => [  
  3.         '20 backup',  
  4.         'sendSms' => function($agent$to$content$tempId$tempData){  
  5.             //获取配置(如果设置了的话):  
  6.             $key = $agent->key;  
  7.             ...  
  8.             //内置方法:  
  9.             Agent::sockPost(...);  
  10.             Agent::curl(...);  
  11.             ...  
  12.             //更新发送结果:  
  13.             $agent->result(Agent::SUCCESS, true);  
  14.             $agent->result(Agent::INFO, 'some info');  
  15.             $agent->result(Agent::CODE, 'your code');  
  16.         },  
  17.         'voiceVerify' => function($agent$to$code$tempId$tempData){  
  18.             //发送语音验证码,同上  
  19.         }  
  20.     ]  
  21. ]);  

自定义代理器

  • step 1

配置项加入到config/phpsms.php中键为agents的数组里。

 

[php] view plain copy
 
  1. //example:  
  2. 'Foo' => [  
  3.     'key' => 'your api key',  
  4.     ...  
  5. ]  

 

  • step 2

新建一个继承Toplan\PhpSms\Agent抽象类的代理器类,建议代理器类名为FooAgent,建议命名空间为Toplan\PhpSms。 如果类名不为FooAgent或者命名空间不为Toplan\PhpSms,在使用该代理器时则需要指定代理器类,详见高级调度配置

Change logs

v1.4.0

该系列版本相较与之前版本在api的设计上有些变动,具体如下:

  • 修改原enable静态方法为scheme

  • 修改原agents静态方法为config

  • 修改原cleanEnableAgents静态方法为cleanScheme

  • 修改原cleanAgentsConfig静态方法为cleanConfig

  • 去掉getEnableAgents和getAgentsConfig静态方法

v1.5.0

  • 改进语音信息的发送接口以适应阿里大鱼的通过文本转语音和语音文件id两个接口的需求
  • 新加阿里大鱼(Alidayu)代理器

公告

  1. 如果在使用队列相关功能时出现如下错误:
[php] view plain copy
 
  1. Fatal error:Maximum function nesting level of ‘100′ reached, aborting!  

可在/etc/php5/mods-available/xdebug.ini(Linux)中新加xdebug.max_nesting_level=500

Todo list

  •  可用代理器分组配置功能;短信发送时选择分组进行发送的功能。

Encourage

hi, guys! 如果喜欢或者要收藏,欢迎star。如果要提供意见和bug,欢迎issue或提交pr。

License

MIT

分享到:
评论

相关推荐

    phpsms, Probably the most intelligent, elegant sms send library in php.zip

    总结来说,phpsms是PHP开发者进行短信服务集成的理想选择,无论是在小型项目还是大型企业级应用中,都能发挥出其智能和优雅的特点,提高开发效率,确保短信发送的稳定性和可靠性。如果你在PHP开发中需要短信服务,...

    MATLAB实现的语音信号加密解密系统设计与应用 - GUI界面交互与相位扰动加密技术

    内容概要:本文详细介绍了基于MATLAB的语音信号加密解密系统的开发过程及其关键技术。系统主要分为三大模块:录音、加密和解密。录音功能利用audiorecorder对象进行音频采集,支持多种采样率设置。加密算法采用了相位扰动方法,通过傅里叶变换将语音信号转换到频域,添加随机相位偏移并用密码作为随机种子确保唯一性和安全性。解密过程则是逆向操作,通过正确的密码恢复原始相位。此外,系统还包括了一个友好的图形用户界面(GUI),方便用户操作和查看波形变化。文中还探讨了一些实际应用中的挑战,如硬件兼容性和误码容忍度等问题。 适用人群:适用于对语音信号处理、信息安全以及MATLAB编程感兴趣的科研人员和技术爱好者。 使用场景及目标:本系统可用于保护隐私通话、防止窃听等场合,旨在提供一种简单易用且高效的语音加密解决方案。它不仅能够满足日常生活中对于私人对话安全性的需求,也为相关领域的研究提供了有价值的参考资料。 其他说明:作者分享了许多开发过程中遇到的问题及解决办法,强调了细节处理的重要性。例如,针对不同设备间的采样率差异进行了适配调整;为了提高用户体验,加入了密码记忆功能和支持中文密码等功能。

    YTCB2509 非接触式转速测量仪 20250323

    题目:非接触式转速测量仪 主控:STM32 显示屏:Oled 电机驱动:L298 电机(带编码器可测速的三线电机) 按键(增速或者减速等)

    基于MATLAB的含齿轮啮合误差激励的轴系动力学建模与Newmark-β法实现

    内容概要:本文详细介绍了如何利用MATLAB实现含齿轮啮合误差激励的轴系动力学模型。首先,文章解释了为什么传统欧拉梁理论在轴系建模时存在局限性,并引入了Timoshenko梁单元来考虑剪切变形和转动惯量。接着,重点讲解了Newmark-β法的具体实现步骤,包括预处理系数矩阵、迭代公式的推导以及如何处理时变刚度和误差激励。此外,还提供了关于稀疏矩阵优化、频谱分析等方面的实用技巧。最后,通过具体案例演示了整个仿真的流程和注意事项。 适合人群:机械工程领域的研究人员和技术人员,尤其是那些从事齿轮传动系统振动分析工作的专业人士。 使用场景及目标:适用于需要精确模拟齿轮传动轴系动态特性的场合,如汽车变速箱、风力发电机等设备的设计与故障诊断。主要目标是提高仿真精度,缩短计算时间,从而更好地指导实际工程应用。 其他说明:文中不仅给出了详细的数学推导和代码实现,还分享了许多宝贵的实践经验,如如何避免常见的数值不稳定性和调试技巧等。这使得读者不仅能学到理论知识,还能掌握解决实际问题的方法。

    增材制造中元胞自动机模拟枝晶生长及CET转变的Matlab实现

    内容概要:本文详细介绍了如何使用元胞自动机(Cellular Automaton, CA)和Matlab来模拟增材制造过程中微观组织的生长,尤其是枝晶生长及其从柱状晶到等轴晶的转变(CET)。首先解释了元胞自动机的基本概念,即通过定义网格和状态转移规则来模拟微观结构的变化。接着给出了具体的Matlab代码实现步骤,包括初始化、生长规则制定、枝晶生长模拟以及CET转变的模拟方法。文中还探讨了温度梯度、晶核密度等参数对CET转变的影响,并提供了优化后的高效算法版本。最后强调了此类仿真的重要性和应用价值,如帮助预测和优化增材制造产品的微观结构和性能。 适合人群:从事材料科学、增材制造领域的研究人员和技术人员,以及对元胞自动机和材料微观结构建模感兴趣的学习者。 使用场景及目标:①用于研究和教学,帮助理解和掌握增材制造过程中微观组织演变规律;②辅助工业生产中的工艺参数选择,提高产品质量;③为后续更复杂的多物理场耦合仿真提供基础。 其他说明:随文附带完整的源代码和相关文献资料,便于读者深入学习和扩展研究。

    房地产 -阿那亚生活式品牌社群运营 -读懂生活式品牌的社群运营 .pptx

    房地产 -阿那亚生活式品牌社群运营 -读懂生活式品牌的社群运营 .pptx

    基于自抗扰控制的预测函数控制(PFC)在永磁同步电机(PMSM)中的高效应用

    内容概要:本文详细介绍了基于自抗扰控制的预测函数控制(PFC)在永磁同步电机(PMSM)中的应用。首先阐述了PFC的基本概念及其相对于其他模型预测控制的优势,特别是其在快速响应和鲁棒性方面的表现。接着,文章深入探讨了三个关键技术:1.5延时补偿、全电压前馈补偿和扩展状态观测器(ESO)。1.5延时补偿通过线性外推解决计算延时问题;全电压前馈补偿利用电压信息提前调整控制输入,增强响应速度;ESO则用于实时观测并补偿系统中的不确定因素。此外,文中还提供了具体的代码示例,展示了这些技术的实际应用效果。最终,实验结果显示,采用PFC结合自抗扰控制的方法可以显著改善PMSM的速度控制性能,特别是在应对负载扰动方面。 适合人群:从事电机控制领域的工程师和技术研究人员,尤其是关注永磁同步电机控制的从业者。 使用场景及目标:适用于需要对永磁同步电机进行精确、快速响应控制的应用场景,如工业机器人、自动化生产线等。主要目标是提高电机控制系统的稳定性、响应速度和抗干扰能力。 其他说明:文章不仅理论讲解详尽,还附有大量实用的代码片段,便于读者理解和实践。同时提醒读者在实际应用中需要注意参数调整和系统噪声的影响。

    ### 中国企业级SaaS上市公司2023-2024年财务绩效回顾及未来展望、前言

    内容概要:本文聚焦中国企业级SaaS上市公司2023-2024年的财务绩效,通过详尽的数据分析和行业趋势展望,揭示了该领域的发展现状与未来方向。文章指出,尽管收入和毛利持续增长,但整体毛利率偏低,销售费用率高企,研发投入大,盈利艰难,资产周转效率下降,现金流承压等问题普遍存在。针对这些问题,提出了提升客户价值、深耕行业、延伸商业价值、审视并购可能性、盈利模式多样化、抓住AIGC(生成式人工智能)机遇、把握出海机遇以及积极利用资本市场等策略建议。未来,企业级SaaS市场将围绕中小企业需求、细分领域产品爆发式增长及行业生态协同化发展。 适用人群:对中国企业级SaaS市场感兴趣的投资者、企业管理者、行业分析师以及相关从业人员。 使用场景及目标:①帮助投资者评估企业级SaaS上市公司的投资价值;②为企业管理者提供战略规划和运营管理的参考;③为行业分析师提供详实的数据支持和趋势预测;④为从业人员提供职业发展和技能提升的方向。 其他说明:本文基于2024年10月底的财务数据,结合安永的研究分析,提供了对企业级SaaS市场的深入洞察。文中还强调了SaaS企业在数字化转型中的重要作用,并呼吁行业内企业积极应对挑战,把握发展机遇。

    Comsol仿真技术在聚合物电解质膜燃料电池堆热管理中的应用与优化

    内容概要:本文详细探讨了使用Comsol进行聚合物电解质膜(PEM)燃料电池堆的热管理建模。首先强调了保持燃料电池堆温度均匀性的关键意义,因为温度不均会影响电池性能。接着介绍了由五个电池单元组成的模型结构及其与冷却剂的交互方式。文中具体讲解了多个关键物理量的求解方法,如温度、电极和电解质相电位、反应物质的质量传递以及流体的压力和速度。此外,还讨论了如何通过调整冷却液入口温度、选择合适的湍流模型、优化电化学反应和传质的耦合、合理划分网格以及采用分阶段求解策略来改进仿真效果。最后,作者分享了一些实用的经验和技术细节,例如在冷却液中加入荧光粒子示踪剂进行实验验证,以及针对不同参数做出相应的调整以确保模型的准确性。 适合人群:从事燃料电池研究的技术人员、工程师以及相关领域的科研工作者。 使用场景及目标:适用于需要深入了解和掌握PEM燃料电池堆热管理系统设计与优化的人群。主要目的是帮助他们更好地理解和运用Comsol软件来进行复杂的多物理场耦合仿真,从而提高燃料电池堆的工作效率并延长使用寿命。 其他说明:文章不仅提供了理论知识,还包括了许多具体的实施步骤和技巧,有助于读者快速上手并在实践中不断积累经验。

    基于Vue+javaScript实现的电动汽车充电桩管理系统+源码+项目文档(毕业设计&课程设计&项目开发)

    基于Vue+javaScript实现的电动汽车充电桩管理系统+源码+项目文档,适合毕业设计、课程设计、项目开发。项目源码已经过严格测试,可以放心参考并在此基础上延申使用,详情见md文档 基于Vue+javaScript实现的电动汽车充电桩管理系统+源码+项目文档,适合毕业设计、课程设计、项目开发。项目源码已经过严格测试,可以放心参考并在此基础上延申使用,详情见md文档~ 基于Vue+javaScript实现的电动汽车充电桩管理系统+源码+项目文档,适合毕业设计、课程设计、项目开发。项目源码已经过严格测试,可以放心参考并在此基础上延申使用,详情见md文档 基于Vue+javaScript实现的电动汽车充电桩管理系统+源码+项目文档,适合毕业设计、课程设计、项目开发。项目源码已经过严格测试,可以放心参考并在此基础上延申使用,详情见md文档 基于Vue+javaScript实现的电动汽车充电桩管理系统+源码+项目文档,适合毕业设计、课程设计、项目开发。项目源码已经过严格测试,可以放心参考并在此基础上延申使用,详情见md文档

    python-3.11.12-arm64.exe

    windwos环境下python 3.11系列ARM64位安装包,仅推荐个人学习、开发、娱乐或者测试环境下使用。

    基于COMSOL的石墨烯可见光宽带完美吸收器的设计与仿真

    内容概要:本文详细介绍了利用COMSOL软件设计和仿真的石墨烯可见光宽带完美吸收器。首先,文章解释了石墨烯在可见光波段的独特性质及其应用潜力,接着深入探讨了结构设计的关键要素,如双层光子晶体结构、介质层厚度选择以及金纳米棒的周期性排列。文中还提供了具体的代码片段用于设置材料参数、网格划分和边界条件,并强调了参数优化和后处理的重要性。最终展示了仿真结果,包括吸收率曲线和平坦的宽带吸收特性。 适合人群:从事光电子器件研究的科研人员和技术开发者,尤其是熟悉COMSOL仿真平台的用户。 使用场景及目标:适用于希望深入了解石墨烯在可见光波段的应用并掌握相关建模技巧的研究者。目标是通过理论分析和实验验证相结合的方式,探索提高光吸收效率的新方法。 其他说明:文中提到的一些具体数值和代码片段对于实际建模非常有价值,同时也指出了常见错误和注意事项,帮助读者避开潜在陷阱。此外,作者分享了一些个人经验,使内容更加生动实用。

    (源码)基于Arduino的HID按键项目.zip

    # 基于Arduino的HID按键项目 ## 项目简介 HID按键项目是一个基于Arduino的自动键盘替代工具,旨在通过单一按键实现Windows或其他类似操作系统的登录请求自动填写登录凭证。该项目提供了针对不同Arduino或兼容板的多种版本,适用于安全验证、快捷登录等场景。 ## 项目的主要特性和功能 1. 自动填写登录凭证通过一键操作,自动填写用户名和密码,简化登录流程。 2. 多版本支持支持ATTiny85板和Arduino Micro板等多种硬件平台,用户可根据需求选择合适的版本。 3. 开源与免费项目遵循GPL2.0only开源协议,用户可以自由获取和使用。 ## 安装使用步骤 2. 准备硬件根据所选版本准备相应的Arduino或兼容板(如ATTiny85板或Arduino Micro板),并确保硬件正常工作并连接电脑。

    2000-2023年 企业资源配置效率

    企业资源配置效率是指在一定的技术水平条件下,企业如何将其拥有的资源(如资金、人力、物资等)在各产出主体或生产环节中进行分配,以产生最大的效益。 企业资源配置效率的提高对于企业的生产发展具有至关重要的作用。因此,企业应该注重优化资源配置,提高资源配置效率,以实现企业的可持续发展和竞争优势的提升。 企业资源配置效率指标1:残差小于等于的全部取0 企业资源配置效率指标2:残差取绝对值 数据 代码、年份、e、Overinvest、Ineff

    (源码)基于OpenHarmony和BES2600WM芯片的多模态V200ZR开发板.zip

    # 基于OpenHarmony和BES2600WM芯片的多模态V200ZR开发板 ## 项目简介 本项目是基于恒玄科技BES2600WM芯片和OpenHarmony操作系统的多模态V200ZR开发板。该开发板由湖南欧智通科技有限公司出品,集成了四核ARM处理器、双频WiFi、双模蓝牙等功能,适用于各种AIoT多模态VUI + GUI交互硬件场景。 ## 项目的主要特性和功能 ### 硬件特性 CPU: 双核Cortex M33 Star(最高300MHz) + 双核Cortex A7(最高1GHz) RAM: 最大2MB SRAM + 40MB PSRAM ROM: 最大32MB Nor Flash,支持XIP 网络: 支持WiFi4 2.4G5G双频,BT5.2,BT classic,LE Audio,SIG mesh 显示: 支持MIPI DSI及CSI,2D graphics engine

    (源码)基于 JavaScript 和 Vite 框架的客户端信息获取系统.zip

    # 基于 JavaScript 和 Vite 框架的客户端信息获取系统 ## 项目简介 InfoJs 是一个基于 JavaScript 和 Vite 构建的系统项目,其核心目标是让开发者能够方便快捷地获取客户端信息。借助简单的配置与使用方式,开发者可轻松获取如浏览器信息、设备信息、运行环境等关键数据。 ## 项目的主要特性和功能 1. 简单易用只需进行简单的配置和导入操作,就能在项目中获取丰富的客户端信息。 2. 高效性能采用 Vite 作为构建工具,实现快速开发和热更新。 3. 丰富的 API提供涵盖浏览器信息、设备信息、运行环境等多种类型的 API,满足不同的开发需求。 4. 可扩展性支持自定义插件和扩展,方便开发者根据个性化需求进行定制。 ## 安装使用步骤 ### 一、安装依赖 可通过 npm 或 yarn 安装 InfoJs 库和相关插件 shell npm install sudongyuinfojs save

    光子学领域中手性BIC十字结构的Python与Lumerical联合仿真及自定义设计

    内容概要:本文详细介绍了手性BIC(连续域束缚态)十字结构的设计与仿真方法。首先,通过Python代码生成十字结构的基本参数,确保对称性破缺以产生BIC效应。接着,在Lumerical FDTD环境中进行电磁场仿真,重点探讨了不同材料(如SiN、GaAs)对手性响应的影响,并展示了如何通过调整结构参数(如臂长、宽度、高度)来优化圆二色性(CD)响应。此外,文章还讨论了电场分布的可视化及其与BIC模式的关系,以及如何利用遗传算法和反向设计方法进一步优化结构性能。 适合人群:从事光子学研究的专业人士,特别是对纳米光子器件设计感兴趣的科研人员和技术开发者。 使用场景及目标:适用于希望深入了解手性BIC结构设计原理的研究人员,旨在帮助他们掌握从理论到实践的具体步骤,包括参数选择、仿真工具使用、数据分析等方面的知识。 其他说明:文中提供了大量具体的代码示例,涵盖Python、Matlab和Lumerical等多种编程环境,便于读者直接应用于自己的研究项目中。同时,文章强调了实验过程中需要注意的实际问题,如材料选择、仿真参数设置等,有助于提高仿真的准确性和可靠性。

    Plecs平台下VSG并联控制中动态虚拟复阻抗技术的应用与优化

    内容概要:本文深入探讨了在Plecs平台上实现虚拟同步发电机(VSG)并联控制时所面临的挑战及其解决方案,尤其是针对线路阻抗差异导致的功率分配不均和系统振荡问题。文章介绍了动态虚拟复阻抗技术的基本原理,通过PI调节器实时调整虚拟阻抗值来平衡无功功率分配,并提供了详细的代码实现和调试经验。此外,还讨论了控制周期设置、相位补偿以及参数整定等方面的技术细节,强调了动态虚拟阻抗对于提高系统稳定性和鲁棒性的显著效果。 适合人群:从事微电网研究和技术开发的专业人士,尤其是对VSG并联控制感兴趣的科研人员和工程师。 使用场景及目标:适用于需要解决VSG并联运行中功率分配不均和系统不稳定的问题,旨在通过动态虚拟复阻抗技术优化并联系统性能,确保系统的高效稳定运行。 其他说明:文中提供的代码片段和调试技巧有助于读者更好地理解和应用这一先进技术。建议结合相关文献进一步深入研究,以获得更好的理论支持和技术指导。

    基于GOOSE算法优化CEEMDAN参数的非平稳信号分解与分析

    内容概要:本文详细介绍了利用鹅优化算法(GOOSE)优化完全集成经验模态分解(CEEMDAN)的关键参数,以提高非平稳信号分解的质量。首先,通过数据预处理步骤如Butterworth滤波和归一化处理,确保输入信号的质量。然后,构建GOOSE优化器,采用样本熵或其他熵指标作为适应度函数,自动搜索最佳的噪声标准差和噪声重复次数。接下来,进行CEEMDAN分解,并通过多种可视化手段(如三维希尔伯特谱、瀑布图等)展示分解结果。最后,通过误差分析验证分解效果,结果显示模态混叠现象减少了约23%,特别是在机械振动信号分析中表现优异。 适合人群:从事信号处理、机器学习以及数据分析的研究人员和技术人员,尤其是对非平稳信号处理感兴趣的读者。 使用场景及目标:适用于需要精确分解非平稳信号的应用场景,如机械故障诊断、生物医学信号处理等领域。主要目标是通过优化CEEMDAN参数,减少模态混叠,提高信号特征提取的准确性。 其他说明:文中提供了详细的代码实现和优化技巧,帮助读者更好地理解和应用这一方法。同时,强调了在实际应用中需要注意的一些细节,如参数范围的选择、可视化工具的使用等。

    React函数式简易Pc项目代码

    下载解压后,需先npm i下载依赖包

Global site tag (gtag.js) - Google Analytics