قبلا روش اتصال به زرین پال را در لینک زیر به وسیله سواپ اموزش دادیدم
آموزش اتصال phoenix به درگاه پرداخت زرین پال Phoenix
مرحله اول
در این مرحله من روی پروژه خودم پلاگین httpoison را نصب کردم که می توانید در وب سایت hex.pm ان را روی پروژه خودتان اضافه کنید
به صورت مثال
defp deps do
[
{:phoenix, "~> 1.4.0"},
.....
....
{:httpoison, "~> 1.5"},
و همینطور آن را در بخش زیر نیز معرفی کردم
def application do
[
mod: {BankError.Application, []},
extra_applications: [:logger, :runtime_tools, :httpoison]
]
end
مرحله دوم در این مرحله یک فایل در پروژه خودمان می سازیم کد های زیر در آن قرار می گیرد لازم به ذکر هست این کد ها تکرار در آن ها زیاد هست و دلیل آن توانایی درک بهتر در این اموزش می باشد شما می توانید کد های کمتر و تمیز تر و داینامیک تری را در پروژه خود ایجاد کنید
مرحله سوم
شما در این مرحله سه تابع دارید که هر کدام به ترتیب باید کار هایی را برای شما انجام بدهند ۱. در این تابع یعنی get_token شما یک بار به زرین پال درخواست می دهید و مواردی مثل
MerchantID کد درگاه شما در اینجا تست می باشد
Amount قیمت محصول شما برای بررسی و ولید سازی مهم است
CallbackURL لینک بعد از پرداخت یا عدم پرداخت باید برگشت کند به سایت شما
Description توضیحات پرداخت
به همین سادگی شما در این مرحله که کد های آن بالا قرار دارد و به وسیله HTTPoison یک درخواست post می زنید و توکن برای شروع انتقال کاربر به درگاه بانکی را دریافت می کنید
مرحله چهارم
شما در این بخش در کنترل پروژه فونیکس خودتان می آیید و کد دریافتی از زرین پال را با همراه کاربر ریدارکت می کنید به درگاه زرین پال به صورت زیر
conn
|> redirect(external: "https://sandbox.zarinpal.com/pg/StartPay/#{authority}")
آخرین مرحله حال شما باید اعتبار سنجی فرمایید که آیا کد تراکنش کاربر درست می باشد و توکن آن از قبل ولید بوده یا خیر که تابع زیر می باشد
def validate(zarinpal_token) do
sms_body = Jason.encode!(
%{
"MerchantID" => "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"Amount" => "1000",
"Authority" => "#{zarinpal_token}"
}
)
send_info = HTTPoison.post "https://sandbox.zarinpal.com/pg/rest/WebGate/PaymentVerification.json",
sms_body,
[
{"Content-Type", "application/json"},
]
zarinpal_status(send_info)
end
در این بخش شما توکن و همینطور توکن بعد از خرید را ارسال کرده و در صورت اوکی بودن درخواست ثبت در دیتابیس خود می نمایید نمونه ورودی تابع اکشن در کنترل در موقع برگشت از زرین پال
def back_pay(conn, %{"Authority" => authority, "Status" => "OK", "provider" => "zarinpal"}) do
موفق باشید