ECJIA到家短信插件开发
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到家短信插件开发相关推荐
- 小猪CMS多用户微信营销平台短信插件开发
众所周知,小猪CMS已是当前php软件市场上的领跑者了,他以功能强大,操作界面友好而著称,用户群体非常广.他使用了Thinkphp框架作为底层,所以在进行功能扩展和二次开发时都是相当容易的.今天我就来 ...
- 【源码分享】POSCMS功能如何实现短信验证码
对接短信的时候发现一家短信公司,有些不错的短信验证码的插件,对接起来挺方便的,有需求的可以看一下.http://www.ihuyi.com/ 插件说明 本插件系互亿无线针对POSCMS V3.2.0 ...
- 得推校园detuio2o如何对接短信功能?
插件说明 本插件系互亿无线针对得推校园O2O短信插件开发,插件内的所有文件均为对原文件的修改,如果你的系统经过二次开发,安装本插件之前,请仔细核对修改. 功能介绍 1.后台手机号短信验证测试 2.手机 ...
- ECJIA集成Alidayu短信服务(使用官方提供的php版SDK)
一.在阿里云下载短信服务的SDK(php版) 二.把对应的SDK丢上packagist上,使用composer安装对应的包 详情:https://blog.csdn.net/homelam/artic ...
- 搭讪达人这样和女生发短信
[技术贴]搭讪达人这样和女生发短信 心理导读:这篇有技术含量的文章,虽然是讲男女交往,其实还是讲人与人之间处理关系.慢慢地说,迅速地思考,果断地去做. 传说某瓣有个魔鬼搭讪的培训小组,生性装逼的本人 ...
- 如何跟剛認識的女孩發短信(轉)
这篇文章挺有技术含量,虽然讲的是男女交往,但是其实还是人与人之间交往与处理关系. 对话,人与人之间最普通,但往往也是最有技巧的的交流方式.慢慢地说,迅速地思考,果断地决定去做. 编辑也来按一下:刚上大 ...
- 手机里舍不得删除的48条搞笑短信
1. 士兵问连长:作战时踩到地雷咋办?连长大为恼火:*,能咋办?踩坏了照价赔偿. 2. 很久墨收到你的信息 俺很心疼 俺想到死 曾用薯片割过脉 用豆腐撞过头 用降落伞跳过楼 用面条上过吊 可都墨死成 ...
- 转:090630 欠揍短信加笑话
1.跟你当这么久的朋友,你一直都很关心我, 我却时常给你添麻烦,真不知该怎么报答你... 所以...下辈子作牛作马....我一定会拔草给你吃的... 2.很想你,可是又不好意思打给你, 怕你正在忙,怕 ...
- 我手机中舍不得删除的43条搞笑短信
我手机中舍不得删除的43条搞笑短信 1. 士兵问连长:作战时踩到地雷咋办?连长大为恼火:靠,能咋办?踩坏了照价赔偿. 2. 很久墨收到你的信息 俺很心疼 俺想到死 曾用薯片割过脉 用豆腐撞过头 用降落 ...
最新文章
- 学习:正则表达式的基本语法
- Object:window_方法
- extjs学习—-官方模版注释2
- 交换系统可以在计算机网络应用吗,数据通信交换技术在计算机网络中的应用
- VB编PiView4注册机
- Sublime Text 模板插件SublimeTmpl
- 基于jsp的网上书店_[内附完整源码和文档] 基于JSP网上零食销售系统的设计与实现...
- fba4droid android,fba4droid模拟器
- python求平面n个两两间距离_任意两平面求夹角|Python练习系列[11]
- 原生开发、H5开发和混合开发的区别
- javaScript常用案例
- 亚信科技收购趋势科技中国
- android恶意积分墙代码,传统积分墙的忧虑:微信积分墙刷榜优化分析
- python基础知识-12-模块的了解
- 关于Navicat Premium连接Oracle数据库闪退(失败)的解决办法(带ocl.dll)
- ubuntu repo安装方法
- 大连大学计算机科学与技术研究生毕业工资,大学研究生毕业的你,现在一个月的月薪多少?现实让人想哭!...
- win7计算机自动关机设置在哪里设置方法,win7自动关机怎么设置?W7自动关机命令设置方法...
- 计算机基础---03Excel篇(入门,身份证筛选出生年月,自动填充功能,表格排序,自动筛选,高级筛选,数据有效性,求和)
- Windows资源管理器占用CPU过高