diff --git a/apps/capi/src/capi.app.src b/apps/capi/src/capi.app.src index 8aeca8a..0ba2137 100644 --- a/apps/capi/src/capi.app.src +++ b/apps/capi/src/capi.app.src @@ -26,7 +26,6 @@ cowboy_access_log, cowboy_draining_server, woody_user_identity, - payproc_errors, erl_health, bouncer_client, token_keeper_client, diff --git a/apps/capi/src/capi_handler_decoder_invoicing.erl b/apps/capi/src/capi_handler_decoder_invoicing.erl index 56559cc..8519f26 100644 --- a/apps/capi/src/capi_handler_decoder_invoicing.erl +++ b/apps/capi/src/capi_handler_decoder_invoicing.erl @@ -335,28 +335,27 @@ decode_payment_status({Status, StatusInfo}, Context) -> <<"error">> => Error }. --spec decode_payment_operation_failure({atom(), _}, processing_context()) -> decode_data(). +-spec decode_payment_operation_failure(dmsl_domain_thrift:'OperationFailure'(), processing_context()) -> decode_data(). decode_payment_operation_failure({operation_timeout, _}, _) -> payment_error(<<"timeout">>); decode_payment_operation_failure({failure, Failure}, Context) -> AuthContext = capi_handler_utils:get_auth_context(Context), case capi_auth:get_consumer(AuthContext) of client -> - payment_error(payproc_errors:match('PaymentFailure', Failure, fun payment_error_client_maping/1)); + payment_error(payment_error_client_maping(Failure)); merchant -> - % чтобы не городить ещё один обход дерева как в payproc_errors проще отформатировать в текст, - % а потом уже в json - decode_payment_operation_failure_( - binary:split(erlang:list_to_binary(payproc_errors:format_raw(Failure)), <<":">>, [global]) - ) + decode_payment_operation_failure_(Failure) end. -decode_payment_operation_failure_([H | T]) -> - R = payment_error(H), - case T of - [] -> R; - _ -> R#{<<"subError">> => decode_payment_operation_failure_(T)} - end. +decode_payment_operation_failure_(undefined) -> + undefined; +decode_payment_operation_failure_(Failure) -> + {Code, Sub} = + case Failure of + #domain_Failure{code = C, sub = S} -> {C, S}; + #domain_SubFailure{code = C, sub = S} -> {C, S} + end, + genlib_map:compact((payment_error(Code))#{<<"subError">> => decode_payment_operation_failure_(Sub)}). decode_flow({instant, _}) -> #{<<"type">> => <<"PaymentFlowInstant">>}; @@ -384,21 +383,28 @@ payment_error(Code) -> #{<<"code">> => Code}. %% client error mapping -%% @see https://github.com/petrkozorezov/swag/blob/master/spec/definitions/PaymentError.yaml --spec payment_error_client_maping(capi_handler_encoder:encode_data()) -> binary(). -payment_error_client_maping({preauthorization_failed, _}) -> +-spec payment_error_client_maping(dmsl_domain_thrift:'Failure'()) -> binary(). +payment_error_client_maping(#domain_Failure{code = <<"preauthorization_failed">>}) -> <<"PreauthorizationFailed">>; -payment_error_client_maping({authorization_failed, {account_blocked, _}}) -> - <<"RejectedByIssuer">>; -payment_error_client_maping({authorization_failed, {rejected_by_issuer, _}}) -> +payment_error_client_maping(#domain_Failure{ + code = <<"authorization_failed">>, sub = #domain_SubFailure{code = <<"account_blocked">>} +}) -> <<"RejectedByIssuer">>; -payment_error_client_maping({authorization_failed, {payment_tool_rejected, _}}) -> +payment_error_client_maping(#domain_Failure{ + code = <<"authorization_failed">>, sub = #domain_SubFailure{code = <<"payment_tool_rejected">>} +}) -> <<"InvalidPaymentTool">>; -payment_error_client_maping({authorization_failed, {account_not_found, _}}) -> +payment_error_client_maping(#domain_Failure{ + code = <<"authorization_failed">>, sub = #domain_SubFailure{code = <<"account_not_found">>} +}) -> <<"InvalidPaymentTool">>; -payment_error_client_maping({authorization_failed, {account_limit_exceeded, _}}) -> +payment_error_client_maping(#domain_Failure{ + code = <<"authorization_failed">>, sub = #domain_SubFailure{code = <<"account_limit_exceeded">>} +}) -> <<"AccountLimitsExceeded">>; -payment_error_client_maping({authorization_failed, {insufficient_funds, _}}) -> +payment_error_client_maping(#domain_Failure{ + code = <<"authorization_failed">>, sub = #domain_SubFailure{code = <<"insufficient_funds">>} +}) -> <<"InsufficientFunds">>; payment_error_client_maping(_) -> <<"PaymentRejected">>. diff --git a/apps/capi/test/capi_base_api_token_tests_SUITE.erl b/apps/capi/test/capi_base_api_token_tests_SUITE.erl index 031c7d2..70203b8 100644 --- a/apps/capi/test/capi_base_api_token_tests_SUITE.erl +++ b/apps/capi/test/capi_base_api_token_tests_SUITE.erl @@ -4,7 +4,6 @@ -include_lib("stdlib/include/assert.hrl"). -include_lib("damsel/include/dmsl_payproc_thrift.hrl"). --include_lib("damsel/include/dmsl_payproc_error_thrift.hrl"). -include_lib("damsel/include/dmsl_webhooker_thrift.hrl"). -include_lib("damsel/include/dmsl_base_thrift.hrl"). -include_lib("damsel/include/dmsl_domain_thrift.hrl"). @@ -803,12 +802,11 @@ get_payment_status_preauthorization_failed_test(Config) -> <<"code">> => <<"unknown">> } }, - Failure = - payproc_errors:construct( - 'PaymentFailure', - {preauthorization_failed, {unknown, #payproc_error_GeneralFailure{}}}, - <<"Reason">> - ), + Failure = #domain_Failure{ + reason = <<"Reason">>, + code = <<"preauthorization_failed">>, + sub = #domain_SubFailure{code = <<"unknown">>} + }, get_merchant_payment_status_test_impl(MappedFailure, Failure, Config). -spec get_payment_status_payment_tool_rejected_test(config()) -> _. @@ -824,13 +822,16 @@ get_payment_status_payment_tool_rejected_test(Config) -> } } }, - Failure = - payproc_errors:construct( - 'PaymentFailure', - {authorization_failed, - {payment_tool_rejected, {bank_card_rejected, {cvv_invalid, #payproc_error_GeneralFailure{}}}}}, - <<"Reason">> - ), + Failure = #domain_Failure{ + reason = <<"Reason">>, + code = <<"authorization_failed">>, + sub = #domain_SubFailure{ + code = <<"payment_tool_rejected">>, + sub = #domain_SubFailure{ + code = <<"bank_card_rejected">>, sub = #domain_SubFailure{code = <<"cvv_invalid">>} + } + } + }, get_merchant_payment_status_test_impl(MappedFailure, Failure, Config). -spec get_payment_status_account_limit_exceeded_test(config()) -> _. @@ -845,12 +846,11 @@ get_payment_status_account_limit_exceeded_test(Config) -> } } }, - Failure = - payproc_errors:construct( - 'PaymentFailure', - {authorization_failed, {account_limit_exceeded, {unknown, #payproc_error_GeneralFailure{}}}}, - <<"Reason">> - ), + Failure = #domain_Failure{ + reason = <<"Reason">>, + code = <<"authorization_failed">>, + sub = #domain_SubFailure{code = <<"account_limit_exceeded">>, sub = #domain_SubFailure{code = <<"unknown">>}} + }, get_merchant_payment_status_test_impl(MappedFailure, Failure, Config). -spec get_payment_status_account_blocked_test(config()) -> _. @@ -880,12 +880,11 @@ get_merchant_payment_status_test_(SubErrorCode, Config) -> <<"code">> => atom_to_binary(SubErrorCode) } }, - Failure6 = - payproc_errors:construct( - 'PaymentFailure', - {authorization_failed, {SubErrorCode, #payproc_error_GeneralFailure{}}}, - <<"Reason">> - ), + Failure6 = #domain_Failure{ + reason = <<"Reason">>, + code = <<"authorization_failed">>, + sub = #domain_SubFailure{code = atom_to_binary(SubErrorCode)} + }, get_merchant_payment_status_test_impl(MappedFailure6, Failure6, Config). get_merchant_payment_status_test_impl(MappedFailure, Failure, Config) -> diff --git a/apps/capi/test/capi_invoice_access_token_tests_SUITE.erl b/apps/capi/test/capi_invoice_access_token_tests_SUITE.erl index 55cb4c2..0dad02b 100644 --- a/apps/capi/test/capi_invoice_access_token_tests_SUITE.erl +++ b/apps/capi/test/capi_invoice_access_token_tests_SUITE.erl @@ -4,7 +4,6 @@ -include_lib("stdlib/include/assert.hrl"). -include_lib("damsel/include/dmsl_payproc_thrift.hrl"). --include_lib("damsel/include/dmsl_payproc_error_thrift.hrl"). -include_lib("damsel/include/dmsl_base_thrift.hrl"). -include_lib("damsel/include/dmsl_domain_thrift.hrl"). -include_lib("damsel/include/dmsl_user_interaction_thrift.hrl"). @@ -771,13 +770,16 @@ get_recurrent_payments_ok_test(Config) -> -spec get_failed_payment_with_invalid_cvv(config()) -> _. get_failed_payment_with_invalid_cvv(Config) -> - Failure = - payproc_errors:construct( - 'PaymentFailure', - {authorization_failed, - {payment_tool_rejected, {bank_card_rejected, {cvv_invalid, #payproc_error_GeneralFailure{}}}}}, - <<"Reason">> - ), + Failure = #domain_Failure{ + reason = <<"Reason">>, + code = <<"authorization_failed">>, + sub = #domain_SubFailure{ + code = <<"payment_tool_rejected">>, + sub = #domain_SubFailure{ + code = <<"bank_card_rejected">>, sub = #domain_SubFailure{code = <<"cvv_invalid">>} + } + } + }, _ = capi_ct_helper:mock_services( [ {invoicing, fun diff --git a/rebar.config b/rebar.config index 4b77eda..f3e1f71 100644 --- a/rebar.config +++ b/rebar.config @@ -42,7 +42,6 @@ {dmt_client, {git, "https://github.com/valitydev/dmt_client.git", {tag, "v2.0.3"}}}, {cowboy_cors, {git, "https://github.com/valitydev/cowboy_cors.git", {branch, "master"}}}, {cowboy_access_log, {git, "https://github.com/valitydev/cowboy_access_log.git", {branch, "master"}}}, - {payproc_errors, {git, "https://github.com/valitydev/payproc-errors-erlang.git", {branch, "master"}}}, {scoper, {git, "https://github.com/valitydev/scoper.git", {tag, "v1.1.0"}}}, {erl_health, {git, "https://github.com/valitydev/erlang-health.git", {branch, master}}}, {lechiffre, {git, "https://github.com/valitydev/lechiffre.git", {tag, "v0.1.0"}}}, diff --git a/rebar.lock b/rebar.lock index fc4dedc..7a675f1 100644 --- a/rebar.lock +++ b/rebar.lock @@ -106,10 +106,6 @@ {git,"https://github.com/valitydev/party-client-erlang.git", {ref,"8448535eb60e6130bb12902594d2c59eea03e8b0"}}, 0}, - {<<"payproc_errors">>, - {git,"https://github.com/valitydev/payproc-errors-erlang.git", - {ref,"8ae8586239ef68098398acf7eb8363d9ec3b3234"}}, - 0}, {<<"prometheus">>,{pkg,<<"prometheus">>,<<"4.11.0">>},0}, {<<"prometheus_cowboy">>,{pkg,<<"prometheus_cowboy">>,<<"0.1.9">>},0}, {<<"prometheus_httpd">>,{pkg,<<"prometheus_httpd">>,<<"2.1.15">>},1}, @@ -137,7 +133,7 @@ {ref,"3a60e5dc5bbd709495024f26e100b041c3547fd9"}}, 1}, {<<"tls_certificate_check">>, - {pkg,<<"tls_certificate_check">>,<<"1.33.0">>}, + {pkg,<<"tls_certificate_check">>,<<"1.35.0">>}, 1}, {<<"token_keeper_client">>, {git,"https://github.com/valitydev/token-keeper-client.git", @@ -185,7 +181,7 @@ {<<"quantile_estimator">>, <<"EF50A361F11B5F26B5F16D0696E46A9E4661756492C981F7B2229EF42FF1CD15">>}, {<<"ranch">>, <<"8C7A100A139FD57F17327B6413E4167AC559FBC04CA7448E9BE9057311597A1D">>}, {<<"ssl_verify_fun">>, <<"354C321CF377240C7B8716899E182CE4890C5938111A1296ADD3EC74CF1715DF">>}, - {<<"tls_certificate_check">>, <<"01E0822A2EBB0B207C4964E8D32AD8B1B8CE1CAF58F446E53F816D06DB953DE4">>}, + {<<"tls_certificate_check">>, <<"6237B9CB9632B1F52F00EF852CD04D4AF70319C308D4F65BE1E45DA637578867">>}, {<<"unicode_util_compat">>, <<"A48703A25C170EEDADCA83B11E88985AF08D35F37C6F664D6DCFB106A97782FC">>}]}, {pkg_hash_ext,[ {<<"accept">>, <<"CA69388943F5DAD2E7232A5478F16086E3C872F48E32B88B378E1885A59F5649">>}, @@ -215,6 +211,6 @@ {<<"quantile_estimator">>, <<"282A8A323CA2A845C9E6F787D166348F776C1D4A41EDE63046D72D422E3DA946">>}, {<<"ranch">>, <<"49FBCFD3682FAB1F5D109351B61257676DA1A2FDBE295904176D5E521A2DDFE5">>}, {<<"ssl_verify_fun">>, <<"FE4C190E8F37401D30167C8C405EDA19469F34577987C76DDE613E838BBC67F8">>}, - {<<"tls_certificate_check">>, <<"CAB9A7439E2DBFE91B38104F2D8A4B6D61DBC4D3A5AD59AC364713A88C6CFD9B">>}, + {<<"tls_certificate_check">>, <<"36FD91D635761DAFFA12E75B0C784B24510A69AD53348B8276A553D2D665B579">>}, {<<"unicode_util_compat">>, <<"B3A917854CE3AE233619744AD1E0102E05673136776FB2FA76234F3E03B23642">>}]} ].