PHP下用redis队列发送短信PHP CLI代码

2 篇文章 0 订阅
该博客介绍了一个使用PHP CLI在后台处理Redis队列中短信发送的流程。通过循环查询Redis队列数据,进行POST提交操作,完成短信发送,并将反馈信息存入另一个Redis列表。
摘要由CSDN通过智能技术生成


流程:

循环查询redis队列里面的数据

然后post提交数据

反馈信息再写入另一个 redis list里面

cmd  => php task.php


<?php

/**
 * System Name: Maddong 1.0
 * User: RATDATA
 * Date: 2016/11/8 4:40
 * © 2016 MadCTO
 */
class Net
{
    function callInterfaceCommon($data_in = null)
    {
        $data_in=unserialize($data_in);
        if(empty($data_in['id'])||empty($data_in['phone'])||empty($data_in['content']))
        {
            return array('state'=>false,'message'=>json_encode($data_in));exit;
        }
        $URL = "http://xxxxx/sms.aspx";//运营商URL
        $data =
            [
                'account' => 'xx',
                'password' => 'xxx',
                'userid' => 'xxx',
                'mobile' => $data_in['phone'],
                'content' =>  $data_in['content'],
                'sendTime' => null,
                'action' => 'send',
                'extno' => null,
            ];//要发送的数据 自己修改
        $ch = curl_init();
        //判断ssl连接方式
        if (stripos($URL, 'https://') !== false) {
            curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
            curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
            curl_setopt($ch, CURLOPT_SSLVERSION, 1);
        }
        $connttime = 500; //连接等待时间500毫秒
        $timeout = 15000;//超时时间15秒

        $querystring = "";
        if (is_array($data)) {
            // Change data in to postable data
            foreach ($data as $key => $val) {
                if (is_array($val)) {
                    foreach ($val as $val2) {
                        $querystring .= urlencode($key) . '=' . urlencode($val2) . '&';
                    }
                } else {
                    $querystring .= urlencode($key) . '=' . urlencode($val) . '&';
                }
            }
            $querystring = substr($querystring, 0, -1); // Eliminate unnecessary &
        } else {
            $querystring = $data;
        }
        curl_setopt($ch, CURLOPT_URL, $URL);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);//反馈信息
        curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1); //http 1.1版本
        curl_setopt($ch, CURLOPT_CONNECTTIMEOUT_MS, $connttime);//连接等待时间
        curl_setopt($ch, CURLOPT_TIMEOUT_MS, $timeout);//超时时间
        curl_setopt($ch, CURLOPT_POST, true);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $querystring);
        $file_contents = curl_exec($ch);//获得返回值
        $status = curl_getinfo($ch);
        curl_close($ch);

        $call_back_json = json_encode(simplexml_load_string($file_contents, 'SimpleXMLElement', LIBXML_NOCDATA));
        $reslut = json_decode($call_back_json, true);
        $ststus = $reslut['returnstatus'];

        if ($ststus == 'Success') {
            return array('state'=>true);
        } else {
            return array('state'=>false,'message'=>json_encode($reslut));
        }

    }
}

set_time_limit(0);
header("Content-type: text/html; charset=utf-8");
$redis = new Redis();
$redis->pconnect('127.0.0.1', 6379) or die('errot');
$sms = new Net();
while (true) {
    $data = $redis->LPOP('Queue');
    if (!empty($data)) {

        $res = $sms->callInterfaceCommon($data);
        if($res['state'])
        {
            $data= unserialize($data);
            $redis->LPUSH('Queue2', serialize(array('id'=>$data['id'],'status'=>'success','time'=>time())));

        }else
        {
            $data= unserialize($data);
            $redis->LPUSH('Queue2', serialize(array('id'=>$data['id'],'status'=>'fail','time'=>time(),'msg'=>$res['message'])));
        }
    }
    sleep(rand() % 3);
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值