نمایش نتایج 1 تا 6 از 6

نام تاپیک: نمونه کد اتصال به بانک ملی (سداد)

Threaded View

پست قبلی پست قبلی   پست بعدی پست بعدی
  1. #3

    نقل قول: نمونه کد اتصال به بانک ملی (سداد)

    ممنون از دوستانی که کمک کردند. خب ما یادگرفتیم خودمون همه چیز راس و ریس کنیم بگذریم ...
    از اونجایی که دوست ندارم کسِ دیگه ای چند روز وقتش گرفته بشه، روند استفاده از کدهای (شاهکار) سداد میذارم. امیدوارم بدردتون بخوره

    1) اضافه کردن DLL های EPS.MerchantHelper ، EPS.MerchantHelper.XmlSerializers ، EPSMerchantHelper.XmlSerializers و EPSMerchantV2_DLLVersion به پوشه ی Bin

    2) اضافه کردن کلیدهای زیر جهت امنیت بیشتر در تگ appSetting فایل web.config (البته میتونید اینارو توی behindcode هم بذارید ولی توصیه نمیکنم)
      <add key="MerchantId" value="**********"/>
    <add key="Terminal" value="**********"/>
    <add key="TranKey" value="**********"/>
    <add key="ServiceURL" value="https://sadad.shaparak.ir/services/MerchantUtility.asmx"/>
    <add key="ReturnURL" value="صفحه ای که میخواهید از بانک برگشت داده شود"/>
    <add key="PaymentURL" value="https://sadad.shaparak.ir/purchase"/>


    3) فراخوانی توابع کلاس EPS
    Imports EPS.MerchantHelper


    4) با دستورات زیر کلید اصلی (قبل از رفتن به صفحه بانک) ایجاد میشه و آماده Fire شدن هست (حالا من اینو صرفا برای تست توی page_load نوشتم شما میتونید هرجایی بنویسید)

    Protected FormBody As String = ""

    Protected Sub Page_Load(sender As Object, e As System.EventArgs) Handles Me.Load
    Dim ServiceUrl As String = ConfigurationManager.AppSettings("ServiceURL")
    Dim PaymentUrl As String = ConfigurationManager.AppSettings("PaymentURL")
    Dim MerchantId As String = ConfigurationManager.AppSettings("MerchantId")
    Dim tranKey As String = ConfigurationManager.AppSettings("TranKey")
    Dim TerminalId As String = ConfigurationManager.AppSettings("Terminal")
    Dim ReturnURL As String = ConfigurationManager.AppSettings("ReturnURL")
    Dim AdditionalInfo As String = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")


    Dim requestKey As String ' request key


    FormBody = MerchantHelpers.PaymentUtility(ServiceUrl, PaymentUrl, MerchantId, _
    10000, 35, tranKey, _
    TerminalId, ReturnURL, AdditionalInfo, _
    requestKey)
    lblRequest.Text = requestKey


    '''''''''''''''
    Session("ServiceURL") = ServiceUrl
    Session("TranKey") = tranKey
    Session("MerchantID") = MerchantId
    Session("Terminal") = TerminalId
    Session("AmountTrans") = "10000"
    Session("RequestKey") = requestKey
    Session("AdditionalInfo") = AdditionalInfo


    End Sub


    5) از اونجایی که طبق کدنویسی شاهکار سداد، تگ های ACTION در متغییر FORMBODY بصورت HTML تشکیل میشه و بیشترین مشکل خود منم با این قسمت بود (چون بصورت معمول قابلیت fire شدن نداره)، خود سداد از input submit استفاده میکنه ولی خوب این برای حالتی که بخوایم از behindcode استفاده کنم مقدور نیست پس میشه دو تا کلک رشتی زد:
    یک: مقدار متغیر FORMBODY توی کنترل literal ریخت و خودبخود هم fire میشه ولی شرط این حالت اینکه که از قبل، متغیر در page_load پر شده باشه وگرنه کاربر مجبوره دو بار fire کنه که خوب مناسب نیست.
     Protected Sub Button1_Click(sender As Object, e As System.EventArgs) Handles Button1.Click        Literal1.Text = FormBody
    End Sub


    دو: اگر بخوایم در یک مرحله، هم متغیر پر بشه و هم fire صورت بگیره باید از response.write بصورت زیر استفاده کرد:
                    Response.Clear()                Dim sb As New StringBuilder
    sb.Append(FormBody)
    sb.Append("<html>")
    sb.AppendFormat("<body onload='document.forms[0].submit()'>")
    sb.Append(FormBody)
    sb.Append("</body>")
    sb.Append("</html>")
    Response.Write(sb.ToString())
    Response.End()


    ولی...
    اگر کدهای کسی در Updatepanel باشه دیگه دردسر بیشتر میشه چون response.write توی updatepanle کار نمیکنه. نگران نباشید اونم حل کردم.
    ابتدا تابع جاوای زیر به انتهای صفحه تون اضاف کنید:
    <script>    function post(f) {
    document.body.innerHTML = f;
    document.getElementById("paymentUTLfrm").submit();
    }
    </script>

    بعد از دستور ScriptManager.RegisterClientScriptBlock بصورت زیر استفاده کنید تا فرم submit کنه.
    ScriptManager.RegisterClientScriptBlock(Me, Me.GetType(), "post", "post('" & FormBody.Replace("'", """") & "');", True)


    6) اینم کدهای صفحه برگشتی از بانک:
    Protected Sub Page_Load(sender As Object, e As System.EventArgs) Handles Me.Load

    If Not IsPostBack Then


    txtPostFP.Text = HttpContext.Current.Request.Form("FP")
    txtPostOrderId.Text = HttpContext.Current.Request.Form("OrderId")
    txtPostTimeStamp.Text = HttpContext.Current.Request.Form("TimeStamp")


    If Session.Count > 0 Then
    txtTXKey.Text = Session("TranKey").ToString()
    txtMerchantID.Text = Session("MerchantID").ToString()
    txtTerminalID.Text = Session("Terminal").ToString()
    TxtAmount.Text = Session("AmountTrans").ToString()
    txtRequestKey.Text = Session("RequestKey").ToString()
    Else
    lblMessage.Text = "اطلاعات خرید موجود نیست"
    End If


    CheckRequestStatus()
    End If


    End Sub


    Private Sub CheckRequestStatus()


    Dim OrderId As Long = Convert.ToInt64(35)
    Dim Amount As Long = Convert.ToInt64(10000)




    Dim ServiceURL As String = Session("ServiceURL").ToString()
    Dim _RefNo, Appstatus, RealTransactionDateTime As String


    Dim _AppStatusCode As Integer = MerchantHelpers.CheckRequestStatus(ServiceURL, OrderId,
    txtMerchantID.Text, txtTerminalID.Text,
    txtTXKey.Text, txtRequestKey.Text, Amount,
    _RefNo, Appstatus, RealTransactionDateTime)


    TxtAmount.Text = Amount.ToString()
    LabelStatus.Text = _AppStatusCode.ToString()
    LabelRefNo.Text = _RefNo
    LabelAppStatus.Text = Appstatus
    lblRealTransactionDateTime.Text = RealTransactionDateTime


    End Sub


    در خصوص مدیریت خرید:
    شما میتونید با مقدار برگشتی در متغییر Status بررسی لازم انجام بدین. بعنوان مثال اگر مقدار برگشتی -1 باشه یعنی خرید موفق نبوده (خریدار برگشت زده) و اگر 0 باشه خرید موفق بوده. لیست کامل این مقادر در پیوست شماره (3) و در جدول «کلیدهای بازگشتی» که بانک به شما میده موجوده همیچنین وقتی خرید موفق آمیز باشه، پارامتر برگشتی (ByRef) به اسم _RefNo هم مقدار یونیکی به خودش میگیره که میتونید توی بانک ذخیرش کنیدکه این مقدار با عنوان «شماره مرجع تراکنش» در پرتال بانک ملی قابل رصد کردنه.

    امیدوارم کسی مشکلی نداشته باشد با این کدهای VB
    لازم به گفتن که ما بخاطر استفاده از WEB FORM کلید API عوض کردیم پس این کدهای برای MVC نیست.
    برای تغییر کلید باید با پشتیبانی سداد تماس بگیرید و دو ساعت هم بیشتر طول نمیکشه

    موفق باشید.
    آخرین ویرایش به وسیله Ali_M.Eghbaldar : چهارشنبه 14 خرداد 1399 در 16:19 عصر

تاپیک های مشابه

  1. پاسخ: 5
    آخرین پست: شنبه 18 مهر 1394, 23:57 عصر
  2. پاسخ: 5
    آخرین پست: چهارشنبه 05 شهریور 1393, 19:44 عصر
  3. پاسخ: 0
    آخرین پست: سه شنبه 12 دی 1391, 17:09 عصر
  4. پاسخ: 4
    آخرین پست: جمعه 05 اسفند 1390, 18:25 عصر
  5. پاسخ: 3
    آخرین پست: چهارشنبه 09 شهریور 1390, 16:06 عصر

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •