Abone Paket Değişimi

Abonenin kullandığı paketi değiştirmek için kullanılan servistir.

POST https://api.zotlo.com/v1/payment/change-package
Eğer yeni geçilen paketin ücreti mevcut paketten düşük ise, paket değişimi aktif paketin bitiş tarihinde gerçekleştirilir.
Yeni geçilen paket ücreti mevcut paketten yüksek ise de kullanılmayan sürenin ücreti yeni paket fiyatından düşülerek hemen yeni pakete geçiş yapılır.
Paket değişikliğinde dikkat edilecek durum yeni paketin eski paketteki aynı ödeme sağlayıcı ve para biriminde tanımlanması gerekmektedir.
Alan
Açıklama
cardNo
Eğer paket değiştirme aşamasında yeni bir kart kullanılacaksa karta ait kredi kartı bilgisi.
cardOwner
Eğer paket değiştirme aşamasında yeni bir kart kullanılacaksa kart sahibinin adı.
expireMonth
Kredi kartı son kullanma ayı.
expireYear
Kredi kartı son kullanma yılı.
cvv
Kart güvenlik kodu.
language
Kullanıcı dili.
newPackageId
Geçilecek yeni paket id.
packageId
Aboneliğe ait mevcut paket id'dir.
cardToken
Kayıtlı kredi kartı ile paket değişikliği yapılacaksa burada kullanıcıya ait kart token gönderilmelidir. cardToken ile yapılan işlemlerde kredi kartı bilgisi zorunlu değiştir.
subscriberIpAddress
Aboneye ait ip adresi bilgisi.
redirectUrl
Eğer ödeme işleminin yapılacağı provider 3D Secure ile ödeme kabul ediyorsa işlem sonucunda dönülecek adres.
subscriberId
Paket değiştirilecek aboneId.
changeType
upgrade ya da downgrade değerlerini kabul etmektedir. upgrade ise paket yükseltme işlemi yapılacaktır. Kredi kartından yeni paket tutarı çekildiği anda yeni paket aktif olacaktır. downgrade işleminde ise yenileme periyodu geldiğinde yeni paket aktif olacaktır.

Örnek İstek

Curl
Php
Java
Python
C#
1
curl --location --request POST 'https://api.zotlo.com/v1/payment/change-package' \
2
--header 'AccessKey: ***' \
3
--header 'AccessSecret: ***' \
4
--header 'Content-Type: application/json' \
5
--header 'ApplicationId: 6' \
6
--header 'Language: tr' \
7
--data-raw '{
8
"cardNo":"4111111111111111",
9
"cardOwner":"Test Test",
10
"expireMonth":"12",
11
"expireYear":"20",
12
"cvv":"001",
13
"language":"en",
14
"platform":"web",
15
"cardToken":"",
16
"subscriberId":"Z113322",
17
"subscriberIpAddress":"212.154.57.216",
18
"redirectUrl":"https://example.com",
19
"changeType":"upgrade",
20
"packageId":"zotlo.premium",
21
"newPackageId":"zotlo.business"
22
}'
Copied!
1
$curl = curl_init();
2
3
curl_setopt_array($curl, array(
4
CURLOPT_URL => "https://api.zotlo.com/v1/payment/change-package",
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\"cardNo\":\"4111111111111111\",\n\t\"cardOwner\":\"Test Test\",\n\t\"expireMonth\":\"12\",\n\t\"expireYear\":\"20\",\n\t\"cvv\":\"001\",\n\t\"language\":\"en\",\n\t\"platform\":\"web\",\n\t\"cardToken\":\"\",\n\t\"subscriberId\":\"Z113322\",\n\t\"subscriberIpAddress\":\"212.154.57.216\",\n\t\"redirectUrl\":\"https://example.com\",\n\t\"changeType\":\"upgrade\",\n \"packageId\":\"zotlo.premium\",\n \"newPackageId\":\"zotlo.business\"\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
OkHttpClient client = new OkHttpClient().newBuilder()
2
.build();
3
MediaType mediaType = MediaType.parse("application/json");
4
RequestBody body = RequestBody.create(mediaType, "{\n\t\"cardNo\":\"4111111111111111\",\n\t\"cardOwner\":\"Test Test\",\n\t\"expireMonth\":\"12\",\n\t\"expireYear\":\"20\",\n\t\"cvv\":\"001\",\n\t\"language\":\"en\",\n\t\"platform\":\"web\",\n\t\"cardToken\":\"\",\n\t\"subscriberId\":\"Z113322\",\n\t\"subscriberIpAddress\":\"212.154.57.216\",\n\t\"redirectUrl\":\"https://example.com\",\n\t\"changeType\":\"upgrade\",\n \"packageId\":\"zotlo.premium\",\n \"newPackageId\":\"zotlo.business\"\n}");
5
Request request = new Request.Builder()
6
.url("https://api.zotlo.com/v1/payment/change-package")
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/payment/change-package"
4
5
payload = "{\n\t\"cardNo\":\"4111111111111111\",\n\t\"cardOwner\":\"Test Test\",\n\t\"expireMonth\":\"12\",\n\t\"expireYear\":\"20\",\n\t\"cvv\":\"001\",\n\t\"language\":\"en\",\n\t\"platform\":\"web\",\n\t\"cardToken\":\"\",\n\t\"subscriberId\":\"Z113322\",\n\t\"subscriberIpAddress\":\"212.154.57.216\",\n\t\"redirectUrl\":\"https://example.com\",\n\t\"changeType\":\"upgrade\",\n \"packageId\":\"zotlo.premium\",\n \"newPackageId\":\"zotlo.business\"\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/payment/change-package");
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\"cardNo\":\"4111111111111111\",\n\t\"cardOwner\":\"Test Test\",\n\t\"expireMonth\":\"12\",\n\t\"expireYear\":\"20\",\n\t\"cvv\":\"001\",\n\t\"language\":\"en\",\n\t\"platform\":\"web\",\n\t\"cardToken\":\"\",\n\t\"subscriberId\":\"Z113322\",\n\t\"subscriberIpAddress\":\"212.154.57.216\",\n\t\"redirectUrl\":\"https://example.com\",\n\t\"changeType\":\"upgrade\",\n \"packageId\":\"zotlo.premium\",\n \"newPackageId\":\"zotlo.business\"\n}", ParameterType.RequestBody);
10
IRestResponse response = client.Execute(request);
11
Console.WriteLine(response.Content);
Copied!

Servis Cevapları

1
{
2
"meta": {
3
"requestId": "6d2989e84793-REQ-5f32ad6851343",
4
"httpStatus": 200
5
},
6
"result": {
7
"profile": {
8
"status": "active",
9
"realStatus": "active",
10
"subscriberId": "7",
11
"subscriptionType": "paid",
12
"startDate": "2020-08-10 12:55:23",
13
"expireDate": "2020-09-10 14:38:34",
14
"package": "zotlo-business",
15
"country": "TR",
16
"phoneNumber": "+905555555555",
17
"language": "tr",
18
"originalTransactionId": "79448a13-b8bf-4b9e-9666-5dbabd8992c2",
19
"cancellation": null,
20
"customParameters": {
21
"source": "Landing"
22
}
23
},
24
"package": {
25
"packageId": "zotlo-business",
26
"price": 9.99,
27
"currency": "USD",
28
"packageType": "subscription",
29
"name": "Zotlo Business"
30
},
31
"customer": {
32
"id": 1,
33
"createDate": "2020-05-13 12:57:36",
34
"country": "TR",
35
"firstname": "Test",
36
"lastname": "Test",
37
"email": "[email protected]"
38
},
39
"newPackage": null,
40
"card": {
41
"cardNumber": "411111******1111",
42
"expireDate": "12/20"
43
},
44
"response": {
45
"isSuccess": true,
46
"transactionId": "79448a13-b8bf-4b9e-9666-5dbabd8992c2",
47
"providerTransactionId": "b4ee44dc-cbc0-400d-8f84-98688bdb7c80",
48
"customTransactionId": "3e7f94f76e9748e2fefd3a8c28eda6ab",
49
"statusCode": "S0000001",
50
"statusMessage": "Ödeme işlemi başarıyla tamamlandı.",
51
"paymentDate": "2020-08-11 02:38:34",
52
"providerStatus": null,
53
"paymentStatus": "COMPLETE",
54
"redirectUrl": null,
55
"paymentProvider": "Zotlopay"
56
},
57
"redirect": null,
58
"paymentStatus": "COMPLETE",
59
"paymentHash": "207851900cae72c17d80a17ea65879f321718055"
60
}
61
}
Copied!

Başarılı Cevap Parametreleri

Alan
Açıklama
newPackage
Yeni geçilecek paket ile ilgili detayları dönmektedir. Paket geçişi eğer ödeme farkı varsa o durumda gerçekleşecektir.

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