ECJia移动商城系统(EC+)是一款基于移动互联网的商城应用服务产品,重新定义了移动商城系统操作方式及用户体验 ,让用户轻松将商城开到移动设备中,拥有执行效率高、上手轻松、管理便捷等一系列优点。

只要是商城系统就必不可免的会用到短信,今天就教大家如何开发ECJIA到家系统的短信插件,短信接口使用的是短信宝短信平台的短信接口,小伙伴一定会问为什么使用短信宝作为案例呢?原因很简单,因为短信宝的平台极其稳定,而且短信发送速度相当快捷,验证码和订单通知在3~5秒就能收到,用户体验非常好,所以我们公司一直和短信宝保持着合作关系,小伙伴们也可以去短信宝的官网(http://www.smsbao.com)注册一个账号,还有免费的短信条数送呢。

接下来我就说一下开发步骤:第一步我们要清楚目录格式,插件是放在content/plugins目录下,我们首先在plugins文件夹下面建立一个文件夹,名字叫sms_smsbao,在sms_smsbao文件夹下面创建下列文件,languages文件夹、config.php文件、sms_smsbao.class.php文件、sms_smsbao.php文件、SMSbao.php文件。languages文件夹下面需要创建zh_CN文件夹,在zh_CN文件夹下面创建plugin.lang.php文件。文件创建完成之后可以正式开发了。

第二步:打开config.php文件,我们在这个文件中配置短信参数:

<?phpreturn array('sms_code'      => 'sms_smsbao','check_balance' => true,'forms' => array(array('name' => 'app_key',           'type' => 'text',       'value' => ''),array('name' => 'app_secret',        'type' => 'text',       'value' => ''),array('name' => 'app_sign',        'type' => 'text',       'value' => '')),
);

第三步:打开sms_smsbao.class.php文件,这个文件是加载短信宝短信插件的配置信息的。

<?phpdefined('IN_ECJIA') or exit('No permission resources.');use Ecjia\App\Sms\SmsAbstract;class sms_smsbao extends SmsAbstract
{public function setConfig(array $config){parent::setConfig($config);$this->setAgentConfig();$this->agent = royalcms('sms')->driver('smsbao');}public function setAgentConfig(){RC_Config::set('sms::sms.agents.smsbao.credentials', ['appKey' => $this->config['app_key'],'appSecret' => $this->config['app_secret'],'appsign' => $this->config['app_sign']]);}/*** 获取插件代号*  * @see \Ecjia\System\Plugin\PluginInterface::getCode()*/public function getCode(){return $this->loadConfig('sms_code');}/** * 加载配置文件* * @see \Ecjia\System\Plugin\PluginInterface::loadConfig()*/public function loadConfig($key = null, $default = null){        return $this->loadPluginData(RC_Plugin::plugin_dir_path(__FILE__) . 'config.php', $key, $default);}/** * 加载语言包* * @see \Ecjia\System\Plugin\PluginInterface::loadLanguage()*/public function loadLanguage($key = null, $default = null){$locale = RC_Config::get('system.locale');return $this->loadPluginData(RC_Plugin::plugin_dir_path(__FILE__) . '/languages/'.$locale.'/plugin.lang.php', $key, $default);}}// end

第四步:打开sms_smsbao.php文件,这个文件是作为安装卸载及使用插件的文件。

<?php/*
Plugin Name: 短信宝短信
Plugin URI: http://www.smsbao.com
Description: 使用短信宝短信渠道,发送验证码短信、订单通知等。
Author: ECJIA TEAM
Version: 1.0.0
Author URI: http://www.ecjia.com/
Plugin App: sms
*/
defined('IN_ECJIA') or exit('No permission resources.');
class plugin_sms_smsbao {public static function install() {$config = include(RC_Plugin::plugin_dir_path(__FILE__) . 'config.php');$param = array('file' => __FILE__, 'config' => $config);return RC_Api::api('sms', 'plugin_install', $param);}public static function uninstall() {$config = include(RC_Plugin::plugin_dir_path(__FILE__) . 'config.php');$param = array('file' => __FILE__, 'config' => $config);return RC_Api::api('sms', 'plugin_uninstall', $param);}public static function royalcms_sms_agent_filter($factories) {require_once RC_Plugin::plugin_dir_path(__FILE__) . 'SMSbao.php';$factories['smsbao'] = 'SMSbao';return $factories;}}Ecjia_PluginManager::extend('sms_smsbao', function() {require_once RC_Plugin::plugin_dir_path(__FILE__) . 'sms_smsbao.class.php';return new sms_smsbao();
});RC_Plugin::register_activation_hook(__FILE__, array('plugin_sms_smsbao', 'install'));
RC_Plugin::register_deactivation_hook(__FILE__, array('plugin_sms_smsbao', 'uninstall'));
RC_Hook::add_filter('royalcms_sms_agent_filter', array( 'plugin_sms_smsbao', 'royalcms_sms_agent_filter' ));// end

第五步:打开SMSbao.php文件,这个文件是短信发送的接口文件。

<?phpuse Royalcms\Component\Support\Arr;
use Royalcms\Component\Sms\Sms;
use Royalcms\Component\Sms\Contracts\SmsAgent;class SMSbao extends Sms implements SmsAgent
{const HOST      = 'http://api.smsbao.com/sms?';private $appKey;private $appSecret;private $appSign;private $statusStr = array("0" => "短信发送成功","-1" => "参数不全","-2" => "服务器空间不支持,请确认支持curl或者fsocket,联系您的空间商解决或者更换空间!","30" => "密码错误","40" => "账号不存在","41" => "余额不足","42" => "帐户已过期","43" => "IP地址限制","50" => "内容含有敏感词");public function __construct($config){$this->config = $config;$this->transformConfig();}public function transformConfig(){$credentials = Arr::pull($this->config, 'credentials');$this->appKey = Arr::pull($credentials, 'appKey');$this->appSecret = Arr::pull($credentials, 'appSecret');$this->appSign = Arr::pull($credentials, 'appsign');}protected function authParams(){return ['u'   => $this->appKey,'p'  => $this->appSecret,'k' =>  $this->appSign];}/*** 发送信息* * @see \Royalcms\Component\Sms\Contracts\SmsAgent::send()*/public function send($mobile){$url = self::HOST.'u='.$this->appKey.'&p='.md5($this->appSecret).'&m='.$mobile.'&c=【'.$this->appSign.'】'.$this->content;$ret = file_get_contents($url);return $ret;}/*** 查询账户余额*/public function balance(){$url = 'http://api.smsbao.com/query?u='.$this->appKey.'&p='.md5($this->appSecret);$ret = file_get_contents($url);$rest = explode(",",$ret);$res['data']['num'] = $rest['1'];return $res;}/*** @param $url* @param array $body* @return array $result* @return int $result[].code 返回0则成功,返回其它则错误* @return string $result[].msg 返回消息* @return string $result[].raw 接口返回的原生信息* @return array $result[].data 数据信息*/public function httpRequest($url, array $body){$data = ['body' => $body];$response = $this->sendWithRetry($url, $data);$result = $this->transformerResponse($response);return $result;}/*** 转换返回的信息处理* @param array $response* @return array $result* @return int $result[].code 返回0则成功,返回其它则错误* @return string $result[].msg 返回消息* @return string $result[].raw 接口返回的原生信息* @return array $result[].data 数据信息*/public function transformerResponse($response){$body = $response['body'];$result_arr = RC_Xml::to_array($body);$data = array();if (isset($result_arr['smsid'])) {$data['smsid'] = $result_arr['smsid'][0];$data['msgid'] = $result_arr['smsid'][0];}if (isset($result_arr['num'])) {$data['num']   = $result_arr['num'][0];}$result = ['raw' => $body,'data' => $data,'code' => $result_arr['code'][0],'description' => $result_arr['msg'][0],];if ($result['code'] != '2') {return new ecjia_error('ihuyi_error_'.$result['code'], $result['description'], $result);}return $result;}}

第六步:找到项目/wendor/royalcms/sms/config/sms.php,在agents中添加

  'smsbao' => ['credentials' => ['appKey' => env('SMSBAO_APPKEY'),'appSecret' => env('SMSBAO_APPSECRET'),'appsign' => env('SMSBAO_APPSIGN')],'executableFile' => 'SMSbao',],

第七步:在项目/vendor/royalcms/sms/Royalcms/Component/Sms/Agents下新建一个文件,取名为SMSbao.php。

<?phpnamespace Royalcms\Component\Sms\Agents;use Royalcms\Component\Support\Arr;
use Royalcms\Component\Sms\Sms;
use Royalcms\Component\Sms\Contracts\SmsAgent;class SMSbao extends Sms implements SmsAgent
{const HOST      = 'http://api.smsbao.com/sms?';private $appKey;private $appSecret;private $appSign;private $statusStr = array("0" => "短信发送成功","-1" => "参数不全","-2" => "服务器空间不支持,请确认支持curl或者fsocket,联系您的空间商解决或者更换空间!","30" => "密码错误","40" => "账号不存在","41" => "余额不足","42" => "帐户已过期","43" => "IP地址限制","50" => "内容含有敏感词");public function __construct($config){$this->config = $config;$this->transformConfig();}public function transformConfig(){$credentials = Arr::pull($this->config, 'credentials');$this->appKey = Arr::pull($credentials, 'appKey');$this->appSecret = Arr::pull($credentials, 'appSecret');}protected function authParams(){return ['u'   => $this->appKey,'p'  => $this->appSecret,'k' =>  $this->appSign];}/*** 发送信息* * @see \Royalcms\Component\Sms\Contracts\SmsAgent::send()*/public function send($mobile){$url = self::HOST;$requestParams = array('content' => $this->content,'mobile' => $mobile,);$requestParams = array_merge($this->authParams(), $requestParams);return $this->httpRequest($url, $requestParams);}/*** 查询账户余额*/public function balance(){$url = 'http://api.smsbao.com/query?u='.$this->appKey.'&p='.md5($this->appSecret);$ret = file_get_contents($url);$retArr = split("\n", $ret);$balanceArr = split(",", $retArr[1]);$rest = $retArr[0] == 0 ? $balanceArr[1] : $ret;return $rest;}/*** @param $url* @param array $body* @return array $result* @return int $result[].code 返回0则成功,返回其它则错误* @return string $result[].msg 返回消息* @return string $result[].raw 接口返回的原生信息* @return array $result[].data 数据信息*/public function httpRequest($url, array $body){$data = ['body' => $body];$response = $this->sendWithRetry($url, $data);$result = $this->transformerResponse($response);return $result;}/*** 转换返回的信息处理* @param array $response* @return array $result* @return int $result[].code 返回0则成功,返回其它则错误* @return string $result[].msg 返回消息* @return string $result[].raw 接口返回的原生信息* @return array $result[].data 数据信息*/public function transformerResponse($response){$body = $response['body'];$result_arr = RC_Xml::to_array($body);$data = array();if (isset($result_arr['smsid'])) {$data['smsid'] = $result_arr['smsid'][0];$data['msgid'] = $result_arr['smsid'][0];}if (isset($result_arr['num'])) {$data['num']   = $result_arr['num'][0];}$result = ['raw' => $body,'data' => $data,'code' => $result_arr['code'][0],'description' => $result_arr['msg'][0],];if ($result['code'] != '2') {return new ecjia_error('ihuyi_error_'.$result['code'], $result['description'], $result);}return $result;}}

好了,短信宝接口替换全部完成。。如果看了文章不清楚的话,在短信宝官网中也提供了插件下载地址:http://www.smsbao.com/plugin/158.html 小伙伴们可以对着短信宝短信插件,来看我这篇文章,这样会更直观一些。

ECJIA到家短信插件开发相关推荐

  1. 小猪CMS多用户微信营销平台短信插件开发

    众所周知,小猪CMS已是当前php软件市场上的领跑者了,他以功能强大,操作界面友好而著称,用户群体非常广.他使用了Thinkphp框架作为底层,所以在进行功能扩展和二次开发时都是相当容易的.今天我就来 ...

  2. 【源码分享】POSCMS功能如何实现短信验证码

    对接短信的时候发现一家短信公司,有些不错的短信验证码的插件,对接起来挺方便的,有需求的可以看一下.http://www.ihuyi.com/ 插件说明 本插件系互亿无线针对POSCMS V3.2.0 ...

  3. 得推校园detuio2o如何对接短信功能?

    插件说明 本插件系互亿无线针对得推校园O2O短信插件开发,插件内的所有文件均为对原文件的修改,如果你的系统经过二次开发,安装本插件之前,请仔细核对修改. 功能介绍 1.后台手机号短信验证测试 2.手机 ...

  4. ECJIA集成Alidayu短信服务(使用官方提供的php版SDK)

    一.在阿里云下载短信服务的SDK(php版) 二.把对应的SDK丢上packagist上,使用composer安装对应的包 详情:https://blog.csdn.net/homelam/artic ...

  5. 搭讪达人这样和女生发短信

    [技术贴]搭讪达人这样和女生发短信 心理导读:这篇有技术含量的文章,虽然是讲男女交往,其实还是讲人与人之间处理关系.慢慢地说,迅速地思考,果断地去做.  传说某瓣有个魔鬼搭讪的培训小组,生性装逼的本人 ...

  6. 如何跟剛認識的女孩發短信(轉)

    这篇文章挺有技术含量,虽然讲的是男女交往,但是其实还是人与人之间交往与处理关系. 对话,人与人之间最普通,但往往也是最有技巧的的交流方式.慢慢地说,迅速地思考,果断地决定去做. 编辑也来按一下:刚上大 ...

  7. 手机里舍不得删除的48条搞笑短信

    1. 士兵问连长:作战时踩到地雷咋办?连长大为恼火:*,能咋办?踩坏了照价赔偿. 2. 很久墨收到你的信息 俺很心疼 俺想到死 曾用薯片割过脉 用豆腐撞过头 用降落伞跳过楼 用面条上过吊 可都墨死成 ...

  8. 转:090630 欠揍短信加笑话

    1.跟你当这么久的朋友,你一直都很关心我, 我却时常给你添麻烦,真不知该怎么报答你... 所以...下辈子作牛作马....我一定会拔草给你吃的... 2.很想你,可是又不好意思打给你, 怕你正在忙,怕 ...

  9. 我手机中舍不得删除的43条搞笑短信

    我手机中舍不得删除的43条搞笑短信 1. 士兵问连长:作战时踩到地雷咋办?连长大为恼火:靠,能咋办?踩坏了照价赔偿. 2. 很久墨收到你的信息 俺很心疼 俺想到死 曾用薯片割过脉 用豆腐撞过头 用降落 ...

最新文章

  1. 学习:正则表达式的基本语法
  2. Object:window_方法
  3. extjs学习—-官方模版注释2
  4. 交换系统可以在计算机网络应用吗,数据通信交换技术在计算机网络中的应用
  5. VB编PiView4注册机
  6. Sublime Text 模板插件SublimeTmpl
  7. 基于jsp的网上书店_[内附完整源码和文档] 基于JSP网上零食销售系统的设计与实现...
  8. fba4droid android,fba4droid模拟器
  9. python求平面n个两两间距离_任意两平面求夹角|Python练习系列[11]
  10. 原生开发、H5开发和混合开发的区别
  11. javaScript常用案例
  12. 亚信科技收购趋势科技中国
  13. android恶意积分墙代码,传统积分墙的忧虑:微信积分墙刷榜优化分析
  14. python基础知识-12-模块的了解
  15. 关于Navicat Premium连接Oracle数据库闪退(失败)的解决办法(带ocl.dll)
  16. ubuntu repo安装方法
  17. 大连大学计算机科学与技术研究生毕业工资,大学研究生毕业的你,现在一个月的月薪多少?现实让人想哭!...
  18. win7计算机自动关机设置在哪里设置方法,win7自动关机怎么设置?W7自动关机命令设置方法...
  19. 计算机基础---03Excel篇(入门,身份证筛选出生年月,自动填充功能,表格排序,自动筛选,高级筛选,数据有效性,求和)
  20. Windows资源管理器占用CPU过高

热门文章

  1. 利用shell/bask产生随机字符串
  2. oracle用命令查表结构,Oracle查看表结构命令详解
  3. 3D游戏人物模型贴图布线
  4. Android应用接入支付宝支付详细教程
  5. 朱凯:ClickHouse 全貌介绍与年度最令人兴奋的五大新特性
  6. 第八周项目五 定期存款利息计算器 switch语句
  7. 农场游戏开发记录十七(控制台版本完成)
  8. python爬虫逆向|某版本sojson加密逻辑分析与通杀
  9. 博途V16 与 FactoryIO的连接教程(详细版)
  10. Arduino I2C + 数字式环境光传感器BH1750FVI