PHP简单的分发实现多通道自由切换
发布:smiling 来源: PHP粉丝网 添加日期:2018-10-10 21:38:36 浏览: 评论:0
本次文章本来想给大家写PHP实现简单的钩子,能自动去完成一些简单的机械式的工作。
不过考虑到实际中应用不是很必要。因此文章就改了为大家写PHP简单的分发实现多通道自由切换,下面我们具体来看看实现代码。
- //简单的钩子实现例子
- class tool{
- public static function main($class, $fun, $data = ''){
- //前置公共操作
- $con = new $class;
- $con->$fun($data);
- //后置公共操作
- }
- }
- class a{
- function b($data){
- echo '我是方法b';
- }
- }
- class c{
- function d($data){
- echo '我是方法d';
- }
- }
- //钩子调用
- tool::main('a','b','222');
在封装短信通道的时候本打算用钩子来实现的,可以自动发送短信(多通道)email,push等消息。。。
后来发现业务需求并没有想象中那么复杂,开发就搁置了。。。。
T_T 于是就采用了一种简单的分发方式来实现。
- class Ar_Sms{
- const LANCHUANG = 1;//通道1
- const ALIDAYU = 2; //通道2
- private $type;
- private $chuanglan_config = array(//通道1配置项
- 'api_send_url'=>'xxxx',
- 'api_balance_query_url'=> 'xxxxx',
- 'api_account'=> 'xxxx',
- 'api_password'=> 'xxxxx',
- );
- private $alidayu_config = array(//通道2配置项
- 'api_key'=> 'xxxx',
- 'api_id'=> 'xxxxx',
- 'api_send_url'=> 'xxxxx',
- );
- public function __construct($type=1){
- switch($type){
- case self::LANCHUANG:
- $this->type = $type;break;
- case self::ALIDAYU:
- $this->type = $type;break;
- default:
- $this->type = false;
- }
- }
- //对外抛出的发送方法
- public function sendSms($mobile, $msg){
- switch($this->type){
- case self::LANCHUANG:
- return $this->_sendCL($mobile, $msg);
- case self::ALIDAYU:
- return $this->_sendAL($mobile, $msg);
- default:
- return false;
- }
- }
- //通道1发送方法
- private function _sendCL($mobile, $msg, $needstatus = 'false', $extno = ''){
- $postArr = array (
- 'account' => $this->chuanglan_config['api_account'],
- 'pswd' => $this->chuanglan_config['api_password'],
- 'msg' => $msg,
- 'mobile' => $mobile,
- 'needstatus' => $needstatus,
- 'extno' => $extno
- );
- $result = $this->_curlPost( $this->chuanglan_config['api_send_url'] , $postArr);
- $result = $this->_execResult($result);
- return $result[1] == 0 ? true : $result[1];
- }
- //通道2发送方法
- private function _sendAL($mobile, $msg){
- $postArr = array (
- 'id' => $this->alidayu_config['api_id'],
- 'key' => $this->alidayu_config['api_key'],
- 'msg' => $msg,
- 'mobile' => $mobile,
- );
- $result = $this->_curlPost( $this->alidayu_config['api_send_url'] , $postArr);
- $result = $this->_execResult($result);
- return $result[1] == 0 ? true : $result[1];
- }
- //-------------一些公共方法
- /**
- * 处理返回值\r\n 分割
- *
- */
- private function _execResult($result){
- $result=preg_split("/[,\r\n]/",$result);
- return $result;
- }
- /**
- * 处理返回值json
- *
- */
- private function _jsonResult($result){
- $result=json_decode($result, true);
- return $result;
- }
- /**
- * 通过CURL发送HTTP请求
- * @param string $url //请求URL
- * @param array $postFields //请求参数
- * @return mixed
- */
- private function _curlPost($url,$postFields){
- $postFields = http_build_query($postFields);
- $ch = curl_init ();
- curl_setopt ( $ch, CURLOPT_POST, 1 );
- curl_setopt ( $ch, CURLOPT_HEADER, 0 );
- curl_setopt ( $ch, CURLOPT_RETURNTRANSFER, 1 );
- curl_setopt ( $ch, CURLOPT_URL, $url );
- curl_setopt ( $ch, CURLOPT_POSTFIELDS, $postFields );
- $result = curl_exec ( $ch );
- curl_close ( $ch );
- return $result;
- }
- } //phpfensi.com
- $ob = new Ar_Sms(Ar_Sms::ALIDAYU);//通道1发送
- $res = $ob->sendSms('xxxxx','xxxxxx');
- var_dump($res);
- $ob = new Ar_Sms(Ar_Sms::LANCHUANG);//通道2发送
- $res = $ob->sendSms('xxxxx','xxxxxx');
- var_dump($res);
通过一个简单的分发实现多通道的自由切换,由于只是简单的发送所以没有进一步的抽象~ 囧orz
钩子的实现方式,设想有点大,具体的实现还有带考究。。有时间我会研究研究的 这里就抛一个简单的demo吧 设想的是--》多途径 多方式 多通道支持 方便扩展.
Tags: 通道
推荐文章
热门文章
最新评论文章
- 写给考虑创业的年轻程序员(10)
- PHP新手上路(一)(7)
- 惹恼程序员的十件事(5)
- PHP邮件发送例子,已测试成功(5)
- 致初学者:PHP比ASP优秀的七个理由(4)
- PHP会被淘汰吗?(4)
- PHP新手上路(四)(4)
- 如何去学习PHP?(2)
- 简单入门级php分页代码(2)
- php中邮箱email 电话等格式的验证(2)