Service: KodyEcomPaymentsService
Methods: GetCardTokens()
, DeleteCardToken()
, PayWithCardToken()
Requests: GetCardTokensRequest
, DeleteCardTokenRequest
, PayWithCardTokenRequest
Responses: GetCardTokensResponse
, DeleteCardTokenResponse
, PaymentDetailsResponse
<?php
require __DIR__ . '/../vendor/autoload.php';
use Com\Kodypay\Grpc\Ecom\V1\KodyEcomPaymentsServiceClient;
use Com\Kodypay\Grpc\Ecom\V1\GetCardTokensRequest;
use Grpc\ChannelCredentials;
// Configuration
$HOSTNAME = "grpc-staging.kodypay.com";
$API_KEY = "your-api-key";
// Step 1: Initialize SDK client with SSL credentials
$client = new KodyEcomPaymentsServiceClient($HOSTNAME, [
'credentials' => ChannelCredentials::createSsl()
]);
// Step 2: Set authentication headers with your API key
$metadata = ['X-API-Key' => [$API_KEY]];
// Step 3: Create GetCardTokensRequest and set required fields
$request = new GetCardTokensRequest();
$request->setStoreId('your-store-id');
$request->setPayerReference('user123'); // The payer for whom to list tokens
// Step 4: Call GetCardTokens() method and wait for response
list($response, $status) = $client->GetCardTokens($request, $metadata)->wait();
// Step 5: Handle gRPC response status
if ($status->code !== \Grpc\STATUS_OK) {
echo "Error: " . $status->details . PHP_EOL;
exit;
}
// Step 6: Process response
if ($response->hasResponse()) {
$responseData = $response->getResponse();
$tokens = $responseData->getTokens();
echo "Found " . count($tokens) . " tokens:" . PHP_EOL;
foreach ($tokens as $token) {
echo "Token ID: " . $token->getTokenId() . PHP_EOL;
echo "Payment Token: " . $token->getPaymentToken() . PHP_EOL;
echo "Status: " . $token->getStatus() . PHP_EOL;
echo "Card: " . $token->getPaymentMethod() . " **** " . $token->getCardLast4Digits() . PHP_EOL;
echo "---" . PHP_EOL;
}
} else if ($response->hasError()) {
$error = $response->getError();
echo "API Error: " . $error->getMessage() . PHP_EOL;
}
?>
import com.kodypay.grpc.ecom.v1.KodyEcomPaymentsServiceGrpc;
import com.kodypay.grpc.ecom.v1.GetCardTokensRequest;
import com.kodypay.grpc.ecom.v1.GetCardTokensResponse;
import io.grpc.ManagedChannelBuilder;
import io.grpc.Metadata;
import io.grpc.stub.MetadataUtils;
public class GetCardTokensExample {
public static final String HOSTNAME = "grpc-staging.kodypay.com";
public static final String API_KEY = "your-api-key";
public static void main(String[] args) {
// Step 1: Create metadata with API key
Metadata metadata = new Metadata();
metadata.put(Metadata.Key.of("X-API-Key", Metadata.ASCII_STRING_MARSHALLER), API_KEY);
// Step 2: Build secure channel and create client
var channel = ManagedChannelBuilder.forAddress(HOSTNAME, 443)
.useTransportSecurity()
.build();
var client = KodyEcomPaymentsServiceGrpc.newBlockingStub(channel)
.withInterceptors(MetadataUtils.newAttachHeadersInterceptor(metadata));
// Step 3: Create GetCardTokensRequest and set required fields
GetCardTokensRequest request = GetCardTokensRequest.newBuilder()
.setStoreId("your-store-id")
.setPayerReference("user123") // The payer for whom to list tokens
.build();
// Step 4: Call GetCardTokens() method and get response
GetCardTokensResponse response = client.getCardTokens(request);
// Step 5: Process response
if (response.hasResponse()) {
var responseData = response.getResponse();
System.out.println("Found " + responseData.getTokensCount() + " tokens:");
responseData.getTokensList().forEach(token -> {
System.out.println("Token ID: " + token.getTokenId());
System.out.println("Payment Token: " + token.getPaymentToken());
System.out.println("Status: " + token.getStatus());
System.out.println("Card: " + token.getPaymentMethod() + " **** " + token.getCardLast4Digits());
System.out.println("---");
});
} else if (response.hasError()) {
var error = response.getError();
System.out.println("API Error: " + error.getMessage());
}
}
}
import grpc
import kody_clientsdk_python.ecom.v1.ecom_pb2 as kody_model
import kody_clientsdk_python.ecom.v1.ecom_pb2_grpc as kody_client
def get_card_tokens():
# Configuration
HOSTNAME = "grpc-staging.kodypay.com:443"
API_KEY = "your-api-key"
# Step 1: Create secure channel
channel = grpc.secure_channel(HOSTNAME, grpc.ssl_channel_credentials())
# Step 2: Create client and set metadata with API key
client = kody_client.KodyEcomPaymentsServiceStub(channel)
metadata = [("x-api-key", API_KEY)]
# Step 3: Create GetCardTokensRequest and set required fields
request = kody_model.GetCardTokensRequest(
store_id="your-store-id",
payer_reference="user123" # The payer for whom to list tokens
)
# Step 4: Call GetCardTokens() method and get response
response = client.GetCardTokens(request, metadata=metadata)
# Step 5: Process response
if response.HasField("response"):
response_data = response.response
print(f"Found {len(response_data.tokens)} tokens:")
for token in response_data.tokens:
print(f"Token ID: {token.token_id}")
print(f"Payment Token: {token.payment_token}")
print(f"Status: {token.status}")
print(f"Card: {token.payment_method} **** {token.card_last_4_digits}")
print("---")
elif response.HasField("error"):
error = response.error
print(f"API Error: {error.message}")
if __name__ == "__main__":
get_card_tokens()
using Grpc.Core;
using Grpc.Net.Client;
using Com.Kodypay.Ecom.V1;
class Program
{
static async Task Main(string[] args)
{
// Configuration
var HOSTNAME = "grpc-staging.kodypay.com";
var API_KEY = "your-api-key";
// Step 1: Create secure channel
var channel = GrpcChannel.ForAddress("https://" + HOSTNAME);
// Step 2: Create client
var client = new KodyEcomPaymentsService.KodyEcomPaymentsServiceClient(channel);
// Step 3: Set authentication headers with API key
var metadata = new Metadata
{
{ "X-API-Key", API_KEY }
};
// Step 4: Create GetCardTokensRequest and set required fields
var request = new GetCardTokensRequest
{
StoreId = "your-store-id",
PayerReference = "user123" // The payer for whom to list tokens
};
// Step 5: Call GetCardTokens() method and get response
var response = await client.GetCardTokensAsync(request, metadata);
// Step 6: Process response
if (response.ResponseCase == GetCardTokensResponse.ResponseOneofCase.Response)
{
var responseData = response.Response;
Console.WriteLine($"Found {responseData.Tokens.Count} tokens:");
foreach (var token in responseData.Tokens)
{
Console.WriteLine($"Token ID: {token.TokenId}");
Console.WriteLine($"Payment Token: {token.PaymentToken}");
Console.WriteLine($"Status: {token.Status}");
Console.WriteLine($"Card: {token.PaymentMethod} **** {token.CardLast4Digits}");
Console.WriteLine("---");
}
}
else if (response.ResponseCase == GetCardTokensResponse.ResponseOneofCase.Error)
{
var error = response.Error;
Console.WriteLine($"API Error: {error.Message}");
}
}
}
<?php
require __DIR__ . '/../vendor/autoload.php';
use Com\Kodypay\Grpc\Ecom\V1\KodyEcomPaymentsServiceClient;
use Com\Kodypay\Grpc\Ecom\V1\DeleteCardTokenRequest;
use Grpc\ChannelCredentials;
// Configuration
$HOSTNAME = "grpc-staging.kodypay.com";
$API_KEY = "your-api-key";
// Step 1: Initialize SDK client with SSL credentials
$client = new KodyEcomPaymentsServiceClient($HOSTNAME, [
'credentials' => ChannelCredentials::createSsl()
]);
// Step 2: Set authentication headers with your API key
$metadata = ['X-API-Key' => [$API_KEY]];
// Step 3: Create DeleteCardTokenRequest and set required fields
$request = new DeleteCardTokenRequest();
$request->setStoreId('your-store-id');
$request->setTokenId('token-id-to-delete'); // or use setTokenReference('your-token-reference')
// Step 4: Call DeleteCardToken() method and wait for response
list($response, $status) = $client->DeleteCardToken($request, $metadata)->wait();
// Step 5: Handle gRPC response status
if ($status->code !== \Grpc\STATUS_OK) {
echo "Error: " . $status->details . PHP_EOL;
exit;
}
// Step 6: Process response
if ($response->hasResponse()) {
echo "Token deleted successfully!" . PHP_EOL;
} else if ($response->hasError()) {
$error = $response->getError();
echo "API Error: " . $error->getMessage() . PHP_EOL;
}
?>
import com.kodypay.grpc.ecom.v1.KodyEcomPaymentsServiceGrpc;
import com.kodypay.grpc.ecom.v1.DeleteCardTokenRequest;
import com.kodypay.grpc.ecom.v1.DeleteCardTokenResponse;
import io.grpc.ManagedChannelBuilder;
import io.grpc.Metadata;
import io.grpc.stub.MetadataUtils;
public class DeleteCardTokenExample {
public static final String HOSTNAME = "grpc-staging.kodypay.com";
public static final String API_KEY = "your-api-key";
public static void main(String[] args) {
// Step 1: Create metadata with API key
Metadata metadata = new Metadata();
metadata.put(Metadata.Key.of("X-API-Key", Metadata.ASCII_STRING_MARSHALLER), API_KEY);
// Step 2: Build secure channel and create client
var channel = ManagedChannelBuilder.forAddress(HOSTNAME, 443)
.useTransportSecurity()
.build();
var client = KodyEcomPaymentsServiceGrpc.newBlockingStub(channel)
.withInterceptors(MetadataUtils.newAttachHeadersInterceptor(metadata));
// Step 3: Create DeleteCardTokenRequest and set required fields
DeleteCardTokenRequest request = DeleteCardTokenRequest.newBuilder()
.setStoreId("your-store-id")
.setTokenId("token-id-to-delete") // or use setTokenReference("your-token-reference")
.build();
// Step 4: Call DeleteCardToken() method and get response
DeleteCardTokenResponse response = client.deleteCardToken(request);
// Step 5: Process response
if (response.hasResponse()) {
System.out.println("Token deleted successfully!");
} else if (response.hasError()) {
var error = response.getError();
System.out.println("API Error: " + error.getMessage());
}
}
}
import grpc
import kody_clientsdk_python.ecom.v1.ecom_pb2 as kody_model
import kody_clientsdk_python.ecom.v1.ecom_pb2_grpc as kody_client
def delete_card_token():
# Configuration
HOSTNAME = "grpc-staging.kodypay.com:443"
API_KEY = "your-api-key"
# Step 1: Create secure channel
channel = grpc.secure_channel(HOSTNAME, grpc.ssl_channel_credentials())
# Step 2: Create client and set metadata with API key
client = kody_client.KodyEcomPaymentsServiceStub(channel)
metadata = [("x-api-key", API_KEY)]
# Step 3: Create DeleteCardTokenRequest and set required fields
request = kody_model.DeleteCardTokenRequest(
store_id="your-store-id",
token_id="token-id-to-delete" # or use token_reference="your-token-reference"
)
# Step 4: Call DeleteCardToken() method and get response
response = client.DeleteCardToken(request, metadata=metadata)
# Step 5: Process response
if response.HasField("response"):
print("Token deleted successfully!")
elif response.HasField("error"):
error = response.error
print(f"API Error: {error.message}")
if __name__ == "__main__":
delete_card_token()
using Grpc.Core;
using Grpc.Net.Client;
using Com.Kodypay.Ecom.V1;
class Program
{
static async Task Main(string[] args)
{
// Configuration
var HOSTNAME = "grpc-staging.kodypay.com";
var API_KEY = "your-api-key";
// Step 1: Create secure channel
var channel = GrpcChannel.ForAddress("https://" + HOSTNAME);
// Step 2: Create client
var client = new KodyEcomPaymentsService.KodyEcomPaymentsServiceClient(channel);
// Step 3: Set authentication headers with API key
var metadata = new Metadata
{
{ "X-API-Key", API_KEY }
};
// Step 4: Create DeleteCardTokenRequest and set required fields
var request = new DeleteCardTokenRequest
{
StoreId = "your-store-id",
TokenId = "token-id-to-delete" // or use TokenReference = "your-token-reference"
};
// Step 5: Call DeleteCardToken() method and get response
var response = await client.DeleteCardTokenAsync(request, metadata);
// Step 6: Process response
if (response.ResponseCase == DeleteCardTokenResponse.ResponseOneofCase.Response)
{
Console.WriteLine("Token deleted successfully!");
}
else if (response.ResponseCase == DeleteCardTokenResponse.ResponseOneofCase.Error)
{
var error = response.Error;
Console.WriteLine($"API Error: {error.Message}");
}
}
}
<?php
require __DIR__ . '/../vendor/autoload.php';
use Com\Kodypay\Grpc\Ecom\V1\KodyEcomPaymentsServiceClient;
use Com\Kodypay\Grpc\Ecom\V1\PayWithCardTokenRequest;
use Grpc\ChannelCredentials;
// Configuration
$HOSTNAME = "grpc-staging.kodypay.com";
$API_KEY = "your-api-key";
// Step 1: Initialize SDK client with SSL credentials
$client = new KodyEcomPaymentsServiceClient($HOSTNAME, [
'credentials' => ChannelCredentials::createSsl()
]);
// Step 2: Set authentication headers with your API key
$metadata = ['X-API-Key' => [$API_KEY]];
// Step 3: Create PayWithCardTokenRequest and set required fields
$request = new PayWithCardTokenRequest();
$request->setStoreId('your-store-id');
$request->setIdempotencyUuid(uniqid('', true)); // Generate unique idempotency key
$request->setPaymentToken('payment-token-from-get-tokens-response');
$request->setAmountMinorUnits(2000); // £20.00 in minor units
$request->setCurrency('GBP');
$request->setPaymentReference('payment_' . time());
// Optional fields
$request->setOrderId('order-123');
$request->setPayerStatement('My Store Purchase');
// Step 4: Call PayWithCardToken() method and wait for response
list($response, $status) = $client->PayWithCardToken($request, $metadata)->wait();
// Step 5: Handle gRPC response status
if ($status->code !== \Grpc\STATUS_OK) {
echo "Error: " . $status->details . PHP_EOL;
exit;
}
// Step 6: Process payment response
if ($response->hasResponse()) {
$paymentDetails = $response->getResponse();
echo "Payment ID: " . $paymentDetails->getPaymentId() . PHP_EOL;
echo "Status: " . $paymentDetails->getStatus() . PHP_EOL;
if ($paymentDetails->hasSaleData()) {
$saleData = $paymentDetails->getSaleData();
echo "Amount: " . ($saleData->getAmountMinorUnits() / 100) . " " . $saleData->getCurrency() . PHP_EOL;
}
if ($paymentDetails->hasPaymentData()) {
$paymentData = $paymentDetails->getPaymentData();
echo "PSP Reference: " . $paymentData->getPspReference() . PHP_EOL;
echo "Auth Status: " . $paymentData->getAuthStatus() . PHP_EOL;
}
} else if ($response->hasError()) {
$error = $response->getError();
echo "Payment failed: " . $error->getMessage() . PHP_EOL;
}
?>
import com.kodypay.grpc.ecom.v1.KodyEcomPaymentsServiceGrpc;
import com.kodypay.grpc.ecom.v1.PayWithCardTokenRequest;
import com.kodypay.grpc.ecom.v1.PaymentDetailsResponse;
import io.grpc.ManagedChannelBuilder;
import io.grpc.Metadata;
import io.grpc.stub.MetadataUtils;
import java.util.UUID;
public class PayWithCardTokenExample {
public static final String HOSTNAME = "grpc-staging.kodypay.com";
public static final String API_KEY = "your-api-key";
public static void main(String[] args) {
// Step 1: Create metadata with API key
Metadata metadata = new Metadata();
metadata.put(Metadata.Key.of("X-API-Key", Metadata.ASCII_STRING_MARSHALLER), API_KEY);
// Step 2: Build secure channel and create client
var channel = ManagedChannelBuilder.forAddress(HOSTNAME, 443)
.useTransportSecurity()
.build();
var client = KodyEcomPaymentsServiceGrpc.newBlockingStub(channel)
.withInterceptors(MetadataUtils.newAttachHeadersInterceptor(metadata));
// Step 3: Create PayWithCardTokenRequest and set required fields
PayWithCardTokenRequest request = PayWithCardTokenRequest.newBuilder()
.setStoreId("your-store-id")
.setIdempotencyUuid(UUID.randomUUID().toString())
.setPaymentToken("payment-token-from-get-tokens-response")
.setAmountMinorUnits(2000) // £20.00 in minor units
.setCurrency("GBP")
.setPaymentReference("payment_" + System.currentTimeMillis())
.setOrderId("order-123") // Optional
.setPayerStatement("My Store Purchase") // Optional
.build();
// Step 4: Call PayWithCardToken() method and get response
PaymentDetailsResponse response = client.payWithCardToken(request);
// Step 5: Process payment response
if (response.hasResponse()) {
var paymentDetails = response.getResponse();
System.out.println("Payment ID: " + paymentDetails.getPaymentId());
System.out.println("Status: " + paymentDetails.getStatus());
if (paymentDetails.hasSaleData()) {
var saleData = paymentDetails.getSaleData();
System.out.println("Amount: " + (saleData.getAmountMinorUnits() / 100.0) + " " + saleData.getCurrency());
}
if (paymentDetails.hasPaymentData()) {
var paymentData = paymentDetails.getPaymentData();
System.out.println("PSP Reference: " + paymentData.getPspReference());
System.out.println("Auth Status: " + paymentData.getAuthStatus());
}
} else if (response.hasError()) {
var error = response.getError();
System.out.println("Payment failed: " + error.getMessage());
}
}
}
import grpc
import uuid
import time
import kody_clientsdk_python.ecom.v1.ecom_pb2 as kody_model
import kody_clientsdk_python.ecom.v1.ecom_pb2_grpc as kody_client
def pay_with_card_token():
# Configuration
HOSTNAME = "grpc-staging.kodypay.com:443"
API_KEY = "your-api-key"
# Step 1: Create secure channel
channel = grpc.secure_channel(HOSTNAME, grpc.ssl_channel_credentials())
# Step 2: Create client and set metadata with API key
client = kody_client.KodyEcomPaymentsServiceStub(channel)
metadata = [("x-api-key", API_KEY)]
# Step 3: Create PayWithCardTokenRequest and set required fields
request = kody_model.PayWithCardTokenRequest(
store_id="your-store-id",
idempotency_uuid=str(uuid.uuid4()),
payment_token="payment-token-from-get-tokens-response",
amount_minor_units=2000, # £20.00 in minor units
currency="GBP",
payment_reference=f"payment_{int(time.time())}",
order_id="order-123", # Optional
payer_statement="My Store Purchase" # Optional
)
# Step 4: Call PayWithCardToken() method and get response
response = client.PayWithCardToken(request, metadata=metadata)
# Step 5: Process payment response
if response.HasField("response"):
payment_details = response.response
print(f"Payment ID: {payment_details.payment_id}")
print(f"Status: {payment_details.status}")
if payment_details.HasField("sale_data"):
sale_data = payment_details.sale_data
print(f"Amount: {sale_data.amount_minor_units / 100} {sale_data.currency}")
if payment_details.HasField("payment_data"):
payment_data = payment_details.payment_data
print(f"PSP Reference: {payment_data.psp_reference}")
print(f"Auth Status: {payment_data.auth_status}")
elif response.HasField("error"):
error = response.error
print(f"Payment failed: {error.message}")
if __name__ == "__main__":
pay_with_card_token()
using Grpc.Core;
using Grpc.Net.Client;
using Com.Kodypay.Ecom.V1;
class Program
{
static async Task Main(string[] args)
{
// Configuration
var HOSTNAME = "grpc-staging.kodypay.com";
var API_KEY = "your-api-key";
// Step 1: Create secure channel
var channel = GrpcChannel.ForAddress("https://" + HOSTNAME);
// Step 2: Create client
var client = new KodyEcomPaymentsService.KodyEcomPaymentsServiceClient(channel);
// Step 3: Set authentication headers with API key
var metadata = new Metadata
{
{ "X-API-Key", API_KEY }
};
// Step 4: Create PayWithCardTokenRequest and set required fields
var request = new PayWithCardTokenRequest
{
StoreId = "your-store-id",
IdempotencyUuid = Guid.NewGuid().ToString(),
PaymentToken = "payment-token-from-get-tokens-response",
AmountMinorUnits = 2000, // £20.00 in minor units
Currency = "GBP",
PaymentReference = $"payment_{DateTimeOffset.UtcNow.ToUnixTimeSeconds()}",
OrderId = "order-123", // Optional
PayerStatement = "My Store Purchase" // Optional
};
// Step 5: Call PayWithCardToken() method and get response
var response = await client.PayWithCardTokenAsync(request, metadata);
// Step 6: Process payment response
if (response.ResponseCase == PaymentDetailsResponse.ResponseOneofCase.Response)
{
var paymentDetails = response.Response;
Console.WriteLine($"Payment ID: {paymentDetails.PaymentId}");
Console.WriteLine($"Status: {paymentDetails.Status}");
if (paymentDetails.SaleData != null)
{
var saleData = paymentDetails.SaleData;
Console.WriteLine($"Amount: {saleData.AmountMinorUnits / 100.0} {saleData.Currency}");
}
if (paymentDetails.PaymentData != null)
{
var paymentData = paymentDetails.PaymentData;
Console.WriteLine($"PSP Reference: {paymentData.PspReference}");
Console.WriteLine($"Auth Status: {paymentData.AuthStatus}");
}
}
else if (response.ResponseCase == PaymentDetailsResponse.ResponseOneofCase.Error)
{
var error = response.Error;
Console.WriteLine($"Payment failed: {error.Message}");
}
}
}