{"id":24869631,"url":"https://github.com/alsatpardakht/alsatipgandroidjavaexample","last_synced_at":"2026-05-01T10:31:48.204Z","repository":{"id":174714379,"uuid":"457702775","full_name":"AlsatPardakht/AlsatIPGAndroidJavaExample","owner":"AlsatPardakht","description":"android java example of AlsatIPGAndroid library","archived":false,"fork":false,"pushed_at":"2022-03-28T05:28:17.000Z","size":253,"stargazers_count":4,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"master","last_synced_at":"2025-03-26T21:48:58.589Z","etag":null,"topics":["alsat","alsatpardakht","android","example","ipg","java","library","peyment"],"latest_commit_sha":null,"homepage":"https://alsatpardakht.com","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/AlsatPardakht.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2022-02-10T08:59:05.000Z","updated_at":"2022-04-04T11:06:57.000Z","dependencies_parsed_at":"2023-07-30T13:15:13.741Z","dependency_job_id":null,"html_url":"https://github.com/AlsatPardakht/AlsatIPGAndroidJavaExample","commit_stats":null,"previous_names":["alsatpardakht/alsatipgandroidjavaexample"],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/AlsatPardakht/AlsatIPGAndroidJavaExample","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AlsatPardakht%2FAlsatIPGAndroidJavaExample","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AlsatPardakht%2FAlsatIPGAndroidJavaExample/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AlsatPardakht%2FAlsatIPGAndroidJavaExample/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AlsatPardakht%2FAlsatIPGAndroidJavaExample/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/AlsatPardakht","download_url":"https://codeload.github.com/AlsatPardakht/AlsatIPGAndroidJavaExample/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AlsatPardakht%2FAlsatIPGAndroidJavaExample/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32494270,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-30T13:12:12.517Z","status":"online","status_checked_at":"2026-05-01T02:00:05.856Z","response_time":64,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["alsat","alsatpardakht","android","example","ipg","java","library","peyment"],"created_at":"2025-02-01T03:31:08.123Z","updated_at":"2026-05-01T10:31:48.182Z","avatar_url":"https://github.com/AlsatPardakht.png","language":"Java","readme":"\u003cp align=\"center\"\u003e\r\n  \u003ca href=\"\" rel=\"noopener\"\u003e\r\n \u003cimg width=200px height=200px src=\"./logo.png\" alt=\"Project logo\"\u003e\u003c/a\u003e\r\n\u003c/p\u003e\r\n\r\n\u003ch3 align=\"center\"\u003eAlsat IPG Android Java Example\u003c/h3\u003e\r\n\r\n\u003cdiv align=\"center\"\u003e\r\n\r\n[![Status](https://img.shields.io/badge/status-active-success.svg)]()\r\n[![GitHub Issues](https://img.shields.io/github/issues/AlsatPardakht/AlsatIPGAndroidJavaExample.svg)](https://github.com/AlsatPardakht/AlsatIPGAndroidJavaExample/issues)\r\n[![GitHub Pull Requests](https://img.shields.io/github/issues-pr/AlsatPardakht/AlsatIPGAndroidJavaExample.svg)](https://github.com/AlsatPardakht/AlsatIPGAndroidJavaExample/pulls)\r\n[![License](https://img.shields.io/badge/license-MIT-blue.svg)](/LICENSE)\r\n\r\n\u003c/div\u003e\r\n\r\n---\r\n\r\n\u003cdiv dir=\"rtl\"\u003e\r\n\r\n\u003cp align=\"center\"\u003e\r\nیک مثال ساده از نحوه استفاده کردن کتابخانه \u003ca href=\"https://github.com/AlsatPardakht/AlsatIPGAndroid\"\u003eAlsatIPGAndroid\u003c/a\u003e در اپلیکیشن با زبان برنامه نویسی Java\r\n    \u003cbr\u003e \r\n\u003c/p\u003e\r\n\r\n\r\n\r\n## 📝 فهرست\r\n\r\n- [درباره](#about)\r\n- [نحوه استفاده](#usage)\r\n- [ساخته شده با استفاده از](#built_using)\r\n\r\n## 🧐 درباره \u003ca name = \"about\"\u003e\u003c/a\u003e\r\n\u003cp dir=\"rtl\"\u003e\r\nدر این اپلیکیشن از کتابخانه \u003ca href=\"https://github.com/AlsatPardakht/AlsatIPGAndroid\"\u003eAlsatIPGAndroid\u003c/a\u003e برای پرداخت صورت حساب به صورت اینترنتی استفاده شده است .\r\n\u003cbr\u003e\r\nبرای مطالعه بیشتر در مورد api مستقیم IPG آلسات پرداخت می توانید به لینک زیر مراجعه کنید :\r\n\u003c/p\u003e\r\n\u003ca href=\"https://www.alsatpardakht.com/TechnicalDocumentation/191\"\u003e🌐 مستندات فنی IPG های مستقیم آلسات پرداخت\u003c/a\u003e\u003cbr\u003e\r\nهمچنین مشابه این اپلیکیشن با استفاده از زبان برنامه نویسی کاتلین موجود است که می توانید در لینک زیر مشاهده کنید :\r\n\u003cbr\u003e\r\n\u003ca href=\"https://github.com/AlsatPardakht/AlsatIPGAndroidKotlinExample\"\u003eنمونه استفاده از  کتابخانه AlsatIPGAndroid در Kotlin\u003c/a\u003e\r\n\r\n## 🎈 نحوه استفاده \u003ca name=\"usage\"\u003e\u003c/a\u003e\r\nپس از این که مراحل \u003ca href=\"https://github.com/AlsatPardakht/AlsatIPGAndroid#-%D8%B4%D8%B1%D9%88%D8%B9-%D8%A8%D9%87-%DA%A9%D8%A7%D8%B1-\"\u003eشروع به کار\u003c/a\u003e کتابخانه \r\n\u003ca href=\"https://github.com/AlsatPardakht/AlsatIPGAndroid\"\u003eAlsatIPGAndroid\u003c/a\u003e\r\n را انجام دادید می توانید مراحل استفاده از کتابخانه که در ادامه آورده شده را انجام بدهید .\r\n\u003cbr\u003e\u003cbr\u003e\r\n### مرحله اول : تعریف یک دیپ لینک به اکتیویتی (\u003ca href=\"https://developer.android.com/training/app-links/deep-linking\"\u003edeep link\u003c/a\u003e)\r\n\r\nابتدا باید یک deep link برای اکتیویتی خود تعریف کنید که اکتیویتی شما بتواند نتیجه پرداخت را دریافت و برسی کند ( payment validation )\r\n\u003cbr\u003eبرای این کار کافی است تگ intent-filter زیر را در اکتیویتی دلخواه خود کپی کنید .\r\n\u003cbr\u003e \r\nبرای مشخص کردن آدرس deep link دلخواه خود کافی است در تگ data مقدار های host و scheme و pathPrefix دلخواه خود را وارد کنید .\r\n\u003cbr\u003e\r\nدر مثال زیر آدرس deep link برابر است با : http://www.example.com/some_path\r\n\r\n\u003c/div\u003e\r\n\r\n```XML\r\n\u003cmanifest\u003e\r\n\r\n    ...\r\n\r\n    \u003capplication\u003e\r\n        \u003cactivity\r\n            android:name=\".MainActivity\"\r\n            android:exported=\"true\"\r\n            android:launchMode=\"singleTask\"\u003e\r\n            \r\n            ...\r\n\r\n            \u003cintent-filter android:label=\"YOUR LABEL\"\u003e\r\n                \u003caction android:name=\"android.intent.action.VIEW\" /\u003e\r\n                \u003ccategory android:name=\"android.intent.category.DEFAULT\" /\u003e\r\n                \u003ccategory android:name=\"android.intent.category.BROWSABLE\" /\u003e\r\n                \u003cdata\r\n                    android:host=\"www.example.com\"\r\n                    android:pathPrefix=\"/some_path\"\r\n                    android:scheme=\"http\" /\u003e\r\n            \u003c/intent-filter\u003e\r\n        \u003c/activity\u003e\r\n    \u003c/application\u003e\r\n\u003c/manifest\u003e\r\n```\r\n\r\n\u003cdiv dir=\"rtl\"\u003e\r\nهمچنین دقت کنید که در اکتیویتی مورد نظر حتما مقدار  اتربیوت های زیر موجود باشد که در زمان بازگشت به اپلیکیشن پس از پرداخت اینترنتی به مشکل نخورید :\r\n\r\n\u003c/div\u003e\r\n\r\n```XML\r\nandroid:exported=\"true\"\r\nandroid:launchMode=\"singleTask\"\r\n```\r\n\r\n\u003cdiv dir=\"rtl\"\u003e\r\nبرای آشنایی بیشتر با دیپ لینک ها در اندروید می توانید داکیومنت \r\n\u003ca href=\"https://developer.android.com/training/app-links/deep-linking\"\u003edeep link\u003c/a\u003e   را مطالعه کنید .\r\n\r\n\u003cbr\u003e\r\n\r\n### مرحله دوم : ساختن نمونه از کلاس AlsatIPG\r\n\r\nبا استفاده از دستور زیر می توانید یک نمونه از کلاس AlsatIPG بسازید و با کمک این نمونه کار های پرداخت را انجام دهید :\r\n\u003c/div\u003e\r\n\r\n```Java\r\nprivate final AlsatIPG alsatIPG = AlsatIPG.getInstance(false);\r\n```\r\n\r\n\u003cdiv dir=\"rtl\"\u003e\r\nمقدار false ورودی تابع getInstance به این منظور است که اطلاعات درخواست های http در  Logcat چاپ نشود (در زمان انتشار اپلیکیشن باید این مقدار false باشد ولی در هنگام debug می تواند  true باشد) \r\n\r\n\u003cbr\u003e\r\n\r\n### مرحله سوم : پیاده سازی observer ها\r\nدر این مرحله کافی است اکتیویتی یا فرگمنت  شما از LiveData های PaymentSignStatus و PaymentValidationStatus را observe کند :\r\n\r\n\u003c/div\u003e\r\n\r\n```Java\r\npublic class MainActivity extends AppCompatActivity {\r\n\r\n    @Override\r\n    protected void onCreate(Bundle savedInstanceState) {\r\n        super.onCreate(savedInstanceState);\r\n        setContentView(R.layout.activity_main);\r\n\r\n        ...\r\n\r\n        observeToPaymentSignStatus();\r\n        observeToPaymentValidationStatus();\r\n    }\r\n\r\n    private void observeToPaymentSignStatus() {\r\n        alsatIPG.getPaymentSignStatus().observe(this, new Observer\u003cPaymentSignResult\u003e() {\r\n            @Override\r\n            public void onChanged(PaymentSignResult paymentSignResult) {\r\n                ...\r\n            }\r\n        });\r\n    }\r\n\r\n    private void observeToPaymentValidationStatus() {\r\n        alsatIPG.getPaymentValidationStatus().observe(this, new Observer\u003cPaymentValidationResult\u003e() {\r\n            @Override\r\n            public void onChanged(PaymentValidationResult paymentValidationResult) {\r\n                ...\r\n            }\r\n        });\r\n    }\r\n\r\n}\r\n```\r\n\r\n\u003cdiv dir=\"rtl\"\u003e\r\nاین دو LiveData نتیجه sign شدن پرداخت و validation پرداخت را به شما بر می گرداند .\r\n\u003cbr\u003e\u003cbr\u003e\r\n\r\n\r\n### مرحله چهارم : sign کردن پرداخت\r\nبرای شروع sign پرداخت کافی است با کمک تابع های signMostaghim یا signVaset موجود در کتابخانه این کار  را انجام دهید :\r\n\u003c/div\u003e\r\n\r\n```Java\r\nPaymentType paymentType = PaymentType.Mostaghim;\r\nif (paymentType == PaymentType.Mostaghim) {\r\n    alsatIPG.signMostaghim(\r\n            API,//Api\r\n            10_000,//Amount\r\n            \"12345\",//InvoiceNumber\r\n            \"http://www.example.com/some_path\"//RedirectAddress\r\n    );\r\n} else if (paymentType == PaymentType.Vaset) {\r\n    alsatIPG.signVaset(\r\n            API,//Api\r\n            20_000,//Amount\r\n            \"http://www.example.com/some_path\",//RedirectAddress\r\n            new ArrayList\u003cTashimModel\u003e(),//Tashim\r\n            \"12345\"//InvoiceNumber\r\n    );\r\n}\r\n```\r\n\r\n\u003cdiv dir=\"rtl\"\u003e\r\n\r\n- مقدار paymentType می تواند با توجه به نیاز شما PaymentType.Mostaghim یا PaymentType.Vaset باشد .\r\n\r\n- دقت کنید که مثال بالا بصورت دستی نوع پرداخت را وارد کرده  (شما می توانید با توجه به نیاز خود از یکی یا  هر دو حالت پرداخت به صورت داینامیک استفاده کنید)\r\n\r\n- مقدار API همان کلید دریافتی شما در وب سایت آلسات پرداخت می باشد که برای دریافت آن ابتدا باید در وب سایت ثبت نام کنید و پس از مراحل احراز هویت این کلید به شما داده می شود .\r\n\r\n- مقدار Amount همان مبلغ قالب پرداخت به ریال است . \r\n\r\n- مقدار InvoiceNumber همان شماره سفارش شما است .\r\n\r\n- مقدار RedirectAddress همان آدرس دیپ لینک به اکتیویتی شماست که در فایل AndroidManifest.xml وارد کردید .\r\n\r\n- مقدار Tashim لیست کسانی است  که مبلغ پرداختی به حساب آنها واریز خواهد شد (پرداخت بصورت واسط)\r\n\r\nپس از فراخوانی تابع sign نتایج این فراخوانی از طریق PaymentSignStatus که observe کرده بودید در دسترس است :\r\n\r\n\u003c/div\u003e\r\n\r\n```Java\r\nprivate void observeToPaymentSignStatus() {\r\n    alsatIPG.getPaymentSignStatus().observe(this, new Observer\u003cPaymentSignResult\u003e() {\r\n        @Override\r\n        public void onChanged(PaymentSignResult paymentSignResult) {\r\n            if (paymentSignResult.isSuccessful()) {\r\n                log(\"payment Sign Success url = \" + paymentSignResult.getUrl());\r\n                Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(paymentSignResult.getUrl()));\r\n                startActivity(intent);\r\n            } else if (paymentSignResult.isLoading()) {\r\n                log(\"payment Sign Loading ...\");\r\n            } else if (paymentSignResult.getError() != null) {\r\n                log(\"payment Sign error = \" + paymentSignResult.getError().getMessage());\r\n            }\r\n        }\r\n    });\r\n}\r\n```\r\n\r\n\u003cdiv dir=\"rtl\"\u003e\r\n\r\nاین observer وضعیت های موفق بودن یا لودینگ یا ارور تابع sign را به شما تحویل می دهد .\r\n\u003cbr\u003e\r\nدقت کنید در زمان موفق بودن sign پرداخت شما باید با استفاده از url موجود در نتیجه یک صفحه وب برای هدایت شدن کاربر به صفحه پرداخت شاپرک باز کنید .\r\n\u003cbr\u003e\r\nبرای باز کردن صفحه وب می توانید از مرورگر وب یا WebView استفاده کنید که در این مثال برای سادگی از روش مرورگر وب استفاده شده است .\r\n\u003cbr\u003e\u003cbr\u003e\r\n\r\n### مرحله پنجم : validation کردن پرداخت\r\n\r\nبرای این که بتوانید برای پرداخت validation انجام بدهید کافی است تابع validationMostaghim یا validationVaset را در onNewIntent اکتیویتی فراخوانی کنید :\r\n\r\n\u003c/div\u003e\r\n\r\n```Java\r\n@Override\r\nprotected void onNewIntent(Intent intent) {\r\n    super.onNewIntent(intent);\r\n    if (intent != null) {\r\n        Uri data = intent.getData();\r\n        if (data != null) {\r\n            log(\"intent and data is not null\");\r\n            if (paymentType == PaymentType.Mostaghim) {\r\n                alsatIPG.validationMostaghim(API, data);\r\n            } else if (paymentType == PaymentType.Vaset) {\r\n                alsatIPG.validationVaset(API, data);\r\n            }\r\n        } else {\r\n            log(\"data is null\");\r\n        }\r\n    } else {\r\n        log(\"intent is null\");\r\n    }\r\n}\r\n```\r\n\r\n\u003cdiv dir=\"rtl\"\u003e\r\n\r\n- مقدار paymentType می تواند با توجه به نیاز شما PaymentType.Mostaghim یا PaymentType.Vaset باشد .\r\n\r\n- دقت کنید که مثال بالا بصورت دستی نوع پرداخت را وارد کرده  (شما می توانید با توجه به نیاز خود از یکی یا  هر دو حالت پرداخت به صورت داینامیک استفاده کنید)\r\n\r\n- مقدار API همان کلید دریافتی شما در وب سایت آلسات پرداخت می باشد .\r\n\r\n- مقدار ()intent.getData همان اطلاعاتی هستند که از سمت شاپرک به اکتیویتی شما بازگشت داده می شود و تابع validation با  استفاده از این اطلاعات معتبر بودن پرداخت را برسی می کند .\r\n\r\n\u003cbr\u003e\r\nپس از آن که کاربر پرداخت را به درستی انجام داد یا به هر دلیلی موفق به پرداخت نشد شاپرک کاربر را به آدرس RedirectAddress که در زمان sign پرداخت وارد کرده بودید هدایت می کند و چون یک دیپ لینک به همین آدرس تعریف کرده اید باعث باز شدن اکتیویتی شما و فراخوانی تابع onNewIntent اکتیویتی شما و سپس فراخوانی شدن تابع validationMostaghim یا validationVaset می شود .\r\n\u003cbr\u003e\r\nپس از فراخوانی تابع validation نتایج این فراخوانی از طریق PaymentValidationStatus که observe کرده بودید در دسترس است :\r\n\u003c/div\u003e\r\n\r\n```Java\r\nprivate void observeToPaymentValidationStatus() {\r\n    alsatIPG.getPaymentValidationStatus().observe(this, new Observer\u003cPaymentValidationResult\u003e() {\r\n        @Override\r\n        public void onChanged(PaymentValidationResult paymentValidationResult) {\r\n            if (paymentValidationResult.isSuccessful()) {\r\n                log(\"payment Validation Success data = \" + paymentValidationResult.getData());\r\n                if (\r\n                        (paymentValidationResult.getData() != null) \u0026\u0026\r\n                                (paymentValidationResult.getData().getPSP().getIsSuccess()) \u0026\u0026\r\n                                (paymentValidationResult.getData().getVERIFY().getIsSuccess())\r\n                ) {\r\n                    log(\"money transferred\");\r\n                } else {\r\n                    log(\"money has not been transferred\");\r\n                }\r\n            } else if (paymentValidationResult.isLoading()) {\r\n                log(\"payment Validation Loading ...\");\r\n            } else if (paymentValidationResult.getError() != null) {\r\n                log(\"payment Validation error = \" + paymentValidationResult.getError().getMessage());\r\n            }\r\n        }\r\n    });\r\n}\r\n```\r\n\r\n\u003cdiv dir=\"rtl\"\u003e\r\n\r\nاین observer وضعیت های موفق بودن یا لودینگ یا ارور تابع validationMostaghim یا validationVaset را به شما تحویل می دهد .\r\n\u003cbr\u003e\r\nهمچنین در زمانی که پرداخت موفق بوده تابع ()getData موجود در نتیجه اطلاعاتی در مورد پرداخت را به شما می دهد که می توانید از آن استفاده کنید .\r\n\r\n\u003cbr\u003e\r\n\r\n### ⚠️ توجه 1 :\r\nدقت کنید که موفق بودن نتیجه تابع validation به این معنی نیست که پول از حساب کاربر به حساب شما انتقال یافته ! برای کاملا مطمئن شدن از انتقال پول حتما از دستور زیر برای برسی استفاده کنید :\r\n\r\n\u003c/div\u003e\r\n\r\n```Java\r\nif (\r\n        (paymentValidationResult.getData() != null) \u0026\u0026\r\n                (paymentValidationResult.getData().getPSP().getIsSuccess()) \u0026\u0026\r\n                (paymentValidationResult.getData().getVERIFY().getIsSuccess())\r\n) {\r\n    log(\"money transferred\");\r\n} else {\r\n    log(\"money has not been transferred\");\r\n}\r\n```\r\n\r\n\u003cdiv dir=\"rtl\"\u003e\r\n\r\nاطلاعات موجود در  ()getData شامل :\r\n- شماره فاکتور ( PayId )\r\n- مبلغ پرداختی به ریال ( ()getPSP().getAmount )\r\n- تاریخ فاکتور ( ()getPSP().getInvoiceDate )\r\n- شماره فاکتور ( ()getPSP().getInvoiceNumber )\r\n- موفقیت پرداخت در سمت بانک ( ()getPSP().getIsSuccess )\r\n- کد بازرگان ( ()getPSP().getMerchantCode )\r\n- پیام سمت بانک ( ()getPSP().getMessage )\r\n- شماره مرجع ( ()getPSP().getReferenceNumber )\r\n- کد ترمینال ( ()getPSP().getTerminalCode )\r\n- شماره ردیابی ( ()getPSP().getTraceNumber )\r\n- تاریخ معامله ( ()getPSP().getTransactionDate )\r\n- شناسه مرجع تراکنش ( ()getPSP().getTransactionReferenceID )\r\n- شماره کارت هش شده پرداخت کننده ( ()getPSP().getTrxHashedCardNumber )\r\n- شماره کارت ماسک پرداخت کننده ( ()getPSP().getTrxMaskedCardNumber )\r\n- شماره کارت هش شده پرداخت کننده ( ()getVERIFY().getHashedCardNumber )\r\n- موفقیت انجام عملیات پرداخت ( ()getVERIFY().getIsSuccess )\r\n- شماره کارت ماسک پرداخت کننده ( ()getVERIFY().getMaskedCardNumber )\r\n- پیام عملیات پرداخت ( ()getVERIFY().getMessage )\r\n- شماره مرجع شاپرک ( ()getVERIFY().getShaparakRefNumber )\r\n\r\n### ⚠️ توجه ۲ :\r\nدراین مثال برای سادگی کار فرایند  validation سمت اپلیکیشن صورت گرفته است .\r\nتوصیه ما این است که فرایند validation  را سمت سرور خود انجام بدهید و اطلاعات سمت بانک را به اپلیکیشن نفرستید که امنیت اپلیکیشن و پرداخت شما را خیلی بالا خواهد برد .\r\n\u003cbr\u003e\r\nبرای این کار کافی است در زمان sign کردن پرداخت در ارگیومنت RedirectAddress آدرس وب سایت خود برای validation را وارد کنید  . در این صورت شاپرک اطلاعات validation را به آدرس وارد شده خواهد فرستاد و شما می توانید با استفاده از \r\napi آلسات پرداخت در وب سایت خود اعتبار پرداخت را برسی کنید و بعد برسی اعتبار پرداخت کاربر را به آدرس دیپ لینکی که در فایل AndroidManifest.xml وارد کردید redirect کنید .\r\n\u003cbr\u003e\r\nدر صورت استفاده از روش validation سمت سرور کاربر (هکر) نمی تواند ادعا کند پرداخت موفق  داشته (چون دسترسی به validation سمت سرور شما را ندارد) در حالی که در روش معمولی کاربر(هکر) ممکن است با ایجاد تغییراتی در اپلیکیشن شما یا با روش های دیگر موفق شود این کار را انجام دهد .\r\n\r\n\u003cbr\u003e\r\nسورس کد کامل در اکتیویتی زیر آورده شده است :\r\n\u003cbr\u003e\r\n\r\n- \u003ca href=\"https://github.com/AlsatPardakht/AlsatIPGAndroidJavaExample/blob/master/app/src/main/java/com/alsatpardakht/alsatipgandroidjavaexample/MainActivity.java\"\u003eMainActivity\u003c/a\u003e\r\n\r\n## ⛏️ ساخته شده با استفاده از  \u003ca name = \"built_using\"\u003e\u003c/a\u003e\r\n\r\n\u003c/div\u003e\r\n\r\n\r\n- [Java](https://www.java.com/) - programming language\r\n- [AlsatIPGAndroid](https://github.com/AlsatPardakht/AlsatIPGAndroid) - payment client library\r\n- [AlsatIPGCore](https://github.com/AlsatPardakht/AlsatIPGCore) - payment core library\r\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Falsatpardakht%2Falsatipgandroidjavaexample","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Falsatpardakht%2Falsatipgandroidjavaexample","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Falsatpardakht%2Falsatipgandroidjavaexample/lists"}