Skip to content

Merchant 3D Model : Ödeme Tamamlama Servisi ​

payment_completed_by : "merchant" ve md_status : 1 olarak başlatılan bir işlemden sonra üye işyeri tarafından bu ödeme /api/complete servisi ile tamamlanır.

İstek Bilgileri ​

  • Metot: POST
  • URL: https://staging.halkode.com.tr/ccpayment/api/complete
  • CANLI URL: https://app.halkode.com.tr/ccpayment/api/complete
  • Yetkilendirme: Bearer {token} Token Alma servisinden alınan değer

İstek Parametreleri (Body) ​

ParametreTipKoşulAçıklama
invoice_idstringZorunluSizin tarafınızdaki tekil sipariş ID.
merchant_keystringZorunluÜye işyeri anahtarınız.
order_idstringZorunluSatış sipariş ID bilgisi.
statusstringZorunlu'complete' veya 'cancel' değerlerine göre işlem tamamlanabilir veya iptal edilebilir.
hash_keystringZorunluGüvenlik imzası.

Örnek İstek (Request) ​

json
{
    "merchant_key": "{{merchant_key}}",
    "invoice_id": "9a197ed9-cfaf-4456-b0fc-da74a95f461c",
    "order_id": "166254527653758",
    "status": "complete",
    "hash_key": "{{hash_key}}"
}

Başarılı Yanıt ​

json
{
    "status_code": 100,
    "status_description": "Payment Successfully Completed",
    "data": {
    "order_no": "166254527653758",
    "order_id": "166254527653758",
    "invoice_id": "9a197ed9-cfaf-4456-b0fc-da74a95f461c",
    "status_code": 100,
    "status_description": "Payment Successfully Completed",
    "credit_card_no": "557023****7463",
    "transaction_type": "Auth",
    "payment_status": true,
    "payment_method": 1,
    "error_code": 100,
    "error": "Payment Successfully Completed",
    "auth_code": "287679",
    "status": "Completed",
    "hash_key": "{{hash_key}}"
    }
}

Başarısız Yanıt ​

json
{
    "status_code": 31,
    "status_description": "Pending sale not found against order_id 166246147223278",
    "data": {
    "invoice_id": "f6a2a107-088f-4169-875f-8a6f30cf4ff2",
    "order_id": "166246147223278"
    }
}

Kod Örnekleri ​

PHP Örnek Kodu
PHP

<?php

if (isset($_POST['process_payment'])) {
    // Temel değişkenleri tanımla
    $baseUrl = "https://staging.halkode.com.tr/ccpayment/api/complete";
    include 'degisken.php';
    $order_id = $_POST['order_id']; // Order ID formdan alınacak
    $invoice_id = $_POST['invoice_id']; // Fatura ID formdan alınacak
    $status = "complete";
    // Token isteği
    $tokenResponse = getToken($app_id, $appSecret);
    $decodedTokenResponse = json_decode($tokenResponse, true);
    // Token yanıtını kontrol et
    if ($decodedTokenResponse === null || $decodedTokenResponse['status_code'] != 100) {
        echo "<p><strong>Hata:</strong> Token alınamadı. Lütfen bilgilerinizi kontrol ediniz.</p>";
        return;
    }
    $token = $decodedTokenResponse['data']['token'];
    // Formdan verileri topla (URL-encoded)
    $data = array(
        "invoice_id" => $invoice_id,   // Dinamik Fatura ID
        "merchant_key" => $merchantKey,
        "order_id" => $order_id,   // Dinamik İşlem Numarası
        "status" => $status,
    );
    // Gönderilen verileri göster
    echo "<h3>Gönderilen Veriler</h3>";
    echo "<pre>" . htmlspecialchars(http_build_query($data)) . "</pre>";
    // Ödeme isteğini göndermek için CURL (URL-encoded format)
    $ch = curl_init($baseUrl);
    curl_setopt($ch, CURLOPT_HTTPHEADER, array(
        "Authorization: Bearer $token"
    ));
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data));  // URL-encoded veri
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    $response = curl_exec($ch);
    // CURL hatası kontrolü
    if (curl_errno($ch)) {
        echo 'CURL Hatası: ' . curl_error($ch);
        curl_close($ch);
        return;
    }
    curl_close($ch);
    // Yanıtı yazdırarak kontrol et
    echo "<h3>API Yanıtı</h3><pre>" . htmlspecialchars($response) . "</pre>";
    // Yanıtı kontrol et ve işlem tamamlandığında mesaj göster
    parse_str($response, $responseData);  // URL-encoded yanıtı çöz
    if (isset($responseData['status_code']) && $responseData['status_code'] == 100) {
        echo "<h3>İşlem Tamamlandı</h3><p>Ödeme işleminiz başarıyla tamamlanmıştır.</p>";
    } else {
        echo "<h3>Hata</h3><p>İşlem sırasında bir hata oluştu. Lütfen tekrar deneyin.</p>";
    }
}
?>
C# /.NET Örnek Kodu
C#
using System.Text;
using System.Text.Json;
using System.Net.Http.Headers;
public class CompleteController : Controller
{
    private const string URL = "payment/complete";
    private readonly HttpClient _httpClient;
    private readonly ApiSettings _apiSettings;
    public CompleteController()
    {
        _httpClient = new HttpClient();
        _apiSettings = new ApiSettingConfiguration().Configuration();
    }
    public IActionResult Index()
    {
        return View();
    }
    [HttpPost]
    public async Task<IActionResult> ProcessPayment(string invoice_id, string order_id, string status)
    {
        var completeRequest = CreateRequestParameter(_apiSettings, invoice_id, order_id, status);
        var response = await GetAsync(completeRequest);
        ViewBag.RequestData = completeRequest;
        ViewBag.ResponseData = response;
        return View("Index");
    }
    private async Task<CompleteResponse> GetAsync(CompleteRequest completeRequest)
    {
        var tokenResponse = await new TokenController().GetAsync();
        var jsonRequest = JsonSerializer.Serialize(completeRequest);
        var httpContent = new StringContent(jsonRequest, Encoding.UTF8, "application/json");
        _httpClient.DefaultRequestHeaders.Authorization =
            new System.Net.Http.Headers.AuthenticationHeaderValue("Bearer", tokenResponse?.data?.token);
        try
        {
            var httpResponse = await _httpClient.PostAsync($"{_apiSettings.BaseAddress}{URL}", httpContent);
            var jsonResponse = await httpResponse.Content.ReadAsStringAsync();
            return JsonSerializer.Deserialize<CompleteResponse>(jsonResponse);
        }
        catch (Exception ex)
        {
            throw new Exception($"Hata: {ex.Message}");
        }
    }
    private CompleteRequest CreateRequestParameter(ApiSettings apiSettings, string invoice_id, string order_id, string status)
    {
        var completeRequest = new CompleteRequest
        {
            invoice_id = invoice_id,
            order_id = order_id,
            status = "complete",
            merchant_key = apiSettings.MerchantKey,
        };
        HashGenerator hashGenerator = new();
        completeRequest.hash_key = hashGenerator.GenerateHashKey(
            false,
            completeRequest.merchant_key,
            completeRequest.invoice_id,
            completeRequest.order_id,
            completeRequest.status);
        return completeRequest;
    }
}
JavaScript / NodeJs Örnek Kodu
JavaScript

async function completeOrder(invoiceId, orderId) {
    const completeRequest = {
        invoice_id: invoiceId,
        order_id: orderId,
        status: "complete",
        merchant_key: "ornek_merchant_key" 
    };

    try {
        const response = await fetch("https://staging.halkode.com.tr/ccpayment/api/complete", {
            method: "POST",
            headers: {
                "Content-Type": "application/json",
                "Authorization": "Bearer TOKEN_BURAYA"
            },
            body: JSON.stringify(completeRequest)
        });

        const data = await response.json();
        console.log("Sonuç:", data);
    } catch (error) {
        console.error("Hata:", error);
    }
}