1 . مقدمه
این مستند با هدف ارائه وبسرویسهای مربوط به پیادهسازی ابزارهای پرداخت دیجیپی نگاشته شده است. بهمنظور درک بهتر، تعاریف اساسی در ادامه بیان شده و لیست سرویسهای قابلارائه فهرست گردیده است.
2. تعاریف
در این بخش به تعریف مفاهیم و واژههای مورداستفاده پرداخته شده است
۱-۲. درگاه پرداخت یکپارچه
منظور از درگاه پرداخت یکپارچه (َUPG)، سبدی است که ابزار پرداختهای ارائه شده توسط دیجی پی حسب نیازمندی کسبوکار را شامل میشود. این سبد شامل ابزار پرداختهای زیر است که هر یک در ادامه تعریف میشود:
• ابزار پرداخت BPG
• ابزار پرداخت CPG
• ابزار پرداخت Wallet
• ابزار پرداخت IPG
۱-۱-۲. ابزار پرداخت BPG
منظور از این ابزار پرداخت، ایجاد امکان نمایش و خرج کرد وجه اعتبار خرید یا BNPL کاربران دیجی پی در وبسایت/ اپلیکیشن کسبوکار طرف قرارداد میباشد. اعتبار خرید، اعتباری است که دیجی پی بر اساس اعتبارسنجی و امتیازدهی با دو مدل بازپرداخت تکمرحلهای (بازپرداخت یکجا) و بازپرداخت ۴ مرحلهای (بازپرداخت در ۴ قسط) در اختیار کاربران خود قرار میدهد.
۲-۱-۲. ابزار پرداخت CPG
ابزار پرداخت CPG، امکان نمایش و خرج کرد موجودی کیف پول اقساطی کاربران دیجی پی را در وبسایت/ اپلیکیشن کسبوکارهای طرف قرارداد دیجی پی فراهم میکند. کیف پول اقساطی، کیف پولی است که وجه آن از طریق تخصیص وام بانکی و تسهیلات به کاربران دیجی پی و واریز آن به کیف پول اقساطی آنها تأمین میشود.
۳-۱-۲. ابزار پرداخت Wallet
با استفاده از این ابزار، امکان خرید با کیف پول نقدی کاربران دیجی پی در وبسایت/ اپلیکیشن کسبوکارهای طرف قرارداد دیجی پی فراهم میشود.
۴-۱-۲.ابزار پرداخت IPG
ابزار پرداخت IPG دیجی پی، از طریق مسیردهی هوشمند با اتصال به چند درگاه پرداخت معتبر شاپرکی (PSP) امکان پرداخت در بستر اینترنت را فراهم میکند.
3. لاگین (ورود به اکوسیستم دیجی پی)
با هدف فراخوانی سرویس های دیجی پی نیاز است تا در مرحله اول توکن احراز هویت دریافت شود. این سرویس به منظور دریافت توکن احراز هویت فراخوانی می شود. مقدار توکن احراز هویت برای مدت زمان مشخصی معتبر است. برای تمدید این توکن میتوان از دیتای refresh_token
استفاده کرد که جزییات پیاده سازی و نحوه فراخوانی وب سرویس آن در ادامه توضیح داده میشود.
برای لاگین در سیستم دی جی پی و فراخوانی سرویس توکن اطلاعاتی مانند نام کاربری، رمز عبور و ... مورد نیاز است که میتوانید از تیم پشتیبانی دیجی پی و یا پنل مربوطه آن را دریافت نمایید.
در ادامه این مستند ابتدا توضیح داده میشود که چگونه میتوان با مشخصات کاربری خود لاگین کرد و توکن دریافت نمود، سپس یک مورد استفاده از توکن مثال زده میشود و در انتها سرویس رفرش توکن مورد بررسی قرار میگیرد.
تمامی سرویسهای معرفی شده در این سند بر پایه پروتکل ارتباطی REST طراحی شده است و آدرس پایه همه سرویسها به صورت زیر خواهد بود:
https://uat.mydigipay.info/digipay/api | (staging) محیط تستی |
https://api.mydigipay.com/digipay/api | (live) محیط عملیاتی |
oauth/token | آدرس سرویس لاگین |
POST | متد سرویس |
بدنه این رکویست http باید بر اساس فرمت form-data ارسال شود و مقادیر فیلد های آن به صورت زیر است :
نوع | توضیح | مثال | نام پارامتر |
---|---|---|---|
string | نام کاربری | sampleUserName | username |
string | رمز عبور | samplePassword | password |
string | شیوه احراز هویت | همواره در این سرویس برابر مقدار password خواهد بود. | grant_type |
جدول 1– مقادیر ارسالی سرویس دریافت توکن
در این سرویس علاوه بر مقادیری که در Body ریکوئست فرستاده میشود، فیلدی با عنوان Authorization در Header ریکوئست قرار میگیرد که مقدار آن بر اساس client_id و client_secret ای که در اختیارتان قرار داده میشود به دست می آید. برای ساخت این محتوا مقادیر client_id
و client_secret
به صورت زیر به یکدیگر متصل میشوند.
client_id:client_secret
برای مثال اگر کلاینت آی دی برابر iuyriwy88
و کلاینت سکرت برابر jhs65dfg
باشد، محتوای ترکیب شده برابر iuyriwy88:jhs65dfg
خواهد بود. پس از ترکیب این دو فیلد با کاراکتر دونقطه، کل این رشته باید به صورت base64 انکد شود. (برای encode کردن میتوانید از سایت https://www.base64encode.org استفاده نمایید)
محتوای encode شده برای مثال بالا برابر aXV5cml3eTg4OmpoczY1ZGZn
خواهد بود. در نهایت مقدار فیلد Authorization در هدر برابر زیر خواهد شد :
Basic aXV5cml3eTg4OmpoczY1ZGZn
نمونه ریکوئست این سرویس به صورت زیر است :
curl --location --request POST 'https://uat.mydigipay.info/digipay/api/oauth/token' \
--header 'Authorization: Basic aXV5cml3eTg4OmpoczY1ZGZn' \
--form 'username=sampleUsername' \
--form 'password=samplePassword' \
--form 'grant_type=password'
<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://uat.mydigipay.info/digipay/api/oauth/token');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'Authorization: Basic aXV5cml3eTg4OmpoczY1ZGZn',
]);
curl_setopt($ch, CURLOPT_POSTFIELDS, [
'username' => 'sampleUsername',
'password' => 'samplePassword',
'grant_type' => 'password',
]);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
$response = curl_exec($ch);
curl_close($ch);
import java.io.IOException;
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
HttpClient client = HttpClient.newBuilder()
.followRedirects(HttpClient.Redirect.NORMAL)
.build();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://uat.mydigipay.info/digipay/api/oauth/token"))
.POST(HttpRequest.BodyPublishers.noBody())
.setHeader("Authorization", "Basic aXV5cml3eTg4OmpoczY1ZGZn")
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
using System.Net.Http;
HttpClient client = new HttpClient();
HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, "https://uat.mydigipay.info/digipay/api/oauth/token");
request.Headers.Add("Authorization", "Basic aXV5cml3eTg4OmpoczY1ZGZn");
MultipartFormDataContent content = new MultipartFormDataContent();
content.Add(new StringContent("sampleUsername"), "username");
content.Add(new StringContent("samplePassword"), "password");
content.Add(new StringContent("password"), "grant_type");
request.Content = content;
HttpResponseMessage response = await client.SendAsync(request);
response.EnsureSuccessStatusCode();
string responseBody = await response.Content.ReadAsStringAsync();
درصورتی که اطلاعات ارسالی صحیح باشد کد http ریسپانس این سرویس برابر 200 و در صورتی که اطلاعات نامعتبر باشد برابر 401 خواهد بود. ریسپانس موفق این سرویس شامل فیلد های زیر است :
نوع | توضیح | مثال | نام پارامتر |
---|---|---|---|
string | توکن اصلی | eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXV | access_token |
string | رفرش توکن | G9yaXRpZXMiOiItMTAxLDAsLTEsLTI1MS | refresh_token |
string | نوع توکن | bearer | token_type |
int | زمان منقضی شدن توکن اصلی به ثانیه |
3599 | expires_in |
جدول 2– پارامتر های پاسخ سرویس لاگین
نمونه ای از پاسخ این سرویس در قالب json به صورت زیر است :
{
"access_token": "eyJhbGciOiJSUzI1NiIsInR5cCI6Ikxxx",
"token_type": "bearer",
"refresh_token": "eyJhbGciOiJSUzI1NiIsInR5cCI6xxxx",
"expires_in": 3599,
"scope": "USER WALLET_BUSINESS_INTEGRATION BUSINESS_API test Permission_Test",
"jti": "RkuR_-p7mSP4VJzYrxZpRvGI5ww"
}
فیلد expires_in
نشان میدهد که توکن اصلی تا چه مدت زمانی معتبر است. در صورتی که این زمان به صورت کامل سپری شود، توکن اصلی منقضی میشود و باید دوباره سرویس فراخوانی و از توکن جدید استفاده نمود.
ازین پس مقدار فیلد access_token
را میتوان در فراخوانی سرویس های دیگر دیجی پی استفاده نمود. این فیلد به همراه پیشوند Bearer در هدر Authorization ریکوئست قرار میگیرد.
برای مثال، یک نمونه از فراخوانی وب سرویس با توکن به این صورت می باشد:
curl --location 'https://uat.mydigipay.info/digipay/api/tickets/business?type=11' \
--header 'Agent: WEB' \
--header 'Digipay-Version: 2022-02-02' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9xxxx' \
--data '{
"cellNumber": "09103119100",
"amount": 10000,
"providerId": 811143348,
"callbackUrl": "https://www.digikala.com"
}'
<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://uat.mydigipay.info/digipay/api/tickets/business?type=11');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'Agent: WEB',
'Digipay-Version: 2022-02-02',
'Content-Type: application/json',
'Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9xxxx',
]);
curl_setopt($ch, CURLOPT_POSTFIELDS, "{\n \"cellNumber\": \"09103119100\",\n \"amount\": 10000,\n \"providerId\": 811143348,\n \"callbackUrl\": \"https://www.digikala.com\"\n}");
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
$response = curl_exec($ch);
curl_close($ch);
import java.io.IOException;
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpRequest.BodyPublishers;
import java.net.http.HttpResponse;
HttpClient client = HttpClient.newBuilder()
.followRedirects(HttpClient.Redirect.NORMAL)
.build();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://uat.mydigipay.info/digipay/api/tickets/business?type=11"))
.POST(BodyPublishers.ofString("{\n \"cellNumber\": \"09103119100\",\n \"amount\": 10000,\n \"providerId\": 811143348,\n \"callbackUrl\": \"https://www.digikala.com\"\n}"))
.setHeader("Agent", "WEB")
.setHeader("Digipay-Version", "2022-02-02")
.setHeader("Content-Type", "application/json")
.setHeader("Authorization", "Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9xxxx")
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
using System.Net.Http;
using System.Net.Http.Headers;
HttpClient client = new HttpClient();
HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, "https://uat.mydigipay.info/digipay/api/tickets/business?type=11");
request.Headers.Add("Agent", "WEB");
request.Headers.Add("Digipay-Version", "2022-02-02");
request.Headers.Add("Authorization", "Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9xxxx");
request.Content = new StringContent("{\n \"cellNumber\": \"09103119100\",\n \"amount\": 10000,\n \"providerId\": 811143348,\n \"callbackUrl\": \"https://www.digikala.com\"\n}");
request.Content.Headers.ContentType = new MediaTypeHeaderValue("application/json");
HttpResponseMessage response = await client.SendAsync(request);
response.EnsureSuccessStatusCode();
string responseBody = await response.Content.ReadAsStringAsync();
درصورتی که توکن منقضی شده باشد و یا معتبر نباشد، کد ریسپانس http فراخوانی وب سرویس با این توکن برابر 401 خواهد شد.
۴. تیکت خرید
این سرویس بهمنظور ایجاد تیکت خرید فراخوانی میشود. ورودیهای این سرویس شامل: amount، cell number، redirect url و غیره میباشد. در پاسخ payUrl ارسال میشود. این نشانی کاربر را به صفحه ادامه فرایند پرداخت و تکمیل خرید هدایت میکند.
digipay/api/tickets/business | آدرس سرویس تیکت خرید |
POST | متد سرویس |
۱-۴. پارامترها
جدول پارامترهای کوئری به شرح زیر است:
توضیحات | نوع تیکت به عدد |
---|---|
برای تمام فیچرهای روی UPG | ۱۱ |
جدول ۳– Query Parameters
۲-۴. هدرهای سرویس
جدول هدر HTTP به شرح زیر است:
توضیحات | فیلد |
---|---|
توکن بدست آمده در مرحله لاگین | Authorization |
Must be application/json; charset=UTF-8 |
Content-Type |
'WEB' | Agent |
باید در قالب این فرمت باشد : 02-02-2022 |
Digipay-Version |
جدول ۴- HTTP Headers
۳-۴. فیلدهای درخواست
جدول فیلد درخواست ها به شرح زیر است :
توضیحات | نوع داده | اجباری | نام فیلد |
---|---|---|---|
مبلغ خرید | Long | بله | amount |
شماره همراه کاربر | String | بله | cellNumber |
ایدی یونیک که از سمت شما برای این خرید ثبت می شود. | String | بله | providerId |
آدرس برگشت به سایت پذیرنده | String | بله | callbackUrl |
این فیلد صرفا برای خریدهای اعتباری و اقساطی اجباری است. | Object | مرتبط با نوع سرویس | basketDetailsDto |
این فیلد برای خرید های تسهیمی یا خرید هایی که مبلغ آن به چند قسمت تقسیم و به حساب های مختلف واریز می شوند اجباری می باشد در غیر این صورت باید خالی بماند . نکته : حداکثر سایز این لیست 2 می باشد. |
بستگی دارد | splitDetailsList | |
توضیحات در بخش ۴-۵-۴ | Map |
خیر | additionalInfo |
جدول ۵- Request Fields
مقدار | توضیحات |
---|---|
0 | پرداخت Wallet |
2 | پرداخت IPG |
جدول 6- Preferred Gateway
۱-۳-۴. جزییات سبد خرید
جدول جزییات سبد خرید به شرح زیر است:
توضیحات | نوع داده | نام فیلد |
---|---|---|
آیدی یونیک به ازای هر سبد خرید | String | basketId |
لیستی از موارد درون سبد | Object | items |
جدول 7- Basket Detail
جدول آیتم های مربوط به جزییات سبد خرید به شرح زیر است:
توضیحات | نوع داده | نام فیلد |
---|---|---|
شناسه فروشنده | String | sellerId |
شناسه تامین کننده | String | supplierId |
کد محصول | String | productCode |
شناسه برند | String | brand |
نوع کالا که باید نوع آن براساس جدول زیر انتخاب شود. | integer | productType |
تعداد کالا | integer | count |
دسته بندی | String | categoryId |
جدول 8- Basket Detail Item
کد | نوع |
---|---|
1 | بادوام |
2 | مصرفی |
3 | سرویس(خدمات) |
4 | مصرفی بادوام |
جدول 9- Product Type
توضیحات | نوع |
---|---|
موبایل | Mobile |
لپ تاپ | laptop |
تبلت | tablet |
کنسول بازی | gameconsole |
جدول 10- Category
۲-۳-۴. جزییات تسهیم
این امکان برای مواقعی است که کاربر خرید خود را به همراه امکان بیمه نمودن کالا و یا دریافت اشتراک دیجی پلاس انجام میدهد. بهطورکلی دو نوع پرداخت تسهیمی وجود دارد، پرداخت تسهیمی بیمه که در حالتی است که کاربر تمایل دارد کالای خود را بیمه کند و پرداخت تسهیمی ساده در مواردی است که کاربر تمایل به دریافت اشتراک دیجی پلاس هم داشته باشد.
توضیحات | نوع داده | اجباری | نام فیلد |
---|---|---|---|
نوع تسهیم | String | بله | type |
نام کاربری که مبلغی از تسهیم به آن اختصاص داده می شود. | String | بله | username |
مبلغ تسهیم | Long | بله | amount |
اگر نوع تسهیم بیمه باشد این فیلد اجباری می باشد. | <List<Object | بستگی دارد | policies |
اگر نوع تسهیم بیمه باشد این فیلد اجباری می باشد. | Object | بستگی دارد | policyHolder |
جدول 11- Split Detail
توضیحات | نوع |
---|---|
برای تسهیم عادی | simple |
برای تسهیم بیمه | insurance |
جدول 12- Split Type
توضیحات | نوع داده | اجباری | نام فیلد |
---|---|---|---|
آیدی محصول | String | خیر | id |
گونه | String | بله | variantId |
دسته بندی محصولات که براساس جدول زیر باید پر شود | String | بله | category |
برند محصول | String | بله | brand |
مدل محصول | String | بله | model |
شماره سریال محصول | String | خیر | serialNo |
قیمت محصول | Long | بله | price |
قیمت با تخفیف (باید مساوی یا کمتر از مبلغ اصلی باشد) | Long | خیر | priceWithDiscount |
جدول 13- Policies
توضیحات | نوع داده | اجباری | نام فیلد |
---|---|---|---|
کدملی خریدار | String | No | nationalCode |
نام | String | Yes | firstName |
نام خانوادگی | String | Yes | lastName |
شماره تلفن | String | Yes | cellNumber |
آیا کاربر دیجی پلاس می باشد. | Boolean | No | digiPlusCustomer |
کد پستی | String | No | postCode |
آدرس پستی | String | Yes | address |
جدول 14- Policy Holder
۴-۴. فیلدهای پاسخ
جدول Response Fileds به شرح زیر است:
توضیحات | نوع داده | نام فیلد |
---|---|---|
آدرسی که از طریق آن کاربر به درگاه پرداخت دیجی پی ریدایرکت میشود. | String | redirectUrl |
تیکت ساخته شما برای این خرید | String | ticket |
کد عددی برای وضعیت نتیجه ریسپانس | Integer | result.status |
پیامی برای توصیف وضعیت نتیجه ریسپانس | String | result.message |
--------- | String | result.level |
اگر ریکوئست دارای تسهیم بیمه باشد این فیلد از طریق دیتای ورودی پر میشود. | Object | insurancePolicies |
جدول ۱5- Response Fields
توضیحات | نام فیلد |
---|---|
کد بیمه | id |
شناسه پیش نویس بیمه نامه | policyDraftNo |
جدول 16-Insurance Policies
۵-۴. نمونه درخواست HTTP
۱-۵-۴. نمونه درخواست HTTP برای پرداخت Credit یا BNPL
نمونه درخواست HTTPبرای ریکوئست دریافت تیکت در فیچرهای BNPL یا Credit به شرح زیر می باشد:
curl --location --request POST '/digipay/api/tickets/business?type=11' \
--header 'Agent: WEB' \
--header 'Digipay-Version: 2022-02-02' \
--header 'Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9' \
--header 'Content-Type: application/json' \
--data-raw '{
"cellNumber" : "09190070450",
"amount" : 100000000,
"providerId" :"-1106111147",
"callbackUrl" : "http://example.com",
"basketDetailsDto": {
"items": [
{
"sellerId": "seller-id",
"supplierId": "supplier-id",
"productCode": "product-code",
"brand": "brand",
"productType": 1,
"count": 1,
"categoryId": "category-id"
}
],
"basketId": "basket-id"
}
}'
<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http:///digipay/api/tickets/business?type=11');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'Agent: WEB',
'Digipay-Version: 2022-02-02',
'Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9',
'Content-Type: application/json',
]);
curl_setopt($ch, CURLOPT_POSTFIELDS, "{\n \"cellNumber\" : \"09190070450\",\n \"amount\" : 100000000,\n \"providerId\" :\"-1106111147\",\n \"callbackUrl\" : \"http://example.com\",\n \"basketDetailsDto\": {\n \"items\": [\n {\n \"sellerId\": \"seller-id\",\n \"supplierId\": \"supplier-id\",\n \"productCode\": \"product-code\",\n \"brand\": \"brand\",\n \n \"productType\": 1,\n \"count\": 1,\n \"categoryId\": \"category-id\"\n }\n ],\n \"basketId\": \"basket-id\"\n }\n}");
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
$response = curl_exec($ch);
curl_close($ch);
import java.io.IOException;
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpRequest.BodyPublishers;
import java.net.http.HttpResponse;
HttpClient client = HttpClient.newBuilder()
.followRedirects(HttpClient.Redirect.NORMAL)
.build();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("http:///digipay/api/tickets/business?type=11"))
.POST(BodyPublishers.ofString("{\n \"cellNumber\" : \"09190070450\",\n \"amount\" : 100000000,\n \"providerId\" :\"-1106111147\",\n \"callbackUrl\" : \"http://example.com\",\n \"basketDetailsDto\": {\n \"items\": [\n {\n \"sellerId\": \"seller-id\",\n \"supplierId\": \"supplier-id\",\n \"productCode\": \"product-code\",\n \"brand\": \"brand\",\n \n \"productType\": 1,\n \"count\": 1,\n \"categoryId\": \"category-id\"\n }\n ],\n \"basketId\": \"basket-id\"\n }\n}"))
.setHeader("Agent", "WEB")
.setHeader("Digipay-Version", "2022-02-02")
.setHeader("Authorization", "Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9")
.setHeader("Content-Type", "application/json")
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
using System.Net.Http;
using System.Net.Http.Headers;
HttpClient client = new HttpClient();
HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, "http:///digipay/api/tickets/business?type=11");
request.Headers.Add("Agent", "WEB");
request.Headers.Add("Digipay-Version", "2022-02-02");
request.Headers.Add("Authorization", "Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9");
request.Content = new StringContent("{\n \"cellNumber\" : \"09190070450\",\n \"amount\" : 100000000,\n \"providerId\" :\"-1106111147\",\n \"callbackUrl\" : \"http://example.com\",\n \"basketDetailsDto\": {\n \"items\": [\n {\n \"sellerId\": \"seller-id\",\n \"supplierId\": \"supplier-id\",\n \"productCode\": \"product-code\",\n \"brand\": \"brand\",\n \n \"productType\": 1,\n \"count\": 1,\n \"categoryId\": \"category-id\"\n }\n ],\n \"basketId\": \"basket-id\"\n }\n}");
request.Content.Headers.ContentType = new MediaTypeHeaderValue("application/json");
HttpResponseMessage response = await client.SendAsync(request);
response.EnsureSuccessStatusCode();
string responseBody = await response.Content.ReadAsStringAsync();
۲-۵-۴. نمونه درخواست HTTP برای پرداخت IPG یا Wallet
نمونه ریکوئست درخواست تیکت برای خرید های wallet و درگاه پرداخت به شرح زیر می باشد :
curl --location --request POST '/digipay/api/tickets/business?type=11' \
--header 'Agent: WEB' \
--header 'Digipay-Version: 2022-02-02' \
--header 'Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9' \
--header 'Content-Type: application/json' \
--data-raw '{
"cellNumber": "09303030875",
"amount": 10000,
"providerId": "32111",
"callbackUrl": "http://example.com"
}'
<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http:///digipay/api/tickets/business?type=11');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'Agent: WEB',
'Digipay-Version: 2022-02-02',
'Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9',
'Content-Type: application/json',
]);
curl_setopt($ch, CURLOPT_POSTFIELDS, "{\n \"cellNumber\": \"09303030875\",\n \"amount\": 10000,\n \"providerId\": \"32111\",\n \"callbackUrl\": \"http://example.com\"\n }");
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
$response = curl_exec($ch);
curl_close($ch);
import java.io.IOException;
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpRequest.BodyPublishers;
import java.net.http.HttpResponse;
HttpClient client = HttpClient.newBuilder()
.followRedirects(HttpClient.Redirect.NORMAL)
.build();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("http:///digipay/api/tickets/business?type=11"))
.POST(BodyPublishers.ofString("{\n \"cellNumber\": \"09303030875\",\n \"amount\": 10000,\n \"providerId\": \"32111\",\n \"callbackUrl\": \"http://example.com\"\n }"))
.setHeader("Agent", "WEB")
.setHeader("Digipay-Version", "2022-02-02")
.setHeader("Authorization", "Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9")
.setHeader("Content-Type", "application/json")
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
using System.Net.Http;
using System.Net.Http.Headers;
HttpClient client = new HttpClient();
HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, "http:///digipay/api/tickets/business?type=11");
request.Headers.Add("Agent", "WEB");
request.Headers.Add("Digipay-Version", "2022-02-02");
request.Headers.Add("Authorization", "Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9");
request.Content = new StringContent("{\n \"cellNumber\": \"09303030875\",\n \"amount\": 10000,\n \"providerId\": \"32111\",\n \"callbackUrl\": \"http://example.com\"\n }");
request.Content.Headers.ContentType = new MediaTypeHeaderValue("application/json");
HttpResponseMessage response = await client.SendAsync(request);
response.EnsureSuccessStatusCode();
string responseBody = await response.Content.ReadAsStringAsync();
۳-۵-۴. نمونه درخواست HTTP برای فیچرهای تسهیمی
نمونه ریکوئست درخواست تیکت برای فیچرهای تسهیمی به شرح زیر می باشد:
url --location --request POST '/digipay/api/tickets/business?type=11' \
--header 'Agent: WEB' \
--header 'Digipay-Version: 2022-02-02' \
--header 'Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9' \
--header 'Content-Type: application/json' \
--data-raw '{
"cellNumber" : "09190070450",
"amount" : 100000,
"providerId" :"-1106111147",
"callbackUrl" : "http://example.com",
"splitDetailsList": [
{
"type": "simple",
"amount": 21800,
"username": "dk"
},
{
"type": "insurance",
"amount": 2180000,
"policies": [
{
"id": "1",
"brand": "DOX",
"model": "DOX",
"price": 100000000,
"category": "Mobile",
"serialNo": null,
"variantId": "37633302",
"priceWithDiscount": 100000000,
"product_warranty_id": 498
}
],
"policyHolder": {
"address": "اباذر، بلوار فر",
"lastName": "last1038214",
"postCode": "1471656341",
"firstName": "first1038214",
"cellNumber": "09390054003",
"nationalCode": "8085700281",
"digiPlusCustomer": false
}
}
]
}'
4-۵-۴. نمونه درخواست HTTP برای خرید بدون نمایش صفحهی انتخاب ابزار پرداخت
برای زمانی که نیازی به نمایش صفحهی انتخاب ابزار پرداخت ندارید و میخواهید کاربر خود را مستقیما به درگاه خاصی بفرستید، باید مقدار فیلد preferredGateway را مطابق جدول ۶ معادل با درگاه مورد نیاز خود پر کنید.
نمونه درخواست HTTP برای درخواست تیکت مستقیم IPG به شرح زیر است:
curl --location 'https://uat.mydigipay.info/digipay/api/tickets/business?type=11' \
--header 'Agent: WEB' \
--header 'Digipay-Version: 2022-02-02' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer eyJhbGciOiJSUzI1NiIsInRasdddXVCJ9' \
--data '{
"cellNumber": "09335292905",
"amount": 10000,
"providerId": 811165310,
"callbackUrl": "https://example.com",
"additionalInfo": {
"preferredGateway": 2
}
}'
<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://uat.mydigipay.info/digipay/api/tickets/business?type=11');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'Agent: WEB',
'Digipay-Version: 2022-02-02',
'Content-Type: application/json',
'Authorization: Bearer eyJhbGciOiJSUzI1NiIsInRasdddXVCJ9',
]);
curl_setopt($ch, CURLOPT_POSTFIELDS, "{\n \"cellNumber\": \"09335292905\",\n \"amount\": 10000,\n \"providerId\": 811165310,\n \"callbackUrl\": \"https://example.com\",\n \"additionalInfo\": {\n \"preferredGateway\": 2\n }\n}");
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
$response = curl_exec($ch);
curl_close($ch);
import java.io.IOException;
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpRequest.BodyPublishers;
import java.net.http.HttpResponse;
HttpClient client = HttpClient.newBuilder()
.followRedirects(HttpClient.Redirect.NORMAL)
.build();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://uat.mydigipay.info/digipay/api/tickets/business?type=11"))
.POST(BodyPublishers.ofString("{\n \"cellNumber\": \"09335292905\",\n \"amount\": 10000,\n \"providerId\": 811165310,\n \"callbackUrl\": \"https://example.com\",\n \"additionalInfo\": {\n \"preferredGateway\": 2\n }\n}"))
.setHeader("Agent", "WEB")
.setHeader("Digipay-Version", "2022-02-02")
.setHeader("Content-Type", "application/json")
.setHeader("Authorization", "Bearer eyJhbGciOiJSUzI1NiIsInRasdddXVCJ9")
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
using System.Net.Http;
using System.Net.Http.Headers;
HttpClient client = new HttpClient();
HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, "https://uat.mydigipay.info/digipay/api/tickets/business?type=11");
request.Headers.Add("Agent", "WEB");
request.Headers.Add("Digipay-Version", "2022-02-02");
request.Headers.Add("Authorization", "Bearer eyJhbGciOiJSUzI1NiIsInRasdddXVCJ9");
request.Content = new StringContent("{\n \"cellNumber\": \"09335292905\",\n \"amount\": 10000,\n \"providerId\": 811165310,\n \"callbackUrl\": \"https://example.com\",\n \"additionalInfo\": {\n \"preferredGateway\": 2\n }\n}");
request.Content.Headers.ContentType = new MediaTypeHeaderValue("application/json");
HttpResponseMessage response = await client.SendAsync(request);
response.EnsureSuccessStatusCode();
string responseBody = await response.Content.ReadAsStringAsync();
نمونه درخواست HTTP برای درخواست تیکت مستقیم Wallet به شرح زیر است:
location 'https://uat.mydigipay.info/digipay/api/tickets/business?type=11' \
--header 'Agent: WEB' \
--header 'Digipay-Version: 2022-02-02' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer eyJhbGciOiJSUzI1NiIsInRasdddXVCJ9' \
--data '{
"cellNumber": "09335292905",
"amount": 10000,
"providerId": 811165310,
"callbackUrl": "https://example.com",
"additionalInfo": {
"preferredGateway": 0
}
}'
<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://uat.mydigipay.info/digipay/api/tickets/business?type=11');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'Agent: WEB',
'Digipay-Version: 2022-02-02',
'Content-Type: application/json',
'Authorization: Bearer eyJhbGciOiJSUzI1NiIsInRasdddXVCJ9',
]);
curl_setopt($ch, CURLOPT_POSTFIELDS, "{\n \"cellNumber\": \"09335292905\",\n \"amount\": 10000,\n \"providerId\": 811165310,\n \"callbackUrl\": \"https://example.com\",\n \"additionalInfo\": {\n \"preferredGateway\": 0\n }\n}");
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
$response = curl_exec($ch);
curl_close($ch);
import java.io.IOException;
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpRequest.BodyPublishers;
import java.net.http.HttpResponse;
HttpClient client = HttpClient.newBuilder()
.followRedirects(HttpClient.Redirect.NORMAL)
.build();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://uat.mydigipay.info/digipay/api/tickets/business?type=11"))
.POST(BodyPublishers.ofString("{\n \"cellNumber\": \"09335292905\",\n \"amount\": 10000,\n \"providerId\": 811165310,\n \"callbackUrl\": \"https://example.com\",\n \"additionalInfo\": {\n \"preferredGateway\": 0\n }\n}"))
.setHeader("Agent", "WEB")
.setHeader("Digipay-Version", "2022-02-02")
.setHeader("Content-Type", "application/json")
.setHeader("Authorization", "Bearer eyJhbGciOiJSUzI1NiIsInRasdddXVCJ9")
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
using System.Net.Http;
using System.Net.Http.Headers;
HttpClient client = new HttpClient();
HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, "https://uat.mydigipay.info/digipay/api/tickets/business?type=11");
request.Headers.Add("Agent", "WEB");
request.Headers.Add("Digipay-Version", "2022-02-02");
request.Headers.Add("Authorization", "Bearer eyJhbGciOiJSUzI1NiIsInRasdddXVCJ9");
request.Content = new StringContent("{\n \"cellNumber\": \"09335292905\",\n \"amount\": 10000,\n \"providerId\": 811165310,\n \"callbackUrl\": \"https://example.com\",\n \"additionalInfo\": {\n \"preferredGateway\": 0\n }\n}");
request.Content.Headers.ContentType = new MediaTypeHeaderValue("application/json");
HttpResponseMessage response = await client.SendAsync(request);
response.EnsureSuccessStatusCode();
string responseBody = await response.Content.ReadAsStringAsync();
6-4. نمونه پاسخ HTTP
6-4-1.نمونه پاسخ درخواست تیکت
نمونه پاسخ HTTP برای درخواست تیکت به شرح زیر است:
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
{
"result": {
"title": "SUCCESS",
"status": 0,
"message": "عملیات با موفقیت انجام شد",
"level": "INFO"
},
"ticket": "v2:ab17ec383d654be3b009f9fc45202f80",
"redirectUrl": "https://uatweb.mydigipay.info/web-pay/tgs/v2:ab17ec383d654be3b009f9fc45202f80"
}
6-4-2. نمونه پاسخ درخواست های دارای جزییات تسهیمی
نمونه پاسخ درخواست های HTTP که دارای جزیییات تسهیمی می باشد به شرح زیر است:
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
{
"result": {
"title": "SUCCESS",
"status": 0,
"message": "عملیات با موفقیت انجام شد",
"level": "INFO"
},
"ticket": "v2:ab17ec383d654be3b009f9fc45202f80",
"redirectUrl": "https://uatweb.mydigipay.info/web-pay/tgs/v2:ab17ec383d654be3b009f9fc45202f80",
"insurancePolicies": [
{
"id": "1",
"policyDraftNo": "1059488"
}
]
}
5. نتیجه پرداخت
در صورتی که وارد درگاههای پرداخت شود (خرید به صورت اعتباری و یا (IPG، نتیجه پرداخت با یک درخواست به حالت POST به سمت RedirectURL پذیرنده ارسال می شود.
توضیحات | اجباری | نوع داده | نام فیلد |
---|---|---|---|
مبلغ خرید | بله | Long | amount |
آیدی یونیک که از سمت شما برای خرید ثبت شده است. | بله | String | providerId |
کد پیگیری مربوط به این خرید | بله | String | trackingCode |
Rrn مربوط به خرید های IPG | خیر | String | rrn |
کد درگاه خرید اینترنتی اگر خرید از نوع IPG باشد | خیر | Object | psp |
آیا خرید کردیتی بوده است یا خیر | خیر | Boolean | isCredit |
وضعیت پرداخت:موفق(SUCCESS) و ناموفق(FAILURE) | بله | String | result |
نوع خرید یا تایپ که میتوان براساس آن تایید پرداخت و سرویس بازگشت وجه را کال کرد |
بله | Integer | type |
جدول ۱7-Response Fields
نوع | TYPE کد |
---|---|
IPG | 0 |
WALLET | 11 |
CREDIT | 5 |
BNPL(Buy Now Pay Later) | 13 |
CREDIT-CARD | 24 |
جدول ۱8- Types
نام PSP | کد |
---|---|
SAMAN | 001 |
PARSIAN | 002 |
MELLAT | 003 |
ENOVIN | 004 |
PASARGAD | 005 |
FANAVA | 006 |
MELLI | 007 |
IRKISH | 008 |
جدول ۱9- PSP Names
6. تایید پرداخت
مرحله تایید پرداخت زمانی به کار برده میشود که وضعیت خرید موفق بوده و اگر آن را تایید نکنید پس از زمان مشخصی به طور خودکار پرداخت لغو و مبلغ مرجوع خواهد شد.
/digipay/api/purchases/verify/{trackingCode} |
آدرس سرویس تیکت خرید |
POST | متد سرویس |
۱-6. پارامترها
جدول پارامترهای کویری به شرح زیر است:
توضیحات | نام فیلد |
---|---|
type | نوع تیکت برای خرید موردنظر |
جدول 20– Query Parameters
نوع | TYPE کد |
---|---|
IPG | 0 |
WALLET | 11 |
CREDIT | 5 |
BNPL(Buy Now Pay Later) | 13 |
CREDIT-CARD | 24 |
جدول 21– Ticket Types
۲-6. هدرهای سرویس
جدول هدر HTTP به شرح زیر است:
توضیحات | فیلد |
---|---|
توکن بدست آمده در مرحله لاگین | Authorization |
Must be application/json; charset=UTF-8 |
Content-Type |
جدول ۲2– Http Header
۳-6. پاسخ سرویس
توضیحات | نوع داده | اجباری | نام فیلد |
---|---|---|---|
کد پیگیری مربوط به این خرید | String | Yes | trackingCode |
آیدی یونیک که از سمت شما برای خرید ثبت شده است | String | Yes | providerId |
شماره ترمینال در حالتی که خرید IPG باشد | String | No | terminalId |
Rrn مربوط به خرید های IPG | String | No | rrn |
شماره کارت کاربر به صورت مختصر شده | String | No | maskedPan |
کد درگاه خرید اینترنتی اگر خرید از نوع IPG باشد | String | No | pspCode |
نام درگاه خرید اینترنتی اگر خرید از نوع IPG باشد | String | No | pspName |
کد تامین کننده اعتبار | String | No | fpCode |
نام تامین کننده اعتبار | String | No | fpName |
مبلغ خرید | String | Yes | amount |
نوع درگاه خرید | Enum | Yes | paymentGateway |
اطلاعات دقیق تری از خرید (اگر خرید از نوع اعتباری یا اقساطی باشد) |
Object | No | additionalInfo |
کد عددی برای وضعیت نتیجه ریسپانس | *Integer | Yes | result.status |
پیامی برای توصیف وضعیت نتیجه ریسپانس | *String | Yes | result.message |
--------- | *String | Yes | result.level |
جدول ۲3– Response Fields
توضیحات | کد |
---|---|
IPG | 0 |
WALLET | 3 |
CPG(اعتباری) | 4 |
جدول 24– PaymentGateway Types
توضیحات | نوع داده | نام فیلد |
---|---|---|
prepayment + feeCharge | long | prepaymentAmount |
مبلغ نقدی | long | cashAmount |
مبلغ اعتباری | long | creditAmount |
آیا قرارداد کاربر فاینال شده است یا خیر؟ | Boolean | instantFinalization |
ایجاد فاکتور | Boolean | generateInvoice |
جدول 25– additional info
۴-6. نمونه درخواست ارسالی سرویس
curl --location --request POST '/digipay/api/purchases/verify/5239470511667728782510?type=5' \
--header 'Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ'\
--header 'Content-Type: application/json'
<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http:///digipay/api/purchases/verify/5239470511667728782510?type=5');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ',
'Content-Type: application/json',
]);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
$response = curl_exec($ch);
curl_close($ch);
import java.io.IOException;
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
HttpClient client = HttpClient.newBuilder()
.followRedirects(HttpClient.Redirect.NORMAL)
.build();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("http:///digipay/api/purchases/verify/5239470511667728782510?type=5"))
.POST(HttpRequest.BodyPublishers.noBody())
.setHeader("Authorization", "Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ")
.setHeader("Content-Type", "application/json")
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
using System.Net.Http;
using System.Net.Http.Headers;
HttpClient client = new HttpClient();
HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, "http:///digipay/api/purchases/verify/5239470511667728782510?type=5");
request.Headers.Add("Authorization", "Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ");
request.Content = new StringContent("");
request.Content.Headers.ContentType = new MediaTypeHeaderValue("application/json");
HttpResponseMessage response = await client.SendAsync(request);
response.EnsureSuccessStatusCode();
string responseBody = await response.Content.ReadAsStringAsync();
۴-۵. نمونه پاسخ دریافتی سرویس
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
{
"result": {
"status": 0,
"message": "عملیات با موفقیت انجام شد",
"level": "INFO"
},
"trackingCode": "19259313601650191846745",
"providerId": "132713002000200010",
"fpCode": "7",
"fpName": "DIGIPAY",
"amount": 200000,
"paymentGateway": 4,
"additionalInfo": {
"prepaymentAmount": 0,
"cashAmount": 0,
"creditAmount": 200000,
"instantFinalization": false,
"generateInvoice": false
}
}
7. بازگشت وجه خرید به صورت دستی
این مرحله برای زمانی که خرید توسط شما تایید(VERIFY) می شود و کمتر از 25 دقیقه قصد انجام بازگشت وجه و ابطال خرید را دارید.
• نکته: مرحله بازگشت وجه دستی صرفا برای خرید های از طریق فیچرهای IPG و DPG امکان پذیر است و برای بقیه فیچرها درحال حاضر این امکان وجود ندارد.
• نکته: به ازای هر خرید یکی از مراحل refund یا manual reverse را میتوان کال کرد.
/digipay/api/reverse |
آدرس سرویس تیکت خرید |
POST | متد سرویس |
۱-7. پارامترها
جدول پارامترهای کویری به شرح زیر است:
توضیحات | نام فیلد |
---|---|
type | نوع تیکت برای خرید موردنظر |
جدول 26– Query Parameters
نوع | TYPE کد |
---|---|
IPG | 0 |
WALLET | 11 |
CREDIT | 5 |
BNPL(Buy Now Pay Later) | 13 |
CREDIT-CARD | 24 |
جدول 27– Ticket Types
۲-7. هدرهای سرویس
جدول هدر HTTP به شرح زیر است:
توضیحات | فیلد |
---|---|
توکن بدست آمده در مرحله لاگین | Authorization |
Must be application/json; charset=UTF-8 |
Content-Type |
جدول 28– Http Header
۳-7. فیلدهای درخواست
توضیحات | نوع داده | اجباری | نام فیلد |
---|---|---|---|
کد پیگیری خرید | String | Yes | trackingCode |
آیدی یونیک که از سمت شما به ازای این خرید ثبت شده است | String | Yes | providerId |
جدول ۲9– Request Fields
۴-7. فیلدهای پاسخ
توضیحات | نوع داده | نام فیلد |
---|---|---|
کد پیگیری مربوط به این خرید | String | trackingCode |
آیدی یونیک که از سمت شما برای خرید ثبت شده است | String | providerId |
Rrn مربوط به خرید های IPG | String | rrn |
شماره کارت کاربر به صورت مختصر شده | String | maskedPan |
مبلغ خرید | String | amount |
'IPG ⇒ '0' or DPG ⇒ '1 |
Enum | paymentGateway |
کد عددی برای وضعیت نتیجه ریسپانس | Integer | result.status |
پیامی برای توصیف وضعیت نتیجه ریسپانس | String | result.message |
--------- | String | result.level |
جدول 30– Response Fields
۵-7. نمونه درخواست ارسالی سرویس
curl --location --request POST '/digipay/api/reverse' \
--header 'Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9' \
--header 'Content-Type: application/json' \
--data '{
"purchaseTrackingCode": "571*********98",
"providerId": "{{purchaseProviderId}}"
}'
<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http:///digipay/api/reverse');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9',
'Content-Type: application/json',
]);
curl_setopt($ch, CURLOPT_POSTFIELDS, "{\n \"purchaseTrackingCode\": \"571*********98\",\n \"providerId\": \"{{purchaseProviderId}}\"\n}");
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
$response = curl_exec($ch);
curl_close($ch);
import java.io.IOException;
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpRequest.BodyPublishers;
import java.net.http.HttpResponse;
HttpClient client = HttpClient.newBuilder()
.followRedirects(HttpClient.Redirect.NORMAL)
.build();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("http:///digipay/api/reverse"))
.POST(BodyPublishers.ofString("{\n \"purchaseTrackingCode\": \"571*********98\",\n \"providerId\": \"{{purchaseProviderId}}\"\n}"))
.setHeader("Authorization", "Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9")
.setHeader("Content-Type", "application/json")
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
using System.Net.Http;
using System.Net.Http.Headers;
HttpClient client = new HttpClient();
HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, "http:///digipay/api/reverse");
request.Headers.Add("Authorization", "Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9");
request.Content = new StringContent("{\n \"purchaseTrackingCode\": \"571*********98\",\n \"providerId\": \"{{purchaseProviderId}}\"\n}");
request.Content.Headers.ContentType = new MediaTypeHeaderValue("application/json");
HttpResponseMessage response = await client.SendAsync(request);
response.EnsureSuccessStatusCode();
string responseBody = await response.Content.ReadAsStringAsync();
۶-7. نمونه پاسخ دریافتی سرویس
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
{
"result": {
"status": 0,
"message": "عملیات با موفقیت انجام شد",
"level": "INFO"
},
"providerId": "{{purchaseProviderId}}",
"trackingCode": "571000000098",
"rrn": "**********************",
"maskedPan": "**********************",
"amount": 56547774478,
"paymentGateway": 0
}
8. تحویل خرید
این مرحله زمانی انجام می شود که همه مراحل مورد نیاز قبلی انجام شده باشد و در زمانی که آن کالا یا خدمات به مشتری داده شده باشد.
• نکته: این مرحله باید فقط برای پرداخت های اعتباری که شامل CREDIT و BNPL می باشد انجام شود.
digipay/api/purchases/deliver |
آدرس سرویس تیکت خرید |
POST | متد سرویس |
۱-8. پارامترها
جدول پارامترهای کویری به شرح زیر است:
توضیحات | نام فیلد |
---|---|
type | نوع تیکت برای خرید موردنظر |
جدول ۳1– Query Parameters
نوع | TYPE کد |
---|---|
IPG | 0 |
WALLET | 11 |
CREDIT | 5 |
BNPL(Buy Now Pay Later) | 13 |
CREDIT-CARD | 24 |
جدول ۳2– Ticket Types
۲-8. هدرهای سرویس
جدول هدر HTTP به شرح زیر است:
توضیحات | فیلد |
---|---|
توکن بدست آمده در مرحله لاگین | Authorization |
Must be application/json; charset=UTF-8 |
Content-Type |
جدول ۳3– Http Header
۳-8. فیلدهای درخواست
توضیحات | نوع داده | اجباری | نام فیلد |
---|---|---|---|
زمان تحویل کالا | Date | Yes | deliveryDate |
شماره فاکتور تحویل کالا | String | Yes | invoiceNumber |
کد پیگیری خرید تحویل داده شده | String | Yes | trackingCode |
لیست محصولات تحویل داده شده | List< String > | Yes | products |
جدول ۳4– Request Fields
۴-8. فیلدهای پاسخ
توضیحات | نوع داده | نام فیلد |
---|---|---|
کد عددی برای وضعیت نتیجه ریسپانس | Integer | result.status |
پیامی برای توصیف وضعیت نتیجه ریسپانس | String | result.message |
--------- | String | result.level |
جدول ۳5– Response Fields
۵-8. نمونه درخواست ارسالی سرویس
curl --location --request POST '/digipay/api/purchases/deliver?type=5' \
--header 'Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9' \
--header 'Content-Type: application/json' \
--data-raw '{
"deliveryDate": 1592502763000,
"invoiceNumber": "7471288365484",
"trackingCode": "5239470511667728782510",
"products": [
"product-4",
"product-5",
"product-6",
"product-7"
]
}'
<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http:///digipay/api/purchases/deliver?type=5');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9',
'Content-Type: application/json',
]);
curl_setopt($ch, CURLOPT_POSTFIELDS, "{\n \"deliveryDate\": 1592502763000,\n \"invoiceNumber\": \"7471288365484\",\n \"trackingCode\": \"5239470511667728782510\",\n \"products\": [\n \"product-4\",\n \"product-5\",\n \"product-6\",\n \"product-7\"\n ]\n}");
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
$response = curl_exec($ch);
curl_close($ch);
import java.io.IOException;
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpRequest.BodyPublishers;
import java.net.http.HttpResponse;
HttpClient client = HttpClient.newBuilder()
.followRedirects(HttpClient.Redirect.NORMAL)
.build();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("http:///digipay/api/purchases/deliver?type=5"))
.POST(BodyPublishers.ofString("{\n \"deliveryDate\": 1592502763000,\n \"invoiceNumber\": \"7471288365484\",\n \"trackingCode\": \"5239470511667728782510\",\n \"products\": [\n \"product-4\",\n \"product-5\",\n \"product-6\",\n \"product-7\"\n ]\n}"))
.setHeader("Authorization", "Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9")
.setHeader("Content-Type", "application/json")
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
using System.Net.Http;
using System.Net.Http.Headers;
HttpClient client = new HttpClient();
HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, "http:///digipay/api/purchases/deliver?type=5");
request.Headers.Add("Authorization", "Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9");
request.Content = new StringContent("{\n \"deliveryDate\": 1592502763000,\n \"invoiceNumber\": \"7471288365484\",\n \"trackingCode\": \"5239470511667728782510\",\n \"products\": [\n \"product-4\",\n \"product-5\",\n \"product-6\",\n \"product-7\"\n ]\n}");
request.Content.Headers.ContentType = new MediaTypeHeaderValue("application/json");
HttpResponseMessage response = await client.SendAsync(request);
response.EnsureSuccessStatusCode();
string responseBody = await response.Content.ReadAsStringAsync();
۶-8. نمونه پاسخ دریافتی سرویس
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
{
"result": {
"status": 0,
"message": "عملیات با موفقیت انجام شد",
"level": "INFO"
}
}
9. بازگشت خرید
این مرحله برای بازگشت وجه مبلغ خرید به کاربر استفاده می شود.
digipay/api/refunds?type={ticket-type} |
آدرس سرویس تیکت خرید |
POST | متد سرویس |
۱-9. پارامترها
جدول پارامترهای کویری به شرح زیر است:
توضیحات | نام فیلد |
---|---|
type | نوع تیکت برای خرید موردنظر |
جدول ۳6– Query Parameters
نوع | TYPE کد |
---|---|
IPG | 0 |
WALLET | 11 |
CREDIT | 5 |
BNPL(Buy Now Pay Later) | 13 |
CREDIT-CARD | 24 |
جدول ۳7– Ticket Types
۲-9. هدرهای سرویس
جدول هدر HTTP به شرح زیر است:
توضیحات | فیلد |
---|---|
توکن بدست آمده در مرحله لاگین | Authorization |
Must be application/json; charset=UTF-8 |
Content-Type |
جدول ۳8– Http Header
۳-9. فیلدهای درخواست
توضیحات | نوع داده | اجباری | نام فیلد |
---|---|---|---|
یک آیدی بی همتا (unique) برای بازگشت وجه متفاوت از آیدی خرید. |
String | Yes | providerId |
میزان مبلغی که میخواهید به کاربر عودت داده شود. | Long | Yes | amount |
کد پیگیری خرید مورد نظر که میخواهید عودت داده شود.(این فیلد برابر trackingCode در تراکنش خرید است) | String | Yes | saleTrackingCode |
جدول ۳9– Request Fields
۴-9. فیلدهای پاسخ
توضیحات | نوع داده | نام فیلد |
---|---|---|
کد پیگیری مربوط به بازگشت وجه | String | trackingCode |
عنوانی برای نتیجه ریسپانس | String | result.title |
کد عددی برای وضعیت نتیجه ریسپانس | Integer | result.status |
پیامی برای توصیف وضعیت نتیجه ریسپانس | String | result.message |
--------- | String | result.level |
جدول 40– Response Fields
۵-9. نمونه درخواست ارسالی سرویس
curl --location --request POST '/digipay/api/refunds?type=0
' \
--header 'Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9' \
--header 'Content-Type: application/json' \
--data-raw '{
"providerId": 1592502763000,
"amount": "7471288365484",
"saleTrackingCode": "5239470511667728782510"
"product-4"
}'
<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http:///digipay/api/refunds?type=0\n");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9',
'Content-Type: application/json',
]);
curl_setopt($ch, CURLOPT_POSTFIELDS, "{\n \"providerId\": 1592502763000,\n \"amount\": \"7471288365484\",\n \"saleTrackingCode\": \"5239470511667728782510\"\n \"product-4\"\n}");
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
$response = curl_exec($ch);
curl_close($ch);
import java.io.IOException;
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpRequest.BodyPublishers;
import java.net.http.HttpResponse;
HttpClient client = HttpClient.newBuilder()
.followRedirects(HttpClient.Redirect.NORMAL)
.build();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("http:///digipay/api/refunds?type=0\n"))
.POST(BodyPublishers.ofString("{\n \"providerId\": 1592502763000,\n \"amount\": \"7471288365484\",\n \"saleTrackingCode\": \"5239470511667728782510\"\n \"product-4\"\n}"))
.setHeader("Authorization", "Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9")
.setHeader("Content-Type", "application/json")
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
using System.Net.Http;
using System.Net.Http.Headers;
HttpClient client = new HttpClient();
HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, "http:///digipay/api/refunds?type=0\n");
request.Headers.Add("Authorization", "Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9");
request.Content = new StringContent("{\n \"providerId\": 1592502763000,\n \"amount\": \"7471288365484\",\n \"saleTrackingCode\": \"5239470511667728782510\"\n \"product-4\"\n}");
request.Content.Headers.ContentType = new MediaTypeHeaderValue("application/json");
HttpResponseMessage response = await client.SendAsync(request);
response.EnsureSuccessStatusCode();
string responseBody = await response.Content.ReadAsStringAsync();
۶-9. نمونه پاسخ دریافتی سرویس
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
{
"result": {
"title" : "SUCCESS",
"status": 0,
"message": "عملیات با موفقیت انجام شد",
"level": "INFO"
},
"trackingCode": "571000000098"
}
10. پیگیری خرید عودت داده شده
از این سرویس برای پیگیری خرید عودت داده شده استفاده می شود.
digipay/api/refunds/{InquiryId} |
آدرس سرویس تیکت خرید |
POST | متد سرویس |
توضیحات | نام فیلد |
---|---|
کد پیگیری یا providerId مربوط به ریفاند | InquiryId |
۱-10. پارامترها
جدول پارامترهای کویری به شرح زیر است:
توضیحات | نام فیلد |
---|---|
type | نوع تیکت برای خرید موردنظر |
Must be application/json; charset=UTF-8 |
Content-Type |
جدول 41– Query Parameters
نوع | TYPE کد |
---|---|
IPG | 0 |
WALLET | 11 |
CREDIT | 5 |
BNPL(Buy Now Pay Later) | 13 |
CREDIT-CARD | 24 |
جدول 42– Ticket Types
۲-10. هدرهای سرویس
جدول هدر HTTP به شرح زیر است:
توضیحات | فیلد |
---|---|
توکن بدست آمده در مرحله لاگین | Authorization |
Must be application/json;charset=UTF-8 |
Content-Type |
جدول ۴3– Http Header
۳-10. فیلدهای پاسخ
توضیحات | نوع داده | نام فیلد |
---|---|---|
کد پیگیری مربوط به این خرید | String | providerId |
آیدی یونیک که از سمت شما برای خرید ثبت شده است | String | trackingCode |
وضعیت ریفاند(توضیحات دقیق تر در جدول ذیل ذکر شده است.) | Integer | status |
کد عددی که اگر ریفاند با خطا روبرو شده باشد | Integer | resultCode |
تاریخ عودت وجه در قالب Epoch | String | transferDate |
نوع مقصد ریفاند | Integer | destinationType |
اگر نوع مقصد IBAN یا PAN باشد این فیلد پر میشود. | String | destination |
عنوانی برای نتیجه ریسپانس | String | result.title |
کد عددی برای وضعیت نتیجه ریسپانس | Integer | result.status |
پیامی برای توصیف وضعیت نتیجه ریسپانس | String | result.message |
--------- | String | result.level |
جدول ۴4– Response Fields
نوع | کد |
---|---|
Masked PAN | 0 |
IBAN | 1 |
Wallet | 2 |
Credit | 3 |
جدول ۴5– Destintion Types
توضیحات | کد |
---|---|
موفق | 0 |
ناموفق | 1 |
عدم وضعیت مشخص نیاز به پیگیری کردن دوباره |
2 |
جدول 46– Result.statu
۱1. کدهای پاسخ HTTP
توضیحات | کد |
---|---|
موفق | 200 |
پارامترهای ورودی نامعتبر است. | 400 |
خطا در احراز هویت و دسترسی | ۴۰۱,۴۰۳ |
خطای بیزینسی مطابق جدول ۴۷ | ۴۲۲ |
خطای داخلی | ۵۰۰ |
جدول ۴7– HTTP Rsponse code
توضیحات | کد |
---|---|
عملیات با موفقیت انجام شد | 0 |
اطلاعات ورودی اشتباه می باشد | 1054 |
اطلاعات خرید یافت نشد | 9000 |
توکن پرداخت معتبر نمی باشد | 9001 |
خرید مورد نظر منقضی شده است | 9003 |
خرید مورد نظر درحال انجام است | 9004 |
خرید قابل پرداخت نمی باشد | 9005 |
خطا در برقراری ارتباط با درگاه پرداخت | 9006 |
خرید با موفقیت انجام نشده است | 9007 |
این خرید با داده های متفاوتی قبلا ثبت شده است | 9008 |
محدوده زمانی تایید تراکنش گذشته است | 9009 |
تایید خرید ناموفق بود | 9010 |
نتیجه تایید خرید نامشخص است | 9011 |
وضعیت خرید برای این درخواست صحیح نمی باشد | 9012 |
ورود شماره همراه برای کاربران ثبت نام شده الزامی است | 9030 |
اعطای تیکت برای کاربر مورد نظر امکان پذیر نمیباشد | 9031 |
جدول ۴8– Body of error code (422)