Abonelik Restore İsteği

Zotlo üzerindenki abonelerin kontrolü için OTP form isteği yapılan servistir.

POST https://api.zotlo.com/v1/restore/start
Servis cevabında kullanıcıya özel formUrl gönderilecektir. Bu formUrl webView üzerinde kullanıcıya açılarak, otp doğrulamasından sonra kullanıcının abonelik bilgileri, yine serviste gönderilen webhookUrl adresine gönderilecektir.

Restore servisi için gönderilmesi gereken parametreler şunlardır :

Alan
Açıklama
webhookUrl
Doğrulama işleminden sonra doğrulama yapılan telefon numarasına ait aboneliklerin gönderileceği adrestir. İŞlem başarılı olursa bu adrese abonelik bilgileri gönderilecektir.
language
Restore formunun kullanıcıya gösterileceği dildir. Eğer boş gönderilirse kullanıcıya en uygun dil gösterilmektedir.

Örnek İstek

Curl
Php
Swift
Java
Python
C#
1
curl --location --request POST 'https://api.zotlo.com/v1/restore/start' \
2
--header 'AccessKey: ***' \
3
--header 'AccessSecret: ***' \
4
--header 'Content-Type: application/json' \
5
--header 'ApplicationId: 6' \
6
--header 'Language: tr' \
7
--data-raw '{
8
"webhookUrl":"https://subscription.zotlo.com/webhook",
9
"language":"en"
10
}'
Copied!
1
$curl = curl_init();
2
3
curl_setopt_array($curl, array(
4
CURLOPT_URL => "https://api.zotlo.com/v1/restore/start",
5
CURLOPT_RETURNTRANSFER => true,
6
CURLOPT_ENCODING => "",
7
CURLOPT_MAXREDIRS => 10,
8
CURLOPT_TIMEOUT => 0,
9
CURLOPT_FOLLOWLOCATION => true,
10
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
11
CURLOPT_CUSTOMREQUEST => "POST",
12
CURLOPT_POSTFIELDS =>"{\n\t\"webhookUrl\":\"https://subscription.zotlo.com/webhook\",\n\t\"language\":\"en\"\n}",
13
CURLOPT_HTTPHEADER => array(
14
"AccessKey: ***",
15
"AccessSecret: ***",
16
"Content-Type: application/json",
17
"ApplicationId: 6",
18
"Language: tr"
19
),
20
));
21
22
$response = curl_exec($curl);
23
24
curl_close($curl);
25
echo $response;
Copied!
1
import Foundation
2
3
var semaphore = DispatchSemaphore (value: 0)
4
5
let parameters = "{\n\t\"webhookUrl\":\"https://subscription.zotlo.com/webhook\",\n\t\"language\":\"en\"\n}"
6
let postData = parameters.data(using: .utf8)
7
8
var request = URLRequest(url: URL(string: "https://api.zotlo.com/v1/restore/start")!,timeoutInterval: Double.infinity)
9
request.addValue("***", forHTTPHeaderField: "AccessKey")
10
request.addValue("***", forHTTPHeaderField: "AccessSecret")
11
request.addValue("application/json", forHTTPHeaderField: "Content-Type")
12
request.addValue("6", forHTTPHeaderField: "ApplicationId")
13
request.addValue("tr", forHTTPHeaderField: "Language")
14
15
request.httpMethod = "POST"
16
request.httpBody = postData
17
18
let task = URLSession.shared.dataTask(with: request) { data, response, error in
19
guard let data = data else {
20
print(String(describing: error))
21
return
22
}
23
print(String(data: data, encoding: .utf8)!)
24
semaphore.signal()
25
}
26
27
task.resume()
28
semaphore.wait()
Copied!
1
OkHttpClient client = new OkHttpClient().newBuilder()
2
.build();
3
MediaType mediaType = MediaType.parse("application/json");
4
RequestBody body = RequestBody.create(mediaType, "{\n\t\"webhookUrl\":\"https://subscription.zotlo.com/webhook\",\n\t\"language\":\"en\"\n}");
5
Request request = new Request.Builder()
6
.url("https://api.zotlo.com/v1/restore/start")
7
.method("POST", body)
8
.addHeader("AccessKey", "***")
9
.addHeader("AccessSecret", "***")
10
.addHeader("Content-Type", "application/json")
11
.addHeader("ApplicationId", "6")
12
.addHeader("Language", "tr")
13
.build();
14
Response response = client.newCall(request).execute();
Copied!
1
import requests
2
3
url = "https://api.zotlo.com/v1/restore/start"
4
5
payload = "{\n\t\"webhookUrl\":\"https://subscription.zotlo.com/webhook\",\n\t\"language\":\"en\"\n}"
6
headers = {
7
'AccessKey': '***',
8
'AccessSecret': '***',
9
'Content-Type': 'application/json',
10
'ApplicationId': '6',
11
'Language': 'tr'
12
}
13
14
response = requests.request("POST", url, headers=headers, data = payload)
15
16
print(response.text.encode('utf8'))
Copied!
1
var client = new RestClient("https://api.zotlo.com/v1/restore/start");
2
client.Timeout = -1;
3
var request = new RestRequest(Method.POST);
4
request.AddHeader("AccessKey", "***");
5
request.AddHeader("AccessSecret", "***");
6
request.AddHeader("Content-Type", "application/json");
7
request.AddHeader("ApplicationId", "6");
8
request.AddHeader("Language", "tr");
9
request.AddParameter("application/json", "{\n\t\"webhookUrl\":\"https://subscription.zotlo.com/webhook\",\n\t\"language\":\"en\"\n}", ParameterType.RequestBody);
10
IRestResponse response = client.Execute(request);
11
Console.WriteLine(response.Content);
Copied!

Servis Cevabı

1
{
2
"meta": {
3
"requestId": "6d2989e84793-REQ-5f3be2f7c6047",
4
"httpStatus": 200
5
},
6
"result": {
7
"restore": [
8
{
9
"appId": 5,
10
"teamId": 5,
11
"requestId": "27a67c7e-b780-4786-8fa7-e795230206d7",
12
"webhookUrl": "https://subscription.zotlo.com/webhook",
13
"formUrl": "https://local-pay3d.zotlo.com:39443/restore/27a67c7e-b780-4786-8fa7-e795230206d7",
14
"language": "en"
15
}
16
]
17
}
18
}
Copied!

Başarılı Cevap Parametreleri

Alan
Açıklama
appId
Abonelik kontrolünün yapılacağı uygulamanın id'si
requestId
Restore işlemi sonucunun kontrol edilebileceği requestId değeridir. Bu bilgi ile doğrulama servisi ve webhook ile gönderilen bilgiler doğrulanabilmektedir. O yüzden işlem tamamlanana kadar saklanması gerekmektedir.
webhookUrl
Başarılı işlem sonuçlarının POST ile gönderileceği webhook adresidir.
formUrl
Restore işlemi yapabilmek için, OTP doğrulaması için kullanıcıya bu adresin açılması gerekmektedir. Bu adres üzerinden kullanıcı OTP doğrulaması yaparak, aboneliklerinin doğrulanması sağlanacaktır.

Restore İşlemi Sonucunda Webhook İle Gönderilen Data

1
{
2
"queue": {
3
"type": "Restore",
4
"createDate": "2020-08-18 10:48:30",
5
"appId": "5"
6
},
7
"parameters": {
8
"appId": 5,
9
"teamId": 5,
10
"requestId": "85a6fb73-4148-4c30-a8a2-3b7282f68687",
11
"webhookUrl": "https://webhook.site/2f3eb612-5099-4c4f-88fd-aec2b882e33e",
12
"formUrl": "https://pay3d.zotlo.com:39443/restore/85a6fb73-4148-4c30-a8a2-3b7282f68687",
13
"language": "tr",
14
"otpVerification": true,
15
"otpPhoneNumber": "+905555555555",
16
"subscriptions": [
17
{
18
"subscriberId": "1",
19
"packageId": "zotlo.premium",
20
"status": "active",
21
"startDate": "2020-05-28 15:50:50",
22
"expireDate": "2020-09-03 01:18:59"
23
},
24
{
25
"subscriberId": "2",
26
"packageId": "zotlo.proxy",
27
"status": "active",
28
"startDate": "2020-07-23 14:56:11",
29
"expireDate": "2020-08-22 14:56:11"
30
}
31
32
]
33
}
34
}
Copied!

Hata Durumları

Ödeme servislerinden HTTP status code olarak başarılı durumlarda 200 dönmektedir. Başarısız durumlarda ise 400 ya da 500 Http StatusCode dönmektedir. Örnek hata cevabı aşağıdaki şekildedir.
1
{
2
"meta": {
3
"requestId": "MacBook-Pro.local-REQ-5e7da75228368",
4
"httpStatus": 400,
5
"errorMessage": "Kullanıcı abonelik profili bulunamadı.",
6
"errorCode": 400009
7
},
8
"result": []
9
}
Copied!
Cevap
Açıklama
requestId
Her request için sistem tarafından atanan id değeridir. Sistemsel hatalarda loglardan hata yakalamak için kullanılmaktadır.
httpStatus
Hatanın HttpStatusCode değeri
errorMessage
Hata mesajı. Tüm hata kodlarına Hata Kodları menüsünden ulaşabilirsiniz.
errorCode
İlgili hata için Zotlo tarafından verilen hata kodu.
Last modified 2mo ago