Packages

Elixir client library for the Paymob payment gateway (Egypt, UAE, KSA, Oman)

Current section

Files

Jump to
ex_paymob lib mix tasks ex_paymob.install.ex
Raw

lib/mix/tasks/ex_paymob.install.ex

if Code.ensure_loaded?(Igniter) do
defmodule Mix.Tasks.ExPaymob.Install do
@moduledoc """
Installs ExPaymob configuration into your Phoenix project.
mix ex_paymob.install
## What it does
1. Adds base configuration to `config/config.exs`
2. Adds runtime configuration to `config/runtime.exs`
3. Adds test configuration to `config/test.exs`
4. Adds `:ex_paymob` to formatter's `import_deps`
5. Prints setup instructions for webhook routes
"""
use Igniter.Mix.Task
@impl true
def info(_argv, _composing_task) do
%Igniter.Mix.Task.Info{
group: :ex_paymob,
adds_deps: [],
installs: [],
example: "mix ex_paymob.install"
}
end
@impl true
def igniter(igniter) do
app_name = Igniter.Project.Application.app_name(igniter)
igniter
|> setup_config(app_name)
|> setup_runtime_config()
|> setup_test_config()
|> setup_formatter()
|> add_notices()
end
defp setup_config(igniter, _app_name) do
Igniter.Project.Config.configure(
igniter,
"config.exs",
:ex_paymob,
[:region],
{:code, Sourceror.parse_string!(":egypt")}
)
end
defp setup_runtime_config(igniter) do
igniter
|> Igniter.Project.Config.configure(
"runtime.exs",
:ex_paymob,
[:secret_key],
{:code,
Sourceror.parse_string!(
~s[System.get_env("PAYMOB_SECRET_KEY") || raise "PAYMOB_SECRET_KEY not set"]
)}
)
|> Igniter.Project.Config.configure(
"runtime.exs",
:ex_paymob,
[:public_key],
{:code, Sourceror.parse_string!(~s[System.get_env("PAYMOB_PUBLIC_KEY")])}
)
|> Igniter.Project.Config.configure(
"runtime.exs",
:ex_paymob,
[:hmac_secret],
{:code,
Sourceror.parse_string!(
~s[System.get_env("PAYMOB_HMAC_SECRET") || raise "PAYMOB_HMAC_SECRET not set"]
)}
)
end
defp setup_test_config(igniter) do
igniter
|> Igniter.Project.Config.configure(
"test.exs",
:ex_paymob,
[:secret_key],
"test_secret_key"
)
|> Igniter.Project.Config.configure(
"test.exs",
:ex_paymob,
[:public_key],
"test_public_key"
)
|> Igniter.Project.Config.configure(
"test.exs",
:ex_paymob,
[:hmac_secret],
"test_hmac_secret"
)
end
defp setup_formatter(igniter) do
Igniter.Project.Formatter.import_dep(igniter, :ex_paymob)
end
defp add_notices(igniter) do
Igniter.add_notice(igniter, """
ExPaymob installed successfully!
Next steps:
1. Set environment variables:
- PAYMOB_SECRET_KEY (required)
- PAYMOB_PUBLIC_KEY (for checkout URLs)
- PAYMOB_HMAC_SECRET (for webhook verification)
2. Add webhook route to your router:
# In your endpoint.ex, before Plug.Parsers:
plug Plug.Parsers,
parsers: [:json],
pass: ["application/json"],
json_decoder: Jason,
body_reader: {ExPaymob.Plug.RawBodyReader, :read_body, []}
# In your router.ex:
scope "/webhooks" do
pipe_through :api
forward "/paymob", ExPaymob.Plug.WebhookPlug,
handler: MyApp.PaymobWebhookHandler
end
3. Create your webhook handler:
defmodule MyApp.PaymobWebhookHandler do
def handle_event(conn, event) do
# Process the Paymob event...
conn
end
end
4. For UAE region, add to config:
config :ex_paymob, region: :uae
""")
end
end
end