File: /www/wwwroot/www.cytocare.cn/wp-content/plugins/online-contact-widget/classes/sms.class.php
<?php
/**
 * Author: wbolt team
 * Author URI: https://www.wbolt.com
 */
class OCW_Sms extends OCW_Base
{
    public static function init()
    {
        //add_action();
        add_action('ocw_send_sms',function($mobile,$msg){
            self::send($mobile,['name'=>$msg]);
        },10,2);
        add_action('ocw_send_sms_test',function ($mobile,$cnf,$msg){
            //error_log(print_r([$mobile,$cnf,$msg],true),3,__DIR__.'/debug.txt');
            self::send($mobile,['name'=>$msg],$cnf);
        },10,3);
        //发送
        add_action('ocw_new_concat',array(__CLASS__,'ocw_new_concat'));
    }
    public static function ocw_new_concat($pid)
    {
        // global $wpdb;
        $notice = OCW_Admin::opt('items_data.msg.notice');
        if(!$notice || !is_array($notice) || !in_array('sms',$notice)){
            return;
        }
        $cnf = self::opt();
        $mobile = isset($cnf['to']) ? $cnf['to']: '' ;
        if(!$mobile){
            return;
        }
        $db = self::db();
        $t = $db->prefix.'ocw_contact';
        $row = $db->get_row($db->prepare("SELECT * FROM $t WHERE id=%d",$pid));
        if(!$row){
            return;
        }
        /*$conf = OCW_Contact::conf();
        $type = $conf['type'];*/
        //收到{$var1}的留言。
        $msg = [$row->name];
        /*if($type && isset($type[$row->type])){
            $msg[] = '关于'.$type[$row->type];
        }*/
        do_action('ocw_send_sms',$mobile,implode('',$msg));
    }
    public static function opt()
    {
        return OCW_Admin::opt('items_data.msg.sms');
    }
    /**
     * @param $mobile
     * @param array $data [code=>123]
     * @return bool
     */
    public static function send($mobile,array $data, array $cnf = null)
    {
        //get config
        if(!$cnf){
            $cnf = self::opt();
        }
        $result = ['code'=>1,'desc'=>'fail'];
        do{
            if(!$cnf){
                $result['desc'] = '短信配置为空';
                break;
            }
            if(!isset($cnf['vendor']) || empty($cnf['vendor']) || !isset($cnf[$cnf['vendor']])){
                $result['desc'] = '短信接口为空';
                break;
            }
            $sms_cnf = $cnf[$cnf['vendor']];
            $is_fail = false;
            switch ($cnf['vendor']) {
                case 'upyun':
                    if(empty($sms_cnf['id']) || empty($sms_cnf['secret']) || empty($sms_cnf['tpl'])){
                        $result['desc'] = '短信接口参数不完整';
                        $is_fail = true;
                        break;
                    }
                    require_once __DIR__.'/sms/upyun.php';
                    $ret = OCW_Sms_Upyun::send($cnf['upyun'],$mobile,$data);
                    $result['code'] = 0;
                    $result['desc'] = 'success';
                    $result['data'] = $ret;
                    if(!$ret || !$ret->code){
                        break;
                    }
                    $result['code'] = 1;
                    $result['desc'] = '发送失败';
                    if($ret->error_code){
                        $result['desc'] = $ret->error_code;
                    }else if($ret->message_ids && $ret->message_ids[0]){
                        $result['desc'] = '发送失败,'.$ret->message_ids[0]->error_code;
                    }
                    break;
                case 'aliyun':
                    if(empty($sms_cnf['id']) || empty($sms_cnf['secret']) || empty($sms_cnf['tpl']) || empty($sms_cnf['sign'])){
                        $result['desc'] = '短信接口参数不完整';
                        $is_fail = true;
                        break;
                    }
                    require_once __DIR__.'/sms/aliyun.php';
                    $ret = OCW_Sms_Aliyun::send($cnf['aliyun'],$mobile,$data);
                    $result['code'] = 0;
                    $result['desc'] = 'success';
                    $result['data'] = $ret;
                    if(!$ret || $ret->Code === 'OK'){
                        break;
                    }
                    $result['code'] = 1;
                    $result['desc'] = $ret->Message;
                    break;
                case 'huawei':
                    if(empty($sms_cnf['id']) || empty($sms_cnf['secret']) || empty($sms_cnf['tpl']) || empty($sms_cnf['sign'])  || empty($sms_cnf['api'])  || empty($sms_cnf['channel'])){
                        $result['desc'] = '短信接口参数不完整';
                        $is_fail = true;
                        break;
                    }
                    require_once __DIR__.'/sms/huawei.php';
                    $ret = OCW_Sms_Huawei::send($cnf['huawei'],$mobile,$data);
                    $result['code'] = 0;
                    $result['desc'] = 'success';
                    $result['data'] = $ret;
                    if(!$ret || $ret->code === '000000'){
                        break;
                    }
                    $result['code'] = 1;
                    $result['desc'] = '发送失败[code:'.$ret->code.',desc:'.$ret->description.']';
                    break;
                default:
                    $result['desc'] = '没有找到对应短信发送接口';
                    break;
            }
            if($is_fail){
                break;
            }
        }while(0);
        return apply_filters('ocw_sms_send_result',$result);
    }
}