Abonelik Profili Sorgulama

Zotlo üzerinden abonelikleri yönetilen kullanıcıların aboneliklerine ait son durumun kontrol edilebileceği servistir.

GET https://api.zotlo.com/v1/subscription/profile?subscriberId=SUBSCRIBER_ID&packageId=PACKAGE_ID
Profil servisi üzerinden abonenin son durumu anlık olarak takip edilebilir. Abonenin durumunda herhangi bir değişiklik olduğunda callback gönderildiği gibi bu servis üzerinden de kontrol edilebilir.
Bu servis GET metoduyla çalışır. Abone ait bilgilerin çekilebilmesi için subscriberId parametresinin gönderilmesi zorunludur.

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

Alan
Açıklama
subscriberId
Aktif uygulama için abonelik oluştururken gönderilen değerin gönderilmesi gereklidir. Eğer bu bilgi ile abonelik bilgisi bulunursa detayları servis tarafından dönülür. Diğer durumlarda servis hata döner.
packageId
Kullanıcıya ait aboneliğinin sorgulanacağı paket id'dir. Sadece gönderilen pakete ait abonelik varsa servis tarafından başarılı cevap dönülmektedir.

Örnek İstek

Curl
Php
Swift
Java
Python
C#
1
curl --location --request GET 'https://api.zotlo.com/v1/subscription/profile?subscriberId=5e6b9a02e71dd803d6420663&packageId=zotlo.premium' \
2
--header 'AccessKey: ***' \
3
--header 'AccessSecret: ***' \
4
--header 'ApplicationId: 2' \
5
--header 'Language: tr'
Copied!
1
$curl = curl_init();
2
3
curl_setopt_array($curl, array(
4
CURLOPT_URL => "https://api.zotlo.com/v1/subscription/profile?subscriberId=5e6b9a02e71dd803d6420663&packageId=zotlo.premium",
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 => "GET",
12
CURLOPT_HTTPHEADER => array(
13
"AccessKey: ***",
14
"AccessSecret: ***",
15
"ApplicationId: 2",
16
"Language: tr"
17
),
18
));
19
20
$response = curl_exec($curl);
21
22
curl_close($curl);
23
echo $response;
Copied!
1
import Foundation
2
3
var semaphore = DispatchSemaphore (value: 0)
4
5
var request = URLRequest(url: URL(string: "https://api.zotlo.com/v1/subscription/profile?subscriberId=5e6b9a02e71dd803d6420663&packageId=zotlo.premium")!,timeoutInterval: Double.infinity)
6
request.addValue("***", forHTTPHeaderField: "AccessKey")
7
request.addValue("***", forHTTPHeaderField: "AccessSecret")
8
request.addValue("2", forHTTPHeaderField: "ApplicationId")
9
request.addValue("tr", forHTTPHeaderField: "Language")
10
11
request.httpMethod = "GET"
12
13
let task = URLSession.shared.dataTask(with: request) { data, response, error in
14
guard let data = data else {
15
print(String(describing: error))
16
return
17
}
18
print(String(data: data, encoding: .utf8)!)
19
semaphore.signal()
20
}
21
22
task.resume()
23
semaphore.wait()
Copied!
1
OkHttpClient client = new OkHttpClient().newBuilder()
2
.build();
3
Request request = new Request.Builder()
4
.url("https://api.zotlo.com/v1/subscription/profile?subscriberId=5e6b9a02e71dd803d6420663&packageId=zotlo.premium")
5
.method("GET", null)
6
.addHeader("AccessKey", "***")
7
.addHeader("AccessSecret", "***")
8
.addHeader("ApplicationId", "2")
9
.addHeader("Language", "tr")
10
.build();
11
Response response = client.newCall(request).execute();
Copied!
1
import requests
2
3
url = "https://api.zotlo.com/v1/subscription/profile?subscriberId=5e6b9a02e71dd803d6420663&packageId=zotlo.premium"
4
5
payload = {}
6
headers = {
7
'AccessKey': '***',
8
'AccessSecret': '***',
9
'ApplicationId': '2',
10
'Language': 'tr'
11
}
12
13
response = requests.request("GET", url, headers=headers, data = payload)
14
15
print(response.text.encode('utf8'))
Copied!
1
var client = new RestClient("https://api.zotlo.com/v1/subscription/profile?subscriberId=5e6b9a02e71dd803d6420663&packageId=zotlo.premium");
2
client.Timeout = -1;
3
var request = new RestRequest(Method.GET);
4
request.AddHeader("AccessKey", "***");
5
request.AddHeader("AccessSecret", "***");
6
request.AddHeader("ApplicationId", "2");
7
request.AddHeader("Language", "tr");
8
IRestResponse response = client.Execute(request);
9
Console.WriteLine(response.Content);
Copied!

Servis Cevapları

Eğer Abonelik Profili Varsa ve Aktif İse :

1
{
2
"meta": {
3
"requestId": "6d2989e84793-REQ-5f32a82e299ff",
4
"httpStatus": 200
5
},
6
"result": {
7
"profile": {
8
"status": "active",
9
"realStatus": "active",
10
"subscriberId": "9",
11
"subscriptionType": "paid",
12
"startDate": "2020-08-10 21:57:25",
13
"expireDate": "2020-09-09 21:57:25",
14
"package": "zotlo-premium",
15
"country": "TR",
16
"phoneNumber": "+905555555555",
17
"language": "tr",
18
"originalTransactionId": "80397a95-742d-4c74-975e-f740d1909580",
19
"cancellation": null,
20
"customParameters": {
21
"source": "Landing",
22
"adjust": {
23
"idfa": "A161AD92-7DC3-4B15-B14C-3AA65995AFCC"
24
}
25
}
26
},
27
"package": {
28
"packageId": "zotlo-premium",
29
"price": 3.99,
30
"currency": "USD",
31
"packageType": "subscription",
32
"name": "Zotlo Premium"
33
},
34
"newPackage": null,
35
"card": {
36
"cardNumber": "411111******1111",
37
"expireDate": "12/20"
38
},
39
"customer": {
40
"id": 1,
41
"createDate": "2020-05-13 12:57:36",
42
"country": "TR",
43
"firstname": "Test",
44
"lastname": "Test",
45
"email": "[email protected]"
46
}
47
}
48
}
Copied!

Eğer Abonelik Profili Varsa Ancak Hesap İptal Edilmişse :

1
{
2
"meta": {
3
"requestId": "6d2989e84793-REQ-5f32a89037084",
4
"httpStatus": 200
5
},
6
"result": {
7
"profile": {
8
"status": "active",
9
"realStatus": "passive",
10
"subscriberId": "313334342",
11
"subscriptionType": "paid",
12
"startDate": "2020-08-07 06:44:16",
13
"expireDate": "2020-09-06 06:44:16",
14
"package": "zotlo-premium",
15
"country": "TR",
16
"phoneNumber": "+905555555555",
17
"language": "tr",
18
"originalTransactionId": "51e8fd2a-5b28-4b9f-bfe3-5f752b09d3a3",
19
"cancellation": {
20
"date": "2020-08-07 06:46:00",
21
"reason": "Not Interest",
22
"code": "CU00001"
23
},
24
"customParameters": {
25
"source": "Landing",
26
}
27
},
28
"package": {
29
"packageId": "zotlo-premium",
30
"price": 2.99,
31
"currency": "USD",
32
"packageType": "subscription",
33
"name": "Zotlo Premium"
34
},
35
"newPackage": null,
36
"card": {
37
"cardNumber": "411111******1111",
38
"expireDate": "12/20"
39
},
40
"customer": {
41
"id": 1,
42
"createDate": "2020-05-13 12:57:36",
43
"country": "TR",
44
"firstname": "Test",
45
"lastname": "Test",
46
"email": "[email protected]"
47
}
48
}
49
}
Copied!

Başarılı Cevap Parametreleri

Alan
Açıklama
status
Abonenin durumunu verir. active ya da passive değerlerini alabilir. Aktif ise abone haklarını kullanmaya devam edebilir. passive durumunda abonenin hakları sona ermiştir.
realStatus
Abonenin gerçek durumunu verir. active ya da passive değerlerini alabilir. Eğer kullanıcının hesabı bir şekilde iptal olduysa passive döner. Status değerinden farklı, status kullanıcının son kullanma tarihi gelene kadar active dönmeye devam edecektir.
subscriptionType
Kullanıcının aboneliğinin durumunu veren parametredir. trial ya da paid değerlerini alır. trial ise abone henüz deneme süresi içerisindedir. paid olduğunda da kullanıcı ücretli süreye geçmiş ve en az bir kere paket ücreti çekilmiş demektir.
startDate
Aboneliğinin başladı tarih
expireDate
Abonelik bitiş tarihi. Bu tarihte abonelik yenileme işlemleri yapılır. Eğer yapılamazsa abonelik sistem tarafından iptal edilir.
package
Aktif aboneliğinin olduğu paket
country
Kullanıcının ülkesi
language
Kullanıcının dili
cancellation
Eğer "null" ise kullanıcı hesabı aktif durumdadır. Eğer array şeklinde gelirse abonelik iptaline ait detaylar dönülür.
cancellation.date
Aboneliğin iptal edildiği tarih
cancellation.reason
Aboneliğin iptal nedeni
cancellation.code
Zotlo tarafından verilen abonelik iptaline ait durum kodudur. Abonelik iptal durum kodlarını aşağıda bulabilirsiniz.

İptal Durum Kodları

#
Açıklama
CP00001
Kullanıcının hesabında otomatik yenileme yapılamadığı için abonelik iptal edilmiştir.
CU00001
Kullanıcı hesabını kendi isteği ile iptal etmiştir.
CU00002
İade işleminden sonra sistem tarafından otomatik iptal edilmiştir.

Hata Durumları

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": "app2.localdomain-REQ-5e7da3a811d5d",
4
"httpStatus": 400,
5
"errorMessage": "Kullanıcı abonelik profili bulunamadı.",
6
"errorCode": 400009
7
},
8
"result": []
9
}
Copied!
Cevap
Açıklama
requestId
Her istek için sistem tarafından atanan id değeridir. Sistemsel hatalarda log'lardan hata yakalamak için kullanılır.
httpStatus
Hatanın HTTP durum kodu 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