Closed Zvr417 closed 2 years ago
درود هدف از پکیج Parbad بی نیاز بودن به مسائل داخلی درگاههای بانکی هست. امضا دیجیتال و یا هر عمل دیگهای به صورت خودکار توسط Parbad انجام میشه. شما فقط باید موارد لازم رو در قسمت تنظیمات درگاه بدید. PrivateKey رو باید از درگاه پاسارگاد دریافت کنید اگر بهتون ندادن،باید ازشون تقاضا کنید موفق باشید
ممنونم. بله به فرمت فایل txt با محتوی xml داده شده. الان محتوی این فایل به متغیر PrivateKey بدیم یا تبدیلش کنیم؟ محتوی xml که بدیم ارور خطا در ارسال اطلاعات دریافت میکنیم. متغیر های دیگه یعنی terminalCode , merchantCode هم که مقادیر ش مشخصه و طبیعتا مشکل از این دو متغیر نیست. ممنون میشم بگید چ جوری باید این PrivateKey مقدار بدیم؟
بله PrivateKey یک متن با محتوای XML هست بررسی کنید ببینید آیا محتوای PrivateKey استاندارد و صحیح هست یا خیر کد زیر (که در پَرباد به صورت خودکار انجام میشه) رو داخل یک برنامه کنسول کپی کنید برای تست کردن و مقادیر رو بهش بدید. برای مقدار data هر چیزی که میخواهید وارد کنید و ببینید آیا الگوریتم به درستی کار میکنه یا خیر اگر به شما خطایی در مورد محتوای XML میده، پس بنابراین PrivateKey شما صحیح نیست و باید با پشتیبانی بانک پارسیان صحبت کنید
using System;
using System.Security.Cryptography;
using System.Text;
public static class PasargadCrypto
{
public static string Encrypt(string privateKey, string data)
{
using (var rsa = new RSACryptoServiceProvider())
{
byte[] encryptedData;
#if NETSTANDARD2_0
rsa.FromXml(privateKey);
encryptedData = rsa.SignData(Encoding.UTF8.GetBytes(data), HashAlgorithmName.SHA1, RSASignaturePadding.Pkcs1);
#else
rsa.FromXmlString(privateKey);
encryptedData = rsa.SignData(Encoding.UTF8.GetBytes(data), new SHA1CryptoServiceProvider());
#endif
return Convert.ToBase64String(encryptedData);
}
}
}
ممنون از راهنمایی تون. فایل xml درست بود. پس علت خطای "خطا در ارسال اطلاعات" قبل از درگاه واسه چیه؟ طبق پرباد، 3 متغیر باید مقدار دهی شوند و خلاص. موقع ارسال به درگاه لینک ایجاد برای رفتن به درگاه به صورت زیر هست: https://pep.shaparak.ir/gateway.aspx?merchantCode=5108880&terminalCode=2366429&invoiceNumber=637857118319095174&invoiceDate=2022/04/16%2013:17:11&amount=5000&redirectAddress=https://www.haamin.ir/PaymentCallback?Pay=true&PayPrice=5000&Tick=637857118319095174&BankID=3&UserID=1&paymentToken=2ba29a6cdb4f41c5bfce37d9875dd4ba&action=1003&timeStamp=2022/04/16%2013:17:11&sign=avVb0rnGbFubnvWC5NV/xoucYN8K7eM3YGYpmMZTRoj+xn2YkK6pdJBMx1STyrAU1Q6Jjzu3FzUy62yqWtQWH+vSt2foVKu2xaNM0pIZh8MnkpMXE4t5L3x4Fa7aMWevnfgnE7lTRxWFPyEeOyhIuRdtgUCGtkGn/HLQrwP2C1c=
در صورت تمایل میتونید مقادیر و تنظیمات مرتبط با این درگاه رو به آدرس ایمیل زیر ارسال کنید تا بررسی کنم.
درود ، ایمیل شد. ممنونم
ایمیلی دریافت نشده. لطفا چک کنید ببینید درست ارسال کردید یا خیر
دریافت شده. به عنوان اسپم شناخته شده. مشکلی نیست.
فایلی که در ایمیل پیوست کردید به دلایلی قابل دانلود نیست. لطفا فایل رو به صورت zip یا rar ارسال کنید
خدمت شما. ممنون
On Sun, Apr 17, 2022 at 3:11 PM Sina Soltani @.***> wrote:
فایلی که در ایمیل پیوست کردید به دلایلی قابل دانلود نیست. لطفا فایل رو به صورت zip یا rar ارسال کنید
— Reply to this email directly, view it on GitHub https://github.com/Sina-Soltani/Parbad/issues/293#issuecomment-1100850510, or unsubscribe https://github.com/notifications/unsubscribe-auth/AYYDXY27TFISNBD35LDJA53VFPTG3ANCNFSM5TSF632Q . You are receiving this because you authored the thread.Message ID: @.***>
دریافت شد. بررسی میکنم و بهتون اطلاع میدم
درگاه پاسارگاد اجازه ادامه عملیات رو به من نمیده چون درخواستها رو فقط از IP فروشنده دریافت میکنه. اما در هر صورت ارتباط تا داخل درگاه به درستی پیش میره و پیغام زیر نمایش داده میشه
شما پیغام "خطا در ارسال اطلاعات" رو دقیقا در کجا و چه مرحله ای دریافت کردید؟ در صورت امکان همینجا Screenshot ارسال کنید
ممنونم. تا مرحله ورود به درگاه، که این ارور دریافت میکنم. متغیرهای مربوطه مقدار دهی میکنم، و طبق url برگردانده شده توسط پرباد، به درگاه باید منتقل شود که ارور زیر میاد.
ممنون از راهنمایی تون. فایل xml درست بود. پس علت خطای "خطا در ارسال اطلاعات" قبل از درگاه واسه چیه؟ طبق پرباد، 3 متغیر باید مقدار دهی شوند و خلاص. موقع ارسال به درگاه لینک ایجاد برای رفتن به درگاه به صورت زیر هست: https://pep.shaparak.ir/gateway.aspx?merchantCode=5108880&terminalCode=2366429&invoiceNumber=637857118319095174&invoiceDate=2022/04/16%2013:17:11&amount=5000&redirectAddress=https://www.haamin.ir/PaymentCallback?Pay=true&PayPrice=5000&Tick=637857118319095174&BankID=3&UserID=1&paymentToken=2ba29a6cdb4f41c5bfce37d9875dd4ba&action=1003&timeStamp=2022/04/16%2013:17:11&sign=avVb0rnGbFubnvWC5NV/xoucYN8K7eM3YGYpmMZTRoj+xn2YkK6pdJBMx1STyrAU1Q6Jjzu3FzUy62yqWtQWH+vSt2foVKu2xaNM0pIZh8MnkpMXE4t5L3x4Fa7aMWevnfgnE7lTRxWFPyEeOyhIuRdtgUCGtkGn/HLQrwP2C1c=
در مورد این لینکی که ارسال کردید: چنین لینکی اصلا از سمت پَرباد تولید نمیشه. چطور ممکنه شما چنین لینکی دریافت کرده باشید؟ چون لینکی که پّرباد برای شما تولید میکنه فقط شامل آدرس درگاه هست و مابقی اطلاعاتی که الان من در این لینکی که شما فرستادید میبینم، اصلا وجود نداره، بلکه همه اینها به صورت پارامترهایی داخل یک فرم ارسال میشن.
لطفا در صورت امکان یک screenshot در حالت دیباگ کردن بگیرید از نتیجه ی متد Request تا بررسی کنم چه محتوایی برای شما ایجاد شده و این لینک به چه صورت برای شما تولید شده. تصویر رو از نتیجه دستور Request بگیرید. برای مثال در دستور زیر، نتیجه داخل متغیر result هست.
var result = await Request(.......)
پارامتری که در متغیر result باید کاملا باز کنید و ازش عکس بگیرید، نامش GatewayTransporter هست. در صورتی قادر به ارسال اسکرین شات نیستید، راه حل بهتر و ساده تر اینه که با کمک newtonsoft json این متغیر result رو به جیسون تبدیل کنید و برای من ارسال کنید تا محتوا رو بررسی کنم
var json = JsonConvert.Serialize(result);
سلام مجدد، بله حق با شما بود، ادرس به صورت https://pep.shaparak.ir/gateway.aspx این بود، ی ایراد از طرف کد من بود. و پارامتر ها داخل فرم بودن. منتهی باز هم ارور "خطا در ارسال اطلاعات " میده.
درود کد مربوط به هدایت کاربر به درگاه رو لطفا اینجا بزارید.
ست کردن در startup:
gateways.AddPasargad().WithAccounts(accounts => { accounts.AddInMemory(account => { account.TerminalCode = bank.TerminalCode;//2366429 account.PrivateKey = bank.ExtractedKeywords; account.MerchantCode = bank.TerminalUsername; account.Name = bank.Name; }); });
هدایت کاربر:
string tick = DateTime.Now.Ticks.ToString(); var resultOnlinePaymentPasargad = _onlinePayment.RequestAsync(invoice => { invoice .SetAmount((long)payPrice) .SetCallbackUrl(callbackPage) .UsePasargad() .SetTrackingNumber(Convert.ToInt64(tick)); }); if (resultOnlinePaymentPasargad.Result.IsSucceed) { string urlRedirect = resultOnlinePaymentPasargad.Result.GatewayTransporter.Descriptor.Url; return new JsonResult(@"{""Result"":""{Result}"",""RefID"":""{RefID}"",""Message"":""{Message}"",""UrlRedirect"":""{UrlRedirect}""}" .Replace("{Result}", "true") .Replace("{RefID}", "1") .Replace("{UrlRedirect}", urlRedirect) .Replace("{Message}", "در حال هدایت به بانک")); }
شما ظاهرا هدایت کاربر به درگاه رو دارید خودتون به صورت دستی انجام میدید نه با پَرباد. از کدها میشه متوجه شد که احتمالا قصد دارید که در سمت کلاینت این هدایت انجام بشه و نه در سمت سرور. سوال اینجاست که شما با توجه به اینکه از ۹ تا پارامتری که پَرباد به صورت فرم برای شما ایجاد کرده و بهتون داده، ظاهرا هیچکدوم رو اصلا استفاده نکردید که برای مثال به سمت کلاینت بفرستید. کد سمت کلاینت که برای هدایت کاربر به درگاه دارید رو لطفا قرار بدید تا بررسی کنیم.
درود این تیکت رو باید ببندم؟ پاسخی از شما دریافت نشده.
سلام و درود نه نبندین، همکارم در حال پیگیری هستن. ممنونم
On Wed, Apr 20, 2022, 11:39 AM Sina Soltani @.***> wrote:
درود این تیکت رو باید ببندم؟ پاسخی از شما دریافت نشده.
— Reply to this email directly, view it on GitHub https://github.com/Sina-Soltani/Parbad/issues/293#issuecomment-1103546307, or unsubscribe https://github.com/notifications/unsubscribe-auth/AYYDXY27252MV3QT2NHF6LDVF6USZANCNFSM5TSF632Q . You are receiving this because you authored the thread.Message ID: @.***>
عرض سلام و ادب خدمت شما جناب سلطانی ما از طریق متد RequestAsync که خروجی رو دریافت میکنیم مقدار GatewayTransporter.Descriptor.Url را از خروجی میخونیم و به سمت client میفرستیم و با window.location کاربر رو به سمت اون url هدایت میکنیم ، این شیوه برای درگاه ملی و درگاه پارسیان جواب میداد و مشکلی نبود ، با این روش نمیتوان با بانک پاسارگاد کار کرد ؟ حتما باید سمت سرور redirect انجام شود ؟
درود
با توجه به توضیحات شما، پس در واقع در کد شما هدایت کاربر با متد POST نادیده گرفته شده و البته من این رو از کدهایی که اینجا قرار داده شد متوجه شدم که اشتباه شما از کجا بوده. همونطور که توضیح دادم، شما ظاهرا هدایت کاربر رو فقط از طریق متد GET یا همون به اصطلاح ریدایرکت دارید انجام میدید. در صورتیکه تعدادی از درگاه ها با متد POST کار میکنن که بیانگر این هست که شما یک فرم باید ارسال کنید. لطفا مثال مربوط به برنامه Angular رو بررسی کنید. مثال کاملا واضح هست و نحوه هدایت کاربر از سمت کلاینت رو پوشش میده.
سلام. وقت بخیر. ارسال به درگاه درست شد، برگشت هم به صورت Get دریافت میشه، یا 3 تا queryString در url برگشتی. iN,iD,tref که طبق مستندات باید با tref ، verify شود. اما خطا دارد. ایا برگشت از بانک به صورت Get درست است؟ ممنون میشم برگشت از بانک توضیحی بدین
درود آیا نمونه مثالها واضح نیستن؟
سلام مجدد، سپاس از شما. مشکل حل شد
درود خواهش میکنم موفق باشید
وقت بخیر. در استفاده از پرباد و بانک پاسارگاد، برای رفتن به درگاه ارور "خطا در ارسال اطلاعات" دریافت میکنیم. با توجه به اینکه مقدار parivateKey براساس فایل txt از بانک دریافت کردیم، موقع تعریف بانک پاسارگاد چ جوری باید مقدار دهی شود؟ طبق مستندات خود بانک پاسارگاد باید امضای دیجیتال براساس اون فایل ایجاد شود. حال طبق مستندات یک سری مقادیر برای تولید این امضا نیاز می باشد، مثل موبایل خریدار یا تاریخ و ساعت تراکنش قبل از رفتن به درگاه. نمونه مستندات:
var sendingData = "{ \"InvoiceNumber\": \"123456\", \"InvoiceDate\": \"1349/04/04\",\"TerminalCode\": \"1\", \"MerchantCode\": \"1\", \"Amount\":\"1000\", \"RedirectAddress\":\" https://www.sample.com/PaymentResult\", \"Timestamp\":\"2018/09/18 15:15:13\", \"Action\":\"1003\", \"Mobile\":\"09122222222\", \"Email\":\"BuyerName@Sample.ir\" }"
در صورتی که parivateKey توی startup ست میشود. و اونجا همچین اطلاعاتی دسترسی نداریم برای تولید امضا. آیا روشی دیگری برای تولید امضا وجود داره؟ یا قبل از درگاه و موقع فراخوانی بانک پاسارگاد امکان تعریف مجدد این مقدار هست؟ ممنون میشم راهنمایی بفرمایید