/** * 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); }