旧版悟空crm系统二次开发对接互亿无线短信 SMS插件开发

悟空crm客户管理系统二次开发 单独新增表格字段 3.1,需要关联部门和员工层级关系,比如:普通员工只填写自己的数据,部门领导客户看到下面人员所有数据,管理员可以看到所有部门数据。注意点:有层级关系,管理员账号可以看到全部数据,主管只能看到下属数据。3.2,条件筛选,时间筛选、部门筛选、员工筛选、全部。3.3,表格可以自定义增删改,自定义隐藏和启字段。时间筛选、部门筛选、员工筛选、全部。(以表格的形式呈现出来) 阅读详情

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插件的 可以联系我
在这里插入图片描述

悟空CRM v 0.5.5 立即下载

相关推荐

悟空CRM源代码

悟空CRM系统是一款源免费的通用企业客户关系管理平台软件,采用先进的LAMP架构,具有良好的放性、可扩展性、安全性和透明性;我们以CRM理念为基础,结合中国中小型企的特点与现状,调查了解各行业的需求,悟出了企业管理之道,形成了自身特有的特点和优势,志在为改善企业营销能力、加强企业决策支持实现企业信息化等方面提供现实有效的支持和帮助。内附安装说明和安装步骤。

72crm_helpvpo_源_悟空crm_fur61m_72crm前端文件_

采用全新的前后端分离模式,源代码中已集成前端vue打包后文件,可免去打包操作,如需调整前端代码,请单独下载前端代码,前端代码在根目录的ux文件夹中

中文VtigerCRM二次开发资料

全面的用中文介绍了VtigerCRM二次开发模块流程,希望能帮助到更多的少走弯路。

悟空CRM-基于jfinal+vue+ElementUI的前后端分离CRM系统

悟空CRM-基于jfinal+vue+ElementUI的前后端分离CRM系统悟空CRM云服务完全免费,且不限人数。悟空云正式上线,包含客户关系管理系统CRM)人力资源管理系统CRM)、财务管理系统(FS)、无代码平台、SCRM悟空软件长期为企业提供企业管理软件(CRM/HRM/OA/ERP等)的研发、实施、营销、咨询、培训、服务于一体的信息化服务。悟空软件以高科技为起点,以技术为核心、以完善的售后服务为后盾,秉承稳固与发展、求实与创新的精神,已为国内外上千家企业提供服务。

悟空CRM开发客保功能、增加客户保护机制:(很久没有消息,但是有觉得有机会的客户)就进入了客保转态

需求:客户信息录入不限数量,但是录入的信息1个月内只有自己和部门领导能看到,如果1个月内未成交或者未转移至自己的客保 则掉入公海所有人可见,这里所说的客保就是现在系统自带的客保。

csdndddsd的博客 561

悟空crm二次开发 增加采购管理模块功能 程序开发

功能菜单——销售单:销售单列表展示、录入销售单信息(字段:销售单编号、销售单名称、客户名称、下单时间、当前状态【未采购/未采购】、备注、负责人、创建时间、创建人、更新时间),销售单要关联原系统的产品,其实这个销售单很像原系统里的商机模块或合同模块,只是字段有点区别。功能菜单——供应商:供应商列表展示、录入供应商信息,实际开发建议借用客户表和联系人表,只需要对原来的客户区分一下是终端客户还是供应商。功能菜单——产品:产品列表展示、录入产品信息,产品要关联生产此产品所需要的工艺组件(组件名称、需要输入数量)。

withkai44的博客 901

自主开发悟空crm增加 公文管理功能 二次开发代码披露

7、用户的offer管理的详情资料。2、审核刚刚创建的招聘需求内容。

withkai44的博客 781

悟空crm二次开发 新增人力资源HRM招聘需求、简历管理、公文管理、回款统计、回款管理、回款计划

可以通过在线系统来保存企业的文档,:易保存、便利性好、手动分类,查找企业资料快。通过CRM文件管理功能集中存储重要的企业和销售文档,按各级文档夹的形式进行分类,科学地进行文档管理,让企业文档管理更高效。悟空crm二次开发 新增人力资源HRM招聘需求、简历管理、公文管理、回款统计、回款管理、回款计划。文档是企业整体运营过程中产生的各种形式的保存价值的原始记录,这些文档对企业非常重要。更多功能还在开发中,欢迎志同道合的朋友来技术交流

withkai44的博客 792

悟空CRM 12 java安装搭建 72crm-uniapp移动端

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ddb08Kg8-1664209595249)(https://images.gitee.com/uploads/images/2021/0207/143854_76cd7719_8065912.jpeg “修改mysql默认密码”)]

withkai44的博客 4935

悟空crm二次开发增加 公文管理功能

悟空crm二次开发增加 公文管理功能

withkai44的博客 401

聊聊这个倾注10年的源项目,如何一步步火爆GitHub!

近几年悟空CRM源项目在GitHub和码云上迅速蹿红,并获得了上千用户的关注。目前累计2,000,000下载量。社区人数达到30,000多人。在国内浩瀚的源市场,悟空CRM源道路上倾注10多年的心血。 2010年初,受国外salesforce、zoho等saas供应商的影响,越来越多的企业始投入CRM的研发。为找到属于自己的品牌方向,悟空团队以openerp(odoo)为标杆,始了在源道路上探索,并为之进行了近十年的投入。 2014年第一个版本发布 悟空CRM项目在2010始启动,对于初创团

悟空CRM 2458

Java语言 编写的CRM 适合答辩和做二次开发

Java语言 编写的CRM 适合答辩和做二次开发 自己写的有什么问题的可以私信 帮你解决

悟空crm前端vue修改教程-二次开发

修改内部配置 修改请求地址或域名:config/dev.env.js里修改BASE_API(开发环境服务端地址,默认localhost) 修改自定义端口:config/index.js里面的dev对象的port参数(默认8080,不建议修改)npm run build (编译完之后进行重新打包)npm install (前端编译前的安装步骤)前端MVVM框架:Vue.JS 2.5.x。UI框架:Element-UI 2.6.3。npm run dev (编译运行)路由:Vue-Router 3.x。

withcici的博客 3211

聊聊这个倾注10年的CRM项目,如何一步步火爆GitHub!

近几年悟空CRM源项目在GitHub和Gitee上迅速蹿红,并获得了上千用户的关注。目前累计2,000,000下载量。社区人数达到30,000多人。在国内浩瀚的源市场,悟空CRM源道路上倾注10多年的心血。 2010年的一个灵感 2010年初,受国外salesforce、zoho等saas供应商的影响,越来越多的企业始投入crm的研发。为找到属于自己的品牌方向,悟空团队以openerp(odoo)为标杆,始准备在源道路上探索,并为之进行了近十年的投入。 2014年第...

sky7i的博客 7079

悟空crm客户管理,KSOA系统集成呼叫中心系统融合

最近接触到一个用户,需要将呼叫中心的 点击拨打, 来去点弹屏,等功能。可实现语音业务过程化管理和调度。 为此写了 webapi接口。可快速实现 业务系统与外呼系统的融合。 无需硬件,基于IP软件换系统,扩容方便! 关于悟空crm,读过代码后的大概理解: 悟空crm源,但源的本质绝不是免费。悟空crm在设计上可以用“新”字来概括。架构上运用了很多流行的新技术,基本二次开发需要多名技术...

cibazhanji2176的博客 3万+

Zoho CRM:能够二次开发CRM,满足业务所有需求

众所周知,Zoho CRM是一款非常灵活、可定制化的CRM客户关系管理系统,它除了默认提供一系列丰富的标准功能之外,还可以帮助企业按需进行定制开发。 简单的定制包括模块定制、字段定制、页面布局、数据视图、工作流自动化、报表定制等等,如果业务并不复杂,那么以...

chenmenjin4112的博客 974

解你燃眉之急——悟空CRM9.0懒人版安装搭建--Good Luck,助你成功

CRM悟空懒人版搭建环境准备【1】.安装jdk查看版本【2】.安装tomcattomcat有版本要求,要9及以上,需要和CRM9结合启动,查验端口【3】.安装mysql这里必须安装mysql5.7版本的,适应悟空CRM这里需要注意的是修改的新密码是有复杂性要求的!!!【4】. 安装redis【5】. 安装maven末行添加内容如下【6】. 安装wukongcrm##将jar改为war【6】. 使用maven打包执行完命令后,时间很长请耐心等待 环境准备 centos7一台,关闭防火墙和selinux 【1】

qing1912的博客 2249

安装搭建java版的悟空crm遇到 网络错误请稍候再试 终极解决办法(hrm人力资源模块)

最近在GitHub上面下载的悟空crm最新版java程序,进行安装搭建后发现,一直提示 “网络错误,请稍候再试” 非常影响使用。代码生成器地址:core\src\test\com\kakarote\generator\Generator.java。│ ├── knowledge – 知识库。│ ├── calendar – 日历。│ ├── layout – 模块框架。│ ├── styles – 全局css样式。│ ├── admin – 系统管理。

withkai44的博客 1624
上一篇: 如何查看阿里云备案服务码?需要阿里云备案服务码的来!!!
下一篇: Lavarel框架EmailSmtp邮箱发送函数 163邮箱开通SMTP教程
csdndddsd
博客等级 码龄4年 450粉丝 · 95原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值