コード例 #1
0
 /**
  * API実行
  *
  * @param array $arrPost リクエストパラメーター
  * @return array(string レスポンス名, array レスポンス配列)
  */
 public function doApiAction($arrPost)
 {
     // 実行時間計測用
     $start_time = microtime(true);
     $objFormParam = new SC_FormParam_Ex();
     SC_Api_Operation_Ex::setApiBaseParam($objFormParam);
     $objFormParam->setParam($arrPost);
     $objFormParam->convParam();
     $arrErr = SC_Api_Operation_Ex::checkParam($objFormParam);
     if (SC_Utils_Ex::isBlank($arrErr)) {
         $arrParam = $objFormParam->getHashArray();
         $operation_name = $arrParam['Operation'];
         $service_name = $arrParam['Service'];
         $style_name = $arrParam['Style'];
         $validate_flag = $arrParam['Validate'];
         $api_version = $arrParam['Version'];
         SC_Api_Utils_Ex::printApiLog('access', $start_time, $operation_name);
         // API設定のロード
         $arrApiConfig = SC_Api_Utils_Ex::getApiConfig($operation_name);
         if (SC_Api_Operation_Ex::checkOperationAuth($operation_name, $arrPost, $arrApiConfig)) {
             SC_Api_Utils_Ex::printApiLog('Authority PASS', $start_time, $operation_name);
             // オペレーション権限OK
             // API オブジェクトをロード
             $objApiOperation = SC_Api_Utils_Ex::loadApiOperation($operation_name, $arrParam);
             if (is_object($objApiOperation) && method_exists($objApiOperation, 'doAction')) {
                 // API オペレーション実行
                 $operation_result = $objApiOperation->doAction($arrPost);
                 // オペレーション結果処理
                 if ($operation_result) {
                     $arrOperationRequestValid = $objApiOperation->getRequestValidate();
                     $arrResponseBody = $objApiOperation->getResponseArray();
                     $response_group_name = $objApiOperation->getResponseGroupName();
                 } else {
                     $arrErr = $objApiOperation->getErrorArray();
                 }
             } else {
                 $arrErr['ECCUBE.Operation.NoLoad'] = 'オペレーションをロード出来ませんでした。';
             }
         } else {
             $arrErr['ECCUBE.Authority.NoAuthority'] = 'オペレーションの実行権限がありません。';
         }
     }
     if (count($arrErr) == 0) {
         // 実行成功
         $arrResponseValidSection = array('Request' => array('IsValid' => 'True', $operation_name . 'Request' => $arrOperationRequestValid));
         $response_outer = $operation_name . 'Response';
         SC_Api_Utils_Ex::printApiLog('Operation SUCCESS', $start_time, $response_outer);
     } else {
         // 実行失敗
         $arrResponseErrorSection = array();
         foreach ($arrErr as $error_code => $error_msg) {
             $arrResponseErrorSection[] = array('Code' => $error_code, 'Message' => $error_msg);
         }
         $arrResponseValidSection = array('Request' => array('IsValid' => 'False', 'Errors' => array('Error' => $arrResponseErrorSection)));
         if (is_object($objApiOperation)) {
             $response_outer = $operation_name . 'Response';
         } else {
             $response_outer = 'ECCUBEApiCommonResponse';
         }
         SC_Api_Utils_Ex::printApiLog('Operation FAILED', $start_time, $response_outer);
     }
     $arrResponse = array();
     $arrResponse['OperationRequest'] = SC_Api_Operation_Ex::getOperationRequestEcho($arrPost, $start_time);
     $arrResponse[$response_group_name] = array();
     // Items
     $arrResponse[$response_group_name] = $arrResponseValidSection;
     if (is_array($arrResponseBody)) {
         $arrResponse[$response_group_name] = array_merge((array) $arrResponse[$response_group_name], (array) $arrResponseBody);
     }
     return array($response_outer, $arrResponse);
 }
コード例 #2
0
 /**
  * オペレーション名に対応した認証の設定情報を取得する
  * Configが無い場合は、APIデフォルトを取得する
  *
  * @param string $operation_name
  * @return array 設定配列
  */
 public function getApiConfig($operation_name)
 {
     // 設定優先度 DB > plugin default > base
     $objQuery =& SC_Query_Ex::getSingletonInstance();
     $where = 'operation_name Like ? AND del_flg = 0 AND enable = 1';
     $arrApiConfig = $objQuery->getRow('*', 'dtb_api_config', $where, array($operation_name));
     if (SC_Utils_Ex::isBlank($arrApiConfig)) {
         $objApi = SC_Api_Utils_Ex::loadApiOperation($operation_name);
         if (is_object($objApi)) {
             $arrApiConfig = $objApi->getDefaultConfig();
         }
         if (!SC_Utils_Ex::isBlank($arrApiConfig)) {
             // デフォルト設定がロード出来た場合は自動で設定に反映
             $arrData = $arrApiConfig;
             $arrData['update_date'] = 'CURRENT_TIMESTAMP';
             $arrData['api_config_id'] = $objQuery->nextVal('dtb_api_config_api_config_id');
             $objQuery->insert('dtb_api_config', $arrData);
         } else {
             // ロード出来ない場合はAPI_Defaultを適用
             $operation_name = 'Default';
             $objApi = SC_Api_Utils_Ex::loadApiOperation($operation_name);
             $arrApiConfig = $objApi->getDefaultConfig();
         }
     }
     return $arrApiConfig;
 }