SuperAPI AI Directory

openydt-billing

General & other

View repository

Updated 10-16 01:33

About this skill

openydt-billing — Parking payment transaction domain (trade)

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-park or set-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 --yes confirmation, 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 fallback openydt 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:

  1. 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 ...
    
  2. 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>
    
  3. Real-time fee query — query fee by license plate + parking lot:
    openydt trade get-park-fee --car-code <车牌> --park-code <park>
    
    From the response, take the fields needed for subsequent payment:
    • data.otherAttr.chargeBillNumber → bill number (pass back during payment --body of otherAtrr);
    • data.shouldPayValue → amount due (= actual paid actPayCharge + coupon deduction couponValue);
    • 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: 1 means 1.00 yuan, not 1 cent).shouldPayValue / paidValue / actPayCharge / couponValue are 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.

  4. 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, couponList in the couponValue + actPayCharge must equal the fee query return shouldPayValue;billCode must be globally unique; when retrying payment, keep it consistent with the first attempt for deduplication and reconciliation.

  5. Query order records — after payment, verify the order and details:
    openydt parking get-pay-bill ...
    openydt parking get-park-detail ...
    

🔑 Payment idempotency:billCode globally unique,retries must reuse the first billCode(never generate a new one); on resend, receiving 907 账单已同步 = idempotent hit, the first attempt already succeeded, use openydt parking get-pay-bill to verify instead of paying again.payback-batch each thirdBillCode likewise. 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-run preview, 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 <你的唯一订单号>