# Native Code > برنامه نویسی در Delphi > مباحث عمومی دلفی و پاسکال > سوال: ارتباط با درگاه پرداخت اینترنتی

## دلفــي

با سلام خدمت دوستان گرامی
جهت ارتباط با درگاه پرداخت اینترنتی (بانک پاسارگاد) از طریق شاپرک توسط دلفی آیا سورس آماده ای وجود داره؟
من کمی جستجو کردم برای زبانهای C#‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎ و PHP و ASP نمونه سورس زیاده ولی برای دلفی نتونستم چیزی پیدا کنم
اگه از دوستان کسی در این زمینه اطلاعاتی داره لطفا کمک کنه

در فایل ضمیمه شده یک نمونه برای پیاده سازی درگاه بانک ملی در asp.net قرار دادم

c29a6257a1e3465d8bc82542f04a1908.jpg

----------


## مهدی کرامتی

منظورت سورس برای استفاده در ASP.NET است؟

نوشتنش کار سختی نیست، کل پروسه کار رو در راهنماش توضیح داده.

----------


## دلفــي

نه سورس دلفی میخوام
سورس برای asp  توی نت زیاده

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

----------


## BORHAN TEC

با سلام، 
انجام این کار زیاد هم سخت نیست. هر سایتی یک وبسرویس برای این کار داره و معمولاً وبسرویس های بانکها به صورت Soap هستند. در ویدئوهایی که در زیر لینکش رو قرار دادم کار با وبسرویس در دلفی رو آموزش دادم و برای بانک هم روش کاملاً مشابه هست فقط باید مستنداتش رو بخونید و بیشتر دقت کنید. چند وقت پیش با دلفی برای زرین پال رو انجام دادم و کار عجیب و غریبی هم نبود و خیلی راحت انجام شد.

https://www.aparat.com/v/7SB5R
https://www.aparat.com/v/I7nxi

موفق باشید ...

----------


## مهدی کرامتی

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

من برای پست کردن اطلاعات، فرم HTML به صورت ران تایم درست کردم و مقدارهای مورد نظر اونها را در قالبی input های type='hidden' داخل فرم قرار دادم، در نهایت هم فرم رو از طریق جاوا اسکریپت Submit کردم.

----------


## دلفــي

این روش درسته
من از کد زیر برای ارسال استفاده می کنم ولی خطای UnKnown Protocol میده !!!


procedure TForm1.Button2Click(Sender: TObject);
var
  lJSO : ISuperObject;
  lRequest: TStringStream;
  lResponse: String;
begin


  IdHTTP := TIdHTTP.Create;
  lJSO := SO('"{ "InvoiceNumber": "123456", "InvoiceDate":"2019/10/20","TerminalCode":'+
   ' "2222222", "MerchantCode": "1111111", "Amount":"10000","RedirectAddress":" https://www.'+
   'Test.ir/PaymentResult","Timestamp":"2019/10/20 15:15:13", "Action":"1003",\'+
   '"Mobile":"09122222222", "Email":"BuyerName@Sample.ir" }";');
  lRequest := TStringStream.Create(lJSO.AsString, TEncoding.UTF8);
  try
    IdHTTP.Request.ContentType := 'application/json';
    IdHTTP.Request.Charset := 'utf-8';
    try
      lResponse := IdHTTP.Post('"https://pep.shaparak.ir/Api/v1/Payment/GetToken', lRequest);
      Memo1.Text := (lResponse);
    except
      on E: Exception do
        ShowMessage('Error on request:'#13#10 + E.Message);
    end;
  finally
    lRequest.Free;
  end;
  lJSO := nil;


end;

جناب آقای *کرامتی* اگه امکانش هست نمونه کدی که شما استفاده می کنید جهت راهنمایی به بنده هم ارسال کنید
ممنون

----------


## دلفــي

به صفحه تستی که خود بانک ارائه کرده یه سر بزنید https://www.pep.co.ir/ipgtest
منم میخوام چیزی مشابه همین فقط برای خرید با سورس دلفی توی اینتراوب ایجاد کنم

----------


## Mask

> این روش درسته
> من از کد زیر برای ارسال استفاده می کنم ولی خطای UnKnown Protocol میده !!!
> 
> 
> procedure TForm1.Button2Click(Sender: TObject);
> var
>   lJSO : ISuperObject;
>   lRequest: TStringStream;
>   lResponse: String;
> ...


دلیلش اینه که دارید از https استفاده میکنین.
باید dll های مربوطه کنار پروژتون باشه و کامپوننتهای ssl رو بر روی فرم گزاشته و به http اساین کنین.

----------


## دلفــي

فایل libeay32.dll رو آپدیت کردم مشکل پیغام خطای UnKnown Protocol حل شد، الان طبق کد زیر اطلاعات رو به صورت JSon ارسال می کنم ولی در Request دوباره یه خطای جدید میده! (HTTP/1.1 500 Internal Server Error_)_

procedure TForm1.Button1Click(Sender: TObject);
var
  HTTP: TIdHTTP;
  RequestBody: TStream;
  ResponseBody: string;
begin
  Memo1.Lines.Clear;
  HTTP := TIdHTTP.Create;
  try
    try
      RequestBody := TStringStream.Create('{'+
   '"InvoiceNumber":"9999999",'+
   '"InvoiceDate":"1398/11/08 11:45:12",'+
   '"TerminalCode":"88888888",'+
   '"MerchantCode":"7777777",'+
   '"Amount":"200000",'+
   '"RedirectAddress":"https://www.test.ir",'+
   '"Timestamp":"2019/02/10 11:15:13",'+
   '"Action":"1003",'+
   '"Mobile":"0911111111",'+
   '"Email":"info@test.ir",' +
   '"sign":"aMfVa...zlaRt"'+
   '}', TEncoding.UTF8);
      try
        HTTP.Request.Accept := 'application/json';
        HTTP.Request.ContentType := 'application/json';
        ResponseBody := HTTP.Post('https://pep.shaparak.ir/gateway.aspx',RequestBody);
        Memo1.lines.add(ResponseBody);
        Memo1.lines.add(HTTP.ResponseText);
      finally
        RequestBody.Free;
      end;
    except
      on E: EIdHTTPProtocolException do
      begin
        Memo1.lines.add(E.Message);
        Memo1.lines.add(E.ErrorMessage);
      end;
      on E: Exception do
      begin
        Memo1.lines.add(E.Message);
      end;
    end;
  finally
    HTTP.Free;
  end;
  ReadLn;
  ReportMemoryLeaksOnShutdown := True;
end;

----------

