نمونه کد Android

کتابخانه Kotlin فینوپال برای اپ اندروید است. مبلغ‌ها به ریال و حداقل ۱۰۰۰ ریال هستند. minSdk نسخه ۲۴ یا بالاتر است. پرداخت داخل خود اپ نیست؛ آدرس درگاه با Custom Tabs باز می‌شود.

implementation("com.github.FinoPal-Lab:finopal-android-sdk:v1.0.0")
implementation("androidx.browser:browser:1.8.0")

مخزن JitPack را هم در settings.gradle.kts اضافه کنید: maven { url = uri("https://jitpack.io") }

پیکربندی و درخواست

مرچنت‌کد را از پنل کاربری بردارید. orderId و توضیحات الزامی‌اند. توضیحات حداکثر ۲۵۵ کاراکتر است. میزبان واقعی https://payment.finopal.ir و سندباکس https://sandbox.finopal.ir است. دامنه callbackUrl باید با دامنه ثبت‌شده درگاه یکی باشد.

val finopal = FinoPal(
    merchantId = "fino-xxxx-xxxx-xxxx-xxxx",
    sandbox = false,
)

val created = finopal.payments.create(
    PaymentRequest(
        amount = 10000,
        description = "سفارش ۱۲۳۴۵",
        callbackUrl = "https://shop.example/callback",
        orderId = "ORD-12345",
    ),
)

FinoPalCheckout.open(this, created.paymentUrl)

بازگشت و تأیید پرداخت

درگاه با Authority و Status به callbackUrl برمی‌گردد. فقط وقتی Status=OK است تأیید کنید. مبلغ باید همان مبلغ درخواست باشد. کد ۱۰۰ تازه تأییدشده و کد ۱۰۱ قبلاً تأییدشده است.

val back = FinoPalCheckout.parse(intent)
if (back.shouldVerify) {
    val verified = finopal.verifications.verify(back.authority!!, amount)
}

استعلام، ریورس و کارمزد

val inquiry = finopal.inquiries.inquire(authority)
finopal.reversals.reverse(authority)
val fee = finopal.fees.calculate(1000000)

feeType برابر Merchant یعنی کارمزد روی پذیرنده و Payer یعنی روی خریدار است. اگر verify با خطای شبکه برگشت، پرداخت تازه نسازید و اول استعلام بگیرید.

خطا

کلاسمعنی
ValidationExceptionورودی نامعتبر؛ درخواستی ارسال نشده
ResponseExceptionگیت‌وی درخواست را رد کرده و کد خطا دارد
TransportExceptionشبکه یا پاسخ نامعتبر. نتیجه نامعلوم است؛ استعلام بگیرید