PDA

View Full Version : ایراد در انکریپت سامانه مودیان



یوسف زالی
چهارشنبه 29 شهریور 1402, 02:53 صبح
با سلام


Pkcs8SignatoryFactory pkcs8SignatoryFactory = new Pkcs8SignatoryFactory();
EncryptorFactory encryptorFactory = new EncryptorFactory();
TaxProperties properties = new TaxProperties(MemoryId);


TaxApiFactory taxApiFactory = new TaxApiFactory(ApiUrl, properties);


ISignatory signatory = pkcs8SignatoryFactory.Create(PrivateKeyPath, CertificatePath);


ITaxPublicApi publicApi = taxApiFactory.CreatePublicApi(signatory);
IEncryptor encryptor = encryptorFactory.Create(publicApi);




InvoiceDto validInvoice = CreateValidInvoice();
InvoiceDto invalidInvoice = CreateInvalidInvoice();


List<InvoiceDto> invoiceList = new List<InvoiceDto>()
{
validInvoice
// ,invalidInvoice
};


ILowLevelTaxApi lowLevelApi = taxApiFactory.CreateLowLevelApi(signatory);


string invoiceJson = Encoding.UTF8.GetString(
JsonSerializer.SerializeToUtf8Bytes(
validInvoice, JsonSerializerConfig.JsonSerializerOptions));
string s = signatory.Sign(invoiceJson);
string payload = encryptor.Encrypt(s);




در این تکه کد، دقیقا روی خط آخر ارور زیر رو دارم:



System.Text.Json.JsonException: ''<' is an invalid start of a value. Path: $ | LineNumber: 0 | BytePositionInLine: 0.'


نمی دونم ایراد از چیه، دوستان ممنون می شم اگر تجربه ای دارن اشتراک بگذارن.
کلا اگر فایل های سرتیفیکیت مثلا اشتباه باشن، اکسپایر باشن یا هر چیز دیگه ای، به این مورد ارتباط داره آیا؟

نمونه سورسی دارید که ارسال انجام داده باشه؟

متشکرم

پرستو پارسایی
جمعه 31 شهریور 1402, 09:55 صبح
این خطا معمولا به دلیل نامنظم بودن ساختار داده JSON است که در این حالت ممکن است برای سرور مقصد خطا به وجود بیاورد. به نظر می‌رسد که مشکل در خط زیر است:

string invoiceJson = Encoding.UTF8.GetString( JsonSerializer.SerializeToUtf8Bytes(
validInvoice, JsonSerializerConfig.JsonSerializerOptions));





برای رفع این مشکل، می‌توانید از یک تابع دیگر برای تبدیل اشیاء C#‎‎‎ به رشته JSON استفاده کنید. به عنوان مثال، می‌توانید از Newtonsoft.Json (یا همان Json.NET) استفاده کنید. برای استفاده از Newtonsoft.Json، می‌توانید آن را از NuGet در پروژه خود نصب کنید و سپس خطوط زیر را به جای خطوط مذکور در کد خود قرار دهید:

string invoiceJson = JsonConvert.SerializeObject(validInvoice);



این تابع، شیء validInvoice را به یک رشته JSON تبدیل می‌کنه. سپس می‌توانید ادامهٔ کد خود را اجرا کنید. امیدوارم که این راه حل مشکل شما را حل کنه

یوسف زالی
جمعه 31 شهریور 1402, 23:18 عصر
نه همکار گرامی، رشته پس از تبدیل شو شد و کاملا صحیح بود، حتی دستی هم ساختم دادم ایراد داشت،
به نظر می رسه اس دی کا مشکل یا نکته خاصی داره، شما با مودیان کار کردید؟

jafari1
شنبه 08 مهر 1402, 23:53 عصر
با عرض سلام
برای من روی این خط خطا میگیره



ISignatory signatory = pkcs8SignatoryFactory.Create(PrivateKeyPath, CertificatePath);


خطایش هم اینه


System.NullReferenceException: 'Object reference not set to an instance of an object.'

مقدارهای CertificatePath و PrivateKeyPath هم درست تعریف شده
اگر دوستان میتوانند راهنمایی کنند

یوسف زالی
یک شنبه 09 مهر 1402, 05:43 صبح
مشکل شما ایراد در خود فایل های امضا هست
ایراد من هم این بود که خود سامانه مشکل داره هنوز روی اصلی

vb30mbian
چهارشنبه 12 مهر 1402, 21:13 عصر
با عرض سلام
برای من روی این خط خطا میگیره



ISignatory signatory = pkcs8SignatoryFactory.Create(PrivateKeyPath, CertificatePath);


خطایش هم اینه


System.NullReferenceException: 'Object reference not set to an instance of an object.'

مقدارهای CertificatePath و PrivateKeyPath هم درست تعریف شده
اگر دوستان میتوانند راهنمایی کنند

سلام دوست عزیز.
مطمئن شو که ابتدا و انتهای فایل های کلید عمومی و خصوصی این خطوط باشه:


-----BEGIN PRIVATE KEY-----
PRIVATE KEY
-----END PRIVATE KEY-----

-----BEGIN CERTIFICATE-----
CERTIFICATE
-----END CERTIFICATE-----

vb30mbian
چهارشنبه 12 مهر 1402, 21:15 عصر
مشکل شما ایراد در خود فایل های امضا هست
ایراد من هم این بود که خود سامانه مشکل داره هنوز روی اصلی

مشکل شما حل شد؟
من همچنان نتونستم باهاش کار کنم.
گویا خروجی که میده json نیست به این شکله:



<html>


<head>
<title>503 Service Temporarily Unavailable</title>
</head>


<body>
<center>
<h1>503 Service Temporarily Unavailable</h1>
</center>
<hr>
<center>nginx</center>
</body>


</html>


به همین خاطر این خطا رو میده. به جای اینکه json بگیره، کاراکتر اول > هست.

یوسف زالی
چهارشنبه 12 مهر 1402, 23:44 عصر
ما هم همچنان منتظریم..

ahmadpj
شنبه 01 اردیبهشت 1403, 11:24 صبح
ما هم همچنان منتظریم..

آخرش موفق شدین؟

یک نمونه سورس که کار بکنه و یک فاکتور تو این سامانه ثبت کنه ندیدم، نمونه سورس خودشون هم کار نمیکنه.

jafari1
شنبه 01 اردیبهشت 1403, 12:46 عصر
سلام بله من نوشتم و از اول دی ماه هم ارسال کردند
اگر با c# نوشتید سورس را بفرستید من ببینم مشکلش چیه

klinton
یک شنبه 02 اردیبهشت 1403, 14:13 عصر
دوستان عزیز من نوگت رو به پروژه اضافه کردم توابع و کلاس ها رو نمیشناسه لاید دستی تعریف کنم ؟ عین sdk موجود در سایت سازمان ؟

jafari1
یک شنبه 02 اردیبهشت 1403, 22:41 عصر
سلام
نوگتی که دارایی داده فقط در net core 6 کار میکنه من یک تغییر جزیی در آن دادم تا در net frame work کار کنه اگر مایلید ایمیل تان را بفرستید تا برایتان ارسال کنم

klinton
دوشنبه 03 اردیبهشت 1403, 08:29 صبح
palilou1986@gmail.com
ممنونم از لطفتان
بعد از افزودن نوگت به پروژه لازمه کار خاصی انجام بشه ؟
چون هیچ یک از ابجکت های
Taxapiservice
İnvoicedto()
...
و هر چی کد توی پی دی اف ارایه شده در سایت سازمان هست رو نمیشناسه
ویژال استودیوی من ۲۰۲۲ هست

jafari1
دوشنبه 03 اردیبهشت 1403, 09:07 صبح
پاسخ به ایمیل ارسال شد

MohammadAhmadiDv
شنبه 22 اردیبهشت 1403, 19:43 عصر
سلام خوبی عزیز شما url رو دارین اشتباه میزنین
ب جای ساتفاده از
/req/api
باید از
RequestManager استفاده کنی
درخواست به url اشتباه میزنی و کدhtml بهت response میده در نتیجه 503 برمیگرده
به serialized json هم دست نزن چون داخل خودش نرمال میکنه اگر داده هات نرمال نیستن

jafari1
شنبه 22 اردیبهشت 1403, 20:14 عصر
فرق نداره من تست کردم هر دو url را قبول میکنه