Sadece kodu daha düzenli hale getirmek istedim Atladığım bir şey olmuşsa arkadaşlarda düzeltebilir.
Dökümantasyonda dönen cevapta payToken değeri yok."token" olarak anahtar geliyor. payToken değeri ödeme sonrası gelen cevapta yer alıyor.
<?php
function payZone( $action, $data ) {
    $ch = curl_init('https://service.payizone.com/' . $action);
    curl_setopt( $ch, CURLOPT_POSTFIELDS, json_encode($data) );
    curl_setopt( $ch, CURLOPT_HTTPHEADER, array('Content-Type:application/json') );
    curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );
    $result = curl_exec($ch);
    curl_close($ch);

    return json_decode($result);
}

$payload = array(
    'card_holder' => $_POST['name'],
    'card_number' => $_POST['number'],
    'exp_month' => $_POST['month'],
    'exp_year' => $_POST['year'],
    'cvcNumber' => $_POST['cvv'],
    'amount' => $_POST['xtut'],
    'redirect_url' => 'https://xxx.net/',
    'note' => 'Dijital Ürün',
    'other_code' => rand(1, 9999)
);
    
// Generate Token
$token = payZone('token', array('app_id' => 'xxx', 'app_secret' => 'xxx'));
$payload['payment_token'] = $token->token;
 
// Payment
exit(print_r(payZone('pay3D', $payload)));