Kredi Kartı Güncelleme

Mevcut kredi kartı yerine, yeni bir kredi kartı eklemek için kullanılacak servistir.

POST https://api.zotlo.com/v1/payment/change-card
Bu servis ile kullanıcının kredi kartından bir ücret çekilmez. Sadece kart bilgileri güncellenerek yenileme periyotlarının yeni kredi kartından yapılması sağlanır.

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

Alan
Açıklama
cardNo
Kredi kartı numarası. Geçerli formatta gönderilmelidir.
cardOwner
Kredi kartının sahibinin adı.
expireMonth
Kredi kartı son kullanma tarihi ayı. 2 karakter olarak gönderilmelidir.
expireYear
Kredi kartı son kullanma tarihi yılı. 2 karakter olarak gönderilmelidir.
cvv
Kredi kartı güvenlik kodu
subscriberId
Kart bilgilerinin güncelleneceği abonenin id'sidir. Sadece aktif aboneler kart bilgilerini güncelleyebilir.
redirectUrl
Eğer provider 3D Secure üzerinden işlem gerçekleştirirse işlem sonucunda dönülecek adrestir.

Kart Bilgilerini Güncellemek İçin Örnek İstek

Curl
Php
Swift
Java
Python
C#
1
curl --location --request POST 'https://api.zotlo.com/v1/subscription/change-card' \
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":"123",
13
"subscriberId":"7",
14
"redirectUrl":"https:/www.example.com/callback/save-card"
15
}'
Copied!
1
$curl = curl_init();
2
3
curl_setopt_array($curl, array(
4
CURLOPT_URL => "https://api.zotlo.com/v1/subscription/change-card",
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\":\"123\",\n\t\"subscriberId\":\"7\",\n\t\"redirectUrl\":\"https:/www.example.com/callback/save-card\"\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\"cardNo\":\"4111111111111111\",\n\t\"cardOwner\":\"Test Test\",\n\t\"expireMonth\":\"12\",\n\t\"expireYear\":\"20\",\n\t\"cvv\":\"123\",\n\t\"subscriberId\":\"7\",\n\t\"redirectUrl\":\"https:/www.example.com/callback/save-card\"\n}"
6
let postData = parameters.data(using: .utf8)
7
8
var request = URLRequest(url: URL(string: "https://api.zotlo.com/v1/subscription/change-card")!,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\"cardNo\":\"4111111111111111\",\n\t\"cardOwner\":\"Test Test\",\n\t\"expireMonth\":\"12\",\n\t\"expireYear\":\"20\",\n\t\"cvv\":\"123\",\n\t\"subscriberId\":\"7\",\n\t\"redirectUrl\":\"https:/www.example.com/callback/save-card\"\n}");
5
Request request = new Request.Builder()
6
.url("https://api.zotlo.com/v1/subscription/change-card")
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/subscription/change-card"
4
5
payload = "{\n\t\"cardNo\":\"4111111111111111\",\n\t\"cardOwner\":\"Test Test\",\n\t\"expireMonth\":\"12\",\n\t\"expireYear\":\"20\",\n\t\"cvv\":\"123\",\n\t\"subscriberId\":\"7\",\n\t\"redirectUrl\":\"https:/www.example.com/callback/save-card\"\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/subscription/change-card");
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\":\"123\",\n\t\"subscriberId\":\"7\",\n\t\"redirectUrl\":\"https:/www.example.com/callback/save-card\"\n}", ParameterType.RequestBody);
10
IRestResponse response = client.Execute(request);
11
Console.WriteLine(response.Content);
Copied!

Kart Güncelleme İşlemi Başarılı İse

1
{
2
"meta": {
3
"requestId": "6d2989e84793-REQ-5f32ae118251c",
4
"httpStatus": 200
5
},
6
"result": {
7
"response": {
8
"isSuccess": true,
9
"transactionId": "92cf3a1e-cf55-4593-990b-48e4b632b8fb",
10
"providerTransactionId": "66ab6034-2bd8-49f1-8779-997606c87537",
11
"customTransactionId": "5f32ae11c786c",
12
"statusCode": "S0000001",
13
"statusMessage": "Ödeme işlemi başarıyla tamamlandı.",
14
"paymentDate": "2020-08-11 02:41:23",
15
"providerStatus": null,
16
"paymentStatus": "COMPLETE",
17
"redirectUrl": null,
18
"paymentProvider": "Zotlopay"
19
}
20
}
21
}
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-5e7ce1aa1eb10",
4
"httpStatus": 400,
5
"errorMessage": "Abonelik oluşturmaya çalıştığınız kullanıcıya ait aktif bir abonelik bulunmaktadır.",
6
"errorCode": 400007
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