1、本插件针对悟空CRM V0.5.5版本开发,安装前请仔细核对你的系统版本。
2、设置短信参数:系统设置->SMTP设置,填写互亿无线账号密码,其他参数请参照截图。
修改了的代码文件位置:
\App\Common\common.php
\App\Lang\zh-cn\setting.php
\App\Lib\Action\SettingAction.class.php
\App\Runtime\Data\sms.php
\App\Tpl\Setting\smtp.html
/*
*
* 返回码说明 短信函数返回2发送成功
*
* */
//发送到目标手机号码 $telphone手机号码 $message短信内容
function sendSMS($telphone, $message, $sign_name = "sign_name", $sendtime = '')
{
$sms = F('sms');
$argv = array(
'account' => $sms['uid'],
'password' => $sms['passwd'],
'mobile' => $telphone,
'content' => $message,
);
$result = file_get_contents('http://106.ihuyi.com/webservice/sms.php?method=Submit&' . http_build_query($argv));
$result = xml_to_array($result);
if ($result['SubmitResult']['code'] == 2) {
return 1;
} else {
return 0;
}
}
function sendtestSMS($uid, $uname, $telphone, $sign_name = "sign_name")
{
$sms = F('sms');
$argv = array(
'account' => $sms['uid'],
'password' => $sms['passwd'],
'mobile' => $telphone,
'content' => '您的验证码是:' . rand(111111, 999999) . '。请不要把验证码泄露给其他人。',
);
$result = file_get_contents('http://106.ihuyi.com/webservice/sms.php?method=Submit&' . http_build_query($argv));
$result = xml_to_array($result);
if ($result['SubmitResult']['code'] == 2) {
return 1;
} else {
return 0;
}
}
//发送到目标手机号码字符串 用","隔开 $telphone手机号码 $message短信内容
function sendGroupSMS($telphone, $message, $sign_name = "sign_name", $sendtime = '')
{
$sms = F('sms');
$argv = array(
'account' => $sms['yx_uid'],
'password' => $sms['yx_passwd'],
'mobile' => $telphone,
'content' => $message,
);
$result = file_get_contents('http://api.yx.ihuyi.com/webservice/sms.php?method=Submit&' . http_build_query($argv));
$result = xml_to_array($result);
if ($result['SubmitResult']['code'] == 2) {
return 1;
} else {
return 0;
}
}
function getSmsNum()
{
$sms = F('sms');
$argv = array(
'account' => $sms['uid'],
'password' => $sms['passwd'],
);
$result = file_get_contents('http://106.ihuyi.com/webservice/sms.php?method=GetNum&' . http_build_query($argv));
$result = xml_to_array($result);
if ($result['GetNumResult']['code'] == 2) {
return $result['GetNumResult']['num'];
} else {
return 0;
}
}
public function sendSms(){
if($this->isPost()){
$phoneNum = trim($_POST['phoneNum']);
$message = trim($_POST['smsContent']);
if($_POST['settime']){
$send_time = strtotime(trim($_POST['sendtime']));
if($send_time > time()){
$sendtime = date('YmdHis',$send_time);
}
}
$current_sms_num = getSmsNum();
if(!F('sms')) alert('success',L('SEND_SMS_FAILED'),$_SERVER['HTTP_REFERER']);
$phoneNum = str_replace(" ","",$phoneNum);
$phone_array = explode(chr(10),$phoneNum);
if(sizeof($phone_array) > 0){
//if(sizeof($phone_array) > $current_sms_num) alert('error','短信余额不足,请联系管理员,及时充值!',$_SERVER['HTTP_REFERER']);
}
$fail_array = array();
$success_array = array();
if($phoneNum && $message){
if(strpos($message,'{$name}',0) === false){
foreach($phone_array as $k=>$v){
if($v){
$phone = substr($v,0,11);
if(is_phone($phone)){
$success_array[] = $phone;
}else{
$fail_array[] = $v;
}
}
}
if(!empty($fail_array)){
$fail_message = L('PART_OF_NUMBER_SEND_FAILED').implode(',', $fail_array);
}
//echo '发送成功!';die();
$result = sendGroupSMS(implode(',', $success_array),$message,'yx_uid', $sendtime);
if($result == 1){
$m_sms_record=M('smsRecord');
$data['role_id'] = session('role_id');
$data['telephone'] = implode(',', $success_array);
$data['content'] = $message;
$data['sendtime'] = time();
$m_sms_record->add($data);
alert('success', L('SEND_SUCCESS_MAY_DELAY_BY_BAD_NETWORK').$fail_message,$_SERVER['HTTP_REFERER']);
}else{
alert('error',L('SMS_NOTIFICATION_FAILS_CODE', array($result)),$_SERVER['HTTP_REFERER']);
}
}else{
foreach($phone_array as $k=>$v){
$real_message = $message;
$name = '';
if($v){
$no = str_replace(" ","",$v);
$phone = substr($no,0,11);
if(is_phone($phone)){
if(strpos($v,',',0) === false){
$info_array = explode(',', $v);
}else{
$info_array = explode(',', $v);
}
$real_message = str_replace('{$name}',$info_array[1],$real_message);
$result =sendSMS($phone, $real_message, 'yx_uid', $sendtime);
$m_sms_record=M('smsRecord');
$data['role_id']=session('role_id');
$data['telephone']=$phone;
$data['content']=$real_message;
$data['sendtime']=time();
$m_sms_record->add($data);
if($result<0 && $k==0){
alert('error', L('SMS_NOTIFICATION_FAILS_CODE', array($result)),$_SERVER['HTTP_REFERER']);
}
}else{
$fail_array[] = $v;
}
}
}
if(!empty($fail_array)){
$fail_message = L('PART_OF_NUMBER_SEND_FAILED').implode(',', $fail_array);
}
alert('success',L('SEND_SUCCESS_MAY_DELAY_BY_BAD_NETWORK').$fail_message,U('setting/sendsms'));
}
}else{
alert('error',L('INCOMPLETE_INFORMATION'),$_SERVER['HTTP_REFERER']);
}
}else{
$current_sms_num = getSmsNum();
$model = trim($_GET['model']);
if($model == 'customer'){
$customer_ids = trim($_GET['customer_ids']);
if($customer_ids){
$contacts_ids = M('RContactsCustomer')->where('customer_id in (%s)', $customer_ids)->getField('contacts_id', true);
$contacts_ids = implode(',', $contacts_ids);
$contacts = D('ContactsView')->where('contacts.contacts_id in (%s)', $contacts_ids)->select();
$this->contacts = $contacts;
}else{
alert('error',L('SELECT_CUSTOMER_TO_SEND'),$_SERVER['HTTP_REFERER']);
}
}elseif($model == 'contacts'){
$contacts_ids = trim($_GET['contacts_ids']);
if(!$contacts_ids) alert('error',L('SELECT_CONTACTS_TO_SEND'),$_SERVER['HTTP_REFERER']);
$contacts = D('ContactsView')->where('contacts.contacts_id in (%s)', $contacts_ids)->select();
$this->contacts = $contacts;
}elseif($model == 'leads'){
$d_v_leads = D('LeadsView');
$leads_ids = trim($_GET['leads_ids']);
$where['leads_id'] = array('in',$leads_ids);
$customer_list = $d_v_leads->where($where)->select();
$contacts = array();
foreach ($customer_list as $k => $v) {
$contacts[] = array('name'=>$v['contacts_name'], 'customer_name'=>$v['name'], 'telephone'=>trim($v['mobile']));
}
$this->contacts = $contacts;
}
$this->templateList = M('SmsTemplate')->order('order_id')->select();
$this->alert = parseAlert();
$this->current_sms_num = $current_sms_num;
$this->display();
}
}
//短信发件箱
public function smsRecord(){
$m_sms_record=M('smsRecord');
$where = array();
$params = array();
if ($_REQUEST["field"]) {
$field = trim($_REQUEST['field']) == 'all' ? 'title|content' : $_REQUEST['field'];
$search = empty($_REQUEST['search']) ? '' : trim($_REQUEST['search']);
$condition = empty($_REQUEST['condition']) ? 'is' : trim($_REQUEST['condition']);
if ('sendtime' == $field) $search = is_numeric($search)?$search:strtotime($search);
switch ($condition) {
case "is" : $where[$field] = array('eq',$search);break;
case "isnot" : $where[$field] = array('neq',$search);break;
case "contains" : $where[$field] = array('like','%'.$search.'%');break;
case "not_contain" : $where[$field] = array('notlike','%'.$search.'%');break;
case "start_with" : $where[$field] = array('like',$search.'%');break;
case "end_with" : $where[$field] = array('like','%'.$search);break;
case "is_empty" : $where[$field] = array('eq','');break;
case "is_not_empty" : $where[$field] = array('neq','');break;
case "gt" : $where[$field] = array('gt',$search);break;
case "egt" : $where[$field] = array('egt',$search);break;
case "lt" : $where[$field] = array('lt',$search);break;
case "elt" : $where[$field] = array('elt',$search);break;
case "eq" : $where[$field] = array('eq',$search);break;
case "neq" : $where[$field] = array('neq',$search);break;
case "between" : $where[$field] = array('between',array($search-1,$search+86400));break;
case "nbetween" : $where[$field] = array('not between',array($search,$search+86399));break;
case "tgt" : $where[$field] = array('gt',$search+86400);break;
default : $where[$field] = array('eq',$search);
}
$params = array('field='.$field, 'condition='.$condition, 'search='.trim($_REQUEST["search"]));
}
$p = isset($_GET['p']) ? intval($_GET['p']) : 1 ;
if(!session('?admin')){
$where['role_id'] = session('role_id');
}
$list = $m_sms_record->where($where)->page($p.',10')->select();
foreach($list as $k=>$v){
//查发送人名字
$list[$k]['send_user'] = M('user')->where('role_id = %d', $v['role_id'])->getField('name');
//截取手机号
if(strstr($v['telephone'],',')){
$list[$k]['subtelephone'] = substr($v['telephone'],0,strpos($v['telephone'],',')).'...';
}else{
$list[$k]['subtelephone'] = $v['telephone'];
}
//截取内容
if(mb_strlen($v['content'],'utf-8') >= 30){
$list[$k]['subcontent'] = mb_substr($v['content'],0,30,'utf8').'...';
}else{
$list[$k]['subcontent'] = $v['content'];
}
}
$count =$m_sms_record->where($where)->count();
import("@.ORG.Page");
$Page = new Page($count,10);
$Page->parameter = implode('&', $params);
$this->assign('page',$Page->show());
$this->assign('data',$list);
$this->alert=parseAlert();
$this->display();
}
如果大家需要开发悟空CRM插件的 可以联系我