Tokenized Yöntemi
Bir müşterinin WISECP'den ayrılmadan kredi kartı bilgilerini girdiği, isteğine bağlı olarak kart kaydetme özelliğini seçtiği ve bu bilgileri yerel olarak depolanmadan ödeme hizmeti sağlayıcısına iletildiği ve karşılığında alınan jeton ile ödeme tahsilat edildiği bir türdür. Ödeme sağlayıcısından alınan jeton ile ödeme işlemleri yürütülür.
"Tokenized" yöntemi "Merchant" yöntemi ile aynı adımlara sahiptir. Yapmanız gereken "Kart Saklama" özelliğini etkin hale getirmek ve ödeme hizmeti sağlayıcısından elde edilen "token" bilgisini WISECP’ye tanıtmaktır.
Kart Saklama Özelliğini Etkinleştirmek
Daha önce belirtildiği üzere "config.php" dosyasında "card-storage-supported" indisini “true” değer olarak tanımlamanız durumunda, modül için kart saklama özelliğini etkinleştirmiş olacaksınız.
Ödeme Tahsil Etmek
Müşterinin tanımladığı kart bilgileri, "capture" işlevine iletilir. Eğer saklı bir kart seçiliyse, işleve iletilen parametrede "card_storage" indisi dolu bir şekilde gelecektir.
Değişkenler
Aşağıda belirtilen tüm değişkenler "capture" fonksiyonuna iletilmektedir.
İsim | Türü | Açıklama |
checkout_id | integer | Ödeme için benzersiz kimlik numarası (ör. 1234567) |
amount | float | Ödenecek tutar bilgisi |
currency | integer | Para birimi kodu (ör. USD,EUR, gibi…) |
installment | integer | Kaç taksit talep edildiği |
holder_name | string | Kart üzerindeki isim |
type | string | Kart türü (Ör. VISA,MASTERCARD, gibi…) |
num | integer | 16 haneli kart numarası |
expiry_m | integer | Kartının son kullanma tarihindeki ayı (ör: 07) |
expiry_y | integer | Kartının son kullanma tarihindeki yılı (ör: 27) |
cvc | integer | Kartının arkasındaki güvenlik kodu |
clientInfo | object | Müşteri bilgilerinin bulunduğu bir "object" değişkendir. |
card_storage | array | Saklı kart bilgileri |
card_storage -> id | integer | Saklı kart ID numarası |
card_storage -> user_id | integer | Müşterinin ID numarası |
card_storage -> as_default | integer | Kart varsayılan ise "1" değilse "0" |
card_storage -> card_country | string | Kartın ülke bilgisi (ör: US,UK,DE, vb…) |
card_storage -> card_type | string | Kartın türü ("debit" ve "credit" değerini alabilir.) |
card_storage -> card_schema | string | Kartın şeması (ör: "MASTERCARD", "VISA", gibi…) |
card_storage -> card_brand | string | Kartın markası (ör. "bonus","axess", gibi…) |
card_storage -> bank_name | string | Kartın ait olduğu banka adı |
card_storage -> ln4 | string | Kart numarasının son 4 numarası |
card_storage -> cvc | string | Kartın arkasında güvenlik kodu (veritabanında kriptolanarak saklanmaktadır) |
card_storage -> name | string | Kart üzerindeki isim |
card_storage -> expiry_month | string | Kart son kullanma tarihindeki ayı (ör: 07) |
card_storage -> expiry_year | string | Kart son kullanma tarihindeki yılı (ör. 27) |
card_storage -> token | string | Ödeme hizmeti sağlayıcısından temin edilen token bilgisi (veritabanında kriptolanarak saklanmaktadır) |
Örnek
public function capture($params=[])
{
$api_key = $this->config["settings"]["example1"] ?? 'N/A';
$secret_key = $this->config["settings"]["example2"] ?? 'N/A';
$storage_token = '';
if($params['card_storage'])
$storage_token = $params['card_storage']['token'];
if($storage_token)
$card = [];
else
$card = [
'card_number' => $params['num'],
'card_holder_name' => $params['holder_name'],
'card_expiry' => $params['expiry_m']."-".$params['expiry_y'],
'card_cvc' => $params['cvc'],
];
// Does the customer want to keep the card?
if($this->checkSaveCard()) $card['card_storage'] = 'enable';
$fields = [
'client' => [
'first_name' => $params["clientInfo"]->name,
'last_name' => $params["clientInfo"]->surname,
'email' => $params["clientInfo"]->email,
'address' => [
'country' => $params["clientInfo"]->address->country_code,
'city' => $params["clientInfo"]->address->city,
'state' => $params["clientInfo"]->address->counti,
'postcode' => $params["clientInfo"]->address->zipcode,
'detail' => $params["clientInfo"]->address->address,
],
],
'card' => $card,
'storage_token' => $storage_token,
'amount' => $params['amount'],
'currency' => $this->currency($params['currency']),
'custom_id' => $params["checkout_id"],
];
// Here we are making an API call.
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, "api.sample.com/checkout/capture");
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
curl_setopt($curl, CURLOPT_HTTPHEADER, array(
'APIKEY: '.$api_key,
'SECRET: '.$secret_key,
'Content-Type: application/json',
));
curl_setopt($curl,CURLOPT_POST,1);
curl_setopt($curl,CURLOPT_POSTFIELDS,http_build_query($fields));
$result = curl_exec($curl);
if(curl_errno($curl))
{
return [
'status' => 'error',
'message' => curl_error($curl)
];
}
$result = json_decode($result,true);
if($result && $result['status'] == 'success')
return [
'status' => 'successful',
'message' => ['Merchant Transaction ID' => $result['transaction_id']],
'card_storage_token' => $result["storage_token"] ?? '',
];
else
return [
'status' => 'error',
'message' => $result['error_message'] ?? '!API ERROR!',
];
}
Saklanan Kartı Silmek
Ödeme hizmeti sağlayıcınız kart silme özelliğini destekliyorsa aşağıda verilen işlevi kullanabilirsiniz.
public function remove_stored_card($params=[])
{
$api_key = $this->config["settings"]["example1"] ?? 'N/A';
$secret_key = $this->config["settings"]["example2"] ?? 'N/A';
$token = $params['token'];
// Here we are making an API call.
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, "api.sample.com/card-storage/remove/".$token);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
curl_setopt($curl, CURLOPT_HTTPHEADER, array(
'APIKEY: '.$api_key,
'SECRET: '.$secret_key,
'Content-Type: application/json',
));
$result = curl_exec($curl);
if(curl_errno($curl))
{
$result = false;
$this->error = curl_error($curl);
}
$result = json_decode($result,true);
if($result && $result['status'] == 'OK') $result = true;
else
{
$this->error = $result['message'] ?? 'something went wrong';
$result = false;
}
return $result;
}