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)
| Parametre | Tip | Koşul | Açıklama |
|---|---|---|---|
invoice_id | string | Zorunlu | Sizin tarafınızdaki tekil sipariş ID. |
merchant_key | string | Zorunlu | Üye işyeri anahtarınız. |
order_id | string | Zorunlu | Satış sipariş ID bilgisi. |
status | string | Zorunlu | 'complete' veya 'cancel' değerlerine göre işlem tamamlanabilir veya iptal edilebilir. |
hash_key | string | Zorunlu | Gü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);
}
}
