CRITICAL: Before starting, you MUST first use the Read tool to read
../openydt-shared/SKILL.md(authentication / profile / signature / status codes / rate limiting / security rules). Do not execute any commands without reading the shared foundation.
When to use this skill
This skill coversParking payment transaction domain (trade): fee inquiry for temporary-parking vehicles, payment information callback, batch repayment of arrears, and preset prepaid deposits / operational points (used for automatic vehicle deduction).
Intent routing:
- "How much is the parking fee for this car / check the parking fee / calculate the fee / how much do I need to pay to exit" →
openydt trade get-park-fee(real-time fee inquiry, payment must be completed within 10 minutes). - "Roughly how much for parking X hours in the future / estimate the fee by time period" →
openydt trade common-get-park-fee。 - "Payment succeeded, call back the order / sync payment / write back the payment" →
openydt trade pay-park-fee(write, requires--yes)。 - "Repay these arrears together / batch repayment / repay exit arrears" →
openydt trade payback-batch(write, requires--yes)。 - "Prepay deposit for the car / automatic deduction after top-up / pay first then leave with password-free payment" →
openydt trade set-prestore-for-c-parkorset-prestore-for-c-park-first-pay-before-leave(write, requires--yes)。 - "Preset operational points / points automatically offset parking fees" →
openydt trade set-points(write, requires--yes)。
In-lot vehicle confirmation, order inquiry, vehicle entry supplementary recording, etc. belong to the parking domain, see
openydt parking --help。
Available commands
| Chinese name | Command | Read/Write | Key parameters |
|---|---|---|---|
| Get parking fee by time (estimate future time period) | openydt trade common-get-park-fee |
Read | --park-code required,--car-type required,--start-time required,--end-time required,--charge-group(cloud parking lot only) |
| Get parking fee (real-time fee inquiry, pay within 10 minutes) | openydt trade get-park-fee |
Read | --car-code license plate,--park-code(if not passed, search the whole system by license plate/card number),--card-code、--parking-code、--need-pay-qr-code、--body(couponList) |
| Payment information callback | openydt trade pay-park-fee |
Write | --parking-code required,--charge-date required,--pay-date required,--act-pay-charge required,--pay-origin required,--payment-mode required,--bill-code required,--body(otherAtrr) |
| Batch repayment of arrears | openydt trade payback-batch |
Write | --body(paybackList[]:parkCode/parkingCode/paybackTime/paybackValue/couponValue/payOrigin/paymentMode/thirdBillCode) |
| Preset operational points (automatically offset parking fees) | openydt trade set-points |
Write | --park-code、--app-id required,--parking-code required,--third-bill-code required,--rule required,--max required,--points-value required,--pay-origin required,--payment-mode required |
| Preset prepaid deposit (automatic deduction for cloud parking lots) | openydt trade set-prestore-for-c-park |
Write | --parking-code required,--third-bill-code required,--prestore-amount required,--pay-origin required,--payment-mode required,--park-code |
| Preset prepaid deposit (pay first, then leave) | openydt trade set-prestore-for-c-park-first-pay-before-leave |
write | --parking-code required,--prestore-amount required,--park-code |
allwritecommands (
pay-park-fee/payback-batch/set-points/set-prestore-for-c-park/set-prestore-for-c-park-first-pay-before-leave) when executedmust add--yesconfirmation, otherwise it will be intercepted.
Callable interfaces not listed in this table but belonging to the trade domain (such as
getCloudParkChargeInfoMap/setChargeRule/getChargeRule/setPrestore/setPrestoreFlow/setPrestoreForFirstPayThenLeave/syncAutoCoupon), use the generic fallbackopenydt api <cmd> --body '{...}'call (for write operations remember--yes, first--dry-run); see catalog for cmd/fields/sampleBody, details in [[openydt-api-explorer]].
Business process
Parking payment closed loop (fee query → payment → reconciliation)
Execute step by step,be sure to use fields from previous command responses as inputs to subsequent commands, do not construct them out of thin air:
- Vehicle entry backfill (cloud parking lot) — if a vehicle entry was not reported, first backfill the entry record:
openydt parking supplement-parking-record-in --yes ... - Confirm on-site — query on-site vehicles, confirm the target license plate is on-site and get its parking lot:
openydt parking get-park-on-site-car --park-code-list <park> - Real-time fee query — query fee by license plate + parking lot:
From the response, take the fields needed for subsequent payment:openydt trade get-park-fee --car-code <车牌> --park-code <park>data.otherAttr.chargeBillNumber→ bill number (pass back during payment--bodyofotherAtrr);data.shouldPayValue→ amount due (= actual paidactPayCharge+ coupon deductioncouponValue);- in the response
parkingCode、chargeDate→ for the next payment step--parking-code、--charge-date。
After fee query within 10 minutespayment must be completed, otherwise the token/bill may become invalid. 💰 Amount unit is "yuan"(decimal, e.g.
shouldPayValue: 1means 1.00 yuan, not 1 cent).shouldPayValue/paidValue/actPayCharge/couponValueare all in yuan.Don't treat 1 as 1 cent and pay 0.01, otherwise you only paid one cent and still owe 0.99. - Payment passback(write, requires
--yes) — pass back the token, bill, and amount due/actual paid obtained in step 3:openydt trade pay-park-fee --yes \ --parking-code <来自查费 parkingCode> \ --charge-date <来自查费 chargeDate> \ --pay-date <yyyyMMddHHmmss> \ --act-pay-charge <实付,<= shouldPayValue> \ --pay-origin 9 --payment-mode 4 \ --bill-code <第三方唯一订单号> \ --body '{"otherAtrr":{"chargeBillNumber":"<来自查费 otherAttr.chargeBillNumber>"}}'Note: when paying with coupons,
couponListin thecouponValue+actPayChargemust equal the fee query returnshouldPayValue;billCodemust be globally unique; when retrying payment, keep it consistent with the first attempt for deduplication and reconciliation. - Query order records — after payment, verify the order and details:
openydt parking get-pay-bill ... openydt parking get-park-detail ...
🔑 Payment idempotency:
billCodeglobally unique,retries must reuse the first billCode(never generate a new one); on resend, receiving907 账单已同步= idempotent hit, the first attempt already succeeded, useopenydt parking get-pay-billto verify instead of paying again.payback-batcheachthirdBillCodelikewise. See [[openydt-shared]]'s../openydt-shared/references/write-idempotency.md。
Error self-healing quick reference (fee query/payment)
| Symptom | Meaning | Recovery action |
|---|---|---|
resultCode=912 查费已超时 |
Fee query bill expires in 10 minutes | Re- get-park-fee to get a new bill, then pay |
Payment returns 907 账单已同步 |
idempotent hit, the first attempt already succeeded | Do not resend;openydt parking get-pay-bill verify the amount matches |
| Connection timeout/gateway 404 (uncertain whether the write succeeded after being sent) | may have succeeded | Use the same billCode to resend (platform deduplication), or first check get-pay-bill |
resultCode=909 / status=7 |
payment fields/required-field errors | Use openydt schema payParkFee to verify required fields; field values come from the fee query response |
For common codes/exit codes/retries, see [[openydt-shared]]; for amount unit = yuan, see its
../openydt-shared/references/result-reading-sop.md。
Example
The following parkCode/times are documented test values (test environment only); copying the catalog's historical sampleBody will hit an invalid parking lot/expired time. For write operations, first
--dry-runpreview, and after confirmation--yes。
Real-time fee query (query parking fees by license plate at a specified parking lot):
openydt trade get-park-fee --park-code 1ZS7H5PQH9 --car-code 粤EJW962
Estimate future parking fees by time period (small car, parked for 10 hours):
openydt trade common-get-park-fee \
--park-code 1ZS7H5PQH9 --car-type 1 \
--start-time "2026-06-01 00:00:00" --end-time "2026-06-01 10:00:00"
Payment callback (write operation; amount/bill fields come from the fee query response).First --dry-run preview the signed request, and after confirming it is correct, replace --dry-run with --yes to actually send;--bill-code must be globally unique (use your order number; keep retries consistent with the first attempt for deduplication):
openydt trade pay-park-fee --dry-run \
--parking-code <来自查费响应 parkingCode> \
--charge-date <来自查费响应 chargeDate> --pay-date <yyyyMMddHHmmss> \
--act-pay-charge 3.2 \
--pay-origin 9 --pay-origin-remark 微信 \
--payment-mode 4 --payment-mode-remark 微信支付 \
--bill-code <你的唯一订单号>