HEX
Server: nginx/1.18.0
System: Linux iZj6c1ieg2jrpk1z5tzi19Z 6.3.9-1.el7.elrepo.x86_64 #1 SMP PREEMPT_DYNAMIC Wed Jun 21 22:18:40 EDT 2023 x86_64
User: www (1001)
PHP: 8.2.4
Disabled: passthru,exec,system,putenv,chroot,chgrp,chown,shell_exec,popen,proc_open,pcntl_exec,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,imap_open,apache_setenv
Upload Files
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);
    }

}