/** * 获得jsapi_ticket 应该全局存储与更新 * @return string */ private function getJsApiTicket($bind_id) { if (base_kvstore::instance('weixin')->fetch('basic_jsapi_ticket_' . $bind_id, $jsapi_ticket) !== false) { logger::info('kv获取jsapi_ticket' . $jsapi_ticket); return $jsapi_ticket; } else { $accessToken = kernel::single('weixin_wechat')->get_basic_accesstoken($bind_id); // 如果是企业号用以下 URL 获取 ticket // $url = "https://qyapi.weixin.qq.com/cgi-bin/get_jsapi_ticket?access_token=$accessToken"; $url = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?type=jsapi&access_token={$accessToken}"; $httpclient = kernel::single('base_httpclient'); $response = $httpclient->set_timeout(6)->get($url); $result = json_decode($response, true); $jsapi_ticket = $result['ticket']; if ($jsapi_ticket) { if (!base_kvstore::instance('weixin')->store('basic_jsapi_ticket_' . $bind_id, $jsapi_ticket, $result['expires_in'])) { // 微信jsapi_ticket的有效期,单位为秒 logger::info("KVSTORE写入公众账号绑定id为: {$bind_id} 的jsapi_ticket错误"); } logger::info('远程获取jsapi_ticket' . $jsapi_ticket); return $jsapi_ticket; } else { //todo : 错误提示 } } }
/** * 发货之后通知到微信 */ public function generate($data) { $order_id = $data['order_id']; $ordersData = app::get('b2c')->model('orders')->getRow('ship_status', array('order_id' => $order_id)); if ($ordersData['ship_status'] != '1') { $msg = app::get('weixin')->_('未发货不需要同步到微信'); logger::info($msg); return true; } $payments = app::get('ectools')->model('payments')->get_payments_by_order_id($order_id); if (empty($payments)) { $msg = app::get('weixin')->_('未找到支付信息'); logger::info($msg); return true; } if ($payments[0]['pay_app_id'] != 'wxpay') { //$msg = app::get('weixin')->_('不是微信支付不需要通知到微信'); return true; } $postData['openid'] = $payments[0]['thirdparty_account']; $postData['transid'] = $payments[0]['trade_no']; $postData['out_trade_no'] = $payments[0]['payment_id']; $postData['deliver_timestamp'] = strval(time()); $postData['deliver_status'] = '1'; $postData['deliver_msg'] = 'ok'; kernel::single('weixin_wechat')->delivernotify($postData); return true; }
public function post_update($dbver) { if ($dbver['dbver'] <= 0.4) { app::get('ectools')->setConf('ectools_payment_plugin_doubletenpay', 'a:3:{s:7:"setting";a:7:{s:8:"pay_name";s:18:"财付通双接口";s:7:"pay_fee";s:0:"";s:6:"mer_id";s:0:"";s:10:"PrivateKey";s:0:"";s:11:"support_cur";s:1:"1";s:8:"authtype";s:0:"";s:8:"pay_desc";s:6:" ";}s:6:"status";s:5:"false";s:8:"pay_type";s:4:"true";}'); logger::info('UPDATEING 财付通双接口支付方式更新成功'); } }
public function command_sync_user() { //kernel::console_output = false; $http = kernel::single('base_httpclient'); $response = $http->get(app::get('suitclient')->getConf('syncuser')); if ($response) { $server_users = json_decode($response); $model = app::get('pam')->model('account'); $result = $model->getList('login_name', array('account_type' => 'shopadmin')); $client_user = array(); foreach ($result as $value) { $client_user[] = $value['login_name']; } $model2 = app::get('desktop')->model('users'); foreach ($server_users as $server_user) { if (!in_array($server_user, $client_user)) { $user = array('name' => $server_user, 'status' => 1, 'super' => 0, 'disabled' => false, 'pam_account' => array('login_name' => $server_user, 'login_password' => md5(time() . rand()), 'account_type' => 'shopadmin'), 'roles' => array(array('role_id' => 1))); $model2->save($user); } } logger::info('同步成功'); logger::info('ok.'); //不加 "ok."则会弹提示信息并不能自动关闭@lujy } else { logger::info('同步失败或套件里没有用户'); logger::info('ok.'); } exit; }
public function post_uninstall() { $init = kernel::single('cps_init'); logger::info('Uninstall cps'); $inst = kernel::single('cps_theme_inst'); $inst->uninstTheme(); }
function post_install($options) { pam_account::register_account_type('b2c', 'member', '前台会员系统'); logger::info('Init Initial'); vmc::singleton('base_initial', 'b2c')->init(); logger::info('Init member attribute'); app::get('b2c')->model('member_attr')->init(); logger::info('Init seo meta'); //SEO 字段初始化 $obj_goods = app::get('b2c')->model('goods'); $obj_brand = app::get('b2c')->model('brand'); $obj_goodscat = app::get('b2c')->model('goods_cat'); $col = array('seo_info' => array('type' => 'serialize', 'label' => app::get('b2c')->_('seo设置'))); $obj_goods->meta_register($col); $obj_brand->meta_register($col); $obj_goodscat->meta_register($col); //Application $rows = app::get('base')->model('apps')->getList('app_id', array('installed' => 1)); foreach ($rows as $r) { if ($r['app_id'] == 'base') { continue; } $this->xml_update($r['app_id']); } }
function post_install() { logger::info('Initial themes'); kernel::single('site_theme_base')->set_last_modify(); kernel::single('site_theme_install')->initthemes(); $themes = kernel::single('site_theme_install')->check_install(); }
public function call($method, $params, $appId) { $prismHost = config::get('prism.prismHostUrl'); $prismSocketFile = config::get('prism.prismSocketFile'); //获取应用对应的key和secret $keySecret = apiUtil::getPrismKey($appId); $key = $keySecret['key']; $secret = $keySecret['secret']; //获取path $path = apiUtil::genApiPath($method); //params加入系统数据 $systemParams = $this->__genSystemParams($method); $params = array_merge($params, $systemParams); $params['method'] = $method; //实例化请求工具 $client = new base_prism_client($prismHost, $key, $secret, $prismSocketFile); //$path = "/api/bbc?method=bbc.test"; $result = $client->post($path, $params); //日志记录 //之前request和response分开记录的,发现不容易找,只好放一起了 logger::info('call API : ' . $method . "\n" . 'wiht host : ' . $prismHost . "\n" . 'wiht key : ' . $key . "\n" . 'wiht secret : ' . $secret . "\n" . 'with params :' . var_export($params, 1) . "\n" . 'api result : ' . $result . "\n"); //这里是返回数据 $result = json_decode($result, 1); if ($result['error'] == null) { return $result['result']; } else { //根据返回的数据是否错误,如果有错误,尽量以原有异常抛出 $exception = $result['error']['exception'] ? $result['error']['exception'] : 'Exception'; logger::error(var_export($result, 1)); $e = new $exception($result['error']['message']); throw $e; } }
public function cancel($secondTime) { $minuteTime = $secondTime / 60; $secondTime = time() - $secondTime; $params['data']['cancel_reason'] = "订单未在下单" . $minuteTime . "分钟内完成支付,被系统自动关闭。"; $params['data']['status'] = "TRADE_CLOSED_BY_SYSTEM"; $params['data']['end_time'] = time(); //$params['filter']['created_time|sthan'] = $secondTime; //$params['filter']['status'] ='WAIT_BUYER_PAY'; $paramsForList['rows'] = 'tid'; $paramsForList['filter'] = ['created_time|sthan' => $secondTime, 'status' => 'WAIT_BUYER_PAY']; $tidList = kernel::single('systrade_data_trade')->getTradeList($paramsForList, false); foreach ($tidList as $tid) { try { $params['filter']['tid'] = $tid['tid']; $objTradeCancel = kernel::single('systrade_data_trade_cancel'); $result = $objTradeCancel->generate($params); } catch (\LogicException $e) { $msg = $e->getMessage(); logger::info('Cancel the order(' . $tid['tid'] . ') LogicException log automatically:' . $msg); } catch (Exception $e) { $msg = $e->getMessage(); logger::info('Cancel the order(' . $tid['tid'] . ') error log automatically:' . $msg); } } return true; }
function command_clear() { if (!$this->files->isWritable(kernel::getCachedRoutesPath())) { logger::info(sprintf('Sorry, route cahce path:%s cannot delete!', kernel::getCachedRoutesPath())); } $this->files->delete(kernel::getCachedRoutesPath()); logger::info('Route cache Cleared!'); }
/** * 安装完成后 */ public function post_install() { logger::info('Initial ectools'); vmc::singleton('base_initial', 'ectools')->init(); logger::info('Initial Regions'); vmc::singleton('ectools_regions_mainland')->install(); vmc::singleton('ectools_regions_operation')->updateRegionData(); }
static function active($app_id = 'b2c') { if (self::get('node_id', $app_id)) { logger::info('Using exists shopnode: kvstore shop_site_node_id'); } else { logger::info('Request new shopnode'); self::register($app_id); } }
private function __loginLog($msg) { $log['IP'] = request::getClientIp(); $log['uname'] = input::get('uname'); $log['msg'] = $msg; $log['HTTP_REFERER'] = $_SERVER['HTTP_REFERER']; $log['type'] = 'shopadmin'; logger::info('ADMIN_LOGIN:' . var_export($log, 1)); }
function post_install($options) { logger::info('Register b2c meta'); $obj_members = app::get('b2c')->model('members'); $col = array('trust_name' => array('type' => 'text', 'required' => false, 'label' => app::get('b2c')->_('信任登录ID'), 'width' => 110, 'editable' => false, 'in_list' => true)); $obj_members->meta_register($col); $menu = app::get('desktop')->model('menus'); $menu->update(array('display' => 'true'), array('menu_type' => 'adminpanel', 'menu_path' => 'app=desktop&ctl=pam&act=index')); }
public function removeQueue($appId, $queueName) { logger::info('Remove prism queue: "' . $queueName . '" from "' . $appId . '".'); $queueInfo = kernel::single('system_prism_init_queue')->queueStaus($appId, $queueName); if ($queueInfo['Backing_queue_status']['Len'] > 0) { logger::info('Some data is in queue, queue "' . $queueName . '" won\'t be removed.'); return false; } return kernel::single('system_prism_init_queue')->queueDrop($appId, $queueName); }
public function send($target, $title, $content, $config) { logger::info(__CLASS__ . var_export(func_get_args(), 1)); if (!($member_id = $target['member_id'])) { return false; } $uname = vmc::singleton('b2c_user_object')->get_member_name(null, $member_id); $new_msg = array('member_id' => $member_id, 'target' => $uname, 'subject' => $title, 'content' => $content, 'createtime' => time(), 'status' => 'sent'); return app::get('b2c')->model('member_msg')->save($new_msg); }
public function exec($params = null) { $filter = array('status' => array('4', '5'), 'add_time|lthan' => strtotime('-3 month')); $offset = 0; while ($listFlag = $this->get_return_ids($limit_return_ids, $filter, $offset)) { $offset++; $this->archive($limit_return_ids); } logger::info("归档创建时间小于 " . date('Y-m-d H:i:s', $filter['add_time|lthan']) . " 的售后单"); }
public function install() { $dir = $this->getPathname(); if (is_dir($dir) && realpath($dir) == realpath($this->target_app->res_dir . '/bundle')) { $spriteinfo = kernel::single('base_application_imgbundle_factory')->reset()->set_app($this->target_app->app_id)->set_directory('bundle')->set_output('ex_' . $this->target_app->app_id . '.png')->create(); logger::info(sprintf('%s bundle create Ok!', $this->target_app->app_id)); base_kvstore::instance('imgbundle')->store('imgbundle_' . $this->target_app->app_id, $spriteinfo); logger::info(sprintf('%s spriteinfo save Ok!', $this->target_app->app_id)); } }
function post_update($params) { logger::info('Don`t forget mv "queue config file" from ' . APP_DIR . '/base/examples/queue.php to ' . ROOT_DIR . '/config/queue.php'); // $dbver = $params['dbver']; // if (system_queue::write_config()){ // logger::info('Writing queue config file ... ok.'); // }else{ // trigger_error('Writing queue config file fail, Please check config directory has write permission.', E_USER_ERROR); // } }
function install() { $class = new $this->key(); if ($class instanceof base_interface_task) { logger::info("Installing " . $this->content_typename() . ' ' . $this->key()); return app::get('base')->model('crontab')->insert($this->row()); } else { trigger_error(sprintf('application:%s %s fail', $this->content_typename(), $this->key()), E_USER_ERROR); } }
public function command_oauthUpdate() { $flag = kernel::single('system_prism_store')->get('prismInitComplete'); if (!flag) { logger::info('please run "system:prism init" before.'); return null; } kernel::single('system_prism_init')->oauthUpdate(); logger::info('finished'); }
public function install() { if (is_dir($this->getPathname())) { $widgets_name = basename($this->getPathname()); $theme = $this->target_theme; logger::info('Installing Theme Widgets ' . $theme . ':' . $widgets_name); $data['theme'] = $theme; $data['name'] = $widgets_name; app::get('wap')->model('widgets')->insert($data); } }
public function update_theme_widgets($platform, $theme, $force = true) { foreach (kernel::servicelist('site_theme_content_detector') as $service) { $last_modified = $service->last_modified($theme); if ($force || base_kvstore::instance('site_themes')->fetch('theme_last_modified' . get_class($service) . $theme, $modified) === false || $last_modified != $modified) { logger::info('autofix theme widgets...'); $service->update($platform, $theme); base_kvstore::instance('site_themes')->store('theme_last_modified' . get_class($service) . $theme, $last_modified); } } }
function post_update($params) { $dbver = $params['dbver']; if (version_compare($dbver, '0.4', '<')) { if (system_queue::write_config()) { logger::info('Writing queue config file ... ok.'); } else { trigger_error('Writing queue config file fail, Please check config directory has write permission.', E_USER_ERROR); } } }
public function install() { if (is_dir($this->getPathname())) { $widgets_name = basename($this->getPathname()); $widgets_app = $this->target_app->app_id; logger::info('Installing Widgets ' . $widgets_app . ':' . $widgets_name); $data['app'] = $widgets_app; $data['name'] = $widgets_name; app::get('site')->model('widgets')->insert($data); } }
public function exec($params = null) { $filter = array('status' => array('finish', 'dead'), 'createtime|lthan' => strtotime(date('Y-m-d 23:59:59', strtotime('-3 month')))); $offset = 0; while ($listFlag = $this->get_order_ids($limit_order_ids, $filter, $offset)) { $offset++; // 把分页得到的订单id加入相关队列 $this->archive($limit_order_ids); } logger::info("归档创建时间小于 " . date('Y-m-d H:i:s', $filter['createtime|lthan']) . " 的订单"); }
function write_compat() { $file = ROOT_DIR . '/config/config.php'; if (file_exists($file)) { logger::info('Writing config compat... ok.'); $sample = preg_replace('/(' . preg_quote('/**************** compat functions begin ****************/', '/') . ')(.*)(' . preg_quote('/**************** compat functions end ****************/', '/') . ')/isU', "\\1" . "\r\n" . join("\r\n", $this->check_compat()) . "\r\n" . '\\3', file_get_contents($file)); return file_put_contents($file, $sample); } else { logger::info('Writing config compat... failure.'); return false; } }
function post_install() { logger::info('Initial image'); kernel::single('base_initial', 'image')->init(); $conf = app::get('image')->getConf('image.default.set'); app::get('image')->setConf('image.set', $conf); $obj_image = app::get('image')->model('image'); $app_dir = app::get('image')->app_dir; foreach ($conf as $item) { $obj_image->store($app_dir . '/initial/default_images/' . $item['default_image'] . '.gif', $item['default_image']); } }
function post_install($options) { logger::info('Create admin account'); //设置用户体系,前后台互不相干 pamAccount::registerAuthType('desktop', 'shopadmin', '后台管理系统'); //todo: 封装成更简单的函数 $use_pass_data['login_name'] = $options['admin_uname']; $use_pass_data['createtime'] = time(); $password = pam_encrypt::make($options['admin_password']); $account = array('pam_account' => array('login_name' => $options['admin_uname'], 'login_password' => $password, 'account_type' => 'shopadmin', 'createtime' => $use_pass_data['createtime']), 'name' => $options['admin_uname'], 'super' => 1, 'status' => 1); app::get('desktop')->model('users')->save($account); }
function runtask($task_id) { $http = new base_httpclient(); $_POST['task_id'] = $task_id; $url = kernel::openapi_url('openapi.queue', 'worker', array('task_id' => $task_id)); logger::info('Spawn [Task-' . $task_id . '] ' . $url); //99%概率不会有问题 $http->hostaddr = $_SERVER["SERVER_ADDR"] ? $_SERVER["SERVER_ADDR"] : '127.0.0.1'; $http->hostport = $_SERVER["SERVER_PORT"] ? $_SERVER["SERVER_PORT"] : '80'; $http->set_timeout(2); logger::info($http->post($url, $_POST)); }