کسي تا حالا با بانک ملي براي پرداخت با asp classic کار نکرده؟(ويرايش جديدش استفاده از وب سرويس)
کسي تا حالا با بانک ملي براي پرداخت با asp classic کار نکرده؟(ويرايش جديدش استفاده از وب سرويس)
وب سایت شخصی
وبلاگ آموزش ویژوال فاکس پرو - به دلیل تعطیل شدن میهن بلاگ نوشته های وبلاگ به وب سایت شخصی منتقل شدند.
من تو کار با وب سرويس بانک مشکل دارم.خطاي زير رو ميده ، کسي ميدونه يعني چي؟کجا ميتونم مرجع Soap رو گيربيارم :
Err.Number 3 = -2147024809
SoapMapper:Restoring data into SoapMapper string failed HRESULT=0x80070057: The parameter is incorrect. - Client:Unspecified client error. HRESULT=0x80070057: The parameter is incorrect.
طبق گفته پشتيباني بايد در تابع PaymentUtility پارامتر آخرش يک متغيير باشه که وبسروريس مقداري رو در اون ذخيره و برگرداند.همچنين گفتن که بايد بصورت ref فرستاده بشه.اونطور که من جستجو کردم در asp بصورت پيش فرض همينطوره.
کدي که من استفاده ميکنم :
On Error Resume Next
strRequestkey = ""
strForm = ""
SET objSoapClient = Server.CreateObject("MSSOAP.SoapClient30")
objSoapClient.ClientProperty("ServerHTTPRequest") = True
If Err Then Response.Write "<br>Err.Number 1 = " & Err.Number & "<br>" & Err.Description
Call objSoapClient.mssoapinit("https://bmiutility.bmi.ir/merchantutility.asmx?WSDL","MerchantUtility")
If Err Then Response.Write "<br>Err.Number 2 = " & Err.Number & "<br>" & Err.Description
strForm = objSoapClient.PaymentUtility("1111",10000,123456," bbbb","11112222","http://mydomain.com/recive.asp",strRequestkey)
If Err Then Response.Write "<br>Err.Number 3 = " & Err.Number & "<br>" & Err.Description
Response.Write(strForm)
Response.Write(strRequestkey)
وب سایت شخصی
وبلاگ آموزش ویژوال فاکس پرو - به دلیل تعطیل شدن میهن بلاگ نوشته های وبلاگ به وب سایت شخصی منتقل شدند.
نمونه کد دات نت و php اون همراهش بايد باشه.من بعد از کلي گشتن و امتحان کردن کدهاي مختلف راه حلش رو پيدا کردم.نهايي که شد اينجا قرار ميدم.
اولي آدرس صفحه اي از سايت شماست که کاربر از سايت شما به سايت بانک ملي براي پرداخت هدايت ميشه.
دومي آدرس صفحه اي از سايت شماست که کاربر از سايت بانک به سايت شما برگشت داده ميشه.
در موارد خاصي از شماره پورت استفاده ميشه.
آخري هم نوع زبان برنامه نويسي شما هست.
وب سایت شخصی
وبلاگ آموزش ویژوال فاکس پرو - به دلیل تعطیل شدن میهن بلاگ نوشته های وبلاگ به وب سایت شخصی منتقل شدند.
براي من مستندات کار با درگاه پرداخت اينترنتي بانک ملي نسخه 3.0 رو فرستادم به همراه يک مثال مفصل دات نت و يک مثال php
اول اينکه کد php شون رو هاست من نه با php 4.7 و نه با php 5 کار نکرد و خطا داد که اعلام کردم بهشون اما جوابي ندادند.
http://bmi.ir/Forums/ShowPost.aspx?PostID=4153
دوم هم اينکه چون دات نت نميدونم رفتم سراغ اينکه با همين asp classic باهاش کارکنم.اين درگاه يک وبسرويس هست به آدرس https://bmiutility.bmi.ir/merchantutility.asmx که البته 4 خطه يعني https://bmiutility1.bmi.ir/merchantutility.asmx و ... که به شما اعلام ميکنند که شما روي کدوم Line بايد کارکنيد.
نکته ديگه اينکه همانطور که در اين تاپيک گفتم مشکلي وجود داره براي استفاده از soap و اينکه در اين وبسرويس در اکثر متدها از متغيير out که در C# تعريف ميشه استفاده شده که تقريبا مثل ref ميمونه با يکسري تفاوت که در asp classic نميشه استفاده کرد.(به نظرم اينطوري برنامه نويس وبسرويس کار خودش رو راحتتر کرده مثلا در وبسرويس بانک سامان تا جاييکه من مثالشون رو ديدم با soap متصل ميشويد و خبري از out نيست که با فراخواني يک متد بيش از 2 مقدار رو بخوان برگردونند)بنابراين گزينه soap رو کنار گزاشتم .
کلا روند کلي اينطوريه که شما ابتدا متد PaymentUtility را با پارامترهاش صدا ميزنيد و اين متد يک رشته که فرم html هست به شما برميگردانه و کافيه شما يک دکمه submit به اون اضافه کنيد و کاربر يا تايد به سايت بانک جهت پرداخت هدايت ميشه همچنين يک کد به اسم RequestKey هم برميگردونه که شما بايد به همراه مبلغ و شماره خريد اون رو جهت چک کردن واريز ذخيره کنيد.
پس از پرداخت موفق بانک کاربر رو به صفحه اي که شما مشخص کرده ايد برميگردونه بعلاوه شماره خريد که بصورت متد پست فرم فرستاده ميشه و شما بايد در آن صفحه تابع CheckRequestStatus را صدا بزنيد تا هم از وضعيت پرداخت مطلع بشيد و هم واريز پول را قطعي کنيد در غير اينصورت پول برگشت ميخورد.
نکته اي رو هم که جايي ننوشته و يا بايد خودتون علم غيب داشته باشيد يا قبلا با اين سيستم ها کارکرده باشيد اينه که يک مبلغ کمي مثل 101 ريال بايد در ابتدا پرداخت کنيد تا محدوديت سقف واريز به حساب شما برداشته شود واگر نه با خطاي مواجه ميشيد و جالبيش به اينه که اگر با کارتي غير از کارت بانک ملي بخواهيد پرداخت کنيد نميتونيد،چرا؟چون براي کارتهاي شتاب حداقل 1000 ريال هست و يا بايد با کارت ملي اين محدوديت روبرداريد يا تماس بگيريد و بگيد که مبلغ محدوديت رو عوض کنند.
پس از جستجوي زيادي کردم تونستم با روش زير با وبسرويس کار کنم :
On Error Resume Next
CardAcqID="1111"
AmountTrans=1000
OrderId=1111
TransactionKey="1111"
TerminalId="1111"
ReturnURL="http://yoursite.com/recive.asp"
SOAPRequest="<?xml version=""1.0"" encoding=""utf-8""?>"
SOAPRequest=SOAPRequest&"<soap:Envelope xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" xmlns:xsd=""http://www.w3.org/2001/XMLSchema"" xmlns:soap=""http://schemas.xmlsoap.org/soap/envelope/"">"
SOAPRequest=SOAPRequest&"<soap:Body>"
SOAPRequest=SOAPRequest&"<PaymentUtility xmlns=""http://tempuri.org/"">"
SOAPRequest=SOAPRequest&"<CardAcqID xmlns="""">"&CardAcqID&"</CardAcqID>"
SOAPRequest=SOAPRequest&"<AmountTrans xmlns="""">"&AmountTrans&"</AmountTrans>"
SOAPRequest=SOAPRequest&"<OrderId xmlns="""">"&OrderId&"</OrderId>"
SOAPRequest=SOAPRequest&"<transactionKey xmlns="""">"&TransactionKey&"</transactionKey>"
SOAPRequest=SOAPRequest&"<TerminalId xmlns="""">"&TerminalId&"</TerminalId>"
SOAPRequest=SOAPRequest&"<RedirectURL xmlns="""">"&ReturnURL&"</RedirectURL>"
SOAPRequest=SOAPRequest&"</PaymentUtility>"
SOAPRequest=SOAPRequest&"</soap:Body>"
SOAPRequest=SOAPRequest&"</soap:Envelope>"
set objSrvHTTP = CreateObject("Msxml2.ServerXMLHTTP.3.0")
set objXMLSend = CreateObject("Msxml2.DOMDocument.3.0")
objXMLSend.async = "false"
objXMLSend.loadXML SOAPRequest
objSrvHTTP.open "POST","https://bmiutility.bmi.ir/merchantutility.asmx","false"
objSrvHTTP.setRequestHeader "Content-Type","application/soap+xml; charset=utf-8"
objSrvHTTP.setRequestHeader "SOAPAction","http://tempuri.org/PaymentUtility"
objSrvHTTP.send objXMLSend
strRequestkey=""
strForm=""
Set nodes = objSrvHTTP.responseXML.getElementsByTagName("Payme ntUtilityResult")
For Each node in nodes
strForm=node.text
Next
Response.Write(strForm)
Response.Write("<br>")
Set nodes = objSrvHTTP.responseXML.getElementsByTagName("Reque stKey")
For Each node in nodes
strRequestkey=node.text
Next
Response.Write(strRequestkey)
If Err Then Response.Write "<br>Err.number= " & Err.number & "<br>" & Err.Description
وب سایت شخصی
وبلاگ آموزش ویژوال فاکس پرو - به دلیل تعطیل شدن میهن بلاگ نوشته های وبلاگ به وب سایت شخصی منتقل شدند.
من اين کدها رو براي بانک هم فرستاده بودم منتها چون جوابي نيومد اينجا گزاشتم اما امروز تعجب کردم که کد اصلاح شده رو فرستادن.انگار همه متغييرها بايسيتي رشته باشن تا درست کار کنه.تست کردم جواب داد.
اينم کد تابع CheckRequestStatus که البته خطا ميده و منم بهشون اعلام کردم و جوابي به من ندادن و ميگن که حتما اشکال کار شماست در صورتي که من با همين رويه تابع اول رو صدا ميزنم و درست کار ميکنه خطا رو ميتونيد در آدرس زير ببينيد:
http://reg.yadeemam.ir/recive1.asp
لطفا اگر کسي ميتونه ببينه مشکل از چيه و از کجاست؟
کد :
<%
On Error Resume Next
str_Result=""
str_RetrivalRefNo=""
str_AppStatus=""
str_Requestkey=Session("strRequestkey")
str_AmountTrans=Session("AmountTrans")
str_CardAcqID=Session("CardAcqID")
str_TransactionKey=Session("TransactionKey")
str_TerminalId=Session("TerminalId")
str_OrderId=Session("OrderId")
SOAPRequest="<?xml version=""1.0"" encoding=""utf-8""?>"
SOAPRequest=SOAPRequest&"<soap:Envelope xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" xmlns:xsd=""http://www.w3.org/2001/XMLSchema"" xmlns:soap=""http://schemas.xmlsoap.org/soap/envelope/"">"
SOAPRequest=SOAPRequest&"<soap:Body>"
SOAPRequest=SOAPRequest&"<CheckRequestStatus xmlns=""http://tempuri.org/"">"
SOAPRequest=SOAPRequest&"<OrderID xmlns="""">"&str_OrderId&"</OrderID>"
SOAPRequest=SOAPRequest&"<CardAcqID xmlns="""">"&str_CardAcqID&"</CardAcqID>"
SOAPRequest=SOAPRequest&"<TerminalID xmlns="""">"&str_TerminalId&"</TerminalID>"
SOAPRequest=SOAPRequest&"<transactionKey xmlns="""">"&str_TransactionKey&"</transactionKey>"
SOAPRequest=SOAPRequest&"<RequestKey xmlns="""">"&str_Requestkey&"</RequestKey>"
SOAPRequest=SOAPRequest&"<AmountTrans xmlns="""">"&str_AmountTrans&"</AmountTrans>"
SOAPRequest=SOAPRequest&"</CheckRequestStatus>"
SOAPRequest=SOAPRequest&"</soap:Body>"
SOAPRequest=SOAPRequest&"</soap:Envelope>"
set objSrvHTTP = CreateObject("Msxml2.ServerXMLHTTP.3.0")
set objXMLSend = CreateObject("Msxml2.DOMDocument.3.0")
objXMLSend.async = "false"
objXMLSend.loadXML SOAPRequest
objSrvHTTP.open "POST","https://bmiutility4.bmi.ir/merchantutility.asmx","false"
objSrvHTTP.setRequestHeader "Content-Type","application/soap+xml; charset=utf-8"
objSrvHTTP.setRequestHeader "SOAPAction","http://tempuri.org/CheckRequestStatus"
objSrvHTTP.send objXMLSend
Set nodes = objSrvHTTP.responseXML.getElementsByTagName("Check RequestStatusResult")
For Each node in nodes
str_Result=node.text
Next
Set nodes = objSrvHTTP.responseXML.getElementsByTagName("Retri valRefNo")
For Each node in nodes
str_RetrivalRefNo=node.text
Next
Set nodes = objSrvHTTP.responseXML.getElementsByTagName("AppSt atus")
For Each node in nodes
str_AppStatus=node.text
Next
'Response.Write(objSrvHTTP.responseXML.xml)
Response.Write "Result : "+str_Result
Response.Write "<br>"
Response.Write "RetrivalRefNo : "+str_RetrivalRefNo
Response.Write "<br>"
Response.Write "AppStatus : "+str_AppStatus
If str_AppStatus="COMMIT" and str_Result=0 Then
Response.Write "<p align='center'><font color='#008800' face='Tahoma' size='2'>با تشکر،پرداخت شما ثبت شد.</font><br>کد پيگيري پرداخت : "& str_RetrivalRefNo &"</p>"
Else
Response.Write "<p align='center'><font color='#FF0000' face='Tahoma' size='2'>خطا در پرداخت</font>"
Response.Write "<br>"
Select Case cdbl(str_Result)
Case -1
Response.Write("یکی از موارد مبلغ، شماره سفارش یا کلید درخواست اشتباه است")
Case 1
Response.Write("با بانک صادر کننده تماس حاصل نمایید")
Case 3
Response.Write("پذیرنده کارت فعال نیست")
Case 12
Response.Write("تراکنش معتبر نمی باشد")
Case 13
Response.Write("مبلغ تراکنش معتبر نمی باشد")
Case 14
Response.Write("شماره کارت اشتباه است")
Case 33
Response.Write("تاریخ استفاده کارت به پایان رسیده است")
Case 41
Response.Write("کارت مفقوده می باشد")
Case 43
Response.Write("کارت مسروقه می باشد")
Case 51
Response.Write("موجودی حساب کافی نمی باشد")
Case 55
Response.Write("رمز وارده صحیح نمی باشد")
Case 56
Response.Write("شماره کارت یا CVV2 صحیح نمی باشد")
Case 57
Response.Write("دارنده کارت مجاز به انجام این تراکنش نمی باشد")
Case 58
Response.Write("پذیرنده کارت مجاز به انجام این تراکنش نمی باشد")
Case 61
Response.Write("مبلغ تراکنش از حد مجاز بالاتر است")
Case 65
Response.Write("تعداد دفعات تراکنش از حد مجاز بیشتر است")
Case 75
Response.Write("ورود رمز دوم از حد مجاز گذشته است. رمز دوم جدید در خواست نمایید")
Case 79
Response.Write("شماره حساب نامعتبر است")
Case 80
Response.Write("تراکنش موفق عمل نکرده است")
Case 84
Response.Write("سوئیچ صادر کننده کارت فعال نیست")
Case 88
Response.Write("سیستم دچار اشکال شده است")
Case 90
Response.Write("ارتباط به طور موقت قطع می باشد")
Case 91
Response.Write("پاسخ در زمان تعیین شده بدست سیستم نرسیده است")
Case 1003
Response.Write("اطلاعات پذیرنده اشتباه است")
Case 1004
Response.Write("پذیرنده موجود نیست")
Case 1006
Response.Write("خطای داخلی")
Case 1012
Response.Write("اطلاعات پذیرنده اشتباه است")
Case 1017
Response.Write("پاسخ خطا از سمت مرکز")
Case 1018
Response.Write("شماره کارت اشتباه است")
Case 1019
Response.Write("مبلغ بیش از حد مجاز است")
Case 9005
Response.Write("تراکنش ناموفق ( مبلغ به حساب دارنده کارت برگشت داده شده است)")
Case 9006
Response.Write("تراکنش ناتمام ( در صورت کسرموجودی مبلغ به حساب دارنده کارت برگشت داده می شود)")
Case 9008
Response.Write("اشکالی در بررسی وضعیت تراکنش رخ داده است.")
End Select
Response.Write("<br>")
Select Case str_AppStatus
Case "NOT_SET"
Response.Write("مقادیر تراکنش هنوز مشخص نشده است")
Case "NOT_EXIST"
Response.Write("تراکنش بر روی درگاه وجود ندارد")
Case "INCOMPLET_INFO"
Response.Write("تراکنش در مرحله تکمیل اطلاعات است")
Case "REQUEST_DONE"
Response.Write("تراکنش انجام شده است ولی هنوز نتیجه آن توسط پذیرنده دریافت نشده است")
Case "WAIT_FOR_REVERSAL"
Response.Write("در انجام تراکنش مشکلی به وجود آمده است و تراکنش در حال انتظار برای انجام عملیات بازگشت به حساب است")
Case "WAIT_FOR_REVERSAL_ADVISE"
Response.Write("در انجام عملیات برگشت تراکنش مشکلی به وجود آمده است و تراکنش در انتظار برگشت مجدد است.")
Case "REVERSALED"
Response.Write("تراکنش موفق نبوده است و مبلغ با موفقیت به حساب خریدار برگشت داده شده است.")
Case "FAILED"
Response.Write("خطایی در انجام تراکنش رخ داده است.جهت تشخیص نوع خطا به لیست کدهای خطا مراجه نمایید.")
Case "CHECK_STATUS"
Response.Write("تراکنش با موفقیت انجام شده است و در انتظار عملیات checkstatus از سمت پذیرنده میباشد")
Case "WAIT_FOR_REVERSAL_10MINUTE"
Response.Write("نتیجه تراکنش ظرف 10 دقیقه توسط پذیرنده دریافت نشده است و در انتظار برای عملیات برگشت پول میباشد.")
End Select
Response.Write("</p>")
End If
If Err Then Response.Write "<br>Err.number= " & Err.number & "<br>" & Err.Description
%>
آخرین ویرایش به وسیله binyaz2003 : پنج شنبه 29 مرداد 1388 در 18:17 عصر دلیل: کد صحيح که کار ميکنه
وب سایت شخصی
وبلاگ آموزش ویژوال فاکس پرو - به دلیل تعطیل شدن میهن بلاگ نوشته های وبلاگ به وب سایت شخصی منتقل شدند.
پس من از سيستم ديگري استفاده ميکنم (تفاوتشون در چيه؟)
در مورد کد ccv2 فکر کنم بسته به بانک صادر کننده کارت باشه.
اگر در صفحه پرداخت مشخصات شما رو بياره يعني اين مقاديري که به شما دادن درسته و از همينها بايد استفاده کنيد اگر هم مثلا اسم سداد يا چيز ديگري ميآورد، براي تست هستند.
وب سایت شخصی
وبلاگ آموزش ویژوال فاکس پرو - به دلیل تعطیل شدن میهن بلاگ نوشته های وبلاگ به وب سایت شخصی منتقل شدند.
کد صدا زدن CheckRequestStatus اصلاح شد.
وب سایت شخصی
وبلاگ آموزش ویژوال فاکس پرو - به دلیل تعطیل شدن میهن بلاگ نوشته های وبلاگ به وب سایت شخصی منتقل شدند.
سلام
امروز من اومدم شهریه دانشگاه بریزم
پیغام داد (مبلغ تراکنش بیش از حد مجاز است)
این پیغام یعنی چی؟من هربار همین مبلغ رو میریختم و مشکلی نبود الان نمیدونم چرا
اینجوری شده
کسی میتونه کمکم کنه؟
دانشگاه آزاد؟
شما بايد با مسئول سايتتون تماس بگيريد يا در اينجا http://bmi.ir/Forums/Default.aspx?tid=1 مطرح کنيد.
وب سایت شخصی
وبلاگ آموزش ویژوال فاکس پرو - به دلیل تعطیل شدن میهن بلاگ نوشته های وبلاگ به وب سایت شخصی منتقل شدند.
بله دانشگاه آزاد
فقط میخوام بدونم مشکل از کجاست؟
مسئول سایت یه تلفن گذاشته که اونم فقط بوغ اشغال میخور 24 ساعته
به روزرسانی سایت هم مال 4 روز پیش هست
اگه مشکل از من هست که اقدام کنم
ولی اگه از سایت باشه که صبر کنم ببینم چی میشه
ممنون میشم راهنمایی کنید
یه چیز دیگه:آیا در تراکنش اینترنتی محدودیت قرار داده شده که این
ارور میاد برای من یا خیر
باز هم ممنون
مشکل از شما نيست.بانک ملي براي هر حساب يک محدوديت سقف پرداخت ميزاره که تا اون مبلغ خاص پرداخت نشه بيشتر از اون نميشه پرداخت.اگر سايت دانشگاه شما تازه راه اندازي شده شايد هنوز نپرداختن.در کل به مسئول سايت خبر بيديد.مشکل از کاربر نيست.
وب سایت شخصی
وبلاگ آموزش ویژوال فاکس پرو - به دلیل تعطیل شدن میهن بلاگ نوشته های وبلاگ به وب سایت شخصی منتقل شدند.