GithubHelp home page GithubHelp logo

Comments (15)

RezaAVS avatar RezaAVS commented on May 29, 2024 5

جناب سلطانی بعد از ساعت ها بررسی سورس شما (البته با اجاز شما) مشکل از 3 بخش می باشد:
بخش اول : SecurityProtocol هست که باید براساس ساختار زیر باشد
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls;
بخش دوم: تابع SignRequestData
این بخش باید OrderId به صورت string fhan
var dataBytes = Encoding.UTF8.GetBytes($"{terminalId};{orderId.ToString()};{amount}");
بخش سوم: مهم ترین قسمت این بخش هست که باید ساختار به این شکل باشد
return new
{
options.TerminalId,
options.MerchantId,
Amount = (long)invoice.Amount,
SignData = signedData,
ReturnUrl = invoice.CallbackUrl.ToString(),
LocalDateTime = DateTime.Now,
OrderId = invoice.TrackingNumber.ToString()
};
callbackurl به صورت ToString باید باشد
این موارد رو من اصلاح کردم و تست کردم و درگاه نمایش داده شد

این هم کد 200
{StatusCode: 200, ReasonPhrase: 'OK', Version: 1.1, Content: System.Net.Http.StreamContent, Headers:
{
Pragma: no-cache
X-Frame-Options:
SERVER-RemoveRule:
X-ASPNETMVC-VERSION:
Cache-Control: no-cache
Date: Sun, 26 May 2019 13:57:22 GMT
Server: Microsoft-IIS/8.5
X-AspNet-Version:
X-Powered-By:
Content-Length: 258
Content-Type: application/json; charset=utf-8
Expires: -1
}}

from parbad.

Sina-Soltani avatar Sina-Soltani commented on May 29, 2024 4

سلام جناب سلطانی

مشکل تابع Verify رو هم برطرف کردم جایی که نقدار data داره ارسال میشه از نوع json نیست که این بخش رو

سلام
ممنون دوست عزیز
نیازی به عذرخواهی نیست چون این ابزار اوپن سورس هست و همه اجازه دیدن، کار کردن و تست کردن این ابزار رو دارن
و همچنین ممنون از شما برای پیگیری و پیدا کردن مشکلات

به زودی اصلاح میشه و نسخه جدید آماده میشه

from parbad.

RezaAVS avatar RezaAVS commented on May 29, 2024 1

در بخش Verify
مقدار Responce خالی می باشد

PostJsonAsync
url : /VPG/api/v0/Request/PaymentRequest
data : { TerminalId = 24052347, MerchantId = 000000140331685, Amount = 10120, SignData = kTkei8mT0S5cfzLUHQ1ZD2oIj3nX+txB, ReturnUrl = https://www.foolad.com/Checkout/GatewayCallback?paymentToken=fde074166b324a5f961805dce43c71d0, LocalDateTime = 5/26/2019 11:04:11 PM, OrderId = 1008 }
T : Parbad.GatewayProviders.Melli.Models.MelliApiRequestResult
responseMessage : StatusCode: 200, ReasonPhrase: 'OK', Version: 1.1, Content: System.Net.Http.StreamContent, Headers:
{
Pragma: no-cache
X-Frame-Options:
SERVER-RemoveRule:
X-ASPNETMVC-VERSION:
Cache-Control: no-cache
Date: Sun, 26 May 2019 18:34:12 GMT
Server: Microsoft-IIS/8.5
X-AspNet-Version:
X-Powered-By:
Content-Length: 141
Content-Type: application/json; charset=utf-8
Expires: -1
}
response : {"ResCode":"0","Token":"00012A0AB89E2D80BFD9A83C494BB740418D9B7AA85A247D9DF4","Description":"عملیات با موفقیت انجام شد"}
PostJsonAsync
url : /VPG/api/v0/Advice/Verify
data : { token = 00012A0AB89E2D80BFD9A83C494BB740418D9B7AA85A247D9DF4, SignData = U1fJHmWxhjZihHQWTB9l4RZJkUv9zciaNvQ4b7dgjWBPf72O+J0LN0xTSnHiMPyyKuoNL1UkFNY= }
T : Parbad.GatewayProviders.Melli.Models.MelliApiVerifyResult
responseMessage : StatusCode: 500, ReasonPhrase: 'Internal Server Error', Version: 1.1, Content: System.Net.Http.StreamContent, Headers:
{
Pragma: no-cache
X-Frame-Options:
SERVER-RemoveRule:
X-ASPNETMVC-VERSION:
Cache-Control: no-cache
Date: Sun, 26 May 2019 18:34:53 GMT
X-AspNet-Version:
X-Powered-By:
Content-Length: 0
Expires: -1
}
response :

from parbad.

RezaAVS avatar RezaAVS commented on May 29, 2024 1

سلام جناب سلطانی
با عرض پوژش که دیر شد
تست کردن مشکل خاصی نبود
و جواب گرفتم

from parbad.

Sina-Soltani avatar Sina-Soltani commented on May 29, 2024

درود

بررسی میکنم. ممنون برای اطلاع رسانی

from parbad.

RezaAVS avatar RezaAVS commented on May 29, 2024

براساس مستندات رسمی ازمایش کردم
مشکل در تابع PostJsonAsync می باشد

این بخش رو ببینید
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls | SecurityProtocolType.Ssl3;
using (var client = new HttpClient())
{

            client.BaseAddress = new Uri(apiUrl);
            client.DefaultRequestHeaders.Accept.Clear();

            var json = JsonConvert.SerializeObject(value, Formatting.None);
            var xxx = await  client.PostAsync(apiUrl, new StringContent(json, Encoding.UTF8, "application/json"));

            HttpResponseMessage response = xxx;
            if (response.IsSuccessStatusCode)
            {
                var result = await response.Content.ReadAsStringAsync();
                var x = JsonConvert.DeserializeObject<T>(result);
                return JsonConvert.DeserializeObject<T>(result);
            }
            return default(T);
        }

اینجا در لوکال خطای مشخصی نمایش داده می شود
اما زمانی که در پروژه شما فراخوانی میکنم در بخش Header request این متن نمایش داده می شود
Headers = {Pragma: no-cache
X-Frame-Options:
SERVER-RemoveRule:
X-ASPNETMVC-VERSION:
Cache-Control: no-cache
Date: Sun, 26 May 2019 10:59:36 GMT
X-AspNet-Version:
X-Powered-By:
}

from parbad.

Sina-Soltani avatar Sina-Soltani commented on May 29, 2024

مشکلی که وجود داره چیز دیگه ای هست که البته باید حل بشه.
اما در مورد مشکل شما فکر میکنم تنظیمات بانک ملی رو اشتباه انجام دادید.
یعنی اینکه احتمالا اطلاعات تنظیمات صحیح نیست
TerminalId
MerchantId
TerminalKey

این موارد رو کنترل کنید شاید جابجا وارد کردید

from parbad.

RezaAVS avatar RezaAVS commented on May 29, 2024

در پروژه mvc تست کردم همان موارد و جواب داد
اما الان در پروژه net core خطای Scurity not supported ارسال می شود
این بخش رو
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls | SecurityProtocolType.Ssl3

from parbad.

RezaAVS avatar RezaAVS commented on May 29, 2024

جناب سلطانی مشکل رو پیدا کردم
باید بخش بالا رو تغییر بدید به این صورت مشکل برطرف میشه
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls | SecurityProtocolType.SystemDefault;
منتظر نسخه جدید هستم

from parbad.

Sina-Soltani avatar Sina-Soltani commented on May 29, 2024

ممنون برای همکاری و اطلاع رسانی
بررسی میکنم و تا فردا اطلاع میدم بهتون

from parbad.

RezaAVS avatar RezaAVS commented on May 29, 2024

من این تابع رو به این شکل تغییر دادم مشکل کاملا برطرف شد
public virtual async Task RequestAsync(Invoice invoice, CancellationToken cancellationToken = default)
{
if (invoice == null) throw new ArgumentNullException(nameof(invoice));

        var dataBytes = Encoding.UTF8.GetBytes($"{_options.Value.TerminalId};{invoice.TrackingNumber.ToString()};{(long)invoice.Amount}");
        var symmetric = SymmetricAlgorithm.Create("TripleDes");
        symmetric.Mode = CipherMode.ECB;
        symmetric.Padding = PaddingMode.PKCS7;
        var encryptor = symmetric.CreateEncryptor(Convert.FromBase64String(_options.Value.TerminalKey), new byte[8]);
        var signData = Convert.ToBase64String(encryptor.TransformFinalBlock(dataBytes, 0, dataBytes.Length));

        var apiUrl = $"{MelliHelper.BaseServiceUrl}{MelliHelper.ServiceRequestUrl}";
        var data = new
        {
            _options.Value.TerminalId,
            _options.Value.MerchantId,
            Amount = (long)invoice.Amount,
            SignData = signData,
            ReturnUrl = invoice.CallbackUrl,
            LocalDateTime = DateTime.Now,
            OrderId = invoice.TrackingNumber.ToString(),
        };
        ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls;
        var client = new HttpClient {BaseAddress = new Uri(apiUrl)};
        client.DefaultRequestHeaders.Accept.Clear();

        var json = JsonConvert.SerializeObject(data, Formatting.None);
        var responseMessage = await client.PostAsync(apiUrl, new StringContent(json, Encoding.UTF8, "application/json"), CancellationToken.None);

        var response = responseMessage;
        var result = await response.Content.ReadAsStringAsync();
        var request = JsonConvert.DeserializeObject<MelliApiRequestResult>(result);
        return MelliHelper.CreateRequestResult(request, _httpContextAccessor, _messageOptions.Value);
    }

from parbad.

RezaAVS avatar RezaAVS commented on May 29, 2024

سلام جناب سلطانی
مشکل تابع Verify رو هم برطرف کردم جایی که نقدار data داره ارسال میشه از نوع json نیست که این بخش رو تبدیل به json کردم از طریق تایع زیر که فعلا کارم راه بیافتد

internal static string ToJson(this object data)
{
var jsonStringBuilder = new StringBuilder();

        var dataString = data.ToString().Split(',');
        for (var index = 0; index < dataString.Length; index++)
        {
            var temp = dataString[index].Replace("{ token = ", $"{{ {'"'}token{'"'} : {'"'}").Replace("SignData = ", $"{'"'}SignData{'"'} : {'"'}");
            temp = index == 0 ? $"{temp}{'"'}," : temp.Replace(" }", $"{'"'} }}");
            jsonStringBuilder.Append(temp);
        }

        return jsonStringBuilder.ToString();
    }

همچنین تابع PostAsync رو هم تغییر دادم
public static Task PostJsonAsync(this HttpClient httpClient, string requestUri, object data, CancellationToken cancellationToken = default, bool isJson = true)
پارامتر isJson رو اضافه کردم

پوزش میخوام که کدهای شما رو بررسی کردم چون باید بانک ملی امروز راه اندازی می شد

from parbad.

Sina-Soltani avatar Sina-Soltani commented on May 29, 2024

@RezaAVS
با توجه به تغییر تنظیم
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls;
و عدم مشکل در دات نت کور
لطفا اگر براتون مقدور هست یکبار هم یک تست در پروژه
MVC
انجام بدید و ببینید آیا مشکلی وجود نداره

تشکر

from parbad.

RezaAVS avatar RezaAVS commented on May 29, 2024

بله حتما تست
MVC
رو انجام میدم خبرشو بهتون میدم با تشکر

from parbad.

Sina-Soltani avatar Sina-Soltani commented on May 29, 2024

ممنون از شما

from parbad.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.