@moksa/plugin-ecpay 0.0.0-stage → 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,1597 @@
1
+ {
2
+ "id": "moksa-ecpay",
3
+ "version": "0.1.1",
4
+ "declaredAccess": {
5
+ "network": {
6
+ "request": {
7
+ "allowedHosts": [
8
+ "payment-stage.ecpay.com.tw",
9
+ "payment.ecpay.com.tw",
10
+ "ecpayment-stage.ecpay.com.tw",
11
+ "ecpayment.ecpay.com.tw",
12
+ "ecpg-stage.ecpay.com.tw",
13
+ "ecpg.ecpay.com.tw",
14
+ "logistics-stage.ecpay.com.tw",
15
+ "logistics.ecpay.com.tw",
16
+ "einvoice-stage.ecpay.com.tw",
17
+ "einvoice.ecpay.com.tw"
18
+ ]
19
+ }
20
+ }
21
+ },
22
+ "capabilities": [
23
+ "network:request"
24
+ ],
25
+ "allowedHosts": [
26
+ "payment-stage.ecpay.com.tw",
27
+ "payment.ecpay.com.tw",
28
+ "ecpayment-stage.ecpay.com.tw",
29
+ "ecpayment.ecpay.com.tw",
30
+ "ecpg-stage.ecpay.com.tw",
31
+ "ecpg.ecpay.com.tw",
32
+ "logistics-stage.ecpay.com.tw",
33
+ "logistics.ecpay.com.tw",
34
+ "einvoice-stage.ecpay.com.tw",
35
+ "einvoice.ecpay.com.tw"
36
+ ],
37
+ "storage": {
38
+ "trades": {
39
+ "indexes": [
40
+ "orderNumber",
41
+ "status",
42
+ "createdAt",
43
+ [
44
+ "orderNumber",
45
+ "createdAt"
46
+ ]
47
+ ]
48
+ },
49
+ "events": {
50
+ "indexes": [
51
+ "createdAt"
52
+ ]
53
+ },
54
+ "orders": {
55
+ "indexes": [
56
+ "updatedAt",
57
+ "invoiceDueAt"
58
+ ]
59
+ },
60
+ "shipments": {
61
+ "indexes": [
62
+ "orderNumber",
63
+ "status",
64
+ "updatedAt",
65
+ [
66
+ "open",
67
+ "updatedAt"
68
+ ],
69
+ [
70
+ "orderNumber",
71
+ "updatedAt"
72
+ ]
73
+ ]
74
+ },
75
+ "invoices": {
76
+ "indexes": [
77
+ "status",
78
+ "updatedAt"
79
+ ]
80
+ },
81
+ "reports": {
82
+ "indexes": [
83
+ "status",
84
+ "nextAt",
85
+ [
86
+ "status",
87
+ "nextAt"
88
+ ]
89
+ ]
90
+ },
91
+ "mandates": {
92
+ "indexes": [
93
+ "status",
94
+ "cardRef",
95
+ "orderNumber",
96
+ "updatedAt"
97
+ ]
98
+ },
99
+ "charges": {
100
+ "indexes": [
101
+ "state",
102
+ "mandateId",
103
+ "orderNumber",
104
+ "updatedAt",
105
+ [
106
+ "state",
107
+ "updatedAt"
108
+ ]
109
+ ]
110
+ },
111
+ "members": {
112
+ "indexes": [
113
+ "createdAt"
114
+ ]
115
+ }
116
+ },
117
+ "hooks": [
118
+ "plugin:activate",
119
+ "cron"
120
+ ],
121
+ "routes": [
122
+ {
123
+ "name": "migrate/import",
124
+ "methods": [
125
+ "POST"
126
+ ],
127
+ "permission": "plugins:manage"
128
+ },
129
+ {
130
+ "name": "migrate/kv",
131
+ "methods": [
132
+ "POST"
133
+ ],
134
+ "permission": "plugins:manage"
135
+ },
136
+ {
137
+ "name": "migrate/stats",
138
+ "methods": [
139
+ "GET",
140
+ "POST"
141
+ ],
142
+ "permission": "plugins:manage"
143
+ },
144
+ {
145
+ "name": "bus/methods",
146
+ "methods": [
147
+ "POST"
148
+ ],
149
+ "request": {
150
+ "body": "text",
151
+ "maxBytes": 262144,
152
+ "headers": [
153
+ "x-moksa-bus-ts",
154
+ "x-moksa-bus-id",
155
+ "x-moksa-bus-sig"
156
+ ]
157
+ },
158
+ "public": true
159
+ },
160
+ {
161
+ "name": "bus/checkout",
162
+ "methods": [
163
+ "POST"
164
+ ],
165
+ "request": {
166
+ "body": "text",
167
+ "maxBytes": 262144,
168
+ "headers": [
169
+ "x-moksa-bus-ts",
170
+ "x-moksa-bus-id",
171
+ "x-moksa-bus-sig"
172
+ ]
173
+ },
174
+ "public": true
175
+ },
176
+ {
177
+ "name": "bus/bind/step",
178
+ "methods": [
179
+ "POST"
180
+ ],
181
+ "request": {
182
+ "body": "text",
183
+ "maxBytes": 262144,
184
+ "headers": [
185
+ "x-moksa-bus-ts",
186
+ "x-moksa-bus-id",
187
+ "x-moksa-bus-sig"
188
+ ]
189
+ },
190
+ "public": true
191
+ },
192
+ {
193
+ "name": "bus/gw/bind-pay",
194
+ "methods": [
195
+ "POST"
196
+ ],
197
+ "request": {
198
+ "body": "text",
199
+ "maxBytes": 262144,
200
+ "headers": [
201
+ "x-moksa-bus-ts",
202
+ "x-moksa-bus-id",
203
+ "x-moksa-bus-sig"
204
+ ]
205
+ },
206
+ "public": true
207
+ },
208
+ {
209
+ "name": "bus/gw/bind-result",
210
+ "methods": [
211
+ "POST"
212
+ ],
213
+ "request": {
214
+ "body": "text",
215
+ "maxBytes": 262144,
216
+ "headers": [
217
+ "x-moksa-bus-ts",
218
+ "x-moksa-bus-id",
219
+ "x-moksa-bus-sig"
220
+ ]
221
+ },
222
+ "public": true
223
+ },
224
+ {
225
+ "name": "bus/gw/bind-notify",
226
+ "methods": [
227
+ "POST"
228
+ ],
229
+ "request": {
230
+ "body": "text",
231
+ "maxBytes": 262144,
232
+ "headers": [
233
+ "x-moksa-bus-ts",
234
+ "x-moksa-bus-id",
235
+ "x-moksa-bus-sig"
236
+ ]
237
+ },
238
+ "public": true
239
+ },
240
+ {
241
+ "name": "bus/recurring/charge",
242
+ "methods": [
243
+ "POST"
244
+ ],
245
+ "request": {
246
+ "body": "text",
247
+ "maxBytes": 262144,
248
+ "headers": [
249
+ "x-moksa-bus-ts",
250
+ "x-moksa-bus-id",
251
+ "x-moksa-bus-sig"
252
+ ]
253
+ },
254
+ "public": true
255
+ },
256
+ {
257
+ "name": "bus/recurring/action",
258
+ "methods": [
259
+ "POST"
260
+ ],
261
+ "request": {
262
+ "body": "text",
263
+ "maxBytes": 262144,
264
+ "headers": [
265
+ "x-moksa-bus-ts",
266
+ "x-moksa-bus-id",
267
+ "x-moksa-bus-sig"
268
+ ]
269
+ },
270
+ "public": true
271
+ },
272
+ {
273
+ "name": "bus/notify",
274
+ "methods": [
275
+ "POST"
276
+ ],
277
+ "request": {
278
+ "body": "text",
279
+ "maxBytes": 262144,
280
+ "headers": [
281
+ "x-moksa-bus-ts",
282
+ "x-moksa-bus-id",
283
+ "x-moksa-bus-sig"
284
+ ]
285
+ },
286
+ "public": true
287
+ },
288
+ {
289
+ "name": "bus/gw/return",
290
+ "methods": [
291
+ "POST"
292
+ ],
293
+ "request": {
294
+ "body": "text",
295
+ "maxBytes": 262144,
296
+ "headers": [
297
+ "x-moksa-bus-ts",
298
+ "x-moksa-bus-id",
299
+ "x-moksa-bus-sig"
300
+ ]
301
+ },
302
+ "public": true
303
+ },
304
+ {
305
+ "name": "bus/events",
306
+ "methods": [
307
+ "POST"
308
+ ],
309
+ "request": {
310
+ "body": "text",
311
+ "maxBytes": 262144,
312
+ "headers": [
313
+ "x-moksa-bus-ts",
314
+ "x-moksa-bus-id",
315
+ "x-moksa-bus-sig"
316
+ ]
317
+ },
318
+ "public": true
319
+ },
320
+ {
321
+ "name": "bus/reports/due",
322
+ "methods": [
323
+ "POST"
324
+ ],
325
+ "request": {
326
+ "body": "text",
327
+ "maxBytes": 262144,
328
+ "headers": [
329
+ "x-moksa-bus-ts",
330
+ "x-moksa-bus-id",
331
+ "x-moksa-bus-sig"
332
+ ]
333
+ },
334
+ "public": true
335
+ },
336
+ {
337
+ "name": "bus/reports/ack",
338
+ "methods": [
339
+ "POST"
340
+ ],
341
+ "request": {
342
+ "body": "text",
343
+ "maxBytes": 262144,
344
+ "headers": [
345
+ "x-moksa-bus-ts",
346
+ "x-moksa-bus-id",
347
+ "x-moksa-bus-sig"
348
+ ]
349
+ },
350
+ "public": true
351
+ },
352
+ {
353
+ "name": "bus/shipping/methods",
354
+ "methods": [
355
+ "POST"
356
+ ],
357
+ "request": {
358
+ "body": "text",
359
+ "maxBytes": 262144,
360
+ "headers": [
361
+ "x-moksa-bus-ts",
362
+ "x-moksa-bus-id",
363
+ "x-moksa-bus-sig"
364
+ ]
365
+ },
366
+ "public": true
367
+ },
368
+ {
369
+ "name": "bus/invoice/options",
370
+ "methods": [
371
+ "POST"
372
+ ],
373
+ "request": {
374
+ "body": "text",
375
+ "maxBytes": 262144,
376
+ "headers": [
377
+ "x-moksa-bus-ts",
378
+ "x-moksa-bus-id",
379
+ "x-moksa-bus-sig"
380
+ ]
381
+ },
382
+ "public": true
383
+ },
384
+ {
385
+ "name": "bus/invoice/verify",
386
+ "methods": [
387
+ "POST"
388
+ ],
389
+ "request": {
390
+ "body": "text",
391
+ "maxBytes": 262144,
392
+ "headers": [
393
+ "x-moksa-bus-ts",
394
+ "x-moksa-bus-id",
395
+ "x-moksa-bus-sig"
396
+ ]
397
+ },
398
+ "public": true
399
+ },
400
+ {
401
+ "name": "bus/gw/logistics-map",
402
+ "methods": [
403
+ "POST"
404
+ ],
405
+ "request": {
406
+ "body": "text",
407
+ "maxBytes": 262144,
408
+ "headers": [
409
+ "x-moksa-bus-ts",
410
+ "x-moksa-bus-id",
411
+ "x-moksa-bus-sig"
412
+ ]
413
+ },
414
+ "public": true
415
+ },
416
+ {
417
+ "name": "bus/gw/logistics-map-reply",
418
+ "methods": [
419
+ "POST"
420
+ ],
421
+ "request": {
422
+ "body": "text",
423
+ "maxBytes": 262144,
424
+ "headers": [
425
+ "x-moksa-bus-ts",
426
+ "x-moksa-bus-id",
427
+ "x-moksa-bus-sig"
428
+ ]
429
+ },
430
+ "public": true
431
+ },
432
+ {
433
+ "name": "bus/gw/logistics-notify",
434
+ "methods": [
435
+ "POST"
436
+ ],
437
+ "request": {
438
+ "body": "text",
439
+ "maxBytes": 262144,
440
+ "headers": [
441
+ "x-moksa-bus-ts",
442
+ "x-moksa-bus-id",
443
+ "x-moksa-bus-sig"
444
+ ]
445
+ },
446
+ "public": true
447
+ },
448
+ {
449
+ "name": "bus/refund",
450
+ "methods": [
451
+ "POST"
452
+ ],
453
+ "request": {
454
+ "body": "text",
455
+ "maxBytes": 262144,
456
+ "headers": [
457
+ "x-moksa-bus-ts",
458
+ "x-moksa-bus-id",
459
+ "x-moksa-bus-sig"
460
+ ]
461
+ },
462
+ "public": true
463
+ },
464
+ {
465
+ "name": "recurring/list",
466
+ "methods": [
467
+ "GET",
468
+ "POST"
469
+ ],
470
+ "permission": "plugins:manage"
471
+ },
472
+ {
473
+ "name": "trades/list",
474
+ "methods": [
475
+ "GET",
476
+ "POST"
477
+ ],
478
+ "permission": "plugins:manage"
479
+ },
480
+ {
481
+ "name": "trades/query",
482
+ "methods": [
483
+ "GET",
484
+ "POST"
485
+ ],
486
+ "permission": "plugins:manage"
487
+ },
488
+ {
489
+ "name": "trades/refund",
490
+ "methods": [
491
+ "POST"
492
+ ],
493
+ "permission": "plugins:manage"
494
+ },
495
+ {
496
+ "name": "trades/capture",
497
+ "methods": [
498
+ "POST"
499
+ ],
500
+ "permission": "plugins:manage"
501
+ },
502
+ {
503
+ "name": "trades/card-status",
504
+ "methods": [
505
+ "GET",
506
+ "POST"
507
+ ],
508
+ "permission": "plugins:manage"
509
+ },
510
+ {
511
+ "name": "shipments/create",
512
+ "methods": [
513
+ "POST"
514
+ ],
515
+ "permission": "plugins:manage"
516
+ },
517
+ {
518
+ "name": "shipments/list",
519
+ "methods": [
520
+ "GET",
521
+ "POST"
522
+ ],
523
+ "permission": "plugins:manage"
524
+ },
525
+ {
526
+ "name": "shipments/sync",
527
+ "methods": [
528
+ "GET",
529
+ "POST"
530
+ ],
531
+ "permission": "plugins:manage"
532
+ },
533
+ {
534
+ "name": "shipments/print",
535
+ "methods": [
536
+ "GET",
537
+ "POST"
538
+ ],
539
+ "permission": "plugins:manage"
540
+ },
541
+ {
542
+ "name": "shipments/sync-all",
543
+ "methods": [
544
+ "POST"
545
+ ],
546
+ "permission": "plugins:manage"
547
+ },
548
+ {
549
+ "name": "shipments/void",
550
+ "methods": [
551
+ "POST"
552
+ ],
553
+ "permission": "plugins:manage"
554
+ },
555
+ {
556
+ "name": "shipments/print-batch",
557
+ "methods": [
558
+ "GET",
559
+ "POST"
560
+ ],
561
+ "permission": "plugins:manage"
562
+ },
563
+ {
564
+ "name": "invoices/issue",
565
+ "methods": [
566
+ "POST"
567
+ ],
568
+ "permission": "plugins:manage"
569
+ },
570
+ {
571
+ "name": "invoices/get",
572
+ "methods": [
573
+ "GET",
574
+ "POST"
575
+ ],
576
+ "permission": "plugins:manage"
577
+ },
578
+ {
579
+ "name": "invoices/void",
580
+ "methods": [
581
+ "POST"
582
+ ],
583
+ "permission": "plugins:manage"
584
+ },
585
+ {
586
+ "name": "invoices/allowance",
587
+ "methods": [
588
+ "POST"
589
+ ],
590
+ "permission": "plugins:manage"
591
+ },
592
+ {
593
+ "name": "invoices/due",
594
+ "methods": [
595
+ "POST"
596
+ ],
597
+ "permission": "plugins:manage"
598
+ },
599
+ {
600
+ "name": "invoices/query",
601
+ "methods": [
602
+ "GET",
603
+ "POST"
604
+ ],
605
+ "permission": "plugins:manage"
606
+ },
607
+ {
608
+ "name": "admin",
609
+ "permission": "plugins:manage"
610
+ }
611
+ ],
612
+ "mcp": {
613
+ "tools": [
614
+ {
615
+ "name": "list_recurring_charges",
616
+ "description": "Subscription renewal charges made with ECPay saved cards (站內付 2.0 綁卡): state paid / failed / declined / uncertain, ECPay's code and message, the MerchantTradeNo, plus the saved cards (brand, last four digits, expiry; never the card token). Optional order number or state filter.",
617
+ "route": "recurring/list",
618
+ "permission": "plugins:manage",
619
+ "destructive": false,
620
+ "inputSchema": {
621
+ "$schema": "http://json-schema.org/draft-07/schema#",
622
+ "type": "object",
623
+ "properties": {
624
+ "orderNumber": {
625
+ "type": "string",
626
+ "minLength": 1,
627
+ "maxLength": 18,
628
+ "pattern": "^[A-Z0-9]+$"
629
+ },
630
+ "state": {
631
+ "enum": [
632
+ "calling",
633
+ "paid",
634
+ "failed",
635
+ "declined",
636
+ "uncertain"
637
+ ]
638
+ },
639
+ "limit": {
640
+ "type": "integer",
641
+ "minimum": 1,
642
+ "maximum": 100,
643
+ "default": 20
644
+ }
645
+ },
646
+ "additionalProperties": true
647
+ }
648
+ },
649
+ {
650
+ "name": "list_trades",
651
+ "description": "List ECPay trades (one per payment attempt), newest first, optionally for one order number. Status: created, awaiting (ATM/CVS code issued), paid, failed.",
652
+ "route": "trades/list",
653
+ "permission": "plugins:manage",
654
+ "destructive": false,
655
+ "inputSchema": {
656
+ "$schema": "http://json-schema.org/draft-07/schema#",
657
+ "type": "object",
658
+ "properties": {
659
+ "orderNumber": {
660
+ "type": "string",
661
+ "minLength": 1,
662
+ "maxLength": 18,
663
+ "pattern": "^[A-Z0-9]+$"
664
+ },
665
+ "limit": {
666
+ "type": "integer",
667
+ "minimum": 1,
668
+ "maximum": 100,
669
+ "default": 20
670
+ }
671
+ },
672
+ "additionalProperties": true
673
+ }
674
+ },
675
+ {
676
+ "name": "query_trade",
677
+ "description": "Ask ECPay for the current status of a trade by MerchantTradeNo (TradeStatus 1 = paid, 0 = not paid).",
678
+ "route": "trades/query",
679
+ "permission": "plugins:manage",
680
+ "destructive": false,
681
+ "inputSchema": {
682
+ "$schema": "http://json-schema.org/draft-07/schema#",
683
+ "type": "object",
684
+ "properties": {
685
+ "merchantTradeNo": {
686
+ "type": "string",
687
+ "minLength": 1,
688
+ "maxLength": 20,
689
+ "pattern": "^[A-Za-z0-9]+$"
690
+ }
691
+ },
692
+ "additionalProperties": true,
693
+ "required": [
694
+ "merchantTradeNo"
695
+ ]
696
+ }
697
+ },
698
+ {
699
+ "name": "card_status",
700
+ "description": "A paid ECPay card trade's authorization and capture status (Authorized, To be captured, Captured, Refunded, Cancelled) with the captured amount and history.",
701
+ "route": "trades/card-status",
702
+ "permission": "plugins:manage",
703
+ "destructive": false,
704
+ "inputSchema": {
705
+ "$schema": "http://json-schema.org/draft-07/schema#",
706
+ "type": "object",
707
+ "properties": {
708
+ "merchantTradeNo": {
709
+ "type": "string",
710
+ "minLength": 1,
711
+ "maxLength": 20,
712
+ "pattern": "^[A-Za-z0-9]+$"
713
+ }
714
+ },
715
+ "additionalProperties": true,
716
+ "required": [
717
+ "merchantTradeNo"
718
+ ]
719
+ }
720
+ },
721
+ {
722
+ "name": "capture_trade",
723
+ "description": "Capture (關帳) a paid ECPay card trade for its amount less refunds, when automatic capture is off.",
724
+ "route": "trades/capture",
725
+ "permission": "plugins:manage",
726
+ "destructive": true,
727
+ "inputSchema": {
728
+ "$schema": "http://json-schema.org/draft-07/schema#",
729
+ "type": "object",
730
+ "properties": {
731
+ "merchantTradeNo": {
732
+ "type": "string",
733
+ "minLength": 1,
734
+ "maxLength": 20,
735
+ "pattern": "^[A-Za-z0-9]+$"
736
+ }
737
+ },
738
+ "additionalProperties": true,
739
+ "required": [
740
+ "merchantTradeNo"
741
+ ]
742
+ }
743
+ },
744
+ {
745
+ "name": "list_shipments",
746
+ "description": "List 綠界物流 shipments, newest first, optionally for one order number (status, tracking number, provider fields).",
747
+ "route": "shipments/list",
748
+ "permission": "plugins:manage",
749
+ "destructive": false,
750
+ "inputSchema": {
751
+ "$schema": "http://json-schema.org/draft-07/schema#",
752
+ "type": "object",
753
+ "properties": {
754
+ "orderNumber": {
755
+ "type": "string",
756
+ "maxLength": 20
757
+ },
758
+ "limit": {
759
+ "type": "integer",
760
+ "minimum": 1,
761
+ "maximum": 100,
762
+ "default": 20
763
+ }
764
+ },
765
+ "additionalProperties": true
766
+ }
767
+ },
768
+ {
769
+ "name": "create_shipment",
770
+ "description": "Create the 綠界物流 shipment for a paid (or cash-on-delivery) order; an existing live shipment is returned instead.",
771
+ "route": "shipments/create",
772
+ "permission": "plugins:manage",
773
+ "destructive": true,
774
+ "inputSchema": {
775
+ "$schema": "http://json-schema.org/draft-07/schema#",
776
+ "type": "object",
777
+ "properties": {
778
+ "orderNumber": {
779
+ "type": "string",
780
+ "minLength": 1,
781
+ "maxLength": 20,
782
+ "pattern": "^[A-Z0-9]+$"
783
+ }
784
+ },
785
+ "additionalProperties": true,
786
+ "required": [
787
+ "orderNumber"
788
+ ]
789
+ }
790
+ },
791
+ {
792
+ "name": "sync_all_shipments",
793
+ "description": "Ask 綠界物流 for the status of every open shipment now (up to 100, oldest first) and apply the changes.",
794
+ "route": "shipments/sync-all",
795
+ "permission": "plugins:manage",
796
+ "destructive": false,
797
+ "inputSchema": {
798
+ "$schema": "http://json-schema.org/draft-07/schema#",
799
+ "type": "object",
800
+ "properties": {},
801
+ "additionalProperties": true
802
+ }
803
+ },
804
+ {
805
+ "name": "sync_shipment",
806
+ "description": "Ask 綠界物流 for a shipment's current status and apply it.",
807
+ "route": "shipments/sync",
808
+ "permission": "plugins:manage",
809
+ "destructive": false,
810
+ "inputSchema": {
811
+ "$schema": "http://json-schema.org/draft-07/schema#",
812
+ "type": "object",
813
+ "properties": {
814
+ "shipmentId": {
815
+ "type": "string",
816
+ "minLength": 1,
817
+ "maxLength": 64
818
+ }
819
+ },
820
+ "additionalProperties": true,
821
+ "required": [
822
+ "shipmentId"
823
+ ]
824
+ }
825
+ },
826
+ {
827
+ "name": "print_shipment_label",
828
+ "description": "The 綠界物流 shipping label: a signed form (action + params) to open in a browser, a URL, or label HTML.",
829
+ "route": "shipments/print",
830
+ "permission": "plugins:manage",
831
+ "destructive": false,
832
+ "inputSchema": {
833
+ "$schema": "http://json-schema.org/draft-07/schema#",
834
+ "type": "object",
835
+ "properties": {
836
+ "shipmentId": {
837
+ "type": "string",
838
+ "minLength": 1,
839
+ "maxLength": 64
840
+ }
841
+ },
842
+ "additionalProperties": true,
843
+ "required": [
844
+ "shipmentId"
845
+ ]
846
+ }
847
+ },
848
+ {
849
+ "name": "void_shipment",
850
+ "description": "Void a 綠界物流 shipment that has not shipped yet (cancel at the carrier's back office when it has no cancel API).",
851
+ "route": "shipments/void",
852
+ "permission": "plugins:manage",
853
+ "destructive": true,
854
+ "inputSchema": {
855
+ "$schema": "http://json-schema.org/draft-07/schema#",
856
+ "type": "object",
857
+ "properties": {
858
+ "shipmentId": {
859
+ "type": "string",
860
+ "minLength": 1,
861
+ "maxLength": 64
862
+ }
863
+ },
864
+ "additionalProperties": true,
865
+ "required": [
866
+ "shipmentId"
867
+ ]
868
+ }
869
+ },
870
+ {
871
+ "name": "issue_invoice",
872
+ "description": "Issue the 綠界電子發票 invoice for a paid order (idempotent: an issued invoice is returned).",
873
+ "route": "invoices/issue",
874
+ "permission": "plugins:manage",
875
+ "destructive": false,
876
+ "inputSchema": {
877
+ "$schema": "http://json-schema.org/draft-07/schema#",
878
+ "type": "object",
879
+ "properties": {
880
+ "orderNumber": {
881
+ "type": "string",
882
+ "minLength": 1,
883
+ "maxLength": 20,
884
+ "pattern": "^[A-Z0-9]+$"
885
+ }
886
+ },
887
+ "additionalProperties": true,
888
+ "required": [
889
+ "orderNumber"
890
+ ]
891
+ }
892
+ },
893
+ {
894
+ "name": "get_invoice",
895
+ "description": "The 綠界電子發票 invoice of an order: number, date, random code, allowances.",
896
+ "route": "invoices/get",
897
+ "permission": "plugins:manage",
898
+ "destructive": false,
899
+ "inputSchema": {
900
+ "$schema": "http://json-schema.org/draft-07/schema#",
901
+ "type": "object",
902
+ "properties": {
903
+ "orderNumber": {
904
+ "type": "string",
905
+ "minLength": 1,
906
+ "maxLength": 20,
907
+ "pattern": "^[A-Z0-9]+$"
908
+ }
909
+ },
910
+ "additionalProperties": true,
911
+ "required": [
912
+ "orderNumber"
913
+ ]
914
+ }
915
+ },
916
+ {
917
+ "name": "query_invoice",
918
+ "description": "Ask 綠界電子發票 for the invoice as it recorded it.",
919
+ "route": "invoices/query",
920
+ "permission": "plugins:manage",
921
+ "destructive": false,
922
+ "inputSchema": {
923
+ "$schema": "http://json-schema.org/draft-07/schema#",
924
+ "type": "object",
925
+ "properties": {
926
+ "orderNumber": {
927
+ "type": "string",
928
+ "minLength": 1,
929
+ "maxLength": 20,
930
+ "pattern": "^[A-Z0-9]+$"
931
+ }
932
+ },
933
+ "additionalProperties": true,
934
+ "required": [
935
+ "orderNumber"
936
+ ]
937
+ }
938
+ },
939
+ {
940
+ "name": "void_invoice",
941
+ "description": "Void an order's 綠界電子發票 invoice (its allowances are voided first).",
942
+ "route": "invoices/void",
943
+ "permission": "plugins:manage",
944
+ "destructive": true,
945
+ "inputSchema": {
946
+ "$schema": "http://json-schema.org/draft-07/schema#",
947
+ "type": "object",
948
+ "properties": {
949
+ "orderNumber": {
950
+ "type": "string",
951
+ "minLength": 1,
952
+ "maxLength": 20,
953
+ "pattern": "^[A-Z0-9]+$"
954
+ },
955
+ "reason": {
956
+ "type": "string",
957
+ "minLength": 1,
958
+ "maxLength": 50,
959
+ "default": "訂單取消"
960
+ }
961
+ },
962
+ "additionalProperties": true,
963
+ "required": [
964
+ "orderNumber"
965
+ ]
966
+ }
967
+ },
968
+ {
969
+ "name": "allowance_invoice",
970
+ "description": "Issue a 綠界電子發票 allowance (折讓, whole NT$) against an order's invoice.",
971
+ "route": "invoices/allowance",
972
+ "permission": "plugins:manage",
973
+ "destructive": true,
974
+ "inputSchema": {
975
+ "$schema": "http://json-schema.org/draft-07/schema#",
976
+ "type": "object",
977
+ "properties": {
978
+ "orderNumber": {
979
+ "type": "string",
980
+ "minLength": 1,
981
+ "maxLength": 20,
982
+ "pattern": "^[A-Z0-9]+$"
983
+ },
984
+ "amount": {
985
+ "type": "integer",
986
+ "minimum": 1,
987
+ "maximum": 99999999
988
+ },
989
+ "reason": {
990
+ "type": "string",
991
+ "minLength": 1,
992
+ "maxLength": 50,
993
+ "default": "折讓"
994
+ }
995
+ },
996
+ "additionalProperties": true,
997
+ "required": [
998
+ "orderNumber",
999
+ "amount"
1000
+ ]
1001
+ }
1002
+ },
1003
+ {
1004
+ "name": "print_shipment_labels",
1005
+ "description": "ECPay shipping labels for several shipments at once: one label page (HTML) per logistics subtype. mode A6 applies to 7-ELEVEN and post only; other subtypes print A4.",
1006
+ "route": "shipments/print-batch",
1007
+ "permission": "plugins:manage",
1008
+ "destructive": false,
1009
+ "inputSchema": {
1010
+ "$schema": "http://json-schema.org/draft-07/schema#",
1011
+ "type": "object",
1012
+ "properties": {
1013
+ "shipmentIds": {
1014
+ "type": "array",
1015
+ "items": {
1016
+ "type": "string",
1017
+ "minLength": 1,
1018
+ "maxLength": 64
1019
+ },
1020
+ "minItems": 1,
1021
+ "maxItems": 50
1022
+ },
1023
+ "mode": {
1024
+ "enum": [
1025
+ "A4",
1026
+ "A6"
1027
+ ]
1028
+ }
1029
+ },
1030
+ "additionalProperties": true,
1031
+ "required": [
1032
+ "shipmentIds"
1033
+ ]
1034
+ }
1035
+ },
1036
+ {
1037
+ "name": "refund_trade",
1038
+ "description": "Refund a paid ECPay credit-card trade (whole NT$). An uncaptured charge can only be released in full. ATM / CVS payments must be refunded by hand.",
1039
+ "route": "trades/refund",
1040
+ "permission": "plugins:manage",
1041
+ "destructive": true,
1042
+ "inputSchema": {
1043
+ "$schema": "http://json-schema.org/draft-07/schema#",
1044
+ "type": "object",
1045
+ "properties": {
1046
+ "merchantTradeNo": {
1047
+ "type": "string",
1048
+ "minLength": 1,
1049
+ "maxLength": 20,
1050
+ "pattern": "^[A-Za-z0-9]+$"
1051
+ },
1052
+ "amount": {
1053
+ "type": "integer",
1054
+ "minimum": 1,
1055
+ "maximum": 99999999
1056
+ }
1057
+ },
1058
+ "additionalProperties": true,
1059
+ "required": [
1060
+ "merchantTradeNo",
1061
+ "amount"
1062
+ ]
1063
+ }
1064
+ }
1065
+ ]
1066
+ },
1067
+ "admin": {
1068
+ "settingsSchema": {
1069
+ "environment": {
1070
+ "label": "環境",
1071
+ "type": "select",
1072
+ "options": [
1073
+ {
1074
+ "value": "stage",
1075
+ "label": "測試環境(stage)"
1076
+ },
1077
+ {
1078
+ "value": "production",
1079
+ "label": "正式環境"
1080
+ }
1081
+ ],
1082
+ "default": "stage"
1083
+ },
1084
+ "merchantId": {
1085
+ "label": "特店編號(MerchantID)",
1086
+ "description": "測試環境留空時使用綠界公開測試帳號 3002607。",
1087
+ "type": "string",
1088
+ "default": ""
1089
+ },
1090
+ "hashKey": {
1091
+ "label": "HashKey",
1092
+ "type": "secret"
1093
+ },
1094
+ "hashIv": {
1095
+ "label": "HashIV",
1096
+ "type": "secret"
1097
+ },
1098
+ "methodCredit": {
1099
+ "label": "信用卡",
1100
+ "type": "boolean",
1101
+ "default": true
1102
+ },
1103
+ "methodCredit3": {
1104
+ "label": "信用卡分 3 期(需向綠界申請)",
1105
+ "type": "boolean",
1106
+ "default": false
1107
+ },
1108
+ "methodCredit6": {
1109
+ "label": "信用卡分 6 期(需向綠界申請)",
1110
+ "type": "boolean",
1111
+ "default": false
1112
+ },
1113
+ "methodCredit12": {
1114
+ "label": "信用卡分 12 期(需向綠界申請)",
1115
+ "type": "boolean",
1116
+ "default": false
1117
+ },
1118
+ "methodCredit18": {
1119
+ "label": "信用卡分 18 期(需向綠界申請)",
1120
+ "type": "boolean",
1121
+ "default": false
1122
+ },
1123
+ "methodCredit24": {
1124
+ "label": "信用卡分 24 期(需向綠界申請)",
1125
+ "type": "boolean",
1126
+ "default": false
1127
+ },
1128
+ "methodCredit30N": {
1129
+ "label": "信用卡分 30 期(永豐,需向綠界申請)",
1130
+ "type": "boolean",
1131
+ "default": false
1132
+ },
1133
+ "credit30NMinAmount": {
1134
+ "label": "永豐 30 期最低交易金額",
1135
+ "description": "綠界廠商後台可查;訂單金額大於這個金額才提供 30 期。0 表示不提供。",
1136
+ "type": "number",
1137
+ "default": 0,
1138
+ "min": 0
1139
+ },
1140
+ "methodUnionPay": {
1141
+ "label": "銀聯卡(需向綠界申請)",
1142
+ "type": "boolean",
1143
+ "default": false
1144
+ },
1145
+ "creditRedeem": {
1146
+ "label": "信用卡紅利折抵(需向綠界申請)",
1147
+ "description": "一次付清的信用卡付款頁提供紅利折抵;分期與銀聯卡不適用。",
1148
+ "type": "boolean",
1149
+ "default": false
1150
+ },
1151
+ "methodATM": {
1152
+ "label": "ATM 轉帳",
1153
+ "type": "boolean",
1154
+ "default": false
1155
+ },
1156
+ "methodCVS": {
1157
+ "label": "超商代碼繳費",
1158
+ "type": "boolean",
1159
+ "default": false
1160
+ },
1161
+ "methodBARCODE": {
1162
+ "label": "超商條碼繳費",
1163
+ "type": "boolean",
1164
+ "default": false
1165
+ },
1166
+ "methodWebATM": {
1167
+ "label": "網路 ATM(手機版不支援)",
1168
+ "type": "boolean",
1169
+ "default": false
1170
+ },
1171
+ "methodApplePay": {
1172
+ "label": "Apple Pay",
1173
+ "type": "boolean",
1174
+ "default": false
1175
+ },
1176
+ "methodTWQR": {
1177
+ "label": "TWQR 行動支付(需申請,6–49,999 元)",
1178
+ "type": "boolean",
1179
+ "default": false
1180
+ },
1181
+ "methodBNPL": {
1182
+ "label": "無卡分期:裕富/中租(需申請,50–500,000 元)",
1183
+ "type": "boolean",
1184
+ "default": false
1185
+ },
1186
+ "methodWeiXin": {
1187
+ "label": "微信支付(需申請,6–500,000 元)",
1188
+ "type": "boolean",
1189
+ "default": false
1190
+ },
1191
+ "methodJkopay": {
1192
+ "label": "街口支付(需申請)",
1193
+ "type": "boolean",
1194
+ "default": false
1195
+ },
1196
+ "methodiPASS": {
1197
+ "label": "一卡通 iPASS MONEY(需申請)",
1198
+ "type": "boolean",
1199
+ "default": false
1200
+ },
1201
+ "methodALL": {
1202
+ "label": "綠界付款頁自選",
1203
+ "type": "boolean",
1204
+ "default": false
1205
+ },
1206
+ "methodCreditBind": {
1207
+ "label": "信用卡綁定:定期定額自動扣款(站內付 2.0,需向綠界申請綁卡)",
1208
+ "description": "只在訂閱商品結帳時出現。首期刷卡同時綁定卡片,之後每期由網站自動扣款;請在綠界廠商後台開啟每日自動關帳。測試環境用綠界公開測試帳號。",
1209
+ "type": "boolean",
1210
+ "default": false
1211
+ },
1212
+ "atmExpireDays": {
1213
+ "label": "ATM 繳費期限(天)",
1214
+ "type": "number",
1215
+ "default": 3,
1216
+ "min": 1,
1217
+ "max": 60
1218
+ },
1219
+ "cvsExpireDays": {
1220
+ "label": "超商代碼繳費期限(天,最多 30)",
1221
+ "type": "number",
1222
+ "default": 7,
1223
+ "min": 1,
1224
+ "max": 30
1225
+ },
1226
+ "barcodeExpireDays": {
1227
+ "label": "超商條碼繳費期限(天,最多 30)",
1228
+ "type": "number",
1229
+ "default": 7,
1230
+ "min": 1,
1231
+ "max": 30
1232
+ },
1233
+ "orderPrefix": {
1234
+ "label": "訂單編號前綴(最多 5 個英數字)",
1235
+ "description": "多個商店共用同一個綠界帳號時,用前綴區分訂單編號。",
1236
+ "type": "string",
1237
+ "default": ""
1238
+ },
1239
+ "itemName": {
1240
+ "label": "付款頁顯示的商品名稱",
1241
+ "description": "留空時列出訂單的商品;填寫固定文字(例如「網路商品」)時每筆訂單都顯示這段文字。",
1242
+ "type": "string",
1243
+ "default": ""
1244
+ },
1245
+ "siteUrl": {
1246
+ "label": "網站網址",
1247
+ "description": "例:https://shop.example.com。物流狀態回呼使用;留空時沿用網站最近一次轉來的網址。",
1248
+ "type": "string",
1249
+ "default": ""
1250
+ },
1251
+ "logisticsEnabled": {
1252
+ "label": "啟用綠界物流",
1253
+ "type": "boolean",
1254
+ "default": false
1255
+ },
1256
+ "logisticsEnvironment": {
1257
+ "label": "物流環境",
1258
+ "type": "select",
1259
+ "options": [
1260
+ {
1261
+ "value": "stage",
1262
+ "label": "測試環境(stage)"
1263
+ },
1264
+ {
1265
+ "value": "production",
1266
+ "label": "正式環境"
1267
+ }
1268
+ ],
1269
+ "default": "stage"
1270
+ },
1271
+ "logisticsContract": {
1272
+ "label": "超商合約類型",
1273
+ "type": "select",
1274
+ "options": [
1275
+ {
1276
+ "value": "C2C",
1277
+ "label": "C2C 店到店"
1278
+ },
1279
+ {
1280
+ "value": "B2C",
1281
+ "label": "B2C 大宗寄倉"
1282
+ }
1283
+ ],
1284
+ "default": "C2C"
1285
+ },
1286
+ "logisticsC2cMerchantId": {
1287
+ "label": "C2C 物流特店編號",
1288
+ "description": "店到店(交貨便)用。測試環境未填時使用綠界公開測試帳號 2000933。",
1289
+ "type": "string",
1290
+ "default": ""
1291
+ },
1292
+ "logisticsC2cHashKey": {
1293
+ "label": "C2C 物流 HashKey",
1294
+ "type": "secret"
1295
+ },
1296
+ "logisticsC2cHashIv": {
1297
+ "label": "C2C 物流 HashIV",
1298
+ "type": "secret"
1299
+ },
1300
+ "logisticsB2cMerchantId": {
1301
+ "label": "B2C/宅配物流特店編號",
1302
+ "description": "大宗寄倉、黑貓、郵局用。測試環境未填時使用綠界公開測試帳號 2000132。",
1303
+ "type": "string",
1304
+ "default": ""
1305
+ },
1306
+ "logisticsB2cHashKey": {
1307
+ "label": "B2C/宅配物流 HashKey",
1308
+ "type": "secret"
1309
+ },
1310
+ "logisticsB2cHashIv": {
1311
+ "label": "B2C/宅配物流 HashIV",
1312
+ "type": "secret"
1313
+ },
1314
+ "cvsUnimart": {
1315
+ "label": "7-ELEVEN 取貨(B2C 可含冷凍,另拆一張冷凍單)",
1316
+ "type": "boolean",
1317
+ "default": true
1318
+ },
1319
+ "cvsFami": {
1320
+ "label": "全家取貨",
1321
+ "type": "boolean",
1322
+ "default": true
1323
+ },
1324
+ "cvsHilife": {
1325
+ "label": "萊爾富取貨",
1326
+ "type": "boolean",
1327
+ "default": false
1328
+ },
1329
+ "cvsOkmart": {
1330
+ "label": "OK 取貨",
1331
+ "type": "boolean",
1332
+ "default": false
1333
+ },
1334
+ "cvsUnimartFreeze": {
1335
+ "label": "7-ELEVEN 冷凍取貨(僅 B2C)",
1336
+ "type": "boolean",
1337
+ "default": false
1338
+ },
1339
+ "homeTcat": {
1340
+ "label": "黑貓宅急便(常溫/冷藏/冷凍,依溫層拆單)",
1341
+ "type": "boolean",
1342
+ "default": true
1343
+ },
1344
+ "homePost": {
1345
+ "label": "中華郵政(僅常溫)",
1346
+ "type": "boolean",
1347
+ "default": false
1348
+ },
1349
+ "cvsFee": {
1350
+ "label": "超商取貨運費",
1351
+ "type": "number",
1352
+ "default": 60,
1353
+ "min": 0
1354
+ },
1355
+ "homeFee": {
1356
+ "label": "宅配運費(常溫)",
1357
+ "type": "number",
1358
+ "default": 100,
1359
+ "min": 0
1360
+ },
1361
+ "coldFee": {
1362
+ "label": "低溫配送運費",
1363
+ "type": "number",
1364
+ "default": 160,
1365
+ "min": 0
1366
+ },
1367
+ "senderName": {
1368
+ "label": "寄件人姓名(最多 10 字)",
1369
+ "type": "string",
1370
+ "default": ""
1371
+ },
1372
+ "senderPhone": {
1373
+ "label": "寄件人電話",
1374
+ "type": "string",
1375
+ "default": ""
1376
+ },
1377
+ "senderCellphone": {
1378
+ "label": "寄件人手機",
1379
+ "type": "string",
1380
+ "default": ""
1381
+ },
1382
+ "senderZipcode": {
1383
+ "label": "寄件人郵遞區號(宅配用)",
1384
+ "description": "3、5 或 6 碼數字。留空時只採用寄件地址開頭的郵遞區號。",
1385
+ "type": "string",
1386
+ "default": ""
1387
+ },
1388
+ "senderAddress": {
1389
+ "label": "寄件地址(宅配用)",
1390
+ "description": "沒填郵遞區號時,地址開頭的 3–6 位數字當作郵遞區號。",
1391
+ "type": "string",
1392
+ "default": ""
1393
+ },
1394
+ "labelMode": {
1395
+ "label": "託運單格式",
1396
+ "description": "A6 只用於 7-ELEVEN(含冷凍)與中華郵政;全家、萊爾富、OK、黑貓沒有 A6,一律印 A4。",
1397
+ "type": "select",
1398
+ "options": [
1399
+ {
1400
+ "value": "1",
1401
+ "label": "A4"
1402
+ },
1403
+ {
1404
+ "value": "2",
1405
+ "label": "A6"
1406
+ }
1407
+ ],
1408
+ "default": "1"
1409
+ },
1410
+ "logisticsAutoShip": {
1411
+ "label": "付款後(貨到付款為下單後)自動建立物流單",
1412
+ "type": "boolean",
1413
+ "default": false
1414
+ },
1415
+ "invoiceEnabled": {
1416
+ "label": "啟用綠界電子發票",
1417
+ "type": "boolean",
1418
+ "default": false
1419
+ },
1420
+ "invoiceEnvironment": {
1421
+ "label": "發票環境",
1422
+ "type": "select",
1423
+ "options": [
1424
+ {
1425
+ "value": "stage",
1426
+ "label": "測試環境(stage)"
1427
+ },
1428
+ {
1429
+ "value": "production",
1430
+ "label": "正式環境"
1431
+ }
1432
+ ],
1433
+ "default": "stage"
1434
+ },
1435
+ "invoiceMerchantId": {
1436
+ "label": "發票特店編號",
1437
+ "description": "未填時使用綠界公開測試帳號 2000132(測試環境開立的發票不會上傳財政部)。",
1438
+ "type": "string",
1439
+ "default": ""
1440
+ },
1441
+ "invoiceHashKey": {
1442
+ "label": "發票 HashKey",
1443
+ "type": "secret"
1444
+ },
1445
+ "invoiceHashIv": {
1446
+ "label": "發票 HashIV",
1447
+ "type": "secret"
1448
+ },
1449
+ "invoicePrefix": {
1450
+ "label": "發票關聯編號前綴(最多 5 個英數字)",
1451
+ "description": "多個商店共用同一個綠界發票帳號時,用前綴區分。",
1452
+ "type": "string",
1453
+ "default": ""
1454
+ },
1455
+ "invoiceAuto": {
1456
+ "label": "自動開立",
1457
+ "type": "boolean",
1458
+ "default": true
1459
+ },
1460
+ "invoiceIssueWhen": {
1461
+ "label": "開立時機",
1462
+ "type": "select",
1463
+ "options": [
1464
+ {
1465
+ "value": "paid",
1466
+ "label": "付款完成(貨到付款於下單後)"
1467
+ },
1468
+ {
1469
+ "value": "completed",
1470
+ "label": "訂單完成(取貨完成)"
1471
+ }
1472
+ ],
1473
+ "default": "paid"
1474
+ },
1475
+ "invoiceDelayDays": {
1476
+ "label": "延後開立天數(0–30)",
1477
+ "type": "number",
1478
+ "default": 0,
1479
+ "min": 0,
1480
+ "max": 30
1481
+ },
1482
+ "invoiceAutoVoid": {
1483
+ "label": "訂單取消或全額退款時自動作廢",
1484
+ "type": "boolean",
1485
+ "default": false
1486
+ },
1487
+ "invoiceAutoAllowance": {
1488
+ "label": "部分退款時自動開立折讓",
1489
+ "type": "boolean",
1490
+ "default": false
1491
+ },
1492
+ "invoiceVerifyOnline": {
1493
+ "label": "結帳時向綠界驗證捐贈碼與手機條碼",
1494
+ "type": "boolean",
1495
+ "default": true
1496
+ },
1497
+ "invoiceAllowDonate": {
1498
+ "label": "結帳可選捐贈發票",
1499
+ "type": "boolean",
1500
+ "default": true
1501
+ },
1502
+ "invoiceAllowB2b": {
1503
+ "label": "結帳可打統編(三聯式)",
1504
+ "type": "boolean",
1505
+ "default": true
1506
+ },
1507
+ "invoiceChannelMember": {
1508
+ "label": "個人載具:綠界會員載具",
1509
+ "type": "boolean",
1510
+ "default": true
1511
+ },
1512
+ "invoiceChannelMobile": {
1513
+ "label": "個人載具:手機條碼",
1514
+ "type": "boolean",
1515
+ "default": true
1516
+ },
1517
+ "invoiceChannelCert": {
1518
+ "label": "個人載具:自然人憑證",
1519
+ "type": "boolean",
1520
+ "default": true
1521
+ },
1522
+ "invoiceChannelPaper": {
1523
+ "label": "個人載具:紙本發票",
1524
+ "description": "至少保留一種;全部取消時自動保留紙本。紙本發票請到綠界後台列印寄送。",
1525
+ "type": "boolean",
1526
+ "default": true
1527
+ },
1528
+ "invoiceDefaultCarrier": {
1529
+ "label": "預設的個人載具",
1530
+ "type": "select",
1531
+ "options": [
1532
+ {
1533
+ "value": "member",
1534
+ "label": "綠界會員載具"
1535
+ },
1536
+ {
1537
+ "value": "mobile",
1538
+ "label": "手機條碼"
1539
+ },
1540
+ {
1541
+ "value": "cert",
1542
+ "label": "自然人憑證"
1543
+ },
1544
+ {
1545
+ "value": "paper",
1546
+ "label": "紙本發票"
1547
+ }
1548
+ ],
1549
+ "default": "member"
1550
+ },
1551
+ "invoiceDonateOrgs": {
1552
+ "label": "捐贈單位(每行「名稱|愛心碼」)",
1553
+ "description": "例:伊甸社會福利基金會|25885。填寫後結帳改為下拉選單。",
1554
+ "type": "string",
1555
+ "default": ""
1556
+ },
1557
+ "vaultKey": {
1558
+ "label": "卡片憑證加密金鑰",
1559
+ "description": "第一次綁卡時自動產生,用來加密綠界綁卡代碼(BindCardID)。請勿修改或刪除,否則已綁定的卡片無法再扣款。",
1560
+ "type": "secret"
1561
+ },
1562
+ "busKey": {
1563
+ "label": "匯流排金鑰",
1564
+ "description": "由網站部署腳本寫入(scripts/provision-bus.mjs),請勿手動修改。",
1565
+ "type": "secret"
1566
+ }
1567
+ },
1568
+ "pages": [
1569
+ {
1570
+ "path": "/trades",
1571
+ "label": "綠界金流",
1572
+ "icon": "credit-card"
1573
+ },
1574
+ {
1575
+ "path": "/payment-labels",
1576
+ "label": "付款方式名稱與說明",
1577
+ "icon": "list"
1578
+ },
1579
+ {
1580
+ "path": "/shipments",
1581
+ "label": "綠界物流",
1582
+ "icon": "truck"
1583
+ },
1584
+ {
1585
+ "path": "/shipping-methods",
1586
+ "label": "物流方式設定",
1587
+ "icon": "list"
1588
+ },
1589
+ {
1590
+ "path": "/invoices",
1591
+ "label": "綠界電子發票",
1592
+ "icon": "receipt"
1593
+ }
1594
+ ],
1595
+ "widgets": []
1596
+ }
1597
+ }