class Veritrans::Tercerog::Mdk::MdkTransaction
MdkTransactionクラス
VeriTrans GW 通信制御クラス
Public Class Methods
new(logger=nil)
click to toggle source
コンストラクタ¶ ↑
- @param
-
logger ログ出力用クラス 未指定の場合は、Mdk用デフォルトロガークラスを使用します。
# File tgMdk/lib/tg_mdk/mdk_transaction.rb, line 46 def initialize(logger=nil) unless logger logger = Veritrans::Tercerog::Mdk::MdkLogger.new(self.class.name) end Veritrans::Tercerog::Mdk.const_set(:MDK_DEFAULT_LOGGER, logger) unless Veritrans::Tercerog::Mdk.const_defined?(:MDK_DEFAULT_LOGGER) end
Public Instance Methods
execute(request_dto)
click to toggle source
VeriTrans GWとの通信を実行します。¶ ↑
- @param
-
request_dto リクエストに利用するDTOクラス
- @return
-
リクエストに対応するレスポンスDTOクラス 対応するレスポンスが取得できない場合、Nilレスポンスクラスのインスタンスを返却します。
# File tgMdk/lib/tg_mdk/mdk_transaction.rb, line 59 def execute(request_dto) Veritrans::Tercerog::Mdk::logger.debug("MdkTransaction.execute() start") # コンフィグファイルの設定内容チェック Veritrans::Tercerog::Mdk::MdkConfig.instance.valid? if Veritrans::Tercerog::Mdk::MdkConfig.instance.mdk_error_mode == "1" Veritrans::Tercerog::Mdk::logger.debug("mdk erorr mode is on") raise Veritrans::Tercerog::Mdk::MdkError, Veritrans::Tercerog::Mdk::MdkMessage::MA99_SYSTEM_INTERNAL_ERROR end # Requestに対応するResponseを取得する response_dto = get_response_dto(request_dto) # DTOのパラメータから接続先URL作成 target_url = create_send_url(request_dto) Veritrans::Tercerog::Mdk::logger.info("connect url ==> #{target_url}") # User Agent Veritrans::Tercerog::Mdk::logger.info("user agent ==> #{Veritrans::Tercerog::Mdk::MdkConfig.instance.get_user_agent}") # MdkJsonQuery作成 json_query = Veritrans::Tercerog::Mdk::MdkJsonQuery.new(request_dto) mdk_param_hash = json_param(json_query.name_array) # ログ出力用のマスクパラメータ取得 masked_request_json = Veritrans::Tercerog::Mdk::MdkUtils::mdk_mask_json(mdk_param_hash['params'].to_json) request_dto._set_result_xml = masked_request_json Veritrans::Tercerog::Mdk::logger.info("request data ==> #{masked_request_json}") # URL Encoding json_mdk_param = mdk_param_hash.to_json enc_json_text = CGI.escape(json_mdk_param) # 通信処理 con = MdkConnection.new response_json = con.execute(target_url, enc_json_text) # 結果マッピング処理 content_handler = MdkContentHandler.new content_handler.parse(response_json, response_dto) # XMLのマスク処理と設定 masked_response_json = Veritrans::Tercerog::Mdk::MdkUtils::mdk_mask_json(response_json) response_dto._set_result_xml = masked_response_json masked_response_json = Veritrans::Tercerog::Mdk::MdkUtils::mdk_delete_r_n(masked_response_json) Veritrans::Tercerog::Mdk::logger.info("response data ==> #{masked_response_json}") rescue => e if e.is_a? Veritrans::Tercerog::Mdk::MdkError if Veritrans::Tercerog::Mdk::logger Veritrans::Tercerog::Mdk::logger.error(e) Veritrans::Tercerog::Mdk::logger.error(e.backtrace.join("\n")) end else if Veritrans::Tercerog::Mdk::logger Veritrans::Tercerog::Mdk::logger.fatal(e) Veritrans::Tercerog::Mdk::logger.fatal(e.backtrace.join("\n")) end end Veritrans::Tercerog::Mdk::logger.debug("MdkTransaction.execute() end") response_dto = get_error_response_dto(request_dto, e) else Veritrans::Tercerog::Mdk::logger.debug("MdkTransaction.execute() end") response_dto end
Private Instance Methods
create_send_url(dto)
click to toggle source
指定したDTOのパラメータから接続先URLを作成します。¶ ↑
- @param
-
dto DTOのパラメータ
- @return
-
接続先URL
# File tgMdk/lib/tg_mdk/mdk_transaction.rb, line 132 def create_send_url(dto) config = Veritrans::Tercerog::Mdk::MdkConfig.instance host_url = config[:HOST_URL] service_name = config[:ADD_URL_PAYMENT] version = config[:ADD_URL_PAYMENT_VERSION] paynowid_service_types = config[:PAYNOWID_SERVICE_TYPE] paynowid_service_type_array = paynowid_service_types.split(",") service_type = dto.service_type service_command = dto.service_command paynowid_service_type_array.each do |paynowid_service_type| if paynowid_service_type == service_type service_name = config[:ADD_URL_VTID] version = config[:ADD_URL_VTID_VERSION] break end end # サービスコマンドがSearchの場合はservice_nameを上書き if service_name == config[:ADD_URL_PAYMENT] && service_command == SERVICE_COMMAND_SEARCH service_name = service_name + HYPHEN + SEARCH_SERVER end # ダミーリクエストがONの場合はservice_nameを上書き dummy_request = config[:DUMMY_REQUEST] if dummy_request == MdkConst::DUMMY_MODE_TRUE service_name = DUMMY_SERVER + HYPHEN + service_name end return host_url + SLASH + service_name + SLASH + version + SLASH + service_command + SLASH + service_type end
get_error_response_dto(request_dto, e)
click to toggle source
エラー発生時のレスポンス用DTOを取得します。¶ ↑
- @param
-
request_dto レスポンス取得対象となるリクエストDTO
- @param
-
e レスポンスDTOに設定するエラーを保持する例外クラス
- @return
-
エラー用レスポンスDTO メソッド内でエラーが発生した場合は、NilレスポンスDTO [MdkNilResponseDto] を返却します。
# File tgMdk/lib/tg_mdk/mdk_transaction.rb, line 236 def get_error_response_dto(request_dto, e) response_dto = get_response_dto(request_dto) response_dto.v_result_code = Veritrans::Tercerog::Mdk::MdkMessage::MA99_SYSTEM_INTERNAL_ERROR response_dto.mstatus = "failure" response_dto.merr_msg = e.message if e.is_a? Veritrans::Tercerog::Mdk::MdkError response_dto.v_result_code = e.v_result_code end rescue response_dto = MdkNilResponseDto.new else response_dto end
get_response_dto(request_dto)
click to toggle source
リクエストDTOに対応するレスポンスDTOを取得します。¶ ↑
- @param
-
request_dto レスポンス取得対象となるリクエストDTO
- @return
-
レスポンスDTO
# File tgMdk/lib/tg_mdk/mdk_transaction.rb, line 205 def get_response_dto(request_dto) if request_dto.nil? return nil end tmp = request_dto.class.name.dup res_dto_name = tmp.sub!(/RequestDto$/, "ResponseDto") unless res_dto_name raise Veritrans::Tercerog::Mdk::MdkError, Veritrans::Tercerog::Mdk::MdkMessage::MA99_SYSTEM_INTERNAL_ERROR end response_dto = nil res_dto_class = res_dto_name.split(/::/).inject(Object) do |obj, name| obj.const_get(name) end response_dto = res_dto_class.new rescue => e raise e else response_dto end
json_param(param_array)
click to toggle source
連想配列から、実行時パラメータを付加した通信用の連想配列を生成します。¶ ↑
- @param
-
name_array パラメータと値の連想配列
- @return
-
実行時パラメータを付加した通信用の連想配列
# File tgMdk/lib/tg_mdk/mdk_transaction.rb, line 174 def json_param(param_array) conf = Veritrans::Tercerog::Mdk::MdkConfig.instance # 追加パラメータ other_param_array = { "txnVersion" => conf.mdk_dto_version, "dummyRequest" => conf.dummy_request, "merchantCcid" => conf.merchant_cc_id } param_array.delete("serviceType") param_array.delete("serviceCommand") merge_param_array = param_array.merge(other_param_array) # 認証ハッシュ作成 data = [conf.merchant_cc_id, merge_param_array.to_json, conf.merchant_secret_key].join digest = Veritrans::Tercerog::Mdk::MdkUtils::mdk_digest(data) # 返却用の連想配列作成 return_param_array = {PARAM_KEY => merge_param_array} return_param_array.store(AUTH_HASH_KEY, digest) return return_param_array end