1. ﻣﻘﺪﻣﻪ
ﺩﺭ ﺍﻳﻦ ﺳﻨﺪ ﺭﺍﻫﻨﻤﺎی ﺍﺳﺘﻔﺎﺩﻩ ﺍﺯ SDK ﺩﺍﺕ ﻧﺖ ﺟﻬﺖ ﺳﻬﻮﻟﺖ ﺩﺭ ﺍﺗﺼﺎﻝ ﺑﻪ ﺳﺎﻣﺎﻧﻪ ﻣﻮﺩﻳﺎﻥ ﺷﺮﺡ ﺩﺍﺩﻩ ﺷﺪﻩ ﺍﺳﺖ. API ﺳﺎﻣﺎﻧﻪ ﻣﻮﺩﻳﺎﻥ ﺍﺯ ﺩﻭ ﻻﻳﻪ ﺗﺸﻜﻴﻞ ﺷﺪﻩ ﺍﺳﺖ، ﻻﻳﻪ ﺍﻧﺘﻘﺎﻝ ﻭ ﻻﻳﻪ ﻣﻔﻬﻮﻡ. ﺩﺭ ﻻﻳﻪ ﺍﻧﺘﻘﺎﻝ ﻣﺴﺘﻘﻞ ﺍﺯ ﺍﻳﻨﻜﻪ ﭼﻪ ﻧﻮﻉ ﺩﺍﺩﻩ ﺍﻱ ﺗﺒﺎﺩﻝ ﻣﻴﺸﻮﺩ، ﻭﻇﺎﻳﻒ ﺭﻣﺰﻧﮕﺎﺭی ﻭ ﺍﻣﻀﺎﻱ ﺑﺴﺘﻪ ﺭﺍ ﺑﺮ ﻋﻬﺪﻩ ﺩﺍﺭﺩ. ﺩﺭ ﻻﻳﻪ ﻣﻔﻬﻮﻡ، ﺍﻧﻮﺍﻉ ﺑﺴﺘﻪ ﺗﻌﺮﻳﻒ ﺷﺪﻩ ﻭ ﺑﺴﺘﻪ ﻫﺎ ﺍﺯ ﻃﺮﻳﻖ ﻻﻳﻪ ﺍﻧﺘﻘﺎﻝ ﺑﻪ ﺳﺎﻣﺎﻧﻪ ﻣﻮﺩﻳﺎﻥ ﺍﺭﺳﺎﻝ ﻣﻴﺸﻮﺩ. ﻣﺘﻨﺎﻇﺮ ﺑﺎ ﺍﻳﻦ ﻻﻳﻪ ﻫﺎ ﺩﻭ Api ﻣﺴﺘﻘﻞ ﻃﺮﺍحی ﺷﺪﻩ ﺍﺳﺖ. ﺩﺭ ﺻﻮﺭﺗﻲ ﻛﻪ ﺑﺴﺘﻪ ﺟﺪﻳﺪﻱ ﺑﻪ ﺳﺎﻣﺎﻧﻪ ﺍﺿﺎﻓﻪ ﺷﻮﺩ، ﺗﻨﻬﺎ ﻛﺎفی ﺍﺳﺖ ﻛﻪ Api ﻻﻳﻪ ﻣﺤﺘﻮﺍ ﺑﺮﻭﺯﺭﺳﺎنی ﺷﻮﺩ ﻭ ﻳﺎ ﻣﻴﺘﻮﺍﻥ ﺑﺎ ﺍﺳﺘﻔﺎﺩﻩ ﺍﺯ Api ﻻﻳﻪ ﺍﻧﺘﻘﺎﻝ ﺑﺴﺘﻪ ﻫﺎی ﺟﺪﻳﺪ ﺭﺍ ﺍﺭﺳﺎﻝ ﻛﺮﺩ.
1.1. ﺷﺮﻭﻉ ﺳﺮﻳﻊ
ﺑﺮﺍی ﺷﺮﻭﻉ ﺳﺮﻳﻊ ﻣﻲ ﺗﻮﺍﻧﻴﺪ ﻛﺘﺎﺑﺨﺎﻧﻪﻫﺎی ﺍﺻﻠﻲ ﺭﺍ ﺩﺍﻧﻠﻮﺩ ﻭ ﺑﻪ ﭘﺮﻭﮊﻩ ﺍﺿﺎﻓﻪ ﻛﺮﺩﻩ ﻭ ﺑﺎ ﺍﺳﺘﻔﺎﺩﻩ ﺍﺯ ﻛﺪ ﺯﻳﺮ ﺻﻮﺭﺕ ﺣﺴﺎﺏ ﺭﺍ ﺍﺭﺳﺎﻝ ﻛﻨﻴﺪ. ﮔﺮﻓﺘﻦ ﺍﻃﻼﻋﺎﺕ ﺳﺮﻭﺭ ﺗﻨﻬﺎ ﻳﻚ ﺑﺎﺭ ﺑﺮﺍی ﺩﺭﻳﺎﻓﺖ ﻛﻠﻴﺪ ﻋﻤﻮمی ﺳﺎﺯﻣﺎﻥ ﻭ ﮔﺮﻓﺘﻦ ﺗﻮﻛﻦ ﺩﺳﺘﺮسی ﺩﺭ ﺻﻮﺭﺕ منقضی ﺷﺪﻥ ﺁﻥ ﺗﻜﺮﺍﺭ میﺷﻮﺩ.
TaxApiService.Instance.Init(CLIENT_ID, new SignatoryConfig(PRIVATE_KEY, null)); TaxApiService.Instance.TaxApis.GetServerInformation(); TaxApiService.Instance.TaxApis.RequestToken(); new InvoiceDto= InvoiceDto invoiceDto (); new List<InvoiceDto> = var invoices { invoiceDto }; TaxApiService.Instance.TaxApis.SendInvoices(invoices);
1.2. ﻻﻳﻪ ﺍﻧﺘﻘﺎﻝ
ﻭﻇﻴﻔﻪ ﺍﻳﻦ ﻻﻳﻪ ﺍﺭﺳﺎﻝ ﺑﺴﺘﻪ ﺑﻪ ﺻﻮﺭﺕ ﻫﻤﮕﺎﻡ ﻭ ﻳﺎ ﻧﺎﻫﻤﮕﺎﻡ ﺳﻤﺖ ﺳﺎﻣﺎﻧﻪ ﻣﻮﺩﻳﺎﻥ ﺍﺳﺖ. ﺭﻣﺰﻧﮕﺎﺭی ﻭ ﺍﻣﻀﺎی ﺑﺴﺘﻪ ﻫﺎ ﻧﻴﺰ ﺗﻮﺳﻂ ﺍﻳﻦ ﻻﻳﻪ ﺻﻮﺭﺕ می ﭘﺬﻳﺮﺩ.
1.2.1. ﭘﻴﻜﺮﺑﻨﺪی ﻻﻳﻪ ﺍﻧﺘﻘﺎﻝ
ﺑﺮﺍﻱ ﭘﻴﻜﺮﺑﻨﺪی ﺩﻭ ﺭﺍﻩ ﻭﺟﻮﺩ ﺩﺍﺭﺩ. ﺭﺍﻩ ﺍﻭﻝ ﺍﺳﺘﻔﺎﺩﻩ ﺍﺯ ﻛﻼﺱ TaxApiService ﺍﺳﺖ ﻛﻪ ﺩﺭ ﺍﺩﺍﻣﻪ ﺗﻮﺿﻴﺢ میﺩﻫﻴﻢ. ﺭﺍﻩ ﺩﻭﻡ ﺍﺳﺘﻔﺎﺩﻩ ﺍﺯ Dependency Injection ﺍﺳﺖ.
1.2.2. ﭘﻴﻜﺮﺑﻨﺪی ﺑﺎ ﺍﺳﺘﻔﺎﺩﻩ ﺍﺯ ﻛﻼﺱ TaxApiService
ﺑﺮﺍﻱ ﺍﻳﺠﺎﺩ ﻛﻼﺱ TaxApiService ﻧﻴﺎﺯ ﺍﺳﺖ ﻛﻪ ﺍﺑﺘﺪﺍ ﺁﻥ ﺭﺍ ﭘﻴﻜﺮﺑﻨﺪی ﻛﻨﻴﻢ. ﺍﻳﻦ ﻛﻼﺱ ﻳﻚ ﺗﺎﺑﻊ Init ﺑﺎ ۲ ﭘﻴﺎﺩﻩ ﺳﺎﺯی ﺩﺍﺭﺩ ﻛﻪ ﺗﻌﺪﺍﺩی ﻭﺭﻭﺩی میﮔﻴﺮﺩ. ﺍﻳﻦ ﻭﺭﻭﺩیﻫﺎ ﺑﻪ ﺻﻮﺭﺕ ﺯﻳﺮ ﻫﺴﺘﻨﺪ.
ﻭﺭﻭﺩﻱ |
ﻧﻮﻉ ﻭﺭﻭﺩﻱ |
ﻣﻘﺎﺩﻳﺮ ﭘﻴﺶ ﻓﺮﺽ |
ﺗﻮﺿﻴﺤﺎﺕ |
clientId |
String |
Null |
ﺷﻨﺎﺳﻪ ﻛﻼﻳﻨﺖ ﺩﺭﺧﻮﺍﺳﺖ ﺩﻫﻨﺪﻩ |
signatoryConfig |
SignatoryConfig |
Null |
ﻛﺎﻧﻔﻴﮓ ﻣﺮﺑﻮﻁ ﺑﻪ ﺍﻣﻀﺎﻱ ﻳﻚ ﺭﺷﺘﻪ، ﺑﺎ ﺗﻮﺟﻪ ﺑﻪ ﺍﻳﻨﻜﻪ ﺍﺯ ﭼﻪ ﻣﻜﺎﻧﻴﺰﻣﻲ ﺑﺮﺍﻱ ﺍﻣﻀﺎ ﺍﺳﺘﻔﺎﺩﻩ ﻣﻲ ﺷﻮﺩ، (ﺗﻮﻛﻦ ﻧﺮﻡ ﺍﻓﺰﺍﺭﻱ، ﺳﺨﺖ ﺍﻓﺰﺍﺭﻱ، (... ﭘﻴﺎﺩﻩ ﺳﺎﺯﻱ ﻫﺎﻱ ﻣﺨﺘﻠﻔﻲ ﺑﺮﺍﻱ ﺍﻳﻦ ﻛﻼﺱ ﺩﺭ ﻧﻈﺮ ﮔﺮﻓﺘﻪ ﺷﺪﻩ ﺍﺳﺖ. ﻣﻲ ﺗﻮﺍﻧﻴﺪ ﺍﺯ ﭘﻴﺎﺩﻩ ﺳﺎﺯﻱ ﺩﻳﮕﺮ ﺗﺎﺑﻊ Init ﺍﺳﺘﻔﺎﺩﻩ ﻛﻨﻴﺪ ﻛﻪ ﻭﺭﻭﺩﻱ signatoryConfig ﺭﺍ ﻧﺪﺍﺭﺩ ﻭ ﺑﻪ ﭼﺎﻱ ﺁﻥ ﺑﺎﻳﺪ ﻛﻼﺱ ﭘﻴﺎﺩﻩ ﺳﺎﺯﻱ ﺍﻣﻀﺎ ﺑﻪ ﺻﻮﺭﺕ ﺟﻨﺮﻳﻚ ﺑﻪ ﺗﺎﺑﻊ Init ﺩﺍﺩﻩ ﺷﻮﺩ . ﻧﻜﺘﻪ : ﻛﻼﺱ ﭘﻴﺎﺩﻩ ﺳﺎﺯﻱ ﺍﻣﻀﺎ ﺑﺎﻳﺪ ﺣﺘﻤﺎ ﺍﻳﻨﺘﺮﻓﻴﺲ ISignatory ﺭﺍ ﭘﻴﺎﺩﻩ ﺳﺎﺯﻱ ﻛﻨﺪ ﻛﻪ ﺷﺎﻣﻞ ﺩﻭ ﺗﺎﺑﻊ Sign ﻭ GetKeyId ﺍﺳﺖ ﻛﻪ ﺑﺎﻳﺴﺘﻲ ﭘﻴﺎﺩﻩ ﺳﺎﺯﻱ ﺷﻮﻧﺪ . ﺩﺭ SDK ﭘﻴﺎﺩﻩ ﺳﺎﺯﻱ InMemorySignatory ﻗﺮﺍﺭ ﺩﺍﺩﻩ ﺷﺪﻩ ﺍﺳﺖ ﻛﻪ ﻛﻠﻴﺪ ﺧﺼﻮﺻﻲ ﺩﺭ ﺭﻡ ﻧﮕﻬﺪﺍﺭﻱ ﻣﻴﺸﻮﺩ. ﺩﺭ ﺻﻮﺭﺗﻲ ﻛﻪ ﻣﻲ ﺧﻮﺍﻫﻴﺪ ﺍﺯ ﺍﻳﻦ ﻛﻼﺱ ﺍﺳﺘﻔﺎﺩﻩ ﻛﻨﻴﺪ ﺑﺎﻳﺪ ﻭﺭﻭﺩﻱ signatoryConfig ﺭﺍ ﺑﻪ ﺗﺎﺑﻊ Init ﺑﺪﻫﻴﺪ . |
baseUrl |
String |
https://tp.tax.gov.ir/req/api/self- tsp |
ﺁﺩﺭﺱ ﭘﺎﻳﻪ ﺍﺗﺼﺎﻝ ﺑﻪ ﺳﺎﻣﺎﻧﻪ ﻣﻮﺩﻳﺎﻥ. ﺍﻳﻦ ﺁﺩﺭﺱ ﺑﺮ ﺍﺳﺎﺱ ﺍﻳﻨﻜﻪ ﺑﻪ ﭼﻪ ﺳﺮﻭﺭﻱ (ﻋﻤﻠﻴﺎﺗﻲ، ﺁﺯﻣﺎﻳﺸﻲ) ﻗﺮﺍﺭ ﺍﺳﺖ ﻣﺘﺼﻞ ﺷﻮﻧﺪ ﻣﺘﻔﺎﻭﺕ ﺧﻮﺍﻫﺪ ﺑﻮﺩ . |
apiVersion |
String |
ﺧﺎﻟﻲ |
ﺷﻤﺎﺭﻩ ﻧﺴﺨﻪ API ﺳﺎﻣﺎﻧﻪ ﻣﻮﺩﻳﺎﻥ |
encryptionConfig |
EncryptionConfig |
null |
ﻛﻼﺱ ﻣﺮﺑﻮﻁ ﺑﻪ ﻛﺎﻧﻔﻴﮓ ﺭﻣﺰﻧﮕﺎﺭﻱ ﺑﺴﺘﻪ ﻫﺎ ﺟﻬﺖ ﺍﺭﺳﺎﻝ ﺑﻪ ﺳﺎﻣﺎﻧﻪ ﻣﻮﺩﻳﺎﻥ ﺍﻳﻦ ﻛﻼﺱ ﺩﺍﺭﺍﻱ ﺳﺎﺯﻧﺪﻩ ﺍﻱ ﺷﺎﻣﻞ ﺩﻭ ﻭﺭﻭﺩﻱ ﺯﻳﺮ ﺍﺳﺖ : : taxOrgPublicKey ﻛﻠﻴﺪ ﻋﻤﻮﻣﻲ ﺳﺎﺯﻣﺎﻥ : encryptionKeyId ﺷﻨﺎﺳﻪ ﻛﻠﻴﺪ ﺭﻣﺰﻧﮕﺎﺭﻱ ﻧﻜﺘﻪ : ﺩﺭ ﺻﻮﺭﺕ ﭘﺮ ﻧﻜﺮﺩﻥ ﺍﻳﻦ ﻛﺎﻧﻔﻴﮓ ﺑﺎﻳﺪ ﻗﺒﻞ ﺍﺯ ﻓﺮﺍﺧﻮﺍﻧﻲ ﻫﺮﻛﺪﺍﻡ ﺍﺯ api ﻫﺎ ﺑﺎﻳﺪ GetServerInformation() api ﺭﺍ ﻓﺮﺍﺧﻮﺍﻧﻲ ﻧﻤﺎﻳﻴﺪ ﺗﺎ ﺩﻭ ورودی قبلی به طور خودکار پر شوند |
TaxApiService.Instance.Init(CLIENT_ID, new SignatoryConfig(PRIVATE_KEY, null)) ;
ﻧﻤﻮﻧﻪ ﭘﻴﻜﺮﺑﻨﺪی ﭘﻴﭽﻴﺪﻩ ﺗﺮ ﺑﻪ ﺻﻮﺭﺕ ﺯﻳﺮ ﺍﺳﺖ. API_VERSION ﻧﺴﺨﻪ ﺳﺎﻣﺎﻧﻪ ﻣﻮﺩﻳﺎﻥ ﺍﺳﺖ ﻛﻪ ﺩﺭ ﺻﻮﺭﺕ ﺍﺳﺘﻔﺎﺩﻩ ﺍﺯ ﻧﺴﺨﻪ ﺟﺪﻳﺪ ﺑﺎﻳﺪ ﺑﺮﺍﺑﺮ ﺑﺎ ﻣﻘﺪﺍﺭ ” v1 ” ﺑﺎﺷﺪ.
TaxApiService.Instance.Init(CLIENT_ID ,new SignatoryConfig(PRIVATE_KEY, null) ,"https://tp.tax.gov.ir/req/api/self-tsp ",API_VERSION , new EncryptionConfig(ORG_PUBLIC_KEY, ORG_KEY_ID));
دﺭ ﺻﻮﺭتی ﻛﻪ ﺑﺨﻮﺍﻫﻴﺪ ﺍﺯ ﻛﻼﺱ ﺍﻣﻀﺎی ﺩﻟﺨﻮﺍﻩ ﺧﻮﺩ ﺍﺳﺘﻔﺎﺩﻩ ﻛﻨﻴﺪ، ﺑﺎﻳﺪ ﺑﻪ ﺻﻮﺭﺕ ﺯﻳﺮ ﭘﻴﻜﺮﺑﻨﺪی ﻛﻨﻴﺪ. CustomSignatory ﻛﻼﺱ ﺍﻣﻀﺎی ﺩﻟﺨﻮﺍﻩ ﺍﺳﺖ ﻛﻪ ﺣﺘﻤﺎ ﺑﺎﻳﺪ ﺍﻳﻨﺘﺮﻓﻴﺲ ISignatory ﺭﺍ ﭘﻴﺎﺩﻩ ﺳﺎﺯی ﻛﻨﺪ.
TaxApiService.Instance.Init<CustomSignatory>(CLIENT_ID) ;
ﺩﺭ ﺍﻳﻦ ﺣﺎﻟﺖ ﻧﻤﻮﻧﻪ ﭘﻴﻜﺮﺑﻨﺪی ﭘﻴﭽﻴﺪﻩﺗﺮ ﺑﻪ ﺻﻮﺭﺕ ﺯﻳﺮ ﺍﺳﺖ. API_VERSION ﻧﺴﺨﻪ ﺳﺎﻣﺎﻧﻪ ﻣﻮﺩﻳﺎﻥ ﺍﺳﺖ ﻛﻪ ﺩﺭ ﺻﻮﺭﺕ ﺍﺳﺘﻔﺎﺩﻩ ﺍﺯ ﻧﺴﺨﻪ ﺟﺪﻳﺪ ﺑﺎﻳﺪ ﺑﺮﺍﺑﺮ ﺑﺎ ﻣﻘﺪﺍﺭ ” v1 ” ﻭ ﺩﺭ ﻏﻴﺮ ﺍﻳﻦ ﺻﻮﺭﺕ ﺧﺎلی ﺑﺎﺷﺪ.
TaxApiService.Instance.Init<CustomSignatory>(CLIENT_ID ," https://tp.tax.gov.ir/req/api/self-tsp " ,API_VERSION ,new EncryptionConfig(ORG_PUBLIC_KEY, ORG_KEY_ID)) ;
ﭘﺲ ﺍﺯ ﭘﻴﻜﺮﺑﻨﺪی، ﺑﻪ ﺻﻮﺭﺕ ﺯﻳﺮ می ﺗﻮﺍﻧﻴﺪ ﺍﺯ ﭘﺮﺍﭘﺮتی TransferApi ﻛﻼﺱ TaxApiService ﺑﻪ ﻋﻨﻮﺍﻥ ﻛﻼﺱ ﻻﻳﻪ ﺍﻧﺘﻘﺎﻝ ﻭ ﭘﺮﺍﭘﺮتی TaxApis ﺍﻳﻦ ﻛﻼﺱ ﺑﻪ ﻋﻨﻮﺍﻥ ﻛﻼﺱ اصلی api ﻫﺎ ﺍﺳﺘﻔﺎﺩﻩ ﻛﻨﻴﺪ. ﺗﻮﺟﻪ ﻛﻨﻴﺪ ﻛﻪ ﺩﺭﺻﻮﺭتی ﻛﻪ ﭘﻴﻜﺮﺑﻨﺪی ﺭﺍ ﺍﻧﺠﺎﻡ ﻧﺪﺍﺩﻩ ﺑﺎﺷﻴﺪ، ﺑﺎ ﻓﺮﺍﺧﻮﺍنی ﭘﺮﺍﭘﺮتی ﻫﺎی ﻣﺬﻛﻮﺭ ﺑﺎ ﺧﻄﺎ ﻣﻮﺍﺟﻪ ﺧﻮﺍﻫﻴﺪ ﺷﺪ.
1.2.3. ﭘﻴﻜﺮﺑﻨﺪی ﺑﺎ ﺍﺳﺘﻔﺎﺩﻩ ﺍﺯ Dependency Injection
ﺑﺮﺍﻱ ﭘﺒﻜﺮﺑﻨﺪی ﺑﺎ ﺍﺳﺘﻔﺎﺩﻩ ﺍﺯ ﺍﻳﻦ ﺭﻭﺵ ﺑﻪ ﺻﻮﺭﺕ ﺯﻳﺮ ﺑﺎﻳﺪ ﻋﻤﻞ ﻛﻨﻴﺪ. ﺍﺳﺘﻔﺎﺩﻩ ﺍﺯ ﭘﺮﺍﭘﺮتی ﻫﺎ ﻣﺸﺎﺑﻪ ﺭﻭﺵ ﻗﺒﻞ ﺍﺳﺖ.
ﻧﻜﺘﻪ: ﺑﺮﺍی ﺍﺳﺘﻔﺎﺩﻩ ﺍﺯ ﺍﻳﻦ ﺭﻭﺵ ﺑﺎﻳﺪ ﺣﺘﻤﺎ ﭘﻜﻴﺞ Microsoft.Extensions.DependencyInjection ﻧﺼﺐ ﺷﺪﻩ ﺑﺎﺷﺪ.
serviceCollection.AddTaxApi(" https://wantolan.ir/requestsmanager/api/self-tsp ","" , CLIENT_ID ,
,
new SignatoryConfig(PRIVATE_KEY, null) ,,new EncryptionConfig(ORG_PUBLIC_KEY, ORG_KEY_ID) );
)
ﺩﺭ ﺻﻮﺭﺗﻲ ﻛﻪ ﻛﻼﺱ ﭘﻴﺎﺩﻩ ﺳﺎﺯی ﺍﻣﻀﺎی ﺩﻟﺨﻮﺍﻩ ﺧﻮﺩ ﺭﺍ ﺩﺍﺷﺘﻪ ﺑﺎﺷﻴﺪ ﺑﺎﻳﺪ ﺑﻪ ﺻﻮﺭﺕ ﺯﻳﺮ ﻋﻤﻞ ﻛﻨﻴﺪ. CustomSignatory ﻛﻼﺱ ﺍﻣﻀﺎی ﺩﻟﺨﻮﺍﻩ ﺍﺳﺖ ﻛﻪ ﺣﺘﻤﺎ ﺑﺎﻳﺪ ﺍﻳﻨﺘﺮﻓﻴﺲ ISignatory ﺭﺍ ﭘﻴﺎﺩﻩ ﺳﺎﺯی ﻛﻨﺪ.
< serviceCollection.AddTaxApi<CustomSignaroty )
" https://wantolan.ir/requestsmanager/api/self-tsp " ,"" , CLIENT_ID , new EncryptionConfig(ORG_PUBLIC_KEY, ORG_KEY_ID));
1.2.4. ﭘﻴﻜﺮﺑﻨﺪی ﻻﻳﻪ ﺍﻧﺘﻘﺎﻝ ﺑﺎ ﻧﺴﺨﻪ V 1ﺳﺎﻣﺎﻧﻪ ﻣﻮﺩﻳﺎﻥ
نسخه جدید سامانه مودیان بهینه سازی هایی در بحث امضا صورت گرفته است که به جای استفاده از ObjectNormalizer که بسیار سنگین و پیچیده است از SimpleNormalizer استفاده میکند. کلاس پیاده ساز برای نسخه لایه انتقال SimpleTransferApi است. برای پیکربندی این نسخه از API تنها کافیست ورودی apiversion تابع Init کلاس TaxApiService را برابر با “v1 “قرار دهید. نمونه این پیکربندی به صورت زیر است
TaxApiService.Instance.Init(CLIENT_ID , new SignatoryConfig(PRIVATE_KEY, null) , " https://tp.tax.gov.ir/req/api/self-tsp , " " v1 , " new EncryptionConfig(ORG_PUBLIC_KEY, ORG_KEY_ID));
var transferApi = TaxApiService.TransferApi ;
1.2.5. ﺗﻮﺍﺑﻊ ﺍﺭﺳﺎﻝ ﺑﺴﺘﻪ
دو تابع این لی ه ارائه میدهد. تابع ارسال همگام بسته و تابع ارسال ناهمگام بسته ها. تابع SendPacketAsync یک بسته را به صورت همگام ارسال میکند و تابع SendPacketsAsync مجموعه ای از بسته ها را به صورت غیرهمگام ارسال میکند
public interface ITransferApi {
Task<HttpResponse<AsyncResponseModel?>?>
SendPacketsAsync<TRequest>(List<PacketDto<TRequest>> packets,
Dictionary<string, string> headers,
bool encrypt,
bool sign,
PriorityLevel.NORMAL); = PriorityLevel priorityLevel
SendPacketAsync<TRequest,
Task<HttpResponse<SyncResonseModel<TResponse>?>>
TResponse>(PacketDto<TRequest> packet,
Dictionary<string, string> headers,
bool encrypt,
bool sign);
}
ﻭﺭﻭﺩﻱ ﺩﻭﻡ ﺍﻳﻦ ﺗﺎﺑﻊ ﻫﺪﺭﻫﺎی ﺩﺭﺧﻮﺍﺳﺖ ﻫﺴﺘﻨﺪ. ﺳﻪ ﻫﺪﺭ ﺩﺭ ﺍﻳﻦ ﻻﻳﻪ ﺩﺭ ﻧﻈﺮ ﮔﺮﻓﺘﻪ ﺷﺪﻩ ﺍﺳﺖ. ﺩﺭ ﺻﻮﺭتی ﻛﻪ ﻫﺮ ﻛﺪﺍﻡ ﺍﺯ ﺍﻳﻦ ﻫﺪﺭﻫﺎ ﺩﺭ ﻭﺭﻭﺩی ﺗﻌﺮﻳﻒ ﻧﺸﻮﺩ، ﺑﻪ ﺻﻮﺭﺕ ﺧﻮﺩﻛﺎﺭ ﭘﺮ ﻣﻴﺸﻮﻧﺪ. ﻫﺪﺭﻫﺎ ﺑﻪ ﺷﺮﺡ ﺯﻳﺮ ﺍﺳﺖ.
ﻋﻨﻮﺍﻥ ﺗﻮﻛﻦ |
ﺗﻮﺿﻴﺤﺎﺕ |
Authorization |
ﺗﻮﻛﻦ ﺩﺳﺘﺮﺳﻲ ﺑﻪ api |
requestTraceId |
ﺷﻨﺎﺳﻪ ﺗﺼﺎﺩﻓﻲ ﺑﺮﺍﻱ ﺟﻠﻮﮔﻴﺮﻱ ﺍﺯ ﺗﻜﺮﺍﺭ ﺩﺭﺧﻮﺍﺳﺖ |
timestamp |
ﺯﻣﺎﻥ ﺍﺭﺳﺎﻝ ﺑﺴﺘﻪ ﺑﻪ ﺻﻮﺭﺕ timestamp ﺑﻪ ﻣﻴﻠﻲ ﺛﺎﻧﻴﻪ |
ﻗﺒﻞ ﺍﺯ ﺍﺭﺳﺎﻝ ﻫﺮ ﺑﺴﺘﻪ ﻧﻴﺎﺯ ﺍﺳﺖ ﻛﻪ ﺷﻨﺎﺳﻪ ﺗﺼﺎﺩفی ﺗﻮﻟﻴﺪ ﺷﺪﻩ ﻭ ﺍﺯ ﻃﺮﻳﻖ ﻫﺪﺭ ﺍﺭﺳﺎﻝ ﺷﻮﺩ. ﺑﺎ ﺍﺳﺘﻔﺎﺩﻩ ﺍﺯ ﺍﻳﻦ ﺷﻨﺎﺳﻪ ﻣﺎﻧﻊ ﭘﺮﺩﺍﺯﺵ ﺩﻭﺑﺎﺭﻩ ﺑﺴﺘﻪ ﻫﺎی ﺗﻜﺮﺍﺭی ﮔﺮﻓﺘﻪ ﺧﻮﺍﻫﺪ ﺷﺪ. ﻗﺒﻞ ﺍﺯ ﺍﺭﺳﺎﻝ ﺑﺴﺘﻪ ﻧﻴﺎﺯ ﺍﺳﺖ ﻛﻪ ﺯﻣﺎﻥ ﺗﻮﻟﻴﺪ ﺑﺴﺘﻪ ﺭﺍ ﻧﻴﺰ ﺑﻪ ﻫﺪﺭ ﺿﻤﻴﻤﻪ ﻛﻨﻴﻢ ﺗﺎ ﺩﺭﺧﻮﺍﺳﺘﻬﺎیی ﻛﻪ ﺯﻣﺎﻥ ﺍﺭﺳﺎﻝ ﺁﻧﻬﺎ ﺑﺴﻴﺎﺭ ﮔﺬﺷﺘﻪ ﻣﺴﺪﻭﺩ ﺷﻮﺩ .
ﺩﺭ ﺻﻮﺭتی ﻛﻪ ﺑﺨﻮﺍﻫﻴﻢ ﺑﺴﺘﻪ ﺑﻪ ﺻﻮﺭﺕ ﺭﻣﺰﻧﮕﺎﺭی ﺷﺪﻩ ﺍﺭﺳﺎﻝ ﺷﻮﺩ، ﻓﻴﻠﺪ encrypt ﺭﺍ true ﻗﺮﺍﺭ ﻣﻴﺪﻫﻴﻢ.
ﺩﺭ ﺻﻮﺭتی ﻛﻪ ﺑﺨﻮﺍﻫﻴﻢ ﻣﺤﺘﻮﺍی ﺑﺴﺘﻪ ﺍﻣﻀﺎ ﺷﻮﺩ ﻣﻘﺪﺍﺭ ﻓﻴﻠﺪ sign ﺭﺍ true ﻗﺮﺍﺭ ﻣﻴﺪﻫﻴﻢ.
ﻭﺭﻭﺩی ﺁﺧﺮ ﻧﻴﺰ ﺍﻭﻟﻮﻳﺖ ﭘﺮﺩﺍﺯﺵ ﺑﺴﺘﻪ ﺍﺳﺖ ﻛﻪ ﺑﻪ ﻃﻮﺭ ﭘﻴﺸﻔﺮﺽ ﺍﻭﻟﻮﻳﺖ ﻣﻌﻤﻮلی ﺍﺳﺖ.
1.3. ﻻﻳﻪ ﻣﻔﻬﻮﻡ
ﻭﻇﻴﻔﻪ ﺍﻳﻦ ﻻﻳﻪ ﺍﻳﺠﺎﺩ ﺑﺴﺘﻪ ﻫﺎ ﻣﻄﺎﺑﻖ ﺑﺴﺘﻪ ﻫﺎﻳﻲ ﻛﻪ ﺳﺎﻣﺎﻧﻪ ﻣﻮﺩﻳﺎﻥ ﭘﺸﺘﻴﺒﺎﻧﻲ ﻣﻴﻜﻨﺪ ﺍﺳﺖ. ﺑﺴﺘﻪ ﻫﺎﻱ ﺍﻳﺠﺎﺩ ﺷﺪﻩ ﺑﻪ ﻛﻤﻚ ﻻﻳﻪ ﺍﻧﺘﻘﺎﻝ، ﺑﻪ ﺳﺎﻣﺎﻧﻪ ﻣﻮﺩﻳﺎﻥ ﺍﺭﺳﺎﻝ ﻣﻴﺸﻮﺩ. ﺩﺭ ﺍﻳﻦ ﺑﺨﺶ ﺑﺮﺍﻱ ﻫﺮ ﻛﺪﺍﻡ ﺍﺯ ﺑﺴﺘﻪ ﻫﺎ ﻧﻤﻮﻧﻪ ﻛﺪ ﺍﺭﺍﺋﻪ ﺷﺪﻩ ﺍﺳﺖ .
ﻛﻼﺱ ﻻﻳﻪ ﻣﻔﻬﻮﻡ ITaxApi ﺍﺳﺖ ﻭ ﭘﻴﺎﺩﻩ ﺳﺎﺯﻱ DefaultTaxApiClient ﺑﻪ ﻋﻨﻮﺍﻥ ﻧﻤﻮﻧﻪ ﭘﻴﺎﺩﻩ ﺳﺎﺯﻱ ﺍﻳﻦ ﻻﻳﻪ ﺩﺭ SDK ﻗﺮﺍﺭ ﺩﺍﺩﻩ ﺷﺪﻩ ﺍﺳﺖ.
ﺩﺭ ﺍﻳﻦ ﻛﻼﺱ ﻫﺮ api ﺩﻭ ﭘﻴﺎﺩﻩ ﺳﺎﺯﻱ sync ﻭ async ﺩﺍﺭﺩ ﻛﻪ ﺑﺴﺘﻪ ﺑﻪ ﻧﻴﺎﺯ ﺧﻮﺩ ﻣﻲ ﺗﻮﺍﻧﻴﺪ ﻫﺮ ﻛﺪﺍﻡ ﺭﺍ ﺍﺳﺘﻔﺎﺩﻩ ﻛﻨﻴﺪ .
1.3.1. ﺩﺭﻳﺎﻓﺖ ﺍﻃﻼﻋﺎﺕ ﺳﺮﻭﺭ
ﺩﺭ ﺻﻮﺭتی ﻛﻪ ﻛﻠﻴﺪ ﻋﻤﻮمی ﺳﺎﺯﻣﺎﻥ ﺑﺮﺍی ﺭﻣﺰﻧﮕﺎﺭی ﺩﺭ ﻻﻳﻪ ﺍﻧﺘﻘﺎﻝ ﺩﺍﺩﻩ ﻧﺸﺪﻩ ﺑﺎﺷﺪ، ﻗﺒﻞ ﺍﺯ ﺍﺳﺘﻔﺎﺩﻩ ﺍﺯ taxApi ﻧﻴﺎﺯ ﺍﺳﺖ ﻛﻪ ﻳﻚ ﺑﺎﺭ ﺗﺎﺑﻊ ﺯﻳﺮ ﺻﺪﺍ ﺯﺩﻩ ﺷﻮﺩ ﺗﺎ ﻛﻠﻴﺪ ﻋﻤﻮمی ﺳﺎﺯﻣﺎﻥ ﺩﺭ ﻻﻳﻪ ﺍﻧﺘﻘﺎﻝ ﺑﺎﺭﮔﺬﺍﺭی ﺷﻮﺩ.
ServerInformationModel serverInformation =TaxApiService.Instance.TaxApis.GetServerInformation();
1.3.2. ﺩﺭﻳﺎﻓﺖ ﺗﻮﻛﻦ ﺩﺳﺘﺮسی
ﺑﺮﺍﻱ ﮔﺮﻓﺘﻦ ﺗﻮﻛﻦ ﺩﺳﺘﺮسی ﺍﺯ ﺗﺎﺑﻊ ﺯﻳﺮ ﺍﺳﺘﻔﺎﺩﻩ ﻣﻴﻜﻨﻴﻢ. ﺑﺎ ﻳﻚ ﺑﺎﺭ ﺻﺪﺍ ﺯﺩﻥ ﺍﻳﻦ api ﺩﺍﺧﻞ ﻛﻼﺱ DefaultTaxApiClient ﺗﻮﻛﻦ ﺫﺧﻴﺮﻩ ﻣﻴﺸﻮﺩ ﻭ ﺩﺭ ﺑﻘﻴﻪ ﺩﺭﺧﻮﺍﺳﺘﻬﺎ ﺍﺯ ﺁﻥ ﺍﺳﺘﻔﺎﺩﻩ ﻣﻴﺸﻮﺩ. ﻃﻮﻝ ﻋﻤﺮ ﺗﻮﻛﻦ ﺩﺭ ﭘﺎﺳﺦ ﺑﺎﺯﮔﺮﺩﺍنی ﻣﻴﺸﻮﺩ ﻭ ﺍﺯ ﺯﻣﺎﻥ ﺩﺭﻳﺎﻓﺖ ﺁﻥ ﺗﺎ ﻣﺪﺕ ﺫﻛﺮ ﺷﺪﻩ، ﺗﻮﻛﻦ ﺍﻋﺘﺒﺎﺭ ﺩﺍﺭﺩ. ﺩﺭ ﺻﻮﺭﺕ منقضی ﺷﺪﻥ ﺗﻮﻛﻦ ﻭ ﻳﺎ ﺩﺭﻳﺎﻓﺖ ﻛﺪ ۴۰۱ ﻧﻴﺎﺯ ﺍﺳﺖ ﻛﻪ ﺗﻮﻛﻦ ﺩﺳﺘﺮسی ﺟﺪﻳﺪ ﺩﺭﻳﺎﻓﺖ ﺷﻮﺩ.
ﺗﻐﻴﻴﺮ ﺗﻮﻛﻦ ﺑﻪ ﺻﻮﺭﺕ ﺑﺮﻧﺎﻣﻪ ﺭﻳﺰی ﺷﺪﻩ ﻧﻴﺰ ﻓﺮﺍﻫﻢ ﺷﺪﻩ ﺍﺳﺖ .
TaxApiService.Instance.TaxApis.RequestToken(); = TokenModel token
1.4. ﺍﺭﺳﺎﻝ ﺻﻮﺭﺕ ﺣﺴﺎﺏ
ﺑﺮﺍی ﺍﺭﺳﺎﻝ ﺻﻮﺭﺕ ﺣﺴﺎﺏ ﻧﻴﺎﺯ ﺍﺳﺖ ﻛﻪ ﻓﻴﻠﺪﻫﺎی ﺯﻳﺮ ﺑﻪ ﺻﻮﺭﺕ ﺩﻗﻴﻖ ﭘﺮ ﺷﻮﻧﺪ.
ﺭﺩﻳﻒ |
ﻋﻨﻮﺍﻥ ﻗﻠﻢ ﺍﻃﻼﻋﺎﺗﻲ |
ﺟﺎﻳﮕﺎﻩ |
ﻓﻴﻠﺪ |
۱ |
ﺷﻤﺎﺭﻩ ﻣﻨﺤﺼﺮ ﺑﻪ ﻓﺮﺩ ﻣﺎﻟﻴﺎﺗﻲ |
header |
Taxid |
۲ |
ﺗﺎﺭﻳﺦ ﻭ ﺯﻣﺎﻥ ﺻﺪﻭﺭ ﺻﻮﺭﺗﺤﺴﺎﺏ(ﻣﻴﻼﺩﻱ) |
header |
Indatim |
۳ |
ﺗﺎﺭﻳﺦ ﻭ ﺯﻣﺎﻥ ﺍﻳﺠﺎﺩ ﺻﻮﺭﺗﺤﺴﺎﺏ(ﻣﻴﻼﺩﻱ) |
header |
Indati2m |
۴ |
ﻧﻮﻉ ﺻﻮﺭﺗﺤﺴﺎﺏ |
header |
Inty |
۵ |
ﺳﺮﻳﺎﻝ ﺻﻮﺭﺗﺤﺴﺎﺏ |
header |
Inno |
۶ |
ﺷﻤﺎﺭﻩ ﻣﻨﺤﺼﺮ ﺑﻪ ﻓﺮﺩ ﻣﺎﻟﻴﺎﺗﻲ ﺻﻮﺭﺗﺤﺴﺎﺏ ﻣﺮﺟﻊ |
header |
Irtaxid |
۷ |
ﺍﻟﮕﻮﻱ ﺻﻮﺭﺗﺤﺴﺎﺏ |
header |
Inp |
۸ |
ﻣﻮﺿﻮﻉ ﺻﻮﺭﺗﺤﺴﺎﺏ |
header |
Ins |
۹ |
ﺷﻤﺎﺭﻩ ﺍﻗﺘﺼﺎﺩﻱ ﻓﺮﻭﺷﻨﺪﻩ |
header |
Tins |
۱۰ |
ﻧﻮﻉ ﺷﺨﺺ ﺧﺮﻳﺪﺍﺭ |
header |
Tob |
۱۱ |
ﺷﻤﺎﺭﻩ/ﺷﻨﺎﺳﻪ ﻣﻠﻲ/ﺷﻨﺎﺳﻪ ﻣﺸﺎﺭﻛﺖ ﻣﺪﻧﻲ/ﻛﺪ ﻓﺮﺍﮔﻴﺮ ﺧﺮﻳﺪﺍﺭ |
header |
Bid |
۱۲ |
ﺷﻤﺎﺭﻩ ﺍﻗﺘﺼﺎﺩﻱ ﺧﺮﻳﺪﺍﺭ |
header |
Tinb |
۱۳ |
ﻛﺪ ﺷﻌﺒﻪ ﻓﺮﻭﺷﻨﺪﻩ |
header |
Sbc |
۱۴ |
ﻛﺪ ﭘﺴﺘﻲ ﺧﺮﻳﺪﺍﺭ |
header |
Bpc |
۱۵ |
ﻛﺪ ﺷﻌﺒﻪ ﺧﺮﻳﺪﺍﺭ |
header |
Bbc |
۱۶ |
ﻧﻮﻉ ﭘﺮﻭﺍﺯ |
header |
Ft |
۱۷ |
ﺷﻤﺎﺭﻩ ﮔﺬﺭﻧﺎﻣﻪ ﺧﺮﻳﺪﺍﺭ |
header |
Bpn |
۱۸ |
ﺷﻤﺎﺭﻩ ﭘﺮﻭﺍﻧﻪ ﮔﻤﺮﻛﻲ ﻓﺮﻭﺷﻨﺪﻩ |
header |
Scln |
۱۹ |
ﻛﺪ ﮔﻤﺮﻙ ﻣﺤﻞ ﺍﻇﻬﺎﺭ |
header |
Scc |
ﺭﺩﻳﻒ |
ﻋﻨﻮﺍﻥ ﻗﻠﻢ ﺍﻃﻼﻋﺎﺗﻲ |
ﺟﺎﻳﮕﺎﻩ |
ﻓﻴﻠﺪ |
۲۰ |
ﺷﻨﺎﺳﻪ ﻳﻜﺘﺎﻱ ﺛﺒﺖ ﻗﺮﺍﺭﺩﺍﺩ ﻓﺮﻭﺷﻨﺪﻩ |
header |
Crn |
۲۱ |
ﺷﻤﺎﺭﻩ ﺍﺷﺘﺮﺍﻙ/ ﺷﻨﺎﺳﻪ ﻗﺒﺾ ﺑﻬﺮﻩ ﺑﺮﺩﺍﺭ |
header |
Billid |
۲۲ |
ﻣﺠﻤﻮﻉ ﻣﺒﻠﻎ ﻗﺒﻞ ﺍﺯ ﻛﺴﺮ ﺗﺨﻔﻴﻒ |
header |
Tprdis |
۲۳ |
ﻣﺠﻤﻮﻉ ﺗﺨﻔﻴﻔﺎﺕ |
header |
Tdis |
۲۴ |
ﻣﺠﻤﻮﻉ ﻣﺒﻠﻎ ﭘﺲ ﺍﺯ ﻛﺴﺮ ﺗﺨﻔﻴﻒ |
header |
Tadis |
۲۵ |
ﻣﺠﻤﻮﻉ ﻣﺎﻟﻴﺎﺕ ﺑﺮ ﺍﺭﺯﺵ ﺍﻓﺰﻭﺩﻩ |
header |
Tvam |
۲۶ |
ﻣﺠﻤﻮﻉ ﺳﺎﻳﺮ ﻣﺎﻟﻴﺎﺕ، ﻋﻮﺍﺭﺽ ﻭ ﻭﺟﻮﻩ ﻗﺎﻧﻮﻧﻲ |
header |
Todam |
۲۷ |
ﻣﺠﻤﻮﻉ ﺻﻮﺭﺗﺤﺴﺎﺏ |
header |
Tbill |
۲۸ |
ﺭﻭﺵ ﺗﺴﻮﻳﻪ |
header |
Setm |
۲۹ |
ﻣﺒﻠﻎ ﭘﺮﺩﺍﺧﺘﻲ ﻧﻘﺪﻱ |
header |
Cap |
۳۰ |
ﻣﺒﻠﻎ ﭘﺮﺩﺍﺧﺘﻲ ﻧﺴﻴﻪ |
header |
Insp |
۳۱ |
ﻣﺠﻤﻮﻉ ﺳﻬﻢ ﻣﺎﻟﻴﺎﺕ ﺑﺮ ﺍﺭﺯﺵ ﺍﻓﺰﻭﺩﻩ ﺍﺯ ﭘﺮﺩﺍﺧﺖ |
header |
Tvop |
۳۲ |
ﻋﺪﻡ ﭘﺮﺩﺍﺧﺖ ﻣﺎﻟﻴﺎﺕ ﺑﺮ ﺍﺭﺯﺵ ﺍﻓﺰﻭﺩﻩ ﺧﺮﻳﺪﺍﺭ |
header |
Dpvb |
۳۳ |
ﻣﺎﻟﻴﺎﺕ ﻣﻮﺿﻮﻉ ﻣﺎﺩﻩ ۱۷ |
header |
Tax17 |
۳۴ |
ﺷﻨﺎﺳﻪ ﻛﺎﻻ/ﺧﺪﻣﺖ |
body |
Sstid |
۳۵ |
ﺷﺮﺡ ﻛﺎﻻ/ﺧﺪﻣﺖ |
body |
Sstt |
۳۶ |
ﻭﺍﺣﺪ ﺍﻧﺪﺍﺯﻩ ﮔﻴﺮﻱ |
body |
Mu |
۳۷ |
ﺗﻌﺪﺍﺩ/ﻣﻘﺪﺍﺭ |
body |
Am |
۳۸ |
ﻣﺒﻠﻎ ﻭﺍﺣﺪ |
body |
Fee |
۳۹ |
ﻣﻴﺰﺍﻥ ﺍﺭﺯ |
body |
Cfee |
۴۰ |
ﻧﻮﻉ ﺍﺭﺯ |
body |
Cut |
۴۱ |
ﻧﺮﺥ ﺑﺮﺍﺑﺮﻱ ﺍﺭﺯ ﺑﺎ ﺭﻳﺎﻝ |
body |
Exr |
۴۲ |
ﻣﺒﻠﻎ ﻗﺒﻞ ﺍﺯ ﺗﺨﻔﻴﻒ |
body |
Prdis |
ﺭﺩﻳﻒ |
ﻋﻨﻮﺍﻥ ﻗﻠﻢ ﺍﻃﻼﻋﺎﺗﻲ |
ﺟﺎﻳﮕﺎﻩ |
ﻓﻴﻠﺪ |
۴۳ |
ﻣﺒﻠﻎ ﺗﺨﻔﻴﻒ |
body |
Dis |
۴۴ |
ﻣﺒﻠﻎ ﺑﻌﺪ ﺍﺯ ﺗﺨﻔﻴﻒ |
body |
Adis |
۴۵ |
ﻧﺮﺥ ﻣﺎﻟﻴﺎﺕ ﺑﺮ ﺍﺭﺯﺵﺍﻓﺰﻭﺩﻩ |
body |
Vra |
۴۶ |
ﻣﺒﻠﻎ ﻣﺎﻟﻴﺎﺕ ﺑﺮ ﺍﺭﺯﺵ ﺍﻓﺰﻭﺩﻩ |
body |
Vam |
۴۷ |
ﻣﻮﺿﻮﻉ ﺳﺎﻳﺮﻣﺎﻟﻴﺎﺕ ﻭ ﻋﻮﺍﺭﺽ |
body |
Odt |
۴۸ |
ﻧﺮﺥ ﺳﺎﻳﺮﻣﺎﻟﻴﺎﺕ ﻭ ﻋﻮﺍﺭﺽ |
body |
Odr |
۴۹ |
ﻣﺒﻠﻎ ﺳﺎﻳﺮﻣﺎﻟﻴﺎﺕ ﻭ ﻋﻮﺍﺭﺽ |
body |
Odam |
۵۰ |
ﻣﻮﺿﻮﻉ ﺳﺎﻳﺮ ﻭﺟﻮﻩ ﻗﺎﻧﻮﻧﻲ |
body |
Olt |
۵۱ |
ﻧﺮﺥ ﺳﺎﻳﺮ ﻭﺟﻮﻩ ﻗﺎﻧﻮﻧﻲ |
body |
Olr |
۵۲ |
ﻣﺒﻠﻎ ﺳﺎﻳﺮ ﻭﺟﻮﻩ ﻗﺎﻧﻮﻧﻲ |
body |
Olam |
۵۳ |
ﺍﺟﺮﺕ ﺳﺎﺧﺖ |
body |
Consfee |
۵۴ |
ﺳﻮﺩ ﻓﺮﻭﺷﻨﺪﻩ |
body |
Spro |
۵۵ |
ﺣﻖ ﺍﻟﻌﻤﻞ |
body |
Bros |
۵۶ |
ﺟﻤﻊ ﻛﻞ ﺍﺟﺮﺕ، ﺣﻖﺍﻟﻌﻤﻞ ﻭ ﺳﻮﺩ |
body |
Tcpbs |
۵۷ |
ﺳﻬﻢ ﻧﻘﺪﻱ ﺍﺯ ﭘﺮﺩﺍﺧﺖ |
body |
Cop |
۵۸ |
ﺳﻬﻢ ﺍﺭﺯﺵ ﺍﻓﺰﻭﺩﻩ ﺍﺯ ﭘﺮﺩﺍﺧﺖ |
body |
Vop |
۵۹ |
ﺷﻨﺎﺳﻪ ﻳﻜﺘﺎﻱ ﺛﺒﺖ ﻗﺮﺍﺭﺩﺍﺩ ﺣﻖ ﺍﻟﻌﻤﻠﻜﺎﺭﻱ |
body |
Bsrn |
۶۰ |
ﻣﺒﻠﻎ ﻛﻞ ﻛﺎﻻ/ﺧﺪﻣﺖ |
body |
Tsstam |
۶۱ |
ﺷﻤﺎﺭﻩ ﺳﻮﻳﻴﭻ ﭘﺮﺩﺍﺧﺖ |
payment |
Iinn |
۶۲ |
ﺷﻤﺎﺭﻩ ﭘﺬﻳﺮﻧﺪﻩ ﻓﺮﻭﺷﮕﺎﻫﻲ |
payment |
Can |
۶۳ |
ﺷﻤﺎﺭﻩ ﭘﺎﻳﺎﻧﻪ |
payment |
Trmn |
۶۴ |
ﺷﻤﺎﺭﻩ ﭘﻴﮕﻴﺮﻱ |
payment |
Trn |
۶۵ |
ﺷﻤﺎﺭﻩ ﻛﺎﺭﺕ ﭘﺮﺩﺍﺧﺖ ﻛﻨﻨﺪﻩ ﺻﻮﺭﺗﺤﺴﺎﺏ |
payment |
Pcn |
ﺭﺩﻳﻒ |
ﻋﻨﻮﺍﻥ ﻗﻠﻢ ﺍﻃﻼﻋﺎﺗﻲ |
ﺟﺎﻳﮕﺎﻩ |
ﻓﻴﻠﺪ |
۶۶ |
ﺷﻤﺎﺭﻩ/ﺷﻨﺎﺳﻪ ﻣﻠﻲ/ﻛﺪ ﻓﺮﺍﮔﻴﺮ ﺍﺗﺒﺎﻉ ﻏﻴﺮ ﺍﻳﺮﺍﻧﻲ ﭘﺮﺩﺍﺧﺖ ﻛﻨﻨﺪﻩ ﺻﻮﺭﺗﺤﺴﺎﺏ |
payment |
Pid |
۶۷ |
ﺗﺎﺭﻳﺦ ﻭ ﺯﻣﺎﻥ ﭘﺮﺩﺍﺧﺖ ﺻﻮﺭﺗﺤﺴﺎﺏ |
payment |
Pdt |
ﺑﺮﺍﻱ ﺍﺭﺳﺎﻝ ﺻﻮﺭﺕ ﺣﺴﺎﺏ ﺍﺯ TaxApiService.Instance.TaxApis.SendInvoices ﺍﺳﺘﻔﺎﺩﻩ میﻛﻨﻴﻢ. ﺑﺮﺍd ﺍﺭﺳﺎﻝ ﺻﻮﺭﺕ ﺣﺴﺎﺏ ﺑﺎﻳﺪ ﻣﺎﻧﻨﺪ ﺯﻳﺮ ﻋﻤﻞ ﻛﻨﻴﺪ. ﺗﻮﺟﻪ ﻛﻨﻴﺪ ﻛﻪ invoice1 ﻭ invoice2 ﻭ … ﻫﺮ ﻳﻚ ﺻﻮﺭﺕ ﺣﺴﺎﺏ ﺟﺪﺍﮔﺎﻧﻪ ﻫﺴﺘﻨﺪ ﻛﻪ ﺑﺎﻳﺪ ﭘﺮ ﺷﻮﻧﺪ. ﻫﻤﭽﻨﻴﻦ ﻫﺮ ﻛﺪﺍﻡ ﺍﺯ ﺟﻨﺲ InvoiceDto ﻫﺴﺘﻨﺪ.
ﻧﻜﺘﻪ: میﺗﻮﺍﻥ ﺑﻪ ﺟﺎﻱ invoice1 ﻭ invoice2 ﻭ … ، ﻳﻚ ﺻﻮﺭﺕ ﺣﺴﺎﺏ ﺭﺍ ﺍﺭﺳﺎﻝ ﻛﺮﺩ.
var invoices= new List<InvoiceDto>{ invoice1, invoice2, invoice3, ... }; TaxApiService.Instance.TaxApis.SendInvoices(invoices);
ﺷﻤﺎﺭﻩ ﻣﺎﻟﻴﺎتی ﺍﺯ ﺳﻪ ﺑﺨﺶ ﺗﺸﻜﻴﻞ ﻣﻴﺸﻮﺩ. ﺑﺨﺶ ﺍﻭﻝ ﺷﻨﺎﺳﻪ ﺣﺎﻓﻈﻪ، ﺑﺨﺶ ﺩﻭﻡ ﺗﺎﺭﻳﺦ ﺍﻳﺠﺎﺩ ﺻﻮﺭﺕ ﺣﺴﺎﺏ ﻭ ﺑﺨﺶ ﺳﻮﻡ ﺳﺮﻳﺎﻝ ﺻﻮﺭﺕ ﺣﺴﺎﺏ ﺍﺳﺖ. ﺑﺮﺍی ﺳﻬﻮﻟﺖ ﺗﻮﻟﻴﺪ ﺷﻤﺎﺭﻩ ﻣﺎﻟﻴﺎتی ﻣﻴﺘﻮﺍﻧﻴﺪ ﺍﺯ ﻛﻼﺱ ITaxIdGenerator ﺍﺳﺘﻔﺎﺩﻩ ﻛﻨﻴﺪ. ﻛﺪ ﺯﻳﺮ ﻧﻤﻮﻧﻪ ﺗﻮﻟﻴﺪ ﺷﻤﺎﺭﻩ ﻣﺎﻟﻴﺎتی ﺭﺍ ﻧﻤﺎﻳﺶ ﻣﻴﺪﻫﺪ.
string taxId = TaxApiService.Instance.TaxIdGenerator.GenerateTaxId("A1119R", 10001, invoiceCreatedDate);
پارامتر اول شناسه حافظه، پارامتر دوم سریال صورت حساب که عدد ی حداکثر با طول 12 رقم است و پارامتر آخر زمان دور صورت حساب با فرمت DateTime زبان C #است. نمونه کد ارسال صورت حساب به صورت زیر است:
//Generate Random Serial number var random = new Random(); long randomSerialDecimal = random.Next(999999999); var now = new DateTimeOffset(DateTime.Now).ToUnixTimeMilliseconds(); var taxId = TaxApiService.Instance.TaxIdGenerator.GenerateTaxId("A1119R", randomSerialDecimal, DateTime.Now); var header = new InvoiceHeaderDto { Inty = 1, Inp = 1, Inno = randomSerialDecimal, Ins = 1, Tins = "5555555555", Tprdis = 1000_000, Tdis = 0, Tvam = 0, Todam = 0, Tbill = 1000_000, Setm = 1, Cap = 1000_000, Insp = 1000_000, Tvop = 0, Tax17 = 0, Indatim = now, Indati2m = now, Taxid = taxId }; var body = new InvoiceBodyDto { Sstid = "1111111111", Sstt = " ﺷﻴﺮ ﻛﻢ ﭼﺮﺏ ﭘﺎﺳﺘﻮﺭﻳﺰﻩ ", Mu = 23, Am = 2, Fee = 500_000, Prdis = 500_000, Dis = 0, Adis = 500_000, Vra = 0, Vam = 0, Tsstam = 1000_000 }; var payment = new PaymentDto { Iinn = "1131244211", Acn = "2131244212", Trmn = "3131244213", Trn = "4131244214" }; var invoices = new List<InvoiceDto> { new InvoiceDto { Body = new() {body}, Header = header, Payments = new() {payment} } }; var responseModel = TaxApiService.Instance.TaxApis.SendInvoices(invoices); var packetResponse = responseModel.Body.Result.First(); var uid = packetResponse.Uid; var referenceNumber = packetResponse.ReferenceNumber;
1.5. ﺍﺳﺘﻌﻼﻡ ﻧﺘﻴﺠﻪ ﺩﺭﺧﻮﺍﺳﺖ ﻏﻴﺮ ﻫﻤﮕﺎﻡ ﺑﺎ ﺍﺳﺘﻔﺎﺩﻩ ﺍﺯ UID
ﺧﺮﻭجی ﺍﺭﺳﺎﻝ ﺑﺴﺘﻪ ﻫﺎی ﻏﻴﺮﻫﻤﮕﺎﻡ UID ﻭ referenceNumber ﺍﺳﺖ. ﻓﻴﻠﺪ uid ﺳﻤﺖ ﻛﻼﻳﻨﺖ ﻭ ﻓﻴﻠﺪ referenceNumber ﺳﻤﺖ ﺳﺮﻭﺭ ﺗﻮﻟﻴﺪ ﻣﻴﺸﻮﺩ. ﺑﺎ ﺍﺳﺘﻔﺎﺩﻩ ﺍﺯ ﺍﻳﻦ ﻛﺪ ﻫﺎ ﻣﻴﺘﻮﺍﻧﻴﻢ ﺍﺯ ﻭﺿﻌﻴﺖ ﺑﺴﺘﻪ ﺍﺭﺳﺎﻝ ﺷﺪﻩ ﺑﺎ ﺧﺒﺮ ﺷﻮﻳﻢ. ﻧﻤﻮﻧﻪ ﻛﺪ ﺍﺳﺘﻌﻼﻡ ﺑﻪ ﺻﻮﺭﺕ ﺯﻳﺮ ﺍﺳﺖ.
new UidAndFiscalId = var uidAndFiscalId
{
uid, = Uid
CLIENT_ID = FiscalId
};
var inquiryResultModels =TaxApiService.Instance.TaxApis.InquiryByUidAndFiscalId(new(){uidAndFiscalId}) ;
1.6. ﺍﺳﺘﻌﻼﻡ ﻧﺘﻴﺠﻪ ﺩﺭﺧﻮﺍﺳﺖ ﻏﻴﺮ ﻫﻤﮕﺎﻡ ﺑﺎ ﺍﺳﺘﻔﺎﺩﻩ ﺍﺯ referenceNumber
ﺑﺎ ﺍﺳﺘﻔﺎﺩﻩ ﺍﺯ ﺍﻳﻦ ﻛﺪ ﻫﺎ ﻣﻴﺘﻮﺍﻧﻴﻢ ﺍﺯ ﻭﺿﻌﻴﺖ ﺑﺴﺘﻪ ﺍﺭﺳﺎﻝ ﺷﺪﻩ ﺑﺎ ﺧﺒﺮ ﺷﻮﻳﻢ. ﻧﻤﻮﻧﻪ ﻛﺪ ﺍﺳﺘﻌﻼﻡ ﺑﻪ ﺻﻮﺭﺕ ﺯﻳﺮ ﺍﺳﺖ .
var inquiryResultModels =TaxApiService.Instance.TaxApis.InquiryByReferenceId(new(){referenceNumber})
1.7. ﺍﺳﺘﻌﻼﻡ ﻧﺘﻴﺠﻪ ﺩﺭﺧﻮﺍﺳﺖ ﻏﻴﺮ ﻫﻤﮕﺎﻡ ﺑﺮ ﺍﺳﺎﺱ ﺯﻣﺎﻥ
ﻧﺘﻴﺠﻪ ﺩﺭﺧﻮﺍﺳﺖ ﻫﺎ ﺍﺯ ﻳﻚ ﺯﻣﺎﻥ ﺑﺰﺭﮔﺘﺮ ﺭﺍ ﻣﻴﺘﻮﺍﻧﻴﻢ ﺑﺎ ﺍﺳﺘﻔﺎﺩﻩ ﺍﺯ ﺍﻳﻦ ﺗﺎﺑﻊ ﺑﺎ ﺧﺒﺮ ﺷﻮﻳﻢ. ﻭﺭﻭﺩی ﺍﻳﻦ ﺗﺎﺑﻊ، ﺗﺎﺭﻳﺦ ﺑﻪ ﺻﻮﺭﺕ شمسی ﺍﺳﺖ.
var inquiryResultModels= TaxApiService.Instance.TaxApis.InquiryByTime("14010101");
1.8. ﺍﺳﺘﻌﻼﻡ ﻧﺘﻴﺠﻪ ﺩﺭﺧﻮﺍﺳﺖ ﻏﻴﺮ ﻫﻤﮕﺎﻡ ﺑﺮ ﺍﺳﺎﺱ ﺑﺎﺯﻩ ﺯﻣﺎﻥ
ﻧﺘﻴﺠﻪ ﺩﺭﺧﻮﺍﺳﺖ ﻫﺎ ﺍﺯ ﺩﺭ ﻳﻚ ﺑﺎﺯﻩ ﺯﻣﺎنی ﺭﺍ ﻣﻴﺘﻮﺍﻧﻴﻢ ﺑﺎ ﺍﺳﺘﻔﺎﺩﻩ ﺍﺯ ﺍﻳﻦ ﺗﺎﺑﻊ ﺑﺎ ﺧﺒﺮ ﺷﻮﻳﻢ. ﻭﺭﻭﺩی ﺍﻳﻦ ﺗﺎﺑﻊ، ﺗﺎﺭﻳﺦ ﺑﻪ ﺻﻮﺭﺕ شمسی ﺍﺳﺖ.
var inquiryResultModels = TaxApiService.Instance.TaxApis.InquiryByTimeRange("14020101" ,"14010101“);
1.9. ﮔﺮﻓﺘﻦ ﺍﻃﻼﻋﺎﺕ ﺣﺎﻓﻈﻪ
ﻭﺭﻭﺩی ﺍﻳﻦ ﺗﺎﺑﻊ ﺷﻨﺎﺳﻪ ﺣﺎﻓﻈﻪ ﺑﻮﺩﻩ ﻭ ﺧﺮﻭجی ﺁﻥ ﺍﻃﻼﻋﺎﺕ ﺣﺎﻓﻈﻪ ﻣﺮﺑﻮﻃﻪ ﺍﺳﺖ.
var fiscalInformation = TaxApiService.Instance.TaxApis.GetFiscalInformation(CLIENT_ID);
1.10. ﺍﺳﺘﻌﻼﻡ ﻛﺪ ﺍﻗﺘﺼﺎﺩی
ﻭﺭﻭﺩﻱ ﺍﻳﻦ ﺗﺎﺑﻊ ﻛﺪ ﺍﻗﺘﺼﺎﺩی ﺑﻮﺩﻩ ﻭ ﺧﺮﻭجی ﺁﻥ ﺍﻃﻼﻋﺎﺕ ﻛﺪ ﺍﻗﺘﺼﺎﺩی ﺍﺳﺖ.
var economicCodeInformation = TaxApiService.Instance.TaxApis.GetEconomicCodeInformation( "5555555555”);
1.11. ﮔﺮﻓﺘﻦ ﺍﻃﻼﻋﺎﺕ ﻛﺎﻻ ﻭ ﺧﺪﻣﺎﺕ
ﻭﺭﻭﺩﻱ ﺍﻳﻦ ﺗﺎﺑﻊ ﻓﻴﻠﺘﺮﻫﺎ ﻭ ﺻﻔﺤﻪ ﺑﻨﺪی ﻫﺎ ﺟﻬﺖ ﮔﺮﻓﺘﻦ ﺍﻃﻼﻋﺎﺕ ﻛﺎﻻ ﻭ ﺧﺪﻣﺎﺕ ﺍﺳﺖ. ﻧﻤﻮﻧﻪ ﻛﺪ ﺯﻳﺮ ﺑﺮﺍﻱ ﺑﺎﺭﮔﺬﺍﺭی ﺍﻃﻼﻋﺎﺕ ۱۰ ﻛﺎﻻ ﺍﺳﺖ.
var searchDto = new SearchDto
{ Page = 1,
Size = 10 };
var serviceStuffList = TaxApiService.Instance.TaxApis.GetServiceStuffList(searchDto).Result;
ورود به سایت