'crm', 'wwgenius' => '旺旺精灵'); private $_node_type = [ 'kuaidi' => [ 'kdn' => '快递鸟', 'other' => '其他', ], 'cloudprint' => [ 'yilianyun' => '易联云', ], 'ticket' => [ 'feisuo' => '飞梭', ], ]; /** * index * @return mixed 返回值 */ public function index() { $channel_type = $_GET['channel_type']; $schema = app::get('channel')->model('channel')->_columns(); $typemap = $schema['channel_type']['type']; $params = array( 'title' => sprintf('%s授权', $typemap[$channel_type]), 'actions' => array( array( 'label' => sprintf('添加%s', $typemap[$channel_type]), 'href' => $this->url . '&act=add&p[]=' . $channel_type, 'target' => "dialog::{width:700,height:400,title:'" . sprintf('添加%s', $typemap[$channel_type]) . "'}", ), array( 'label' => '查看绑定关系', 'href' => $this->url . '&act=view_bindrelation&p[]=' . $channel_type, 'target' => '_blank', ), ), 'use_buildin_new_dialog' => false, 'use_buildin_set_tag' => false, 'use_buildin_recycle' => false, 'use_buildin_export' => false, 'use_buildin_import' => false, 'base_filter' => array('channel_type' => $channel_type), ); $this->finder('channel_mdl_channel', $params); } #查看绑定关系 /** * view_bindrelation * @param mixed $channel_type channel_type * @return mixed 返回值 */ public function view_bindrelation($channel_type) { $params = kernel::single('channel_rpc_response_bind')->get_params(0, $channel_type, '', 'accept'); echo sprintf('查看绑定关系', MATRIX_RELATION_URL . '?' . http_build_query($params)); } /** * 查看奇门绑定关系 * @return mixed 返回值 */ public function view_qimen_bindrelation() { $channel_lib = kernel::single('channel_channel'); $qimen_data = $channel_lib->getQimenJushitaErp(); // 对 Secret Key 进行打码处理 if (!empty($qimen_data['secret_key'])) { $secret_key = $qimen_data['secret_key']; $length = strlen($secret_key); if ($length > 8) { // 显示前4位和后4位,中间用星号代替 $qimen_data['secret_key'] = substr($secret_key, 0, 4) . str_repeat('*', $length - 8) . substr($secret_key, -4); } else { // 如果长度小于等于8,全部用星号代替 $qimen_data['secret_key'] = str_repeat('*', $length); } } // 获取后端服务地址:域名 + /index.php/openapi/process/handle $base_url = kernel::base_url(true); $api_url = rtrim($base_url, '/') . '/index.php/openapi/process/handle'; $this->pagedata['qimen_data'] = $qimen_data; $this->pagedata['has_data'] = !empty($qimen_data); $this->pagedata['api_url'] = $api_url; $this->display('admin/channel/qimen_bindrelation.html'); } /** * apply_bindrelation * @param mixed $channel_id ID * @return mixed 返回值 */ public function apply_bindrelation($channel_id) { $params = kernel::single('channel_rpc_response_bind')->get_params($channel_id, '', '', 'apply'); $this->pagedata['license_iframe_url'] = MATRIX_RELATION_URL . '?' . http_build_query($params); $this->display('admin/channel/bindrelation.html'); } /** * undocumented function * * @return void * @author * */ public function save() { $channel = $_POST['channel']; $this->begin($this->url . '&act=index&channel_type=' . $channel['channel_type']); $channelMdl = app::get('channel')->model('channel'); //[第三方快递]使用shipper字段保存对接方式类型 if($channel['channel_mode'] && $channel['channel_type'] == 'kuaidi'){ $channel['shipper'] = $channel['channel_mode']; } // 如果有额外参数,则检查 if(isset($_POST['config']) && !empty($_POST['config'])){ $channel = $this->__formatConfig($_POST['config'],$channel); } $rs = $channelMdl->save($channel); $this->end($rs); } /** * edit * @param mixed $channel_id ID * @return mixed 返回值 */ public function edit($channel_id) { $channelMdl = app::get('channel')->model('channel'); $channel = $channelMdl->dump($channel_id); $this->pagedata['data'] = $channel; $schema = app::get('channel')->model('channel')->_columns(); $typemap = $schema['channel_type']['type']; $this->pagedata['channel_type_name'] = $typemap[$channel['channel_type']]; //[快递]接入方式 $channelModes = kernel::single('channel_rpc_response_bind')->getBindKdMode(); $this->pagedata['channel_modes'] = $channelModes; if($channel['shipper']){ $channel_mode_name = $channelModes[$channel['shipper']]; if($channel_mode_name){ $this->pagedata['channel_mode'] = $channel['shipper']; $this->pagedata['channel_mode_name'] = $channel_mode_name; } } // 接入渠道 适配器 $adapter_list = kernel::single('channel_auth_config')->getAdapterList($channel['channel_type']); $this->pagedata['adapter_list'] = $adapter_list; $this->display('admin/channel/add.html'); } /** * 添加 * @param mixed $channel_type channel_type * @return mixed 返回值 */ public function add($channel_type) { $schema = app::get('channel')->model('channel')->_columns(); $typemap = $schema['channel_type']['type']; // 渠道类型 $this->pagedata['channel_type'] = [$channel_type => $typemap[$channel_type]]; // 节点类型(平台) $this->pagedata['node_type'] = $this->_node_type[$channel_type] ? $this->_node_type[$channel_type] : ['other' => '其他']; // 接入渠道 适配器 $adapter_list = kernel::single('channel_auth_config')->getAdapterList($channel_type); $this->pagedata['adapter_list'] = $adapter_list; $this->display('admin/channel/add.html'); } /** * 接入方式切换调整配置页面 */ public function confightml($channel_type,$adapter, $channel_id = null) { if($channel_id){ $channelMdl = $this->app->model('channel'); $channel = $channelMdl->db_dump($channel_id, '*'); $channel['config'] = @unserialize($channel['config']); $this->pagedata['channel'] = $channel; } $platform_list = kernel::single('channel_auth_config')->getPlatformList($channel_type,$adapter); $this->pagedata['platform_list'] = $platform_list; $this->pagedata['channel_type'] = $channel_type; $this->pagedata['adapter'] = $adapter; $viewPath = sprintf('admin/channel/%s/%s/auth.html', $channel_type, $adapter); $this->display($viewPath); } /** * platformconfig * @param mixed $channel_type channel_type * @param mixed $adapter adapter * @param mixed $node_type node_type * @param mixed $channel_id ID * @return mixed 返回值 */ public function platformconfig($channel_type, $adapter, $node_type,$channel_id = null) { if(!$channel_type || !$adapter || !$node_type){ return ''; } if ($channel_id) { $channelMdl = $this->app->model('channel'); $channel = $channelMdl->db_dump($channel_id, '*'); // 判断当前平台是否一致 if($node_type == $channel['node_type']){ $channel['config'] = @unserialize($channel['config']); $this->pagedata['channel'] = $channel; } } $platform_params = kernel::single('channel_auth_config')->getPlatformParam($channel_type, $adapter, $node_type); $this->pagedata['platform_params'] = $platform_params; $this->pagedata['platform'] = $node_type; // 接入方式 $channelModes = kernel::single('channel_rpc_response_bind')->getBindKdMode(); $this->pagedata['channel_modes'] = $channelModes; $viewPath = sprintf('admin/channel/%s/%s/platformconfig.html', $channel_type, $adapter); $this->display($viewPath); } /** * undocumented function * * @return void * @author **/ public function gen_private_key() { $lowercaseLetters = 'abcdefghijklmnopqrstuvwxyz'; $uppercaseLetters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'; $numbers = '0123456789'; $symbols = '!@#$%&'; $randomString = ''; // 随机选择至少一个字符组中的字符 $randomString .= $lowercaseLetters[random_int(0, strlen($lowercaseLetters) - 1)]; $randomString .= $uppercaseLetters[random_int(0, strlen($uppercaseLetters) - 1)]; $randomString .= $numbers[random_int(0, strlen($numbers) - 1)]; $randomString .= $symbols[random_int(0, strlen($symbols) - 1)]; $totalLength = 32; // 总长度为32位 // 剩余长度为总长度减去已选择的字符数量 $remainingLength = $totalLength - 4; // 随机选择剩余位置的字符,从包含所有字符的字符串中选择 $allCharacters = $lowercaseLetters . $uppercaseLetters . $numbers . $symbols; for ($i = 0; $i < $remainingLength; $i++) { $randomCharacter = $allCharacters[random_int(0, strlen($allCharacters) - 1)]; $randomString .= $randomCharacter; } // 将随机生成的字符串打乱顺序,增加随机性 $randomString = str_shuffle($randomString); echo $randomString; // 输出32位包含符号、大小写字母和数字的随机字符串 exit; } private function __formatConfig($config,$channel) { // 尝试获取是否有应用类型配置类 if(isset($channel['channel_type'])){ $channelConfigClassName = sprintf("channel_%s_config", $channel['channel_type']); // 数据验证 try { if (class_exists($channelConfigClassName)) { $channel = kernel::single($channelConfigClassName)->formatConfig($config, $channel); } } catch (Exception $e) { } } return $channel; } }