|
---|
|
---|
جدول .3ساختار کلی درخواستها
|
---|
جدول .4 توضیحات مربوط به فیلدهای درخواست
|
---|
برای دریافت سورس کد نمونه و مشاوره لطفا با شماره ۷۷۹۵۸۲۱۳-۰۲۱ تماس بگیرید.
فهرست مطالب
در این سند نحوه اتصال به سامانه مودیان، دریافت اطلاعات مورد نیاز جهت پیکربندی پایانه فروشگاهی- حافظه مالیاتی، ارسال اطلاعات صورتحساب الکترونیکی و استعلام وضعیت صورتحسابهای ارسالی شرح داده شده است. برای ارسال اطلاعات صورتحساب الکترونیکی از مکانیزم غیر همگام و برای دریافت و استعلام اطلاعات از مکانیزم همگام استفاده شده است. برای هر کدام از این مکانیزم ها، API مستقلی در نظر گرفته شده است. برای مکانیزم غیرهمگام از صف استفاده میشود. در کلیه مراحل استفاده از API، اصول امنیت اطلاعات شامل احراز هویت و سطح دسترسی ارسال کننده،محرمانگی، انکارناپذیری و یکپارچگی رعایت شده است.
این سند با هدف تشریح نحوه اتصال به سامانه مودیان ارائه شده است. در این سند مراحل اتصال به سامانه مودیان شامل دریافت اطلاعات مورد نیاز جهت پیکربندی پایانه فروشگاهی-حافظه مالیاتی، ارسال اطلاعات صورتحساب الکترونیکی و استعلام وضعیت صورتحسابهای ارسالی به صورت گام به گام و همراه با جزئیات فنی مورد نیاز برای پیادهسازی آن توسط کلیه ذینفعان ارائه شده است.
ذینفعان این سند شامل:
۱. به ازای هر شناسه یکتا حافظه مالیاتی، یکی از سه حالت ارسال اطلاعات صورتحساب را به شرح ذیل انتخاب کند:
۲. کلید عمومی RSA دریافتی از مراکز میانی معتبر با طول کلید 2048 بیت را بارگذاری نماید.
نکته: در صورتیکه ارسال غیرمستقیم باشد و شرکت معتمد ارائه کننده خدمات مالیاتی صدور، رمزگذاری و ارسال صورتحساب را به عهده داشته باشد، بارگذاری کلید عمومی توسط مودی ضرورتی ندارد. در این حالت شرکت معتمد ارائه کننده خدمات مالیاتی باید از طریق کارپوشه خود، کلید عمومی مربوط را به سازمان معرفی نماید.
۳. ارتباط شناسه یکتای حافظه مالیاتی درخواستی با کدپستی(های) محل فعالیت تعیین گردد.
مودی برای راهاندازی پایانه فروشگاهی-حافظه مالیاتی خود باید از طریق فراخوانی متدهای “دریافت اطلاعات سرور” و “دریافت اطلاعات حافظه مالیاتی”، شماره اقتصادی، نام تجاری، ساعت و تاریخ، کلید عمومی سازمان و شناسه یکتای حافظه مالیاتی را از سرور دریافت کند. جزئیات اقالم اطلاعاتی الزم در جدول 10 توضیح داده شده است.
مکانیزمهای امنیتی جهت ارسال صورتحساب مطابق با نمودار ارائه شده در شکل 1 است.
با هدف احراز هویت و تعیین سطح دسترسی ارسال کننده اطلاعات، از مکانیزم تخصیص توکن5JWT استفاده شده است. لازم است توکن تخصیص داده شده به مودی یا شرکت معتمد ارائه کننده خدمات مالیاتی نوع اول در Header تمامی درخواستهای ارسال شده مودی به API های زیرسامانه جمعآوری و پردازش اطلاعات قرار گیرد.
با هدف حفظ قابلیت انکارناپذیری، یکپارچگی و احراز هویت، بر روی تمامی درخواستها به API های زیرسامانه جمعآوری و پردازش اطلاعات مکانیزم امضا در نظر گرفته شده است.
برای یکسان کردن ساختار تمامی درخواستها به API های زیرسامانه جمعآوری اطلاعات، برای تمامی بستههای ارسالی شامل همگام و غیرهمگام امضا بر روی درخواست صورت میپذیرد. برای امضا میبایست ابتدا Header و Body درخواست ادغام و JSON واحد تولید گردد. ضروری است JSON تولید شده مطابق شکل 2 به رشته تبدیل، سپس امضا و ارسال شود.
فرآیند تبدیل JSON به رشته، مطابق گامهای جدول 1 است:
– شی به فرمت کلید-مقدار تبدیل شده به طوری که کلید، عمق جایگاه مقدار را مشخص مینماید.
– کلیدها بر اساس حروف الفبا مرتب شوند.
– سپس مقدارها به ترتیب با هم ادغام شوند:
– در آخر آرایهای از روی این رشته ایجاد میشود.
|
---|
نکات:
روش پیادهسازی نرمال سازی JSON در پیوستهای 1-1 و 2-1 ارائه شده است.
برای امضا صورتحساب باید اطلاعات JSON صورتحساب به روشی که برای نرمالسازی بیان شد نرمال شوند. به عنوان مثال اطلاعات JSON صورتحساب زیر را در نظر بگیرید:
تمام اطلاعات پر شده در JSON غیر واقعی و تستی است.
بعد از نرمال سازی JSON صورتحساب مورد نظر، رشته نرمال شده به صورت زیر بدست میآید:
بلوک کد بلوک کد جی سون
رشته تولید شده در مراحل باال به وسیله کلید خصوصی (مودی/شرکت معتمد) با الگوریتم RSA2048-SHA256 هش و امضا میشود و خروجی آن در فیلد dataSignature در شی packet قرار میگیرد.
کد روش امضا در پیوست شماره 3-1 ارائه شده است.
برای رمزگذاری صورتحساب میبایست یک کلید متقارن (به روش) AES/GCM/NoPADDING با طول 256 بیت تولید شود. برای رمزگذاری از طریق AES/GCM نیاز به یک کلید دیگر به نام IV به طول 128 بیت است که این کلید به صورت تصادفی تولید میگردد. بعد از تولید کلیدهای مورد نیاز، JSON صورتحساب را ابتدا با کلید متقارن XOR کرده و سپس به روش AES/GCM رمزگذاری میگردد.
جزئیات XOR به این شکل است که باید متنی که میخواهیم XOR کنیم (در اینجا JSON صورتحساب) باید به بالکهای 256 بیتی تبدیل شود و هر بالک با کلید متقارن که 256 بیت است XOR شود. با این روش ممکن است که بالک آخر تعداد بیت کمتر از 256 داشته باشد که با همان تعداد از کلید متقارن XOR انجام میشود.
برای صورتحساب تستی بخش قبل کلید متقارن رمز شده و IV به صورت hex در زیر نمایش داده شده است:
بلوک کد بلوک کد جی سون
نمونه صورتحساب رمز شده به شکل زیر است :
بلوک کد بلوک کد جی سون
کد روش رمزگذاری به روش متقارن AES/GCM در پیوست 4-1 ارائه شده است.
پس از رمزگذاری صورتحساب، از طریق الگوریتم AES/GCM، باید کلید متقارن رمز شده و IV در کنارصورتحساب رمزشده قرار گیرد. برای رمزگذاری کلید متقارن باید از روش نامتـــــــقارن RSA-OAEP-SHA256 استفاده شود که برای این منظور از کلید/های عمومی سازمان با طول 4096 بیت اخذ شده از یک مرکز میانی معتبر استفاده میشود. کلید عمومی سازمان با استفاده از متد GET_SERVER_INFORMATION به دست میآید.
کد روش رمزگذاری به روش نامتقارن RSA-OAEP-SHA256 در پیوست 5-1 ارائه شده است.
آدرس APIهای زیرسامانه جمعآوری و پردازش اطلاعات به صورت زیر است که پیشوند تمام آدرسها قرار میگیرد.
https://tp.tax.gov.ir/req/
آدرسهایی که با tsp شروع میشوند برای شرکتهای معتمد ارائه کننده خدمات مالیاتی در نظر گرفته شده و آدرسهایی که با self-tsp شروع میشوند برای مودیانی که قصد دارند خودشان صورتحساب ارسال کنند در نظر گرفته شده است.
دو مکانیزم برای درخواستهای با اولویت عادی و درخواستهای با اولویت بالا وجود دارد. آدرس normal-enqueue برای درخواستهای معمولی و fast-enqueue برای درخواستهای با اولویت بالا در نظر گرفته شده است.
متدها همراه با آدرس API در جدول 2 ارائه شدهاند.
|
---|
در این بخش ساختار درخواستها به API شرح داده شده است. در جدول 3 ساختار کلی درخواست ارائه شده است.
ساختار کلی سرویس همگام مشابه با سرویس غیرهمگام بوده و تفاوت آن در فیلد packet است. بطوریکه در حالت همگام به جای آرایهای از درخواست، فقط یک درخواست میتوان ارسال نمود (packet). در درخواست غیرهمگام میتوان مجموعهای از بستهها (packets) را ارسال نمود.
جدول .3ساختار کلی درخواستها
|
---|
فیلد signatureKeyId اختیاری بوده و مقدار پیش فرض آن برابر با null خواهد بود.
اطلاعات تکمیلی فیلدها در جدول 4 آورده شده است:
جدول .4 توضیحات مربوط به فیلدهای درخواست
|
---|
زمانی که کالینت پاسخ این سرویس را دریافت میکند، الزاماً رسیدگی به بستههای اطلاعاتی پایان نیافته است، بلکه تنها در صف رسیدگی قرار گرفتهاند. تایید رسیدگی و نتیجه اعمال موفق یا ناموفق بستههای اطلاعاتی از طریق استعلام به اطلاع کالینت خواهد رسید.
در صورتی که کالینت نتیجه رسیدگی به یک بسته را failed دریافت نماید، لازم است پس از اطمینان از عدم وجود خطاها در بسته ارسالی، آن را مجدداً ارسال نماید. در ارسال مجدد باید مقدار فیلد retry برابر true باشد تا سرویس غیرهمگام در جریان ارسال مجدد درخواست باشد.
ساختار بستههای ارسالی به سرور و فیلدهای مربوط به ترتیب مطابق جداول 5 و 6 است.
درخواست همگام و غیرهمگام دو سرویس اصلی زیر سامانه جمعآوری و پردازش اطلاعات است:
ارسال صورتحساب به صورت غیرهمگام انجام میشود و جهت ارسال به احراز هویت و امضا دیجیتال صورتحساب و کل لیست ارسالی و همچنین رمزگذاری نیاز است.
برای اینکه ساختار مناسبی برای رهگیری تغییرات بستهها وجود داشته باشد، نوع بسته (PacketType) درصورتحساب به دو بخش تقسیم بندی میشود:
برای مثال اگر صورتحسابی با نسخه بسته 01 داشته باشیم، نوع بسته به صورت زیر خواهد بود:
INVOICE.V01
فرآیند ارسال صورتحساب مطابق شکل (3) و به شرح ذیل است:
۱. مودی یا TSP با ارسال درخواست توکن به سرور جمعآوری فرآیند ارسال صورتحساب را شروع میکند.
۲. توکن دریافت شده در سرآیند درخواست قرار میگیرد و صورتحساب ارسال میشود.
۳. مودی یا TSP رسید یکتای دریافت صورتحساب درخواست خود را از سامانه مودیان دریافت میکند.
۴. مودی یا TSP میتواند به وسیله فراخوانی متدهای استعلام از وضعیت ارسال صورتحساب خود با خبر شود.
در صورتی که وضعیت درخواست به صورت “PENDING” باشد به این معنی است که هنوز درخواست پردازش نشده است.
نمونه CURL درخواست در پیوست 1-2 ارائه شده است.
شناسنامه همه اقلام اطلاعاتی که در انواع و الگوهای صورتحساب وجود دارند به شرح جدول 7 است:
نکته قابل توجه در ارسال اطلاعات صورتحساب این است که در صورتی که پارامتری فاقد مقدار باشد، باید به صورت پیشفرض با مقدار null
ارسال شود یا کال پارامتر ارسال نگردد.
پس از دریافت درخواست توسط سرور و بررسی مربوط به الیه انتقال پاسخ مناسب مطابق جداول 8 و 9 به کالینت ارائه میشود.
در جدول 10 جزئیات ورودی و خروجی بستههای همگام بیان شده است.
شایان ذکر است در متدهای همگام امضای درخواست ارسالی نیاز است و دادهها به رمزگذاری نیاز ندارند.
کالینتها با استفاده از این متد، توکن JWT دریافت میکنند. با توجه به اینکه در این سرویس امضای درخواست کننده اجباری است، احراز هویت از طریق آن صورت میپذیرد. در صورتی که نام کاربری اعالم شده و امضای آن تطابق داشته باشد، توکن JWT برای کالینت ارسال میشود. این توکن طول عمر مشخصی دارد، با منقضی شدن آن، کالینت اقدام به دریافت توکن جدید مینمایند. با استفاده از این توکن در سرآیند درخواستها میتوان از این API ها استفاده کرد.
برای ارسال توکن ابتدا عبارت Bearer اضافه شده سپس توکن ارسال میشود. نمونه CURL درخواست در پیوست 2-2 ارائه شده است.
با استفاده از این متد میتوان اطلاعات حافظه مالیاتی مودی را دریافت نمود.این متد نیاز به احراز هویت نمونه CURL دارد.
درخواست در پیوست 3-2 ارائه شده است.
برای استعلام وضعیت صورتحسابهای ارسال شده میتوان از متدهای ذیل استفاده کرد: این متدها به احراز هویت نیاز دارند.
نکته: وجود fiscalId در ورودی درخواست کنار هر uid ضروری است.
نمونه CURL درخواست در پیوست 2-4-2 ارائه شده است.
نمونه CURL درخواست در پیوست 3-4-2 ارائه شده است.
نمونه CURL درخواست در پیوست 4-4-2 ارائه شده است.
نکته: فیلد “time” ، تاریخ شمسی با فرمت YYYYMMDD است و دقت شود فقط در خروجی این درخواست بستههایی که وضعیت FAILED دارند برگشت داده میشوند.
این متد برای دریافت اطلاعات عمومی سرور شامل کلیدهای عمومی سازمان، شناسه کلید عمومی که از یک مرکز میانی معتبر اخذ شده است و تاریخ و زمان سرور، مورد استفاده قرار میگیرد. این متد به احراز هویت نیاز ندارد.
نمونه CURL درخواست در پیوست 5-2 ارائه شده است.
این متد برای دریافت لیست شناسه استاندارد کالاها و خدمتها که توسط وزارت صمت ابلاغ شده است مورد استفاده قرار میگیرد. با توجه به اینکه حجم نتیجه خروجی این متد ممکن است زیاد باشد، امکان دریافت اطلاعات به صورت صفحهبندی شده نیز در نظر گرفته شده است. این متد نیاز به احراز هویت ندارد.
نمونه CURL درخواست در پیوست 6-2 ارائه شده است.
ارسال فیلد فیلتر و مرتبسازی در ورودی اختیاری است. شماره صفحه از یک شروع میشود. برای مثال اگر 10 رکورد اول را بخواهیم دریافت کنیم ورودی به صورت زیر خواهد بود:
این متد برای استعلام شماره اقتصادی مورد استفاده قرار میگیرد. این متد نیاز به احراز هویت ندارد.
نمونه CURL درخواست در پیوست 7-2 ارائه شده است.
منبع: راهرخ
برای دریافت سورس کد نمونه و مشاوره لطفا با شماره ۷۷۹۵۸۲۱۳-۰۲۱ تماس بگیرید.
Mz میگه:
مشاوره مدیریت رخ میگه:
محدود به مکان زمان نیستیم
تهران- بلوار میرداماد – مجتمع تجاری اداری رز میرداماد
02177958213
مدیریت منابع انسانی
مدیریت مالی و حسابداری
مدیریت زنجیره تامین
مدیریت توزیع و فروش
مدیریت کیفیت
هنر مدیریت
ابزار مدیریت
مدیریت دانش
میرداماد - مجتمع تجاری اداری رز میرداماد
تلفن: 02177958213
موبایل: 989392858923+
فکس: 02177958213
ایمیل: info@strategicplanning.me
وبسایت: برنامه ریزی استراتژیک
سلام
وقتتون بخیر. میشه در نورد فیلد signature توی دریافت توکن توضیح بدید . ممنون میشم
ضمن عرض سلام
signature امضای روی درخواست هست و signatureKeyId هم شناسه کلید عمومی ارسال کننده برای بررسی امضا هست.
موافق باشید
مشکل این متد رو دارمPacketsWrapper
مصطفی عزیز
ضمن عرض سلام، لطفا جهت دریافت مشاوره و نمونه کد با شماره 77958213-021 تماس حاصل فرمایید.
signature همون praivet key هست ؟