一、代码
class Sdkmessage { private $config; /** * sdk 短信接口 * @param $tel 手机号 * @param $content 短信内容 * @return bool */ public function send($tel, $content) { $content = "【给力餐饮】您的短信验证码为:".$content; $flag = 0; $params = ''; $this->config = config('sdk_sms'); //要post的数据 $argv = array( 'sn' => $this->config['sn'], ////替换成您自己的序列号 'pwd' => strtoupper(md5($this->config['sn'] . $this->config['pwd'])), //此处密码需要加密 加密方式为 md5(sn+password) 32位大写 'mobile' => $tel,//手机号 多个用英文的逗号隔开 post理论没有长度限制.推荐群发一次小于等于10000个手机号 'content' => iconv("UTF-8", "gb2312//IGNORE", $content),//短信内容 'ext' => '', 'stime' => '',//定时时间 格式为2011-6-29 11:09:21 'rrid' => '' ); //构造要post的字符串 foreach ($argv as $key => $value) { if ($flag != 0) { $params .= "&"; $flag = 1; } $params .= $key . "="; $params .= urlencode($value); $flag = 1; } $length = strlen($params); //创建socket连接 $fp = fsockopen("sdk.entinfo.cn", 8060, $errno, $errstr, 10) or exit($errstr . "--->" . $errno); //构造post请求的头 $header = "POST /webservice.asmx/mt HTTP/1.1 "; $header .= "Host:sdk.entinfo.cn "; $header .= "Content-Type: application/x-www-form-urlencoded "; $header .= "Content-Length: " . $length . " "; $header .= "Connection: Close "; //添加post的字符串 $header .= $params . " "; //发送post的数据 fputs($fp, $header); $inheader = 1; while (!feof($fp)) { $line = fgets($fp, 1024); //去除请求包的头只显示页面的返回数据 if ($inheader && ($line == " " || $line == " ")) { $inheader = 0; } if ($inheader == 0) { // echo $line; } } // dump($line); //<string xmlns="http://tempuri.org/">-5</string> $line = str_replace("<string xmlns="http://tempuri.org/">", "", $line); $line = str_replace("</string>", "", $line); $result = explode("-", $line); // dump($result); // echo $line."-------------"; if (count($result) > 1) return ['code'=>'ERROR','message'=>'发送失败']; else return ['code'=>'OK','message'=>'发送成功']; } }
二、调用
class Message extends Controller { const TYPE = 'Sdkmessage';//Alimessage public $obj; /** * @api {post} /mobile/message/send 发送短信 * @apiName /message/send * @apiGroup 短信验证 * @apiParam {string} mobile 手机号 * @apiSuccess {String} status 状态值:{'ok':成功,'error':失败,'msg':提示信息} **/ public function send() { try { if (!request()->isPost()) { return tips('非法请求'); } $mobile = input('mobile', '', 'trim'); if (empty($mobile)) return tips('手机号不能为空'); $cust = db('customer')->where('tel', $mobile)->where('status', 1)->find(); if (empty($cust)) { return tips('手机号不存在,请重新输入'); } $class = "\message\" . self::TYPE; $this->obj = new $class(); $code = rand(100000, 999999); $data = [ 'content' => $code, 'mobile' => $mobile, 'type' => 0, 'status' => 1, 'create_time' => time() ]; $id = db('mobile_apply')->insert($data); //发送短信 $res = $this->obj->send($mobile, $code); if ($res['code'] == 'OK') { db('mobile_apply')->where('status', $id) ->update(['status' => 2, 'msg' => json($res['message'])]); return tips('发送成功', 1, $res); } else { return tips($res['message']); } }catch(Exception $e) { return tips($e->getMessage()); } } /** * @api {post} /mobile/message/valid 验证 * @apiName /message/valid * @apiGroup 短信验证 * @apiParam {string} mobile 手机号 * @apiParam {string} code 验证码 * @apiSuccess {String} status 状态值:{'ok':成功,'error':失败,'msg':提示信息} **/ public function valid() { Session::prefix('index_auth'); if (request()->isPost()) { try { $mobile = input('mobile', '', 'trim'); $code = input('code', '', 'trim'); $sms = db('mobile_apply') ->where(['mobile' => $mobile, 'type' => ['eq', 0], 'status' => 2]) ->order('create_time desc') ->find(); if (!$sms) { throw new Exception('短信验证码已过期'); } // dump($sms); if ((time() - $sms['create_time']) > $this->config['expireTime']) { throw new Exception('短信验证码已经过期'); } if ($code == $sms['content']) { db('mobile_apply')->where(['mobile' => $mobile, 'type' => ['eq', 0]])->delete(); //查询用户的信息 $info = db('cust_account')->where(array('tel' => $mobile, 'status' => 1))->order('create_time desc')->find(); session('tel', $mobile); session('name', $info['account']); session('user_id', $info['cust_id']);// session('cid', $info['id']); return tips('验证成功', 1); } else { return tips('验证失败'); } } catch (Exception $e) { return tips($e->getMessage()); } } else { return tips('非法请求'); } } }