# مباحث مرتبط با توسعه وب > توسعه وب (Web Development) >  پرداخت الکترونیکی (شتاب)

## EHSH

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

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

----------


## عفت بزرگه

سلام 

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

----------


## EHSH

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

	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

مثال اتصال به بانک سامان.البته این مثال ها رو خود سامان بر حسب زبان مورد نظرتون در اختیارتون میگذاره. :چشمک:

----------


## EHSH

از اساتید محترم اگر کسی کدهای مربوط به Shopping Card و کار با وب سرویس ها را باهاش قبلآ کار کرده ، ارایه کنه ممنون میشم !
اون مثال خود سامان خیلی ساده و پیش افتاده هستن و اکثرآ کدپیج صفحاتش بهم خورده

----------


## EHSH

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

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

     در هر یک از دو حالت بالا، فروشنده می‌تواند یک خرید را به دو صورت برگشت زند:
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

سلام !
از دوستان کسی کد دات نت استفاده از وب سرویس ها داره ؟

----------


## Asad.Safari

> سلام !
> از دوستان کسی کد دات نت استفاده از وب سرویس ها داره ؟


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

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

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

موفق باشید

----------


## EHSH

> یعنی چی کد دات نت ؟؟
> 
> شما برای استفاده از وب سرویس ,  اول باید یک web reference  بسازی که این رفرنست
> به همون وب سرویست اشاره میکنه .
> 
> بعد شما میای یه متغیر از نوع این وب سرویس تعریف میکنی و بعدش که دیگع راحت .
> با این متغیره میتونی متدها وب سرویس رو اجرا کنی.
> 
> موفق باشید


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

----------


## ali_sorouri2005

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

----------


## greenway

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


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

----------


## ParsaGostar

شما پس از بستن قرارداد بانک سامان یک 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

بانک پارسیان پس از قرارداد 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

برادر پارسا گستر، از این کد جایی هم استفاده کردی؟! یعنی تست شده؟!

----------


## ParsaGostar

بله ، این کد در سایت ما استفاده شده است و هچ مشکلی ندارد

----------


## oxygenws

خوبه :)
برنامه تون باگ امنیتی داره، اگر خواستی تو همین انجمن با من تماس بگیر تا بهت کمک کنم و هر وقت سایت هات درست شدند، بعد اینجا پابلیک اش می کنیم :)
خواستم برم سایتت رو تست کنم، بهم ارور داد:

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

----------


## ParsaGostar

من کد اصلی سایت را نذاشتم فقط کد ارتباط با وب سرویس بانک ها را گذاشتم . کدهای مربوط به دیتابیس را حذف کردم وگرنه کد اصلی خیلی بیشتره .

----------


## ParsaGostar

> خوبه :)
> برنامه تون باگ امنیتی داره، اگر خواستی تو همین انجمن با من تماس بگیر تا بهت کمک کنم و هر وقت سایت هات درست شدند، بعد اینجا پابلیک اش می کنیم :)
> خواستم برم سایتت رو تست کنم، بهم ارور داد:
> 
> 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

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

----------


## oxygenws

برای چه زبونی می خوای؟!!
اگر با خود asp.net و وب سرویس هاش مشکل داری، برو تو بخش مربوطه بپرس.

----------


## GentleGuy

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

----------


## GentleGuy

> . آیا بانک سامان درصدی را بابت هر خرید به عنوان کارمزد کسر میکند؟این مبلغ چند درصد هست؟
> 2.آیا برای استفاده از پروتکل پرداخت اینترنتی باید با بانک مذاکره کرد و فرارداد بست؟
> 3.آیا بانک مدارک خاصی برای "ارائه مجوز استفاده از پروتکل" درخواست میکند؟
> 4.آیا دریافت مجوز و پروتکل هزینه اولیه دارد؟


کسی اطلاعاتی در این زمینه نداره؟؟؟

----------


## zfarhad2000

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

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

----------


## sinpin

دوستان در مورد نحوه ی قرارداد با اداره پست جهت تحویل کالا اطلاعاتی دارند ؟
آیا شرایط و تعرفه خاصی داره ؟

----------


## marzieh57

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

----------


## hesam_a110

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

تا آن جایی که به بانک برود و در بانک هم مشکلی نیست ولی موقع خوندن
مقادیر را چک کردم مقدار های فرستاده شده و گرفته شده درست هستند . (تصویر 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.Par  ams[RefNum]:"+ HttpContext.Current.Request.Params["RefNum"]);
//Response.Write("<br></br>");
//Response.Write("***HttpContext.Current.Request.Par  ams[ResNum]:"+ HttpContext.Current.Request.Params["ResNum"]);
//Response.Write("<br></br>");
//Response.Write("***HttpContext.Current.Request.Par  ams[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

من متاسفانه نتونستم تمامی پست ها رو بخونم.

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

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

----------


## mhpcir

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


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




> من تو سایت خود بانک سامان چیزی پیدا نکردم.
> 
> اگر هم نیست جای تاسف داره!!! :|


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

----------


## balvardi

سلام
من php کار هستم.
اما برای کار با سامان مشکل دارم .
در پارسیان متغیرها به طور واضح مشخص شده و توابع هم معرفی شده اند اما در سامان هیچ توضیحی پیدا نکردم

----------


## oger_wow

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

----------


## hesam_a110

دردود
یه آدم خیر پیدا میشه کمک کنه
من که دیگه عقلم به جایی قد نمیده
ممنون از همگی

----------


## robatik

ممنون میشم اگه طریقه ساخت web reference  بگید.

----------


## Asad.Safari

> ممنون میشم اگه طریقه ساخت 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

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

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

----------


## balabala

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

----------


## hamed323

سلام دوستان ...
من میخوام داخل صفحه سایتم یه لینک پرداخت قرار بدم ...(و پرداخت هم بانک ملی هستش) کسی میتونه کمک کنه ...البته با هزینه هستش..

----------


## hamid_massaelly

من هم عین خطای s.mohammadi دارم کسی هست کمکم کنه این پشتیبانب افتزاح ملت هم که جواب نمی دهند تازه طلبکار آدم هم می شوند خواهش می کنم مرا راهنمایی کنید.

----------


## mj_developer

> شما پس از بستن قرارداد بانک سامان یک MerchantID در اخیار شما میزاره .
> 
> برای ارسال کاربر برای خرید اول باید پارامترها را به صورت post به آدرس https://acquirer.sb24.com/CardServices/controller ارسال کنید .
> 
> مثال :
> 
> <form action="https://acquirer.sb24.com/CardServices/controller"  method="post">
> 
> 
> ...



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

G.PayPaidSaman(ResNum, RefNum)

چی هست؟

----------


## reza4zar

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

G.PayPaidSaman(ResNum, RefNum)

چی هست؟

----------


## MMSHFE

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

----------


## bigz1000

> شما پس از بستن قرارداد بانک سامان یک MerchantID در اخیار شما میزاره .
> 
> برای ارسال کاربر برای خرید اول باید پارامترها را به صورت post به آدرس https://acquirer.sb24.com/CardServices/controller ارسال کنید .
> 
> مثال :
> 
> <form action="https://acquirer.sb24.com/CardServices/controller"  method="post">
> 
> 
> ...


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

----------

