* Date: 2018-4-3
*/
namespace app\admin\controller;
use think\Db;
use think\Page;
use think\Cache;
class Notice extends Base
{
private $notice_applets_tpl = [];
private $notice_wechat_tpl = [];
public function _initialize() {
parent::_initialize();
$this->notice_applets_tpl = [
7 => ['id' => 855, 'keywords' => [1, 2, 4, 5, 7]], // 订单发货通知
];
$this->notice_wechat_tpl = [
9 => ['id' => 'OPENTM417958215'], // 订单支付成功通知
];
$this->assign('admin_id', session('admin_id'));
}
// 基础通知 - 买家通知
public function buyer_notice()
{
// 短信消息模板
$sms_type = tpCache('sms.sms_type');
$sms_tplist = Db::name('sms_template')->where(['sms_type'=>$sms_type, 'lang'=>$this->admin_lang])->order('send_scene asc')->select();
$this->assign('sms_tplist', $sms_tplist);
// 邮箱消息模板
$smtp_tplist = Db::name('smtp_tpl')->where(['lang'=>$this->admin_lang])->order('send_scene asc')->select();
$this->assign('smtp_tplist', $smtp_tplist);
// 微信小程序消息模板
$applets_tplist = Db::name('applets_template')->where(['lang'=>$this->admin_lang])->order('send_scene asc')->select();
$this->assign('applets_tplist', $applets_tplist);
// 微信小程序消息模板
$wechat_tplist = Db::name('wechat_template')->where(['lang'=>$this->admin_lang])->order('send_scene asc')->select();
$this->assign('wechat_tplist', $wechat_tplist);
// 站内信消息模板
$notice_tplist = Db::name('users_notice_tpl')->where(['lang'=>$this->admin_lang])->order('send_scene asc')->select();
$this->assign('notice_tplist', $notice_tplist);
return $this->fetch();
}
public function notice_details_bar()
{
// 查询发送类型
$send_type = input('param.send_type/d', 1);
$this->assign('send_type', $send_type);
// 查询指定的短信模板是否存在
$sms_type = tpCache('sms.sms_type');
$sms_where = [
'sms_type' => $sms_type,
'lang' => $this->admin_lang,
'send_scene' => $this->getSmsTplSendSecneID()
];
$notice_sms_tpl = Db::name('sms_template')->where($sms_where)->count();
$this->assign('notice_sms_tpl', $notice_sms_tpl);
// 查询指定的邮箱模板是否存在
$smtp_where = [
'lang' => $this->admin_lang,
'send_scene' => $this->getSmtpTplSendSecneID()
];
$notice_smtp_tpl = Db::name('smtp_tpl')->where($smtp_where)->count();
$this->assign('notice_smtp_tpl', $notice_smtp_tpl);
// 查询指定的微信小程序模板是否存在
$applets_where = [
'lang' => $this->admin_lang,
'send_scene' => $send_type
];
$notice_applets_tpl = Db::name('applets_template')->where($applets_where)->count();
$this->assign('notice_applets_tpl', $notice_applets_tpl);
// 查询指定的微信公众号模板是否存在
$applets_where = [
'lang' => $this->admin_lang,
'send_scene' => $send_type
];
$notice_wechat_tpl = Db::name('wechat_template')->where($applets_where)->count();
$this->assign('notice_wechat_tpl', $notice_wechat_tpl);
// 查询指定的站内信模板是否存在
$notice_where = [
'lang' => $this->admin_lang,
'send_scene' => $this->getNoticeTplSendSecneID()
];
$notice_notice_tpl = Db::name('users_notice_tpl')->where($notice_where)->count();
$this->assign('notice_notice_tpl', $notice_notice_tpl);
}
// 短信通知详情
public function notice_details_sms()
{
if (IS_POST) {
// 是否填写短信配置
if (1 == $this->globalConfig['sms_type'] && (empty($this->globalConfig['sms_appkey']) || empty($this->globalConfig['sms_secretkey']))) {
$this->error("请先完善[基本信息]-[接口API]-[云短信]配置");
}
// 是否填写短信配置
if (2 == $this->globalConfig['sms_type'] && (empty($this->globalConfig['sms_appid_tx']) || empty($this->globalConfig['sms_appkey_tx']))) {
$this->error("请先完善[基本信息]-[接口API]-[云短信]配置");
}
$post = input('post.');
$data = [
'tpl_content' => filter_line_return($post['tpl_content']),
'update_time' => getTime(),
];
$data = array_merge($post, $data);
$r = Db::name('sms_template')->where(['tpl_id'=>intval($post['tpl_id'])])->update($data);
if ($r !== false) {
$this->success('操作成功');
}
$this->error('操作失败');
}
$sms_type = tpCache('sms.sms_type');
$send_scene = $this->getSmsTplSendSecneID();
$where = [
'sms_type' => $sms_type,
'send_scene' => $send_scene,
'lang' => $this->admin_lang
];
$info = Db::name('sms_template')->where($where)->find();
if (empty($info)) $this->error('数据不存在,请联系管理员!');
$info['tpl_content_demo'] = '【<签名名称>】' . $info['tpl_content'];
$info['tpl_content_demo'] = str_replace(['${code}','{1}'], '<订单号>', $info['tpl_content_demo']);
$info['tpl_content_demo'] = str_replace(['${content}','{1}'], '<订单号>', $info['tpl_content_demo']);
$this->assign('info', $info);
$this->notice_details_bar();
return $this->fetch();
}
// 邮件通知详情
public function notice_details_smtp()
{
if (IS_POST) {
$post = input('post.');
// 是否填写短信配置
if (empty($post['tpl_title'])) $this->error("请先完善[基本信息]-[接口API]-[云短信]配置");
$data = [
'tpl_title' => filter_line_return($post['tpl_title']),
'update_time' => getTime(),
];
$data = array_merge($post, $data);
$r = Db::name('smtp_tpl')->where(['tpl_id'=>intval($post['tpl_id'])])->update($data);
if ($r !== false) {
$this->success('操作成功');
}
$this->error('操作失败');
}
$send_scene = $this->getSmtpTplSendSecneID();
$where = [
'send_scene' => $send_scene,
'lang' => $this->admin_lang
];
$info = Db::name('smtp_tpl')->where($where)->find();
if (empty($info)) $this->error('数据不存在,请联系管理员!');
$this->assign('info', $info);
$this->notice_details_bar();
return $this->fetch();
}
// 微信小程序消息详情
public function notice_details_applets()
{
// 查询指定的微信小程序模板是否存在
$send_scene = input('param.send_scene/d') ? input('param.send_scene/d') : input('param.send_type/d');
$where = [
'lang' => $this->admin_lang,
'send_scene' => $send_scene
];
$info = Db::name('applets_template')->where($where)->find();
if (empty($info)) $this->error('数据不存在,请联系管理员!');
$info['tpl_data'] = !empty($info['tpl_data']) ? json_decode($info['tpl_data'], true) : [];
if (IS_POST) {
// 是否填写微信小程序配置
$wechat_data = tpSetting("OpenMinicode.conf_weixin");
$wechat_data = !empty($wechat_data) ? json_decode($wechat_data, true) : [];
if (empty($wechat_data['appid'])) {
$this->error("请先完善[基本信息]-[接口API]-[小程序API]-[微信小程序]配置");
}
if (empty($info['template_code']) || $this->notice_applets_tpl[$send_scene]['id'] != $info['template_code']) {
$tokenData = get_weixin_access_token(true);
if (!empty($tokenData['code'])) {
// 添加消息模板
$url = "https://api.weixin.qq.com/wxaapi/newtmpl/addtemplate?access_token=".$tokenData['access_token'];
$post_data = array(
"tid" => $this->notice_applets_tpl[$send_scene]['id'],
"kidList" => $this->notice_applets_tpl[$send_scene]['keywords'],
"sceneDesc" => !empty($info['tpl_title']) ? $info['tpl_title'] : '用户操作行为通知',
);
$response = httpRequest($url, 'POST', $post_data);
$params = json_decode($response, true);
if (!empty($params['priTmplId'])) {
$update = [
'template_code' => $this->notice_applets_tpl[$send_scene]['id'],
'template_id' => $params['priTmplId'],
];
$result = Db::name('applets_template')->where(['send_scene'=>$send_scene])->update($update);
if (empty($result)) $this->error('保存失败');
// 删除旧的消息模板
$url = "https://api.weixin.qq.com/wxaapi/newtmpl/deltemplate?access_token=".$tokenData['access_token'];
$post_data = array(
"priTmplId" => $info['template_id'],
);
httpRequest($url, 'POST', $post_data);
} else {
$msg = !empty($params['errmsg']) ? $params['errmsg'] : '保存失败';
$this->error($msg);
}
} else {
$this->error($tokenData['msg']);
}
}
$post = input('post.');
$update = [
'is_open' => intval($post['is_open']),
'update_time' => getTime(),
];
$result = Db::name('applets_template')->where(['tpl_id'=>intval($post['tpl_id'])])->update($update);
if (!empty($result)) $this->success('操作成功');
$this->error('操作失败');
}
$this->assign('info', $info);
$this->notice_details_bar();
return $this->fetch();
}
// 微信公众号消息详情
public function notice_details_wechat()
{
// 查询指定的微信小程序模板是否存在
$send_scene = input('param.send_scene/d') ? input('param.send_scene/d') : input('param.send_type/d');
$where = [
'lang' => $this->admin_lang,
'send_scene' => $send_scene
];
$info = Db::name('wechat_template')->where($where)->find();
if (empty($info)) $this->error('数据不存在,请联系管理员!');
$info['tpl_data'] = !empty($info['tpl_data']) ? json_decode($info['tpl_data'], true) : [];
if (IS_POST) {
// 是否填写微信公众号配置
$wechat_data = tpSetting("OpenMinicode.conf_wechat");
$wechat_data = !empty($wechat_data) ? json_decode($wechat_data, true) : [];
if (empty($wechat_data['appid'])) {
$this->error("请先完善[基本信息]-[接口API]-[微信公众号]配置");
}
if (empty($info['template_code']) || $this->notice_wechat_tpl[$send_scene]['id'] != $info['template_code']) {
$tokenData = get_wechat_access_token();
if (!empty($tokenData['code'])) {
// 添加消息模板
$url = "https://api.weixin.qq.com/cgi-bin/template/api_add_template?access_token=".$tokenData['access_token'];
$post_data = array(
'template_id_short' => $this->notice_wechat_tpl[$send_scene]['id'],
);
$response = httpRequest($url, 'POST', json_encode($post_data, JSON_UNESCAPED_UNICODE));
$params = json_decode($response, true);
if (!empty($params['template_id'])) {
$update = [
'template_code' => $this->notice_wechat_tpl[$send_scene]['id'],
'template_id' => $params['template_id'],
];
$result = Db::name('wechat_template')->where(['send_scene'=>$send_scene])->update($update);
if (empty($result)) $this->error('保存失败');
// 删除旧的消息模板
$url = "https://api.weixin.qq.com/cgi-bin/template/del_private_template?access_token=".$tokenData['access_token'];
$post_data = array(
"template_id" => $info['template_id'],
);
httpRequest($url, 'POST', $post_data);
} else {
$msg = !empty($params['errmsg']) ? $params['errmsg'] : '保存失败';
$this->error($msg);
}
} else {
$this->error($tokenData['msg']);
}
}
$post = input('post.');
$update = [
'is_open' => intval($post['is_open']),
'update_time' => getTime(),
];
$result = Db::name('wechat_template')->where(['tpl_id'=>intval($post['tpl_id'])])->update($update);
if (!empty($result)) $this->success('操作成功');
$this->error('操作失败');
}
$this->assign('info', $info);
$this->notice_details_bar();
return $this->fetch();
}
public function notice_details_notice()
{
if (IS_POST) {
$post = input('post.');
// 是否填写短信配置
if (empty($post['tpl_title'])) $this->error("站内信标题不能为空!");
$data = [
'tpl_title' => filter_line_return($post['tpl_title']),
'update_time' => getTime(),
];
$data = array_merge($post, $data);
$r = Db::name('users_notice_tpl')->where(['tpl_id'=>intval($post['tpl_id'])])->update($data);
if ($r !== false) {
$this->success('操作成功');
}
$this->error('操作失败');
}
$send_scene = $this->getNoticeTplSendSecneID();
$where = [
'send_scene' => $send_scene,
'lang' => $this->admin_lang
];
$info = Db::name('users_notice_tpl')->where($where)->find();
if (empty($info)) $this->error('数据不存在,请联系管理员!');
$this->assign('info', $info);
$this->notice_details_bar();
return $this->fetch();
}
// 获取短信模板发送场景ID
private function getSmsTplSendSecneID()
{
// 查询发送类型
$send_scene = -1;
$send_type = input('param.send_type/d', 1);
switch ($send_type) {
// 账号注册
case '1':
$send_scene = 0;
break;
// 账号登录
case '2':
$send_scene = 2;
break;
// 手机绑定
case '4':
$send_scene = 1;
break;
// 找回密码
case '5':
$send_scene = 4;
break;
// 留言验证
case '6':
$send_scene = 7;
break;
// 订单发货
case '7':
$send_scene = 6;
break;
// 留言表单
case '8':
$send_scene = 11;
break;
// 订单付款
case '9':
$send_scene = 5;
break;
}
return $send_scene;
}
// 获取邮件模板发送场景ID
private function getSmtpTplSendSecneID()
{
// 查询发送类型
$send_scene = -1;
$send_type = input('param.send_type/d', 1);
switch ($send_type) {
// 账号注册
case '1':
$send_scene = 2;
break;
// 邮箱绑定
case '3':
$send_scene = 3;
break;
// 找回密码
case '5':
$send_scene = 4;
break;
// 订单发货
case '7':
$send_scene = 6;
break;
// 留言表单
case '8':
$send_scene = 1;
break;
// 订单付款
case '9':
$send_scene = 5;
break;
}
return $send_scene;
}
// 获取站内信模板发送场景ID
private function getNoticeTplSendSecneID()
{
// 查询发送类型
$send_scene = -1;
$send_type = input('param.send_type/d', 1);
switch ($send_type) {
// 订单发货
case '7':
$send_scene = 6;
break;
// 留言表单
case '8':
$send_scene = 1;
break;
// 订单付款
case '9':
$send_scene = 5;
break;
}
return $send_scene;
}
}