# Shayegan webservice notes (PDF + Sample_Shygun Postman) Do not store real credentials in this file or in Git. ## Known for boursecu (operator, 2026-10-05) Store panel (`app.boursemes.com`) is the **Laravel API**, not Shayegan: - Shop domain: `app.boursemes.com` - `node_server`: `https://app.boursemes.com/server` - Listed LAN IP on that panel: `192.168.70.189` — different from Shayegan host; do not use as WsServer unless confirmed. Shayegan webservice hosts (operator): - Public/static (Mashhad office): `2.180.4.172` - Internal LAN: `192.168.109.222` - Port: `2030` - Candidate `shayegan_base_url` (no `/api` suffix): - From internet / remote app server: `http://2.180.4.172:2030` - From same LAN as حسابگر: `http://192.168.109.222:2030` - If 404, retry with `/WsServer` appended (Postman samples). SQL Config for Shayegan Put/Get (inside JSON `Config`, not HTTP host): - `Server`: `P-SERVER` - `DataBaseName`: `CYPRSD04` - `DBUserName`: `sa` - Password: set only in DB `settings.shayegan_db_password` (never commit). Still useful from operator: Auth*, ItemNumber, STNumber, bank account, amount/weight scales, metal wallet mode. ## Base URL (PDF) `http://{host}[:port]{optionalBasePath}/api/{Endpoint}` PDF example: `http://192.168.1.1/api/Document/Put` Postman often inserts `/WsServer` or `/WsServer-3.13` before `/api`. Operator port hint: `2030`. SQL Server name is **not** the HTTP host. ## Request shape Every call body includes `Config`. Get calls also include `Domain` (+ `RowStart`/`RowCount` query). Put calls include `PutObject` array at the **same level** as `Config` (raw HTTP / Postman). PDF C# wrapper is named `Put`. ### Config fields `Server`, `AllowRowSecurity`, `Level`, `DBUserName`, `DBPassword`, `DataBaseName`, `AuthUser`, `AuthPassword`, `Language` Auth: Shayegan cloud / Hesabgar / none (empty Auth*). ## Endpoints used | Op | Method path | |----|-------------| | Health (read) | `POST .../api/Account/Get?RowStart=0&RowCount=1` | | Trade | `POST .../api/Invoice/Put` | | Rial ledger | `POST .../api/Document/Put` | | Customer account | `POST .../api/Account/Put` | ## Put response (check even on HTTP 200) ```json { "Result": [{ "ErrorMessage": "", "Number": "6572", "GuId": "..." }], "ErrorMessage": "", "TokenString": "" } ``` Treat non-empty top-level or per-row `ErrorMessage` as failure. ## InvTyp (company) 1 تولید | 2 فروش | 3 خرید | 4 حواله | 5 رسید انبار | 6 برگشت فروش | 7 برگشت خرید | 8/9 تعدیل | 10 انتقال انبار | 11/12 سفارش | 13 پیش‌فاکتور Customer **buy** copper → company **فروش** → `InvTyp=2` Customer **sell** copper → company **خرید** → `InvTyp=3` ## Document body (PDF) Prefer `AmountBed` / `AmountBes` (also `RialBed` / `RialBes` exist). Header: `DocDescription`, `DocDate` (`yyyyMMdd`), `DocReference`, `GuId`. ## Invoice required (PDF) `AccountNumber`, `InvTyp`, `InvDate`; line: item + `STNumber` + `Quan` + `Price`. Ignore Postman keys with trailing spaces — PDF field names are authoritative.