Exemple #1
0
 /**
  * 获得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 : 错误提示
         }
     }
 }
Exemple #2
0
 /**
  * 发货之后通知到微信
  */
 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;
 }
Exemple #3
0
 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:"&nbsp;";}s:6:"status";s:5:"false";s:8:"pay_type";s:4:"true";}');
         logger::info('UPDATEING 财付通双接口支付方式更新成功');
     }
 }
Exemple #4
0
 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;
 }
Exemple #5
0
 public function post_uninstall()
 {
     $init = kernel::single('cps_init');
     logger::info('Uninstall cps');
     $inst = kernel::single('cps_theme_inst');
     $inst->uninstTheme();
 }
Exemple #6
0
 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']);
     }
 }
Exemple #7
0
 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();
 }
Exemple #8
0
 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;
     }
 }
Exemple #9
0
 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;
 }
Exemple #10
0
 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!');
 }
Exemple #11
0
 /**
  * 安装完成后
  */
 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();
 }
Exemple #12
0
 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);
     }
 }
Exemple #13
0
 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));
 }
Exemple #14
0
 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'));
 }
Exemple #15
0
 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);
 }
Exemple #16
0
 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);
 }
Exemple #17
0
 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']) . " 的售后单");
 }
Exemple #18
0
 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));
     }
 }
Exemple #19
0
 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);
     // }
 }
Exemple #20
0
 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);
     }
 }
Exemple #21
0
 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');
 }
Exemple #22
0
 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);
     }
 }
Exemple #23
0
 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);
         }
     }
 }
Exemple #24
0
 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);
         }
     }
 }
Exemple #25
0
 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);
     }
 }
Exemple #26
0
 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']) . " 的订单");
 }
Exemple #27
0
 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;
     }
 }
Exemple #28
0
 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']);
     }
 }
Exemple #29
0
 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);
 }
Exemple #30
0
 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));
 }