24 فروردین 1399
قصد داریم به کمک توابع جاوااسکریپت و در بستر وب، با کارتخوانِ متصل به شبکه خود ارتباط برقرار کنیم. یعنی به جای اینکه مبلغ را در دستگاه کارتخوان بهصورت دستی وارد نماییم، صفحه فروش - در نرم افزار - مبلغ را برای پوز ارسال کرده و نتیجه تراکنش را دریافت کند.
اینترنتاکسپلورر 10 به بالا یا یکی از مرورگرهای بهروز
حداقل سیستم عامل ویندوز 7 بهعنوان سرور
نصب .Net Framework 4.5 در سرور
دستگاه کارتخوان (پوز) تحت شبکه شرکت سامانکیش و طبیعتا حساب متصل به کارتخوان!
الف) تنظیمات کارتخوان
ب) نصب سرویس SSP در ویندوز
ج) پیادهسازی توابع
الف) تنظیمات کارتخوان
این تنظیمات از سوی پشتیبانی شرکت سامانکیش و با رمز سوپروایزر انجام میشود.
ب) نصب سرویس SSP در ویندوز
در این مرحله بایستی سرویس SSP سامانکیش در فهرست سرویسهای ویندوز قرار گیرد. برای این منظور مراحل زیر را به سادگی دنبال کنید:
فایل پیوست این مقاله را دانلود کرده و سپس اکسترکت کنید. پوشه SSP1126-install را در محل مناسبی از هارددیسک سرور کپی کنید. دقت کنید که پس از اجرای سرویس، این پوشه قابل انتقال به مسیر دیگر نیست.
در این پوشه یک فایل کانفیگ با نام SSP1126SignalRWindowsService.exe.config وجود دارد، آن را با یک ادیتور مانند Notepad باز کنید.
<appSettings> <add key="MinimumAmount" value="1000" /> <add key="TC" value="3" /> <add key="Field_1" value="D481AD1A890B133D91B3358E2F5079B25AC5F62A" /> <add key="HostUrl" value="http://192.168.1.132:5051" /> <add key="LogPath" value="D:\\Log\\" /> <add key="AuthorizationId" value="2" /> <add key="ClientSettingsProvider.ServiceUri" value="" /> </appSettings>
مقدار MinimumAmount حداقل مبلغ تراکنشهای شماست.
مقدار TC نشاندهنده تعداد دستگاههای کارتخوان متصل به سرویس است.
مقدار Field_1، Field_2 و... شماره ترمینال - بهصورت هَش - هر یک از دستگاههای کارتخوان متصل بوده و اجباری نیست.
مقدار HostUrl همان آیپی کامپیوتر و سرور شماست که این سرویس روی آن اجرا میشود. توصیه میکنم پورت استفاده نشدهای را برای این سرویس در نظر بگیرید.
مقدار LogPath نیز مسیر فایلی است که Log فعالیت و یا خطاهای سرویس را ذخیره میکند.
پس از تغییر مقادیر فوق و ذخیره آن، فایل Install.bat را بهصورت Run as administrator اجرا کرده و سپس پنجره سرویسهای ویندوز را باز کنید.
روی سرویس SSP دوبار کلیک کرده و در پنجره باز شده:
روی تب Log On کلیک نمایید.گزینه Local System account را انتخاب کرده و Allow service را تیک بزنید.
حالا تب Recovery را باز کنید. مقادیر First failure و Second failure و Subsequent failures را روی Restart the Service قرار داده و و مقادیر days و minutes را نیز «صفر» کنید.
در نهایت در تب General مقدار Startup Type را در حالت اتوماتیک قرار داده و سرویس را استارت کنید.
یکبار سیستم را ریاستارت نمایید. یادآوری میکنم این سرویس همیشه باید در حالت Running باشد و چنانچه تنظیمات را درست انجام داده باشید، دیگر نیازی به بررسی و تنظیم مجدد این مرحله ندارید. یعنی هر زمان ویندوز شما بوت شود، این سرویس اجرا میشود.
ج) پیادهسازی توابع
ابتدا فایلهای لازم را به پروژه خود پیوست میکنیم
<scriptsrc="jquery.signalR-2.2.2.min.js"></script> <scriptsrc="http://192.168.1.132:5051/signalr/hubs"></script>
دقت کنید که در بالا نشانی و پورت وارد شده مطابق تعریف اولیه در قسمت «ب» باشد. حال مثال زیر را بررسی میکنیم:
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <script src="jquery.min.js"></script> <script src="jquery.signalR-2.2.2.min.js"></script> <script src="http://192.168.1.132:5060/signalr/hubs"></script> <title>WebBased PCPOS</title> <style> body { text-align:center; direction:rtl; } </style> </head> <body> <div id="showresult">لطفا صبر کنید</div> <div><button id="btn_pos" disabled> ارسال مبلغ به کارتخوان </button></div> <div>شماره ترمینال: <span id="PCPOS_TerminalId"></span></div> <div>کد پاسخ یا خطا: <span id="PCPOS_ResponseCode"></span></div> <div>شماره سریال تراکنش: <span id="PCPOS_SerialId"></span></div> <div>شماره مرجع تراکنش: <span id="PCPOS_RRN"></span></div> <div>توضیحات کد پاسخ: <span id="PCPOS_ResponseDescription"></span></div> <div>زمان تراکنش: <span id="PCPOS_TxnDate"></span></div> <div>شماره کارت: <span id="PCPOS_CardNumberMask"></span></div><br> <div><a target="_blank" href="http://abdollahkaviani.ir">لینک به سایت</a></div> <script type="text/javascript"> var serverMessage = ''; var serverIP = 'http://192.168.1.132:5060'; //آدرس سرور پوز var terminal_ID = '12345678'; //شماره ترمینال var posIP = '192.168.1.15'; //آدرس آیپی کارتخوان var delayInMilliseconds = 1000; //زمان تاخیر var posAmount = 1000; //مبلغ ارسالی به پوز $(function () { $.connection.hub.url = serverIP + "/signalr"; var console = $.connection.SSP1126HUB; $.connection.hub.error(function(err){ $('#showresult').html('ارتباط با سرور پوز مقدور نیست'); }); $.connection.hub.start().done(function initialize() { $('#showresult').html(""); $('#btn_pos').prop("disabled",false); $('#btn_pos').click(function () { serverMessage = ''; $('#showresult').html('صبر کنید...'); console.server.Initial('1', posIP, null, '0', '0', '0'); setTimeout(function () { if (serverMessage == '0') { console.server.Request("3"); $('#showresult').html('لطفا کارت را بکشید'); } else $('#showresult').html('خطایی رخ داده است'); }, delayInMilliseconds); }); }); console.client.GetSystemResponse = function (message) { serverMessage = ''; serverMessage = message; } console.client.GetCardSwiped = function (TerminalId, CardNumberHash, CardNumberMask, PurchaseTypes) { $('#PCPOS_TerminalId').html(TerminalId); $('#PCPOS_CardNumberMask').html(CardNumberMask); var additional = null; setTimeout(function () { console.server.SendAmount2Step(posAmount, null, additional, null, '0', null, terminal_ID); }, delayInMilliseconds); }; console.client.GetTransactionResponse = function (TerminalId, ResponseCode, SerialId, RRN, ResponseDescription, TxnDate) { $('#PCPOS_TerminalId').html(TerminalId); $('#PCPOS_ResponseCode').html(ResponseCode); $('#PCPOS_SerialId').html(SerialId); $('#PCPOS_RRN').html(RRN); $('#PCPOS_ResponseDescription').html(ResponseDescription); $('#PCPOS_TxnDate').html(TxnDate); $('#showresult').html(ResponseCode+' '+ResponseDescription); } }); </script> </body> </html>
در کدهای فوق به این موارد توجه کنید:
ترجیحا از ورژن jquery داخل فایل پیوست استفاده کنید. ممکن است در برخی از ورژنها عملیات با اشکال مواجه شود.
آدرس سرور، شماره ترمینال و آدرس پوز (کارتخوان) را مطابق الگوی ذکر شده بنویسید.
چنانچه تنظیمات سرویس SSP در مرحله «ب» درست باشد، «خطای ارتباط با سرور پوز» برای شما نمایش داده نمیشود.
پارامترهای Initial به ترتیب نوع ارتباط (شبکه یا سریال) ، آدرس آیپی کارتخوان، پورت کارتخوان، مدل تسویه حساب (تک حسابی و چند حسابی) و زبان (فارسی یا انگلسی) است
پارامتر Request سه نوع است: 1 درخواست پرداخت قبض، 2 قبض همراه اول و 3 خرید دو مرحلهای که ما با نوع سوم کار داریم.
پارامتر GetSystemResponse پیامی است مبنی بر موفقیت یا عدم موفقیت رویداد.
رویداد GetCardSwiped زمانی است که کارت کشیده میشود تا اطلاعات کارت را در اختیار کلاینت قرار دهد.
متد SendAmount2Step دستور خرید دو مرحلهای را برای سرویس ارسال میکند.
پاسخ تمام تراکنشها نیز ار طریق متد GetTransactionResponse به کلاینت ارسال میشود و تراکنش پایانیافته تلقی شده و ارتباط با سرویسدهنده قطع میشود.