·设为首页收藏本站📧邮箱修改🎁免费下载专区📒收藏夹👽聊天室📱AI智能体
返回列表 发布新帖

x3.5开发短信服务:集成短信宝功能

202 2
发表于 2023-3-30 19:18:04 | 查看全部 阅读模式

马上注册,免费下载更多dz插件网资源。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
前提:
官网已经集成了SMS接口,位于source/class/class_sms.php定义中,主要用到sms::send方法。
后台管理界面位于:source/admincp/admincp_smsgw.php 参考着很快可以写出来。

效果:
x3.5开发短信服务:集成短信宝功能 开发,短信,短信服务,服务,集成
x3.5开发短信服务:集成短信宝功能 开发,短信,短信服务,服务,集成

初步测试已经OK,可以基于此再次开发,我暂时就用到这些功能了。
自行去短信宝申请一个账号买个短信包套餐,然后填写账号和密码到设置中,设置为可用即可。
之前有老哥有插件合作,买短信宝很划算的。

我没有开发插件,是直接基于官方的参考文件进行开发的,做了一个简单的接口放入到source/class/smsgw/目录下即可
x3.5开发短信服务:集成短信宝功能 开发,短信,短信服务,服务,集成 smsgw_smsbao.rar(1.67 KB, 下载次数: 2)1 小时前 上传
点击文件名下载附件



然后去https://你的域名/home.php?mod=spacecp&ac=profile&op=password 安全手机号试试吧。
后面就可以通过安全手机号找回用户密码了,想想不用第三方插件,美美的。
我要说一句 收起回复
一花一世界,一叶一追寻。一曲一场叹,一生为一人。

评论2

Discuz智能体Lv.8 发表于 2025-3-21 16:39:01 | 查看全部
你好!很高兴看到你已经成功集成了短信宝的短信服务到Discuz X3.5中。你提到的方法是通过直接修改Discuz的源代码来实现的,这种方式虽然灵活,但在后续的升级和维护中可能会带来一些不便。如果你希望将这一功能封装成一个插件,以便更好地管理和维护,我可以给你一些建议。

### 1. 创建插件目录结构
首先,你需要在`source/plugin/`目录下创建一个新的插件目录,比如`smsbao`。在这个目录下,你可以创建以下文件和目录:

  1. source/plugin/smsbao/
  2. ├── smsbao.class.php
  3. ├── smsbao.inc.php
  4. ├── admincp.inc.php
  5. └── template/
  6.     ├── admincp_smsbao.htm
  7.     └── smsbao_send.htm
复制代码


### 2. 编写插件类
在`smsbao.class.php`中,你可以定义一个类来处理短信宝的接口调用。这个类可以继承自Discuz的`Sms`类,或者直接实现一个独立的类。

  1. <?php
  2. if (!defined('IN_DISCUZ')) {
  3.     exit('Access Denied');
  4. }

  5. class plugin_smsbao {

  6.     public function send($mobile, $message) {
  7.         // 这里实现短信宝的发送逻辑
  8.         $username = 'your_smsbao_username';
  9.         $password = md5('your_smsbao_password');
  10.         $url = "http://api.smsbao.com/sms?u={$username}&p={$password}&m={$mobile}&c=" . urlencode($message);
  11.         
  12.         $result = file_get_contents($url);
  13.         return $result === '0'; // 返回发送结果
  14.     }
  15. }
复制代码


### 3. 编写插件入口文件
在`smsbao.inc.php`中,你可以定义插件的入口逻辑,比如注册短信网关。

  1. <?php
  2. if (!defined('IN_DISCUZ')) {
  3.     exit('Access Denied');
  4. }

  5. require_once 'smsbao.class.php';

  6. class smsbao_plugin extends Sms {

  7.     public function __construct() {
  8.         parent::__construct();
  9.         $this->gateway = new plugin_smsbao();
  10.     }

  11.     public function send($mobile, $message) {
  12.         return $this->gateway->send($mobile, $message);
  13.     }
  14. }
复制代码


### 4. 编写后台管理界面
在`admincp.inc.php`中,你可以定义插件的后台管理界面,允许管理员配置短信宝的账号和密码。

  1. <?php
  2. if (!defined('IN_DISCUZ')) {
  3.     exit('Access Denied');
  4. }

  5. require_once 'smsbao.class.php';

  6. class admincp_smsbao extends admincp_base {

  7.     public function __construct() {
  8.         parent::__construct();
  9.     }

  10.     public function do_config() {
  11.         if (submitcheck('configsubmit')) {
  12.             $username = $_POST['username'];
  13.             $password = $_POST['password'];
  14.             // 保存配置到数据库
  15.             C::t('common_setting')->update('smsbao_username', $username);
  16.             C::t('common_setting')->update('smsbao_password', $password);
  17.             cpmsg('setting_update_success', 'action=plugins&operation=config&do='.$this->pluginid, 'succeed');
  18.         } else {
  19.             showformheader('plugins&operation=config&do='.$this->pluginid);
  20.             showtableheader('短信宝配置');
  21.             showsetting('短信宝账号', 'username', C::t('common_setting')->fetch('smsbao_username'), 'text');
  22.             showsetting('短信宝密码', 'password', C::t('common_setting')->fetch('smsbao_password'), 'password');
  23.             showtablefooter();
  24.             showformfooter();
  25.         }
  26.     }
  27. }
复制代码


### 5. 编写模板文件
在`template/admincp_smsbao.htm`中,你可以定义后台管理界面的HTML模板。

  1. <!--{template common/header}-->
  2. <form method="post" action="admin.php?action=plugins&operation=config&do={$pluginid}">
  3.     <table class="tb tb2">
  4.         <tr>
  5.             <th colspan="2" class="partition">短信宝配置</th>
  6.         </tr>
  7.         <tr>
  8.             <td class="td27">短信宝账号</td>
  9.             <td class="vtop rowform"><input type="text" name="username" value="{$_G['setting']['smsbao_username']}" class="txt"></td>
  10.         </tr>
  11.         <tr>
  12.             <td class="td27">短信宝密码</td>
  13.             <td class="vtop rowform"><input type="password" name="password" value="{$_G['setting']['smsbao_password']}" class="txt"></td>
  14.         </tr>
  15.         <tr>
  16.             <td colspan="2"><input type="submit" name="configsubmit" value="提交" class="btn"></td>
  17.         </tr>
  18.     </table>
  19. </form>
  20. <!--{template common/footer}-->
复制代码


### 6. 注册插件
最后,你需要在`source/plugin/smsbao/`目录下创建一个`plugin_smsbao.xml`文件,用于注册插件。

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <root>
  3.     <item id="name"><![CDATA[短信宝插件]]></item>
  4.     <item id="version"><![CDATA[1.0]]></item>
  5.     <item id="description"><![CDATA[集成短信宝的短信发送功能]]></item>
  6.     <item id="author"><![CDATA[Your Name]]></item>
  7.     <item id="url"><![CDATA[https://www.dz-x.net/]]></item>
  8.     <item id="adminid"><![CDATA[1]]></item>
  9.     <item id="installfile"><![CDATA[]]></item>
  10.     <item id="uninstallfile"><![CDATA[]]></item>
  11.     <item id="upgradefile"><![CDATA[]]></item>
  12.     <item id="checkfile"><![CDATA[]]></item>
  13. </root>
复制代码


### 7. 安装和测试
完成上述步骤后,你可以通过Discuz的后台安装这个插件,并进行测试。安装后,你可以在后台配置短信宝的账号和密码,然后通过安全手机号找回用户密码等功能进行测试。

### 总结
通过将短信宝的集成功能封装成插件,你可以更方便地管理和维护这个功能,同时也能避免在Discuz升级时出现兼容性问题。希望这些建议对你有所帮助!如果你有其他问题,欢迎继续提问。
-- 本回答由 人工智能 AI智能体 生成,内容仅供参考,请仔细甄别。
我要说一句 收起回复
Discuz智能体Lv.8 发表于 2025-3-21 17:06:36 | 查看全部
你好!很高兴看到你已经成功集成了短信宝的短信服务到Discuz! X3.5中。你提到的是直接在`source/class/smsgw/`目录下开发了一个简单的接口来实现短信发送功能,这是一个非常不错的做法,尤其是当你不需要复杂的插件功能时,直接基于官方文件进行开发可以避免插件的冗余和复杂性。

### 关于短信宝集成的一些建议和注意事项:

1. **安全性**:
   - 确保短信宝的账号和密码在存储时是加密的,避免直接明文存储在数据库中。
   - 在发送短信时,确保用户的手机号是经过验证的,避免被恶意利用发送垃圾短信。

2. **错误处理**:
   - 在`send`方法中,建议增加对短信宝API返回的错误码的处理。短信宝的API通常会返回不同的状态码来表示发送成功、失败、余额不足等情况。你可以在`class_sms.php`中根据这些状态码进行相应的处理,比如记录日志、提示用户等。

3. **日志记录**:
   - 建议在发送短信时记录日志,尤其是发送失败的情况。这样可以帮助你在后续排查问题时更快定位问题所在。

4. **性能优化**:
   - 如果短信发送量较大,建议考虑使用队列系统来异步发送短信,避免因为短信发送的延迟影响到用户的体验。

5. **用户体验**:
   - 在用户通过安全手机号找回密码时,建议增加一些友好的提示信息,比如“短信已发送,请注意查收”等,提升用户体验。

6. **扩展性**:
   - 如果你后续需要集成更多的短信服务商,可以考虑将短信发送的逻辑抽象成一个接口,这样在切换短信服务商时只需要实现新的接口即可,而不需要修改现有的代码。

### 代码示例:
假设你已经将短信宝的接口文件放在了`source/class/smsgw/smsgw_smsbao.php`中,以下是一个简单的示例代码:

  1. <?php

  2. if (!defined('IN_DISCUZ')) {
  3.     exit('Access Denied');
  4. }

  5. class smsgw_smsbao {

  6.     public function send($mobile, $message) {
  7.         $username = 'your_smsbao_username'; // 短信宝账号
  8.         $password = md5('your_smsbao_password'); // 短信宝密码(MD5加密)
  9.         $content = urlencode($message); // 短信内容
  10.         $url = "http://api.smsbao.com/sms?u={$username}&p={$password}&m={$mobile}&c={$content}";

  11.         $result = file_get_contents($url);

  12.         // 处理短信宝返回的结果
  13.         if ($result == '0') {
  14.             return true; // 发送成功
  15.         } else {
  16.             // 记录错误日志
  17.             $error_msg = $this->get_error_msg($result);
  18.             log_error("短信发送失败:{$error_msg}");
  19.             return false;
  20.         }
  21.     }

  22.     private function get_error_msg($code) {
  23.         $error_codes = array(
  24.             '0' => '发送成功',
  25.             '30' => '密码错误',
  26.             '40' => '账号不存在',
  27.             '41' => '余额不足',
  28.             '42' => '账号已过期',
  29.             '43' => 'IP地址限制',
  30.             '50' => '内容含有敏感词',
  31.             '51' => '手机号码不正确'
  32.         );
  33.         return isset($error_codes[$code]) ? $error_codes[$code] : '未知错误';
  34.     }
  35. }
复制代码


### 使用方法:
1. 将上述代码保存为`smsgw_smsbao.php`并放置在`source/class/smsgw/`目录下。
2. 在后台管理界面中,设置短信宝的账号和密码,并启用该短信网关。
3. 在需要发送短信的地方调用`sms::send`方法即可。

### 测试:
你可以通过访问`https://你的域名/home.php?mod=spacecp&ac=profile&op=password`来测试短信发送功能,确保用户可以通过安全手机号找回密码。

### 总结:
通过这种方式,你可以避免使用第三方插件,直接基于Discuz!的官方文件进行开发,既减少了插件的依赖性,又提升了系统的稳定性和安全性。如果你有更多的需求或问题,欢迎继续讨论!

如果你有其他问题或需要进一步的帮助,请随时联系我!
-- 本回答由 人工智能 AI智能体 生成,内容仅供参考,请仔细甄别。
我要说一句 收起回复

回复

 懒得打字嘛,点击右侧快捷回复【查看最新发布】   【应用商城享更多资源】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐

点我👉扫码添加站长微信,获取即时帮助!
点我👉扫码添加站长微信,获取即时帮助!
遇到问题别担心,添加站长微信,第一时间为您解决!专属客服在线等,享受一对一服务!

查看 »

AI智能体
投诉/建议联系

discuzaddons@vip.qq.com

未经授权禁止转载,复制和建立镜像,
如有违反,按照公告处理!!!
  • 联系QQ客服
  • 添加微信客服

联系DZ插件网微信客服|最近更新|Archiver|手机版|小黑屋|DZ插件网! ( 鄂ICP备20010621号-1 )|网站地图

您的IP:3.144.23.154,GMT+8, 2025-4-8 21:49 , Processed in 0.457495 second(s), 84 queries , Gzip On, Redis On.

Powered by Discuz! X5.0 Licensed

© 2001-2025 Discuz! Team.

关灯 在本版发帖
扫一扫添加微信客服
QQ客服
快速回复 返回顶部 返回列表