当前位置:首页 > PHP教程 > php应用 > 列表

PHP简单的分发实现多通道自由切换

发布:smiling 来源: PHP粉丝网  添加日期:2018-10-10 21:38:36 浏览: 评论:0 

本次文章本来想给大家写PHP实现简单的钩子,能自动去完成一些简单的机械式的工作。

不过考虑到实际中应用不是很必要。因此文章就改了为大家写PHP简单的分发实现多通道自由切换,下面我们具体来看看实现代码。

  1. //简单的钩子实现例子 
  2. class tool{ 
  3.   public static function main($class$fun$data = ''){ 
  4.     //前置公共操作 
  5.     $con = new $class
  6.     $con->$fun($data); 
  7.     //后置公共操作 
  8.   } 
  9. class a{ 
  10.   function b($data){ 
  11.     echo '我是方法b'
  12.   } 
  13. class c{ 
  14.   function d($data){ 
  15.     echo '我是方法d'
  16.   } 
  17. //钩子调用 
  18. tool::main('a','b','222'); 

在封装短信通道的时候本打算用钩子来实现的,可以自动发送短信(多通道)email,push等消息。。。

后来发现业务需求并没有想象中那么复杂,开发就搁置了。。。。

T_T 于是就采用了一种简单的分发方式来实现。

  1. class Ar_Sms{ 
  2.   const LANCHUANG = 1;//通道1 
  3.   const ALIDAYU = 2; //通道2 
  4.   private $type
  5.   private $chuanglan_config = array(//通道1配置项 
  6.     'api_send_url'=>'xxxx'
  7.     'api_balance_query_url'=> 'xxxxx'
  8.     'api_account'=> 'xxxx'
  9.     'api_password'=> 'xxxxx'
  10.   ); 
  11.   private $alidayu_config = array(//通道2配置项 
  12.     'api_key'=> 'xxxx'
  13.     'api_id'=> 'xxxxx'
  14.     'api_send_url'=> 'xxxxx'
  15.   ); 
  16.   public function __construct($type=1){ 
  17.     switch($type){ 
  18.       case self::LANCHUANG: 
  19.         $this->type = $type;break
  20.       case self::ALIDAYU: 
  21.         $this->type = $type;break
  22.       default
  23.         $this->type = false; 
  24.     } 
  25.   } 
  26.   //对外抛出的发送方法 
  27.   public function sendSms($mobile$msg){ 
  28.     switch($this->type){ 
  29.       case self::LANCHUANG: 
  30.         return $this->_sendCL($mobile$msg); 
  31.       case self::ALIDAYU: 
  32.         return $this->_sendAL($mobile$msg); 
  33.       default
  34.         return false; 
  35.     } 
  36.   } 
  37.   //通道1发送方法 
  38.   private function _sendCL($mobile$msg$needstatus = 'false'$extno = ''){ 
  39.     $postArr = array ( 
  40.       'account' => $this->chuanglan_config['api_account'], 
  41.       'pswd' => $this->chuanglan_config['api_password'], 
  42.       'msg' => $msg
  43.       'mobile' => $mobile
  44.       'needstatus' => $needstatus
  45.       'extno' => $extno 
  46.     ); 
  47.     $result = $this->_curlPost( $this->chuanglan_config['api_send_url'] , $postArr); 
  48.     $result = $this->_execResult($result); 
  49.     return $result[1] == 0 ? true : $result[1]; 
  50.   } 
  51.   //通道2发送方法 
  52.   private function _sendAL($mobile$msg){ 
  53.     $postArr = array ( 
  54.       'id' => $this->alidayu_config['api_id'], 
  55.       'key' => $this->alidayu_config['api_key'], 
  56.       'msg' => $msg
  57.       'mobile' => $mobile
  58.     ); 
  59.     $result = $this->_curlPost( $this->alidayu_config['api_send_url'] , $postArr); 
  60.     $result = $this->_execResult($result); 
  61.     return $result[1] == 0 ? true : $result[1]; 
  62.   } 
  63.   //-------------一些公共方法 
  64.   /** 
  65.    * 处理返回值\r\n 分割 
  66.    * 
  67.    */ 
  68.   private function _execResult($result){ 
  69.     $result=preg_split("/[,\r\n]/",$result); 
  70.     return $result
  71.   } 
  72.   /** 
  73.    * 处理返回值json 
  74.    * 
  75.    */ 
  76.   private function _jsonResult($result){ 
  77.     $result=json_decode($result, true); 
  78.     return $result
  79.   } 
  80.   /** 
  81.    * 通过CURL发送HTTP请求 
  82.    * @param string $url //请求URL 
  83.    * @param array $postFields //请求参数 
  84.    * @return mixed 
  85.    */ 
  86.   private function _curlPost($url,$postFields){ 
  87.     $postFields = http_build_query($postFields); 
  88.     $ch = curl_init (); 
  89.     curl_setopt ( $ch, CURLOPT_POST, 1 ); 
  90.     curl_setopt ( $ch, CURLOPT_HEADER, 0 ); 
  91.     curl_setopt ( $ch, CURLOPT_RETURNTRANSFER, 1 ); 
  92.     curl_setopt ( $ch, CURLOPT_URL, $url ); 
  93.     curl_setopt ( $ch, CURLOPT_POSTFIELDS, $postFields ); 
  94.     $result = curl_exec ( $ch ); 
  95.     curl_close ( $ch ); 
  96.     return $result
  97.   } 
  98. //phpfensi.com 
  99. $ob = new Ar_Sms(Ar_Sms::ALIDAYU);//通道1发送 
  100. $res = $ob->sendSms('xxxxx','xxxxxx'); 
  101. var_dump($res); 
  102. $ob = new Ar_Sms(Ar_Sms::LANCHUANG);//通道2发送 
  103. $res = $ob->sendSms('xxxxx','xxxxxx'); 
  104. var_dump($res); 

通过一个简单的分发实现多通道的自由切换,由于只是简单的发送所以没有进一步的抽象~ 囧orz

钩子的实现方式,设想有点大,具体的实现还有带考究。。有时间我会研究研究的 这里就抛一个简单的demo吧 设想的是--》多途径 多方式 多通道支持 方便扩展.

Tags: 通道

分享到: