شروع کار
کتابخانهها و نمونه کلاینت
برای کار با API پیامرس پکیج جداگانهای لازم نیست. هر متد یک درخواست HTTP است، پس چند خط کد در زبانی که استفاده میکنید کافی است. کلاینتهای زیر را میتوانید مستقیم در پروژه کپی کنید.
کلاینت آماده
هر کلاینت متد را با نام مسیرش صدا میزند (مثلا sms/send یا verify/lookup)،
پارامترها را بهصورت فرم ارسال میکند و اگر return.status برابر ۲۰۰ نباشد، خطا میدهد. مقدار برگشتی همان entries پاسخ است.
# ~/.bashrc یا اسکریپت استقرار
export PAYAMRAS_API_KEY="YOUR_API_KEY"
payamras() {
# payamras sms/send receptor=09121234567 "message=سلام"
local method="$1"; shift
local args=()
for p in "$@"; do args+=(--data-urlencode "$p"); done
curl -sS -X POST "https://api.payamras.ir/v1/$PAYAMRAS_API_KEY/$method.json" "${args[@]}"
}
<?php
final class PayamRas
{
public function __construct(
private string $apiKey,
private string $baseUrl = 'https://api.payamras.ir/v1',
) {}
/** @return array<mixed> the "entries" of the response */
public function call(string $method, array $params = []): array
{
$ch = curl_init("{$this->baseUrl}/{$this->apiKey}/{$method}.json");
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => http_build_query($params),
CURLOPT_RETURNTRANSFER => true,
CURLOPT_TIMEOUT => 15,
]);
$body = curl_exec($ch);
$error = curl_error($ch);
curl_close($ch);
if ($body === false) {
throw new RuntimeException("PayamRas: connection failed: {$error}");
}
$json = json_decode($body, true);
$status = $json['return']['status'] ?? null;
if ($status !== 200) {
throw new RuntimeException('PayamRas: '.($json['return']['message'] ?? 'invalid response'), (int) $status);
}
return $json['entries'] ?? [];
}
}
// $sms = new PayamRas(getenv('PAYAMRAS_API_KEY'));
// $sms->call('sms/send', ['receptor' => '09121234567', 'message' => 'سلام']);
// Node.js 18+ (fetch داخلی). فقط سمت سرور؛ کلید را در مرورگر قرار ندهید.
export function payamras(apiKey, baseUrl = 'https://api.payamras.ir/v1') {
return async function call(method, params = {}) {
const res = await fetch(`${baseUrl}/${apiKey}/${method}.json`, {
method: 'POST',
body: new URLSearchParams(params),
signal: AbortSignal.timeout(15000),
});
const json = await res.json();
if (json?.return?.status !== 200) {
const err = new Error(`PayamRas: ${json?.return?.message ?? 'invalid response'}`);
err.status = json?.return?.status;
throw err;
}
return json.entries;
};
}
// const sms = payamras(process.env.PAYAMRAS_API_KEY);
// await sms('sms/send', { receptor: '09121234567', message: 'سلام' });
import requests
class PayamRasError(Exception):
def __init__(self, status, message):
super().__init__(f"PayamRas: {message}")
self.status = status
class PayamRas:
def __init__(self, api_key, base_url="https://api.payamras.ir/v1"):
self.api_key = api_key
self.base_url = base_url
def call(self, method, **params):
res = requests.post(
f"{self.base_url}/{self.api_key}/{method}.json",
data=params,
timeout=15,
)
body = res.json()
status = body.get("return", {}).get("status")
if status != 200:
raise PayamRasError(status, body.get("return", {}).get("message", "invalid response"))
return body.get("entries")
# sms = PayamRas(os.environ["PAYAMRAS_API_KEY"])
# sms.call("sms/send", receptor="09121234567", message="سلام")
مدیریت خطا
- کد خطای کلاینت همان
return.statusاست. معنی هر کد در صفحه کدهای خطا آمده است. - درخواستهای ارسال را خودکار تکرار نکنید. اگر پاسخی نرسید، ممکن است پیام ارسال شده باشد. با
localidارسال کنید و پیش از تکرار، وضعیت را با وضعیت با شناسه محلی بپرسید. - زمان انتظار (timeout) را محدود کنید تا قطعی شبکه، درخواست کاربر شما را معطل نکند.
نگهداری کلید
کلید را از متغیر محیطی بخوانید، نه از کد. این کلاینتها فقط برای کد سمت سرور هستند؛ کلیدی که در مرورگر یا اپلیکیشن موبایل باشد قابل استخراج است. جزئیات بیشتر در احراز هویت.