דלגו לתוכן

או התחילו מנקודה בטוחה: אינדקס הכלים המלא · מפת הטבלאות המרכזיות

מערכת חדשה — 14 יום חינם

דוגמאות קוד

עודכן 30.08.2026

הצורה זהה בכל שפה: POST של JSON עם שתי כותרות. משתנים רק לקוח ה‑HTTP וההמרה לפורמט השליחה (serialization). שמות השדות, הקידומות, טיפוסי הערכים ובדיקות התקינות אינם תלויי שפה.

הדוגמה השכבה האימות איפה הקוד רץ
שרת ביניים לטופס /functions/{appId}/getlead Application Id בלבד דפדפן וגם שרת שלכם
סנכרון יוצא עם עימוד /parse/classes/… API Key צד שרת בלבד
הרשמה לקורס /functions/{appId}/web2table Application Id בלבד דפדפן, או שרת ביניים
מצא‑או‑צור /parse/classes/… · /parse/batch API Key צד שרת בלבד
חיבור לקוח MCP https://mcp.mbapps.co.il/ API Key או OAuth 2.1 לקוח ה‑MCP שלכם

כל בלוק קוד מופיע בחמש שפות קבועות, בטאבים עם מפתח סנכרון משותף: PHP · Python · Node.js · C# · JavaScript (דפדפן). בוחרים שפה פעם אחת, והבחירה חלה על כל הבלוקים בעמוד ועל עמודי הדוגמאות האחרים.

הכללים שכל דוגמה מקיימת

Section titled “הכללים שכל דוגמה מקיימת”
  1. הקוד רץ במלואו. אין // ... באמצע ואין “השלימו כאן”.
  2. טיפול שגיאות אמיתי. ארבע קטגוריות נפרדות: שגיאת נתונים (בשכבת הטפסים 400 עם error של שדה חסר או לא תקין; ב‑REST 400 עם code), דגל כבוי במערכת (400 עם … is Disabled), 5xx, ושגיאת רשת או timeout.
  3. בלי סודות בדפדפן. ה‑Application Id מותר בקוד לקוח, הוא מזהה ציבורי. API Key ו‑Master Key ממשתנה סביבה או ממנהל סודות, בצד שרת בלבד. ראו אימות והרשאות.
  4. ערכי דמה מסומנים. כל מזהה כאן הוא ערך המצאה בפורמט הנכון (10 תווים). ראו טבלת ערכי הדמה.
  5. limit מפורש תמיד. ברירות המחדל שונות בין השכבות (100 ב‑REST, 5 ב‑MCP), ותשובה קטומה נראית כמו טבלה קטנה. ראו מגבלות.
  6. ערכים ריקים מוסרים מהגוף. מחרוזת ריקה היא ערך ריק ולא היעדר ערך, והיא מתנהגת אחרת בשאילתות.
  7. timeout על כל קריאה יוצאת.

ערכי הדמה שחוזרים בכל הדוגמאות

Section titled “ערכי הדמה שחוזרים בכל הדוגמאות”
הערך בדוגמה מה הוא מאיפה לוקחים את שלכם
הדביקו-כאן / APP_ID Application Id Databases ← המערכת שלכם ← Settings. סביבות וגישה
MB_API_KEY (משתנה סביבה) API Key אותו מסך, טבלת API Keys ← Add Key ← Save. אימות
xK9mP2qRsT objectId של רשומה — בדיוק 10 תווים חוזר מהיצירה, או משאילתה
vOZLqOWnQf, aB3dEf9HiJ ערך Pointer (שורה בטבלת lookup) שליפה חד‑פעמית מטבלת ה‑lookup
0501234567 · israel@example.co.il פרטי איש קשר לדוגמה —
Accounts · Sales · CourseRegistrations שמות מחלקות שלפו סכימה — שמות הטבלאות משתנים בין מערכות
PHP
<?php
const APP_ID = 'הדביקו-כאן';
function submitLead(array $form): array
{
$data = array_filter([
'Name' => $form['fullName'] ?? null,
'PhoneNumber' => $form['phone'] ?? null,
'Email' => $form['email'] ?? null,
], static fn ($v) => $v !== null && $v !== '');
if (empty($data['PhoneNumber']) && empty($data['Email'])) {
return ['ok' => false, 'error' => 'נדרש טלפון או אימייל'];
}
$ch = curl_init('https://api.mbapps.co.il/functions/' . APP_ID . '/getlead');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_TIMEOUT => 10,
CURLOPT_HTTPHEADER => [
'Content-Type: application/json',
'X-Parse-Application-Id: ' . APP_ID,
],
CURLOPT_POSTFIELDS => json_encode($data, JSON_UNESCAPED_UNICODE),
]);
$body = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_RESPONSE_CODE);
curl_close($ch);
if ($body === false) return ['ok' => false, 'error' => 'שגיאת רשת'];
$json = json_decode($body, true) ?: [];
if ($status === 400) { // כל שגיאה עסקית חוזרת כ-400 — מסתעפים על הגוף
$err = $json['error'] ?? '';
if (str_contains($err, 'Disabled')) return ['ok' => false, 'error' => 'AcceptWebLeads כבוי במערכת'];
if (str_contains($err, 'missing')) return ['ok' => false, 'error' => 'טלפון או אימייל לא תקינים'];
return ['ok' => false, 'error' => "שגיאת שרת (400: $err)"]; // למשל "User function not found"
}
if ($status !== 200) return ['ok' => false, 'error' => "שגיאת שרת ($status)"];
// תשובת ההצלחה עטופה: { "result": { "success": true, "leadId": "..." } }
return ['ok' => true, 'leadId' => $json['result']['leadId'] ?? ''];
}

המשך: שרת ביניים לטופס · getlead.

2 · web2table — רשומה מקושרת

Section titled “2 · web2table — רשומה מקושרת”

שלוש קבוצות שמות: מפתחות איתור בלי קידומת, שדות איש קשר ב‑account_, שדות טבלת היעד ב‑table_.

PHP
<?php
function submitSale(array $form): array
{
$data = array_filter([
'table' => 'Sales', // שם המחלקה המדויק — חובה
'phone' => $form['phone'] ?? null, // חובה, בלי קידומת
'email' => $form['email'] ?? null,
'account_Name' => $form['full_name'] ?? null,
'account_City' => $form['city'] ?? null,
'table_Name' => 'פנייה מדף נחיתה', // שדות Sales בתבנית vanilla: Name, Total, Comment…
'table_Total' => $form['amount'] ?? null,
'isExistsAccountCheck' => 'true', // בוליאני כמחרוזת
], static fn ($v) => $v !== null && $v !== '');
if (empty($data['phone'])) {
return ['ok' => false, 'error' => 'נדרש טלפון'];
}
$ch = curl_init('https://api.mbapps.co.il/functions/' . APP_ID . '/web2table');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_TIMEOUT => 10,
CURLOPT_HTTPHEADER => ['Content-Type: application/json',
'X-Parse-Application-Id: ' . APP_ID],
CURLOPT_POSTFIELDS => json_encode($data, JSON_UNESCAPED_UNICODE),
]);
$body = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_RESPONSE_CODE);
curl_close($ch);
return $status === 200
? ['ok' => true] + json_decode($body, true) // { success, accountId, Id }
: ['ok' => false, 'status' => $status, 'raw' => $body];
}

המשך: הרשמה לקורס עם web2table · web2table.

PHP
<?php
function fetchRecentLeads(int $limit = 100): array
{
$qs = http_build_query([
'where' => json_encode(['IsAccount' => false], JSON_UNESCAPED_UNICODE),
'keys' => 'Name,PhoneNumber,Email,createdAt',
'order' => '-createdAt',
'limit' => $limit, // תמיד מפורש — ברירת המחדל היא 100
]);
$ch = curl_init("https://api.mbapps.co.il/parse/classes/Accounts?$qs");
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTPHEADER => [
'X-Parse-Application-Id: ' . getenv('MB_APP_ID'),
'X-Parse-API-Key: ' . getenv('MB_API_KEY'),
],
]);
$body = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_RESPONSE_CODE);
curl_close($ch);
if ($status !== 200) throw new RuntimeException("REST $status: $body");
return json_decode($body, true)['results'] ?? [];
}

הקריאה עם X-Parse-API-Key מחזירה 200 ואת השדות שב‑keys; ברירת המחדל בלי limit היא 100 שורות. אותו מפתח תחת X-Parse-Master-Key נדחה ב‑400 code 119 Permission denied.

בלי מפתח בכלל (App‑Id בלבד) התוצאה תלויה ב‑CLP של הטבלה: הרשאות סגורות מחזירות את אותה 400 code 119, והרשאה שנפתחה לציבור מחזירה 200 עם נתונים. יש מערכות שבהן Accounts ו‑Sales מחזירות 200 בדיוק כך. אל תניחו שהיעדר מפתח חוסם; בדקו את ה‑CLP של הטבלה.

המשך: סנכרון יוצא עם עימוד · מצא‑או‑צור.

שלוש המלכודות שחוזרות בכל שפה

Section titled “שלוש המלכודות שחוזרות בכל שפה”
  1. Pointer בשכבת הטפסים = מחרוזת objectId חשופה בת 10 תווים, לא אובייקט Parse. ב‑REST הפוך: {"__type":"Pointer","className":…,"objectId":…}. אותו שדה, שתי צורות. ראו סוגי נתונים.
  2. בוליאני בשכבת הטפסים: שדות table_* מקבלים גם מחרוזת "true" / "false" וגם בוליאני אמיתי, ושניהם נשמרים כ‑Boolean. account_IsAccount מקבל רק בוליאני אמיתי; מחרוזת מפילה את כל הבקשה ב‑400 code 111. מספר בשדה בוליאני נדחה בכל מקרה.
  3. where ב‑REST = JSON שעובר URL‑encoding. השתמשו בכלי הקידוד של הספרייה (params=, URLSearchParams, --data-urlencode). שרשור ידני נכשל בשתי צורות: רווח גולמי ב‑URL → 400 Bad Request בדף HTML מהשער, לא JSON; JSON שבור, למשל מפתח בלי מרכאות → 500 {"code":1,"message":"Internal server error."}, שגיאת קלט בלבוש תקלת שרת.

תרגמו מהדוגמה הקרובה ביותר: Go ו‑Rust מ‑Node.js, Ruby ו‑Kotlin מ‑Python, Java מ‑C#. הכותרות זהות (Content-Type: application/json ו‑X-Parse-Application-Id, ובשכבת ה‑REST גם כותרת ההרשאה), ושלוש המלכודות חוצות שפה.