PDA

View Full Version : پرداخت الکترونیکی (شتاب)



EHSH
سه شنبه 19 دی 1385, 11:39 صبح
با سلام خدمت همگی دوستان

میخواستم تو این تایپیک نحوه استفاده از وب سرویس شبکه بانکی شتاب را مطرح کنم .
و به ارایه شرح خدمات وب سرویس ها همراه با کد های پیاده سازی بپردازم.
اساتید بزرگوار هم اگر همراهی کنند ، تاپیک مفیدی خواهد شد

عفت بزرگه
سه شنبه 19 دی 1385, 12:22 عصر
سلام

اگر ممکنه اون pdf هایی که برای اتصال هست رو هم لطف کنید در ضمن من حاضر به هرگونه همکاری هستم . در ضمن من تجربه اتصال به بانکهای خارجکی رو هم دارم البته اون خیلی فلاکت داره

EHSH
سه شنبه 19 دی 1385, 14:53 عصر
این نوشته قدم‌های لازم برای ایجاد بستر پرداخت با استفاده از رسید دیجیتالی را در سمت فروشنده بر می‌شمارد.

1. تعریف اجزای سیستم
اجزای مربوط به خریدار
اجرای مربوط به فروشنده
اجزای مربوط به شبکه بانکی

2. نیازمندی‌های امنیتی و بانکی
نیازمندی‌های امنیتی
نیازمندی‌های بانکی

3. بسترسازی سمت فروشنده
انجام تراکنش
برگشت تراکنش
پشتیبانی مشتریان


1. تعریف اجزای سیستم
سیستم پرداخت الکترونیکی با استفاده از کد تایید انتقال، از اجزا، زیر تشکیل یافته است:

خریدار
 خریدار: موجودیتی که تقاضای خرید سرویس یا کالا دارد.
 کارت: وسیله ای برای برداشت و خرید در فروشگاه یا اینترنت توسط خریدار.

فروشنده
 فروشنده: موجودیتی که سرویس یا کالا را در اختیار خریدار قرار می‌دهد.
 کد فروشنده (Merchant ID): ترکیب Terminal ID و Acceptor ID که توسط بانک به فروشنده اختصاص می‌یابد.

شبکه بانکی
 تراکنش (Transaction): یک عملیات مالی، که در این نوشته مصداق آن یک خرید می‌باشد.
 سایت شبکه بانکی: سایتی متعلق به بانک سامان می‌باشد که در آن خریدار مشخصات کارت و رمز آن را وارد می‌نماید و انتقال مبلغ خرید به سپرده فروشنده را تایید می‌نماید و در صورت موفقیت‌آمیز بودن انتقال، یک رسید دیجیتالی برای آن انتقال صادر شود.( در واقع این کار می تواند به عنوان بخشی از وظایف ماشین پذیرنده در نظر گرفته شود)
 رسید دیجیتالی (Reference Number): یک سلسله‌ی بیست کاراکتری که سایت شبکه بانکی به عنوان رسید پس از انجام یک تراکنش به فروشنده و خریدار ارائه می‌دهد.
 شماره رزرو (Reservation Number): کدی که فروشنده برای هر تراکنش خریدار در نظر می‌گیرد و خریدار می‌تواند توسط آن کد، خرید خود را پیگیری کند. (در واقع مشخصه تراکنش در سمت فروشنده است.)




2. نیازمندی‌های امنیتی و بانکی
قبل از پرداختن به موضوع نیازمندیها احتیاج به تعریف گواهینامه امنیتی (SSL certificate) می باشد. گواهینامه امنیتی یک نوع روش کدگذاری (Encryption) آنلاین به روی تمامی اطلاعات و فایلهایی می باشد که مابین وب سایت و کاربر رد و بدل می شود. این نوع کدگزاری بالاترین سطح امنیت در اینترنت برای انتقال داده ها می باشد. در این نوع روش برای امن کردن داده ها روی وب هنگام صدا زدن وب سایت مورد نظر از پروتکل https (Secure http) به معنای وب امن به جای http استفاده می شود. به طور مثال با آدرس http://www.sb24.com اطلاعات به صورت غیر کدشده و معمولی رد و بدل می شود در حالی که با آدرس https://www.sb24.com اطلاعات به صورت کدشده مابین وب سایت و کاربر رد و بدل می شود. لازم بذکر است که وب سایتهایی این قابلیت را دارا می باشند که گواهینامه امنیتی خود را از مراکز صدور این گواهینامه ها تهیه کرده و روی وب سایت خود نصب کرده باشند.

نیازمندی‌های امنیتی
سایتهای بانک ( www.sb24.com و acquirer.sb24.com ) دارای گواهینامه های امنیتی معتبر می باشند و ارتباط خریدار با بانک , فروشنده با بانک می تواند در بستر SSL انجام شود. اگر فروشنده نیز دارای گواهینامه معتبری باشد، ارتباط بین خریدار و فروشنده نیز در بستر SSL و به صورت امن خواهد بود. اینکه فروشنده دارای گواهینامه معتبر باشد، اجباری نیست، بلکه بهتر است اینگونه باشد.
نیازمندی امنیتی دیگر اینست که فروشنده از هیچ کدام از اطلاعات مالی خریدار ( مانند مشخصات کارت، کلمه رمز کارت، میزان موجودی و .... ) مطلع نشود. به همین خاطر فروشنده از خریدار هیچ نوع اطلاعات مالی و بانکی دریافت نمی کند و تمامی این اطلاعات توسط خریدار در سایت بانک وارد می شود.
نیازمندی امنیتی دیگر این است که فقط فروشندگان مجاز قادر باشند که درخواست تایید یک تراکنش و درخواست برگشت خوردن یک تراکنش را صادر کنند. این امر با قرار دادن یک فایروال جلوی ماشین گردآورنده (Acquirer) محقق شده است و آدرس IP فروشنده باید به بانک داده شود، تا اجازه دسترسی برای آن صادر شود.
برای اطمینان از هویت فروشنده در هنگام درخواست برگشت خوردن سند، کلمه رمزی به فروشنده داده می شود که در هنگام برگشت زدن یک تراکنش باید به ماشین درگاه پرداخت (Payment gateway) داده شود. ( این کلمه رمز در هنگام راه اندازی فروشنده برای بار اول از طرف بانک به فروشنده داده می شود)

نیازمندی‌های بانکی
فروشنده باید سپرده‌ای را نزد یکی از بانک‌های عضو شتاب افتتاح نماید و آن را به عنوان "سپرده فروشنده" به بانک سامان معرفی نماید. بانک سامان نیز به وی یک شماره Merchant ID اختصاص خواهد داد که در هر تراکنش فروشنده خود را با ارائه این شماره به بانک معرفی می‌کند.

iekrang
سه شنبه 19 دی 1385, 15:48 عصر
مثال اتصال به بانک سامان.البته این مثال ها رو خود سامان بر حسب زبان مورد نظرتون در اختیارتون میگذاره.:چشمک:

EHSH
سه شنبه 19 دی 1385, 16:39 عصر
از اساتید محترم اگر کسی کدهای مربوط به Shopping Card و کار با وب سرویس ها را باهاش قبلآ کار کرده ، ارایه کنه ممنون میشم !
اون مثال خود سامان خیلی ساده و پیش افتاده هستن و اکثرآ کدپیج صفحاتش بهم خورده

EHSH
چهارشنبه 20 دی 1385, 07:44 صبح
3. بسترسازی سمت فروشنده
انجام تراکنش
فروشنده خریدار را به نقطه‌ای می‌رساند که آماده دریافت پول و نهایی کردن خرید می‌باشد. در این نقطه فروشنده باید مراحل زیر را دنبال نماید:
1.فروشنده , خریدار را به وب سایت شبکه بانکی می فرستد : خریدار به وب سایت شبکه بانکی فرستاده (Redirect) می شود. اهم پارامترهایی که به این سایت به صورت متد POST داده می شود عبارتند از:
i. Total Amount
ii. Merchant ID
iii. Reservation Number
iv. Redirect URL

Total Amount مبلغ خرید می باشد که فروشنده می خواهد از خریدار دریافت نماید. Merchant ID کد فروشنده است که برای شناسایی فروشنده در هر تراکنش لازم است. فروشنده بهتر است از Reservation Number بجای session و cookie برای تعقیب رفت و برگشت خریدار به وب سایت بانک استفاده کند. آدرس شبکه بانکی برای ارسال پارامترها https://www.sb24.com/CardServices/controller می باشد. همانطور که مشاهده می شود این وب سایت از پروتکل وب امن و گواهینامه امنیتی استفاده می کند.

2.خریدار مشخصات کارت و رمز آن را در فرم مخصوص وارد می کند : در وب سایت شبکه بانکی، خریدار اطلاعات کارت خود را شامل بر موارد زیر باید وارد کند:
i. شماره کارت (PAN)
ii. کلمه عبور (PIN)
iii. تاریخ انقضای کارت (Expire Date)
iv. CVV2

توجه : موارد بالا در وب سایت شبکه بانکی پیاده سازی شده و فروشنده هیچ کار خاصی در موارد بالا ندارد.

3.وب سایت شبکه بانکی خریدار را به وب سایت فروشنده می فرستد: وب سایت شبکه بانکی پس از اتمام تراکنش، خریدار را دوباره به سایت فروشنده به آدرس RedirectURL می فرستد (Redirect می کند) و فروشنده پارامترهای پاس شده از وب سایت شبکه بانکی را با متد POST دریافت می‌کند. پارامترهای ارسالی عبارتند از:
i. Transaction State
ii. Reference Number
iii. Reservation Number

فروشنده می‌تواند بر اساس وضعیت تراکنش، موفقیت‌آمیز بودن تراکنش را تشخیص دهد.
فروشنده وضعیت تراکنش را تشخیص می دهد و آنرا چک می نماید: از روی فیلد وضعیت تراکنش فروشنده می تواند متوجه شود که آیا پرداخت موفقیت آمیز بوده است یا خیر. اگر خرید موفقیت آمیز نبود فروشنده موظف است خطای به وجود آمده را با توجه به فیلد وضعیت تراکنش برای خریدار شرح دهد و به او دقیقا بگوید چه اتفاقی روی داده است. اگر وضعیت تراکنش OK بود، فروشنده رسید دیجیتالی (Reference Number) را در پایگاه‌ داده خود جستجو می‌کند. این کار به منظور جلوگیری از Double Spending یا دوبار مصرف شدن یک رسید دیجیتالی می باشد.این مسئله کاملا به عهده فروشنده می باشد زیرا این رسید دیجیتالی به صورت منحصر به فرد (Unique) از طرف بانک صادر می شود و بانک در برابر دو بار مصرف شدن رسید دیجیتالی هیچ عکس العملی را نشان نمی دهد. در صورت عدم وجود آن در بانک اطلاعاتی فروشنده، Verify Web Methodرا با پارامترهای زیر صدا می‌زند:
ii. Reference Number
iii. Merchant ID

فروشنده باید این متد را صدا زند و به نتیجه دریافتی از تراکنش اکتفا ننماید. مقدار برگشتی این تابع باید برابر مقدار کل خرید (Total Amount) باشد و در غیر این صورت تراکنش دارای مشکل می باشد. با مقایسه این مبلغ و مبلغ فاکتوری که فروشنده خود در اختیار دارد 4 حالت زیر ممکن است به وجود آید:
i.اگر این دو مبلغ برابر باشند، فروشنده می تواند سرویس خود را ارایه نماید. (مرحله5)
ii.اگر مبلغ پرداختی کمتر از مبلغ فاکتور فروشنده باشد، فروشنده می تواند پس از اعلام به خریدار، کل سند را برگشت بزند.
iii.اگر مبلغ پرداختی بیشتر از مبلغ فاکتور نزد فروشنده باشد، فروشنده می تواند پس از اعلام به خریدار، ما به التفاوت سندها را برگشت بزند.
iv.خروجی این تابع اگر منفی باشد بیانگر رویداد خطایی می باشد که شرح این خطاها نیز در ضمیمه ب آورده شده است.



4.تکمیل روند خرید: در صورت درست بودن تراکنش، فروشنده رسید دیجیتالی را در رکورد مربوط به آن Reservation Number (که قبل از تراکنش به عنوان یک پارامتر به بانک پاس داده شده و بعد از تراکنش وب سایت بانک به فروشنده پاس داده است) در پایگاه داده‌ خود ذخیره می‌کند. در صورت درست نبودن مبلغ انتقالی نیز رسید دیجیتالی ذخیره می‌شود تا خریدار بتواند درخواست برگشت آن را به فروشنده ارائه دهد هرچند عملا نباید این حالت بوجود آید.

نکات:
الف) دوباره تاکید می‌شود که مصرف شدگی رسید دیجیتالی در سمت فروشنده تعیین و نگه‌داری می‌شود و نه در سمت بانک. بانک تنها اعتبار و مبلغ برگشت نخورده رسید دیجیتالی را گزارش می‌دهد. بدین ترتیب بانک می‌تواند مشخصات یک رسید دیجیتالی را چندین بار به فروشنده گزارش دهد بدون آن‌که وضعیت مصرف‌شدگی آن تغییر کند. حسن این روش در این است که اگر فروشنده‌ای یک رسید دیجیتالی را برای اعتبارسنجی به بانک بدهد و بانک نیز نتیجه را برای فروشنده ارسال دارد ولی این جواب به هر دلیلی به دست فروشنده نرسد، رسید دیجیتالی اعتبار خود را از دست نخواهد داد و فروشنده می تواند دوباره تقاضای اعتبارسنجی نماید و در صورت مثبت بودن نتیجه آن را در پایگاه داده خود ذخیره کرده و وضعیت رسید تراکنش را به مصرف شده تغییر دهد.
ب‌)در صورتی که جواب تابع verifyTransaction به هر دلیلی به دست فروشنده نرسد(Timeout شود، مشکل شبکه پیش آمده باشد و ... ) فروشنده باید به تعداد مشخصی مجددا سعی نماید. دقت شود تکرار در صورتی باید انجام شود که جواب به دست فروشنده نرسد، نه اینکه نتیجه verifyTransaction نشان دهنده خطا باشد ( منفی باشد). بعد از تعداد مشخصی تلاش از جانب فروشنده اگر هنوز جواب دریافت نشد، فروشنده باید سعی کند تراکنش را به طور کامل برگشت بزند.
ت‌)در صورتی که تراکنش به هر دلیلی در مدت زمان مشخصی ( در حال حاضر حداقل 1 ساعت و حداکثر 2 ساعت) از جانب فروشنده تایید نشد، بانک اقدام به برگشت زدن تراکنش خواهد کرد.
ث‌)در این روشِ پرداخت، امکان اینکه یک رسید دیجیتالی در دو فروشنده‌ی مختلف استفاده شود، وجود ندارد، چراکه جلوی این مساله در بانک و با توجه به شماره IP و شماره سپرده فروشنده گرفته می شود.
ج‌)مسولیت جلوگیری از Double Spending بر عهده فروشنده است و در صورت ضعفی در پیاده‌سازی سایت فروشنده، ضرر آن متوجه خود اوست.
ح‌)امنیت این بخش از سیستم به کمک SSL و ACL تامین شده است.
خ‌)مدیریت ریسک این بخش با استفاده از سقف‌های برداشت برای موجودیت خریدار و الگوهای فروش برای فروشنده صورت می‌گیرد. خریدار با تعیین سقف انتقال سپرده‌های خود می‌تواند میزان ریسک سپرده‌های خود را مدیریت نماید. همچنین فروشنده با معرفی الگوی فروش خود به بانک، حداکثر مبالغ فروش خود را معرفی می‌نماید.

EHSH
چهارشنبه 20 دی 1385, 18:16 عصر
برگشت تراکنش
فروشنده می‌تواند امکان لغو خرید را پیاده‌سازی کند. این امکان ممکن است به دو صورت مورد نیاز واقع شود:
•فروشنده لغو یک خرید را لازم بداند (برای مثال ممکن است فروشنده دیگر کالا یا سرویس مورد نظر خریدار را برای تحویل نداشته باشد).
•خریدار مایل به لغو خرید باشد.

در هر یک از دو حالت بالا، فروشنده می‌تواند یک خرید را به دو صورت برگشت زند:
1.برگشت کامل (Full Reverse): سند به صورت کامل برگشت خورده سپرده خریدار به مبلغ خرید بستانکار می‌شود و سپرده فروشنده به مبلغ خرید بدهکار. برای این کار فروشنده باید با استفاده از پایگاه‌داده خود، رسید دیجیتالی مربوط به Reservation Number مورد نظر خود را استخراج نماید و سپس با چک کردن وضعیت برگشت‌خوردگی آن مطمئن شود که قبلا برگشت جزئی یا کامل نخورده باشد (البته این چک برای صرفه‌جویی در ارتباطات شبکه‌ای است وگرنه این چک در سمت بانک نیز صورت می‌گیرد). وی سپس Reverse Web Method را با پارامترهای ذیل فرا خواهد خواند:

i. Merchant ID
ii. Merchant Password
iii. Reference Number
iv. Reverse Amount = Total Amount of Invoice

مقدار برگشتی این متد کدی است که نتیجه برگشت را نشان می‌دهد. فروشنده سپس پایگاه‌داده خود را به روز می‌نماید.

2.برگشت ناقص (Partial Reverse): فروشنده بخشی از مبلغ خرید را برگشت می‌زند. برای این کار فروشنده بر اساس Business Ruleهای خود مبلغ برگشتی را محاسبه می‌کند و با استفاده از پایگاه‌داده خود، رسید دیجیتالی مربوط به Reservation Number مورد نظر خود را استخراج می‌نماید. سپس فروشنده باید وضعیت برگشت خوردگی رسید دیجیتالی را چک کند و تنها در صورتی آن را برای برگشت جزئی استفاده نماید که یا پیشتر برگشت جزئی نخورده باشد و یا مبلغ برگشتی به اضافه مبالغ برگشت‌های جزئی پیشین از کل مبلغ سند بیشتر نباشد (البته این چک کردن نیز برای صرفه‌جویی در ارتباطات شبکه‌ای است چراکه این چک در سمت بانک نیز صورت می‌گیرد). در این صورت فروشنده می‌تواند همان Reverse Web Method را با پارامترهای ذیل فراخواند:
i. Merchant ID
ii. Merchant Password
iii. Reference Number
iv. Reverse Amount = Desired Reverse Amount

مقدار برگشتی این متد کدی است که نتیجه برگشت را نشان می‌دهد. در این حالت فروشنده باید پایگاه‌داده خود را به روز نماید و وضعیت رسید دیجیتالی مربوط به آن Reservation Number را برگشت خورده نماید تا برگشت‌های جزئی بعدی را مدیریت نماید.

EHSH
چهارشنبه 20 دی 1385, 18:34 عصر
سلام !
از دوستان کسی کد دات نت استفاده از وب سرویس ها داره ؟

Asad.Safari
جمعه 29 دی 1385, 12:44 عصر
سلام !
از دوستان کسی کد دات نت استفاده از وب سرویس ها داره ؟

یعنی چی کد دات نت ؟؟

شما برای استفاده از وب سرویس , اول باید یک web reference بسازی که این رفرنست
به همون وب سرویست اشاره میکنه .

بعد شما میای یه متغیر از نوع این وب سرویس تعریف میکنی و بعدش که دیگع راحت .
با این متغیره میتونی متدها وب سرویس رو اجرا کنی.

موفق باشید

EHSH
جمعه 29 دی 1385, 13:15 عصر
یعنی چی کد دات نت ؟؟

شما برای استفاده از وب سرویس , اول باید یک web reference بسازی که این رفرنست
به همون وب سرویست اشاره میکنه .

بعد شما میای یه متغیر از نوع این وب سرویس تعریف میکنی و بعدش که دیگع راحت .
با این متغیره میتونی متدها وب سرویس رو اجرا کنی.

موفق باشید

با سلام !
خوب بعد از اینکه WebService به رفرنس Add کردیم باید ، کاربر را به دروازه پرداخت بفرستیم . بعد بانک به صفحه Redirect URL نتیجه Transaction را برمیگردونه :
1 ) ما نمیدونیم کاربر چقدر در صفحه بانک میماند و احتمال زیاد session ما timeout میخوره .
2 ) شبکه شتاب با یه رسید دیجیتالی 20 کاراکتری کار میکنه ، حالا چه جوری ما با این رسید و seesion سایت فروشنده کارکنیم ؟
3) وضعیت تراکنش (موفقیت یا شکست) را چه جوری کنترل کنیم و تراکنش را تایید یا برگشت بزنیم ؟

ali_sorouri2005
پنج شنبه 17 اسفند 1385, 12:38 عصر
سلام جناب iekrang
با تشکر از فایل هایی که در مورد پرداخت شتاب گذاشتید
می خواستم اگه ممکنه در مورد هر کدوم از اون 6 تا فایل یه توضیح بدین که هر کدوم مربوط به کدوم قسمت کاره و چه کاری انجام میده؟؟
در ضمن کدوم فایل ها رو خود بانک به ما میده؟
من زیاد xml کار نکردم بعضی از اون فایل xml بود آیا برای این کار لازم xml رو هم کامل یاد داشته باشم یا در حد همین asp.net و کد نویسی با vb کافیه؟
در بعضی قسمت های کد از session استفاده شده آیا محدیت زمانی session مشکلی ایجاد نمیکنه؟
با تشکر فراوان از شما عزیز

greenway
جمعه 18 اسفند 1385, 10:51 صبح
با سلام !
خوب بعد از اینکه WebService به رفرنس Add کردیم باید ، کاربر را به دروازه پرداخت بفرستیم . بعد بانک به صفحه Redirect URL نتیجه Transaction را برمیگردونه :
1 ) ما نمیدونیم کاربر چقدر در صفحه بانک میماند و احتمال زیاد session ما timeout میخوره .
2 ) شبکه شتاب با یه رسید دیجیتالی 20 کاراکتری کار میکنه ، حالا چه جوری ما با این رسید و seesion سایت فروشنده کارکنیم ؟
3) وضعیت تراکنش (موفقیت یا شکست) را چه جوری کنترل کنیم و تراکنش را تایید یا برگشت بزنیم ؟

من با پارسیانش کار کردم اینجوری بود :
1- یک شماره یکتا می سازی
2- شماره ات رو برای سرویس بانک با PIN میفرستی
3- مشتری رو با ID که در مرحله 2 از بانک برات فرستاده شده به سایت بانک میفرستی
4- توی صفحه بازگشت شماره ات رو با یک متد دیگه تست میکنی که ترنزکشن انجام شده یا نه .
5- اگر انجام شده که شما رو به خیر و بانک رو به سلامت ، در غیر اینصورت اون شماره رو برگشت میزنی ( برای اطمینان )
این روند خیلی قشنگ پیاده سازی شده ، یک اشکالی هست و اون هم اینه که نتونستم این رو بدون ارسال روی هاست تست کنم ، چون سرویس بانک IP وب سرور شما رو توی فایروالش اضافه می کنه و به IP های ناشناس جواب همون مرحله 2 رو هم نمیده . ( البته این هم از نظر امنیتی امکان خوبیه )
در کل به نظرم بهتره که با خود بانک در مورد این مسایل صحبت کنی ، توی راهنماهاشون هم چیزهای خوبی مثل مثال وجود داره ، اگر چه کمی گنگ نوشته شده ولی مشکلاتت رو حل میکنه .

ParsaGostar
شنبه 26 خرداد 1386, 10:49 صبح
شما پس از بستن قرارداد بانک سامان یک MerchantID در اخیار شما میزاره .

برای ارسال کاربر برای خرید اول باید پارامترها را به صورت post به آدرس https://acquirer.sb24.com/CardServices/controller ارسال کنید .

مثال :


<form action="https://acquirer.sb24.com/CardServices/controller" method="post">


<input name="Amount" type="hidden" value="100" /> مبلغ به ریال

<input name="ResNum" type="hidden" value="30" /> شماره سفارش که شما باید ارسال کنید

<input name="MID" type="hidden" value="111111-11111" /> آی دی که سامان داده

<input name="RedirectURL" type="hidden" value="http://site.com/callback.aspx" /> آدرس برگشتی پس از خرید





<input name="Button1" type="submit" value="button" />



</form>


در صفحه Callback هم از کد زیر استفاده کنید :




Dim RefNum As String = HttpContext.Current.Request.Params("RefNum")
Dim ResNum As String = HttpContext.Current.Request.Params("ResNum")
Dim State As String = HttpContext.Current.Request.Params("State")

If Not (RefNum Is Nothing) Then

' saman code


If State = "OK" Then

If RefNum = "" Then

lbl.Text = "گویا خرید شما توسط بانک تایید شده است اما رسید دیجیتالی شما تایید نگشت"

Else


Dim PaymentWebService As New SamanWebService.ReferencePayment
Dim Result As Double = PaymentWebService.verifyTransaction(RefNum, "1111-11111")


If Result > 0 Then





G.PayPaidSaman(ResNum, RefNum)



lbl.Text = "خرید با موفقیت انجام شد"




Else

lbl.Text = "مشکلی در تایید خرید شما وجود دارد . کد خطا : " & Result


End If



End If


Else

lbl.Text = "متاسفانه بانک خرید شما را تایید نکرده است : " + State
End If




اگر مشکلی بود هستم در خدمتتون

ParsaGostar
شنبه 26 خرداد 1386, 11:07 صبح
بانک پارسیان پس از قرارداد LoginAccount در اختیار شما قرار خواهد داد .

ارسال کاربر به دروازه پرداخت پارسیان :




Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
orderid = 31
price = 4000
CallBackPage = "http://site.com/callback.aspx"
Dim service As New ParsianWebService.EShopService
Dim status As Byte = 0
Dim authority As Long = 0
Try
service.PinPaymentRequest(G.ParsianLoginAccount, price, orderid, CallBackPage, authority, status)
' G.PayUpdateBankCode(orderid, authority.ToString()) sabte authority code dar database
If status = 0 Then
Response.Redirect("https://www.pec24.com/pecpaymentgateway" + "?au=" + authority.ToString(), True)
End If
lbl.Text = "Status : " + (CType(status, PgwStatus)).ToString()
Catch err As Exception
lbl.Text = "ERROR : " + err.Message.ToString()
End Try
End Sub
End Class


در صفحه Callback هم از کد زیر استفاده کنید :




' parsian
Dim authorityStr As String = HttpContext.Current.Request.Params("au")
Dim rs As String = HttpContext.Current.Request.Params("rs")


If Not (authorityStr Is Nothing) Then
' parsian code
Dim service As New ParsianWebService.EShopService
If rs = 0 Then
Dim authority As Long = Long.Parse(authorityStr)
Dim status As Byte = 0
service.PinPaymentEnquiry(G.ParsianLoginAccount, authority, status)

If status = 0 Then
payid = G.GetPayID_BankCode(authorityStr)

' G.PayPaidParsian(payid) ok kardan karid dar db ba search bar asase authority ke avval kard save kardim dar db

lbl.Text = "خرید با موفقیت انجام شد"

Else
lbl.Text = "بروز خطا : " + (CType(status, PgwStatus)).ToString()
End If

Else
lbl.Text = perror
End If
'////
End If

oxygenws
دوشنبه 28 خرداد 1386, 00:35 صبح
برادر پارسا گستر، از این کد جایی هم استفاده کردی؟! یعنی تست شده؟!

ParsaGostar
دوشنبه 28 خرداد 1386, 08:47 صبح
بله ، این کد در سایت ما استفاده شده است و هچ مشکلی ندارد

oxygenws
دوشنبه 28 خرداد 1386, 14:52 عصر
خوبه :)
برنامه تون باگ امنیتی داره، اگر خواستی تو همین انجمن با من تماس بگیر تا بهت کمک کنم و هر وقت سایت هات درست شدند، بعد اینجا پابلیک اش می کنیم :)
خواستم برم سایتت رو تست کنم، بهم ارور داد:


ERROR : Request for the permission of type 'System.Data.OleDb.OleDbPermission, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' failed

ParsaGostar
دوشنبه 28 خرداد 1386, 14:56 عصر
من کد اصلی سایت را نذاشتم فقط کد ارتباط با وب سرویس بانک ها را گذاشتم . کدهای مربوط به دیتابیس را حذف کردم وگرنه کد اصلی خیلی بیشتره .

ParsaGostar
دوشنبه 28 خرداد 1386, 15:05 عصر
خوبه :)
برنامه تون باگ امنیتی داره، اگر خواستی تو همین انجمن با من تماس بگیر تا بهت کمک کنم و هر وقت سایت هات درست شدند، بعد اینجا پابلیک اش می کنیم :)
خواستم برم سایتت رو تست کنم، بهم ارور داد:


ERROR : Request for the permission of type 'System.Data.OleDb.OleDbPermission, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' failed



شما به آدرس سایت اصلی رفتید که بله قسمت سفارش آنلاین فعلا غیر فعال است .

آدر سایتی که ما برای پرداخت اینترنتی نوشتیم pay.parsagostar.com می باشد که دروازه پرداختی است برای کلیه سایت های ما که کد سفارش توسط QueryString ارسال می شود .

برای مثال :

http://pay.parsagostar.com/?order=36b4d8a1767444d19bfb

afarinn62
دوشنبه 28 خرداد 1386, 16:14 عصر
من اون کدها را که گذاشته بودید را با visual studio2005 باز کردم کلی خطا داد و نشد که وارد حالت design بشم اومدم web service را اضافه کنم آدرس https://www.sb24.com/CardServices/controller یا
https://www.sb24.com بهش دادم ولی هیچی پیدا نکرد بابا به جای این همه اطلاعات در هم و برهم مفید یکی بیاد بگه منی که الان یه سایت دارم دقیقا و مرتب چه کارایی بکنم تا بتونم از این امکاناتی که گفتید استفاده کنم . من الان نمیدونم چهطور web service را اضافه کنم و چه صفحات وبی میخوام توشون چی باشه هدفسون چیه و از همتونم به خاطر اطلاعاتی که گذاشته بودید ممنونم ...

oxygenws
دوشنبه 28 خرداد 1386, 16:18 عصر
برای چه زبونی می خوای؟!!
اگر با خود asp.net و وب سرویس هاش مشکل داری، برو تو بخش مربوطه بپرس.

GentleGuy
یک شنبه 11 شهریور 1386, 15:53 عصر
سلام
چند تا سئوال در زمینه پرداخت الکترونیکی داشتم
امیدوارم اساتید لطف کرده و جواب دهند
1. آیا بانک سامان درصدی را بابت هر خرید به عنوان کارمزد کسر میکند؟این مبلغ چند درصد هست؟
2.آیا برای استفاده از پروتکل پرداخت اینترنتی باید با بانک مذاکره کرد و فرارداد بست؟
3.آیا بانک مدارک خاصی برای "ارائه مجوز استفاده از پروتکل" درخواست میکند؟
4.آیا دریافت مجوز و پروتکل هزینه اولیه دارد؟
با تشکر

GentleGuy
شنبه 17 شهریور 1386, 15:11 عصر
. آیا بانک سامان درصدی را بابت هر خرید به عنوان کارمزد کسر میکند؟این مبلغ چند درصد هست؟
2.آیا برای استفاده از پروتکل پرداخت اینترنتی باید با بانک مذاکره کرد و فرارداد بست؟
3.آیا بانک مدارک خاصی برای "ارائه مجوز استفاده از پروتکل" درخواست میکند؟
4.آیا دریافت مجوز و پروتکل هزینه اولیه دارد؟
کسی اطلاعاتی در این زمینه نداره؟؟؟

zfarhad2000
شنبه 17 شهریور 1386, 16:50 عصر
1- بله بانک درصدی رو برای هر خرید دریافت می کنه که این درصد معمولا ناچیز هستش بین 2 الی 4 درصد
2- بله باید درخواست بدید و با بانک قرارداد ببندید تا امکان استفاده از امکانات پرداخت اینترنتی رو بهتون بدن
3- بستگی به این داره که به عنوان شخص حقیقی با حقوقی می خواد از این سرویس ها استفاده کنید هرکدوم مدارک و فرمهای خاص خودش رو داره
4- هزینه سالیانه داره که اگه عوض نشده باشه 20000 تومان هستش

این اطلاعات مربوط به بانک سامان هستش ولی خوب سایر بانکها هم تقریبا همین طوری هستن فقط مبالغ دریافتی شون یکم اینور اونور میشه.

sinpin
دوشنبه 02 مهر 1386, 11:23 صبح
دوستان در مورد نحوه ی قرارداد با اداره پست جهت تحویل کالا اطلاعاتی دارند ؟
آیا شرایط و تعرفه خاصی داره ؟

marzieh57
چهارشنبه 04 مهر 1386, 11:21 صبح
سلام دوستان
من با بانک پارسیان قرارداد دارم
بانک کدهای مربوطه را برای من ارسال کرده . که از Soap در آن استفاده شده ، اما روی سروری که ما باهاش کار می کنیم نصب نیست
حالا به نظرتون ما باید چی کار کنیم ؟

hesam_a110
دوشنبه 16 مهر 1386, 09:34 صبح
با سلام به همگی
در مورد وصل شدن به بانک سامان به یک مشکلی بر خوردم که هرچه تلاش کردم برطرف نشد خیلی ممنون می شم که کسی این مشکل رو بر طرف کنه

تا آن جایی که به بانک برود و در بانک هم مشکلی نیست ولی موقع خوندن
مقادیر را چک کردم مقدار های فرستاده شده و گرفته شده درست هستند . (تصویر 1)


این در صورتی می باشد که قسمت کدهای بعدی وب سرویس رو کامنت کرده باشم ولی در صورتی که فعال باشد پیغام تصویر شماره 2 را می دهد
ممنون می شم کسی من را یاری کند قطعه کد را هم می گزارم مکنه ایراد از کد باشه





string strMess;
string t_strRefNum;
string t_strResNum;
double TA;
WebServices.ReferencePayment PaymentWebService = new WebServices.ReferencePayment();
string MID = "XXXXXX-XXXX";

double t_lAmount ;
string isError;
string strMsg;


t_lAmount = double.Parse(Session["Amount"].ToString());
t_strRefNum = Request["RefNum"].ToString();
t_strResNum = Request["ResNum"].ToString();


//if (Request["RefNum"] != null)
// Response.Write("***Request RefNum " + Request["RefNum"]);
//Response.Write("<br></br>");
//if (Request["ResNum"] != null)
// Response.Write(" ***Request ResNum " + Request["ResNum"]);
//Response.Write("<br></br>");
//if (Request["State"] != null)
// Response.Write(" ***Request State " + Request["State"]);
//Response.Write("<br></br>");
//Response.Write("***HttpContext.Current.Request.Params[RefNum]:"+ HttpContext.Current.Request.Params["RefNum"]);
//Response.Write("<br></br>");
//Response.Write("***HttpContext.Current.Request.Params[ResNum]:"+ HttpContext.Current.Request.Params["ResNum"]);
//Response.Write("<br></br>");
//Response.Write("***HttpContext.Current.Request.Params[State]:"+ HttpContext.Current.Request.Params["State"]);
if (t_strRefNum != null)
{
if (Request["State"] != "OK")
{
///p15-16
///
ErrorTable1516();
}
else
{
dt_refnum = maincls.dtMain("SELECT ReservationNumber, RefrenceNumber FROM dbo.Customers where RefrenceNumber='" + t_strRefNum + "' ");
//در صورت تکراری نبودن ویا عدم و جود در دیتا بیس ما
if (dt_refnum.Rows.Count == 0)
{//69600000000;//
TA = PaymentWebService.verifyTransaction(t_strRefNum, MID);
if (TA > 0)
{
if (TA == t_lAmount)
{
//////رفرنس نامبری را که بانک به ماداده ایت را در جدول مربوطه ذخیره می کنیم
updateTableCustomer(t_strResNum, t_strRefNum, "N", 0);
//////در اینجا پرداخت پول موفقیت آمیز بوده است
}//if
else
{

sweb
سه شنبه 17 مهر 1386, 03:40 صبح
من متاسفانه نتونستم تمامی پست ها رو بخونم.

خواستم بپرسم برای زبان PHP نیز API خاصی در نظر گرفته شده یا خیر اگه هست یه لینک بهم معرفی کنین. من تو سایت خود بانک سامان چیزی پیدا نکردم.

اگر هم نیست جای تاسف داره!!! :|

mhpcir
دوشنبه 23 مهر 1386, 01:46 صبح
من متاسفانه نتونستم تمامی پست ها رو بخونم.

خواستم بپرسم برای زبان PHP نیز API خاصی در نظر گرفته شده یا خیر اگه هست یه لینک بهم معرفی کنین.

در سیستم پرداخت سامان از پروتکل HTTP و تکنولوژی وب سرویس (مبتنی بر SOAP) استفاده شده.بنابراین در هر محیط برنامه نویسی که از این دو پشتیبانی شود امکان کار وجود دارد. در حال حاضر asp.net, J2EE, Delphi, PHP, ASP , PERL و ... این امکان را دارند. فایل مثال برای کار با وب سرویس سامان در PHP ضمیمه شده است.


من تو سایت خود بانک سامان چیزی پیدا نکردم.

اگر هم نیست جای تاسف داره!!! :|
اگر پیدا می کردید جای تعجب داشت، چون برای رعایت مسائل امنیتی این اطلاعات فقط در اختیار کسانی قرار داده می شود که با بانک قرارداد دارند.

balvardi
سه شنبه 08 آبان 1386, 20:23 عصر
سلام
من php کار هستم.
اما برای کار با سامان مشکل دارم .
در پارسیان متغیرها به طور واضح مشخص شده و توابع هم معرفی شده اند اما در سامان هیچ توضیحی پیدا نکردم

oger_wow
شنبه 19 آبان 1386, 12:27 عصر
سلام به آقایون خواهش میکنم به من کد اتصال به سامان و پارسیان رو مخبت کنید بدید. بدجوری لازم دارم

hesam_a110
شنبه 19 آبان 1386, 16:39 عصر
دردود
یه آدم خیر پیدا میشه کمک کنه
من که دیگه عقلم به جایی قد نمیده
ممنون از همگی

robatik
چهارشنبه 08 آبان 1387, 10:12 صبح
ممنون میشم اگه طریقه ساخت web reference بگید.

Asad.Safari
چهارشنبه 08 آبان 1387, 11:32 صبح
ممنون میشم اگه طریقه ساخت web reference بگید.



In Solution Explorer, right-click the name of the project to add the Web service to and then click Add Web Reference.

The Add Web Reference dialog box is displayed.


In the URL box, enter the URL of the Web service to use. If you do not know the URL, use the links in the browse pane to locate the Web service you want.

s.mohammadi
چهارشنبه 06 خرداد 1388, 15:28 عصر
من مشکل دارم با پرداخت پارسیان این خطا رو بهم می ده کسی می دونه چیه ؟

The underlying connection was closed: Could not establish trust relationship for the SSL/TLS secure channel.

balabala
یک شنبه 15 فروردین 1389, 20:58 عصر
دوستان، آیا پس از یک پرداخت موفقیت آمیز در بانک سامان، وجه بلافاصله به حساب اصلی واریز میشود یا تاخیر خواهد داشت؟ در قسمت مدیریت پذیرنده، وضعیت تراکنشها "خرید" هست اما وجهی هنوز به حساب اصلی واریز نشده.

hamed323
یک شنبه 22 فروردین 1389, 21:48 عصر
سلام دوستان ...
من میخوام داخل صفحه سایتم یه لینک پرداخت قرار بدم ...(و پرداخت هم بانک ملی هستش) کسی میتونه کمک کنه ...البته با هزینه هستش..

hamid_massaelly
پنج شنبه 30 اردیبهشت 1389, 08:28 صبح
من هم عین خطای s.mohammadi (http://barnamenevis.org/forum/member.php?u=105050) دارم کسی هست کمکم کنه این پشتیبانب افتزاح ملت هم که جواب نمی دهند تازه طلبکار آدم هم می شوند خواهش می کنم مرا راهنمایی کنید.

mj_developer
چهارشنبه 27 بهمن 1389, 21:02 عصر
شما پس از بستن قرارداد بانک سامان یک MerchantID در اخیار شما میزاره .

برای ارسال کاربر برای خرید اول باید پارامترها را به صورت post به آدرس https://acquirer.sb24.com/CardServices/controller ارسال کنید .

مثال :


<form action="https://acquirer.sb24.com/CardServices/controller" method="post">


<input name="Amount" type="hidden" value="100" /> مبلغ به ریال

<input name="ResNum" type="hidden" value="30" /> شماره سفارش که شما باید ارسال کنید

<input name="MID" type="hidden" value="111111-11111" /> آی دی که سامان داده

<input name="RedirectURL" type="hidden" value="http://site.com/callback.aspx" /> آدرس برگشتی پس از خرید





<input name="Button1" type="submit" value="button" />



</form>


در صفحه Callback هم از کد زیر استفاده کنید :




Dim RefNum As String = HttpContext.Current.Request.Params("RefNum")
Dim ResNum As String = HttpContext.Current.Request.Params("ResNum")
Dim State As String = HttpContext.Current.Request.Params("State")

If Not (RefNum Is Nothing) Then

' saman code


If State = "OK" Then

If RefNum = "" Then

lbl.Text = "گویا خرید شما توسط بانک تایید شده است اما رسید دیجیتالی شما تایید نگشت"

Else


Dim PaymentWebService As New SamanWebService.ReferencePayment
Dim Result As Double = PaymentWebService.verifyTransaction(RefNum, "1111-11111")


If Result > 0 Then





G.PayPaidSaman(ResNum, RefNum)



lbl.Text = "خرید با موفقیت انجام شد"




Else

lbl.Text = "مشکلی در تایید خرید شما وجود دارد . کد خطا : " & Result


End If



End If


Else

lbl.Text = "متاسفانه بانک خرید شما را تایید نکرده است : " + State
End If




اگر مشکلی بود هستم در خدمتتون


منظور از G در دستور

G.PayPaidSaman(ResNum, RefNum)

چی هست؟

reza4zar
شنبه 14 اسفند 1389, 11:51 صبح
منظور از G در دستور

G.PayPaidSaman(ResNum, RefNum)

چی هست؟

MMSHFE
چهارشنبه 22 بهمن 1393, 15:34 عصر
دوست عزیز، این سایت مکان تبلیغ نیست. از بخش آگهی های سایت استفاده کنید. درغیر اینصورت مطابق قوانین برخورد خواهد شد.

bigz1000
شنبه 29 فروردین 1394, 13:52 عصر
شما پس از بستن قرارداد بانک سامان یک MerchantID در اخیار شما میزاره .

برای ارسال کاربر برای خرید اول باید پارامترها را به صورت post به آدرس https://acquirer.sb24.com/CardServices/controller ارسال کنید .

مثال :


<form action="https://acquirer.sb24.com/CardServices/controller" method="post">


<input name="Amount" type="hidden" value="100" /> مبلغ به ریال

<input name="ResNum" type="hidden" value="30" /> شماره سفارش که شما باید ارسال کنید

<input name="MID" type="hidden" value="111111-11111" /> آی دی که سامان داده

<input name="RedirectURL" type="hidden" value="http://site.com/callback.aspx" /> آدرس برگشتی پس از خرید





<input name="Button1" type="submit" value="button" />



</form>


در صفحه Callback هم از کد زیر استفاده کنید :




Dim RefNum As String = HttpContext.Current.Request.Params("RefNum")
Dim ResNum As String = HttpContext.Current.Request.Params("ResNum")
Dim State As String = HttpContext.Current.Request.Params("State")

If Not (RefNum Is Nothing) Then

' saman code


If State = "OK" Then

If RefNum = "" Then

lbl.Text = "گویا خرید شما توسط بانک تایید شده است اما رسید دیجیتالی شما تایید نگشت"

Else


Dim PaymentWebService As New SamanWebService.ReferencePayment
Dim Result As Double = PaymentWebService.verifyTransaction(RefNum, "1111-11111")


If Result > 0 Then





G.PayPaidSaman(ResNum, RefNum)



lbl.Text = "خرید با موفقیت انجام شد"




Else

lbl.Text = "مشکلی در تایید خرید شما وجود دارد . کد خطا : " & Result


End If



End If


Else

lbl.Text = "متاسفانه بانک خرید شما را تایید نکرده است : " + State
End If




اگر مشکلی بود هستم در خدمتتون

سلام. ممنون از توضیحات. به همین روش این کار رو پیاده سازی کردیم.ولی متاسفانه از بعد از پرداخت از بانک و برگشت به صفحه ای که در callback معرفی کردیم اون مقادیر که باید در کوئری استرینگ به عنوان RefNum و ResNum باشه رو بانک بر نمی گردونه.عملا فقط اون url مربوط به callback رو صدا می زنه. در حالی که پول از حساب کم می شه (و البته بعد از چند دقیقه چون وریفای نمی شه برمی گرده به حساب).
مشکل از چیه؟!