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 static function getAppConn($appName) { $host = config::get('prism.prismHostUrl'); $keySecret = apiUtil::getPrismKey($appName); $key = $keySecret['key']; $secret = $keySecret['secret']; return ['host' => $host, 'key' => $key, 'secret' => $secret]; }
public function set() { $conn = system_prism_init_util::getAdminConn(); $appName = 'sysopen'; $keySecret = apiUtil::getPrismKey($appName); $url = config::get('prism.prismHostUrl') . apiUtil::genApiPath('open.oauth.login') . '&v=v1&format=json'; $config = array('CfgIdColumn' => 'accountid', 'Host' => $url, 'Key' => $keySecret['key'], 'Secret' => $keySecret['secret'], "Meta" => "{\"type\":\"oauth_type\"}", "Response" => "result"); $params = array('is_sandbox' => false, 'config' => json_encode($config)); logger::info('oauth on prism set : ' . var_export($params, true)); $this->call($conn, '/api/platform/manageoauth/config/set', $params, 'post'); return true; }
public function checkParams(&$class, &$action_name, &$params) { if (!method_exists($class, 'getParams')) { throw new RuntimeException('获取参数列表失败'); } $paramsInfos = $class->getParams(); apiUtil::paramsValidate($params, $paramsInfos); //预处理下params //转化下数据的格式,比如对数据结构fields进行转化和extends扩展等 $params = apiUtil::pretreatment($params, $paramsInfos); //判断下方法是否存在 if (!method_exists($class, $action_name)) { throw new RuntimeException('找不到方法 :' . $action_name); } return $params; }
protected function callInternal($flag, $parameters = array()) { $apis = config::get('apis.routes'); if (array_key_exists($flag, $apis)) { list($class, $method) = explode('@', $apis[$flag]['uses']); } else { throw new InvalidArgumentException("Api [{$flag}] not defined"); } $instance = new $class(); $apiParams = $instance->getParams(); //验证数据 //通过传入数据和api原定义的类型进行比对 apiUtil::paramsValidate($parameters, $apiParams); //因为有些数据需要批量处理,就防这里了 $apiParameters = apiUtil::pretreatment($parameters, $apiParams); return call_user_func(array($instance, $method), $apiParameters); }
private function __get_connection($queueName) { if (!isset(self::$__connection[$queueName])) { //获取这个队列是哪个app的,就可以根据appId去获取推送队列时用的key和secret $queueConf = config::get('queue.queues'); $queueC = $queueConf[$queueName]; $appId = $queueC['app']; //接下来就是要把app转化成key和secret了 $keySecret = apiUtil::getPrismKey($appId); $key = $keySecret['key']; $secret = $keySecret['secret']; $host = config::get('prism.prismHostUrl'); $host = rtrim($host, '/') . '/api'; //这个是长连接的配置 $socketFile = config::get('prism.prismSocketFile'); //创建队列传输链接 self::$__connection[$queueName] = new base_prism_client($host, $key, $secret, $socketFile); } return self::$__connection[$queueName]; }
public function rpcCall($method, $parameters = array(), $identity) { $appName = $this->app_id; $appKey = apiUtil::getAppKey($appName); return rpc::call($method, $parameters, $appKey, $identity); }