سجل التغييرات

سجل التغييرات

كل إصدارات API لدى AdProMaxPay، وما يتضمنه كل إصدار، وهل يكسر الكود القائم.

فتح بصيغة Markdown

تسرد هذه الصفحة كل إصدارات API، الأحدث أولًا. يوضح كل مدخل هل هو كاسر للتوافق: أي هل يجب تغيير الكود المكتوب للإصدار الذي قبله.

كيف تعمل الإصدارات

  • يُسمّى الإصدار بتاريخه: 2026-11-01.
  • مؤسستك مثبَّتة على الإصدار الذي كان ساريًا عند إنشائها. يذكره حقلها api_version في GET /v1/account. وتستخدمه طلباتك ما لم تحدد غير ذلك.
  • يمكن لطلب أن يحدد إصدارًا عبر ترويسة X-AdProMaxPay-Version. يُرفض الإصدار غير المعروف بـ 400، api_version_invalid.
  • يحمل كل حدث api_version الذي كُتب به.

يأتي التغيير الكاسر للتوافق في إصدار جديد مؤرَّخ، ويظل الإصدار الذي أنت مثبَّت عليه يعمل كما كان. أما الإضافات فتأتي دون إصدار جديد: كائنات جديدة، وحقول جديدة، وأنواع أحداث جديدة، ومعاملات اختيارية جديدة، ورموز أخطاء جديدة. اكتب كودك بحيث يتجاهل الحقول وأنواع الأحداث التي لا يعرفها.

  • curl
  • Node.js
  • TypeScript
  • Python
  • PHP
  • Ruby
  • Go
  • Java
  • C#
  • Rust
version.mjsversion.tsversion.pyversion.phpversion.rbversion.goVersion.javaVersion.csmain.rs
curl https://pay-api.adpromax.com/v1/account \
  -u "$APX_SECRET_KEY:" \
  -H "X-AdProMaxPay-Version: 2026-11-01"
const response = await fetch('https://pay-api.adpromax.com/v1/account', {
  headers: {
    'Authorization': `Bearer ${process.env.APX_SECRET_KEY}`,
    'X-AdProMaxPay-Version': '2026-11-01',
  },
})
const account = await response.json()
console.log(account.api_version)
interface Account {
  id: string
  object: 'account'
  api_version: string
}

const response = await fetch('https://pay-api.adpromax.com/v1/account', {
  headers: {
    'Authorization': `Bearer ${process.env.APX_SECRET_KEY}`,
    'X-AdProMaxPay-Version': '2026-11-01',
  },
})
const account = (await response.json()) as Account
console.log(account.api_version)
import os

import requests

response = requests.get(
    "https://pay-api.adpromax.com/v1/account",
    auth=(os.environ["APX_SECRET_KEY"], ""),
    headers={"X-AdProMaxPay-Version": "2026-11-01"},
)
account = response.json()
print(account["api_version"])
<?php
$ch = curl_init('https://pay-api.adpromax.com/v1/account');
curl_setopt_array($ch, [
    CURLOPT_USERPWD => getenv('APX_SECRET_KEY') . ':',
    CURLOPT_HTTPHEADER => ['X-AdProMaxPay-Version: 2026-11-01'],
    CURLOPT_RETURNTRANSFER => true,
]);
$account = json_decode(curl_exec($ch), true);
echo $account['api_version'], PHP_EOL;
require 'json'
require 'net/http'

uri = URI('https://pay-api.adpromax.com/v1/account')
request = Net::HTTP::Get.new(uri)
request.basic_auth(ENV.fetch('APX_SECRET_KEY'), '')
request['X-AdProMaxPay-Version'] = '2026-11-01'

response = Net::HTTP.start(uri.hostname, uri.port, use_ssl: uri.scheme == 'https') do |http|
  http.request(request)
end
account = JSON.parse(response.body)
puts account['api_version']
package main

import (
	"encoding/json"
	"fmt"
	"log"
	"net/http"
	"os"
)

type Account struct {
	ID         string `json:"id"`
	APIVersion string `json:"api_version"`
}

func main() {
	req, err := http.NewRequest(http.MethodGet, "https://pay-api.adpromax.com/v1/account", nil)
	if err != nil {
		log.Fatal(err)
	}
	req.SetBasicAuth(os.Getenv("APX_SECRET_KEY"), "")
	req.Header.Set("X-AdProMaxPay-Version", "2026-11-01")

	res, err := http.DefaultClient.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer res.Body.Close()

	var account Account
	if err := json.NewDecoder(res.Body).Decode(&account); err != nil {
		log.Fatal(err)
	}
	fmt.Println(account.APIVersion)
}
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Version {
    public static void main(String[] args) throws Exception {
        HttpRequest request = HttpRequest.newBuilder(URI.create("https://pay-api.adpromax.com/v1/account"))
            .header("Authorization", "Bearer " + System.getenv("APX_SECRET_KEY"))
            .header("X-AdProMaxPay-Version", "2026-11-01")
            .GET()
            .build();
        HttpResponse<String> response = HttpClient.newHttpClient()
            .send(request, HttpResponse.BodyHandlers.ofString());

        // The JDK has no JSON parser: a small regex reads api_version.
        Matcher version = Pattern
            .compile("\"api_version\"\\s*:\\s*\"([^\"]*)\"")
            .matcher(response.body());
        System.out.println(version.find() ? version.group(1) : response.body());
    }
}
using System.Net.Http.Headers;
using System.Net.Http.Json;
using System.Text.Json;

var json = new JsonSerializerOptions { PropertyNamingPolicy = JsonNamingPolicy.SnakeCaseLower };
using var http = new HttpClient();
http.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue(
    "Bearer", Environment.GetEnvironmentVariable("APX_SECRET_KEY"));
http.DefaultRequestHeaders.Add("X-AdProMaxPay-Version", "2026-11-01");

var account = await http.GetFromJsonAsync<Account>("https://pay-api.adpromax.com/v1/account", json);
Console.WriteLine(account!.ApiVersion);

record Account(string Id, string ApiVersion);
// Cargo.toml: reqwest = { version = "0.12", features = ["blocking", "json"] }
//             serde = { version = "1", features = ["derive"] }
use serde::Deserialize;

#[derive(Deserialize)]
struct Account {
    api_version: String,
}

fn main() -> Result<(), Box<dyn std::error::Error>> {
    let account: Account = reqwest::blocking::Client::new()
        .get("https://pay-api.adpromax.com/v1/account")
        .bearer_auth(std::env::var("APX_SECRET_KEY")?)
        .header("X-AdProMaxPay-Version", "2026-11-01")
        .send()?
        .json()?;
    println!("{}", account.api_version);
    Ok(())
}

2026-11-01

غير كاسر للتوافق: الإصدار الأول من API. يتضمن:

  • الحساب: GET /v1/account، مؤسستك وحالة تفعيلها. انظر مفاتيح API الخاصة بك.
  • نيات الدفع (payment intents) والمحاولات (charges)، بالبطاقة ونقدًا، مع حالاتها ومحاولاتها. انظر كيف تعمل المدفوعات.
  • جلسات الدفع (checkout sessions)، لصفحة الدفع المستضافة. انظر صفحة الدفع المستضافة.
  • العملاء. انظر العملاء.
  • استرداد المدفوعات بالبطاقة. انظر المبالغ المستردة.
  • الأحداث ونقاط استقبال الـ webhook: عمليات تسليم موقّعة، تُعاد محاولتها نحو ثلاثة أيام. انظر Webhooks.
  • أدوات الاختبار المساعدة، في وضع الاختبار فقط. انظر واجهة API لأدوات الاختبار المساعدة.
  • عدم التكرار (idempotency): إلزامي في الطلبات التي تحرّك أموالًا، وتُحفظ الاستجابات 24 ساعة. انظر عدم التكرار.
  • الأخطاء في سبعة أنواع، برسائل بالفرنسية أو الإنجليزية أو العربية، حسب ترويسة Accept-Language. انظر معالجة الأخطاء.
  • ترقيم الصفحات بالمؤشر في القوائم: limit وstarting_after وending_before.
  • حدود المعدل لكل مؤسسة ووضع، مع ترويسات RateLimit-*. انظر حدود المعدل.
  • البيانات الوصفية على نيات الدفع وجلسات الدفع والعملاء وعمليات الاسترداد ونقاط استقبال الـ webhook. انظر البيانات الوصفية.