diff --git a/Demo/AndroidManifest.template.xml b/Demo/AndroidManifest.template.xml new file mode 100644 index 0000000..10c95df --- /dev/null +++ b/Demo/AndroidManifest.template.xml @@ -0,0 +1,45 @@ + + + + + + <%uses-permission%> + + + + <%provider%> + <%application-meta-data%> + <%uses-libraries%> + <%services%> + + + + + + + + + + <%activity%> + <%receivers%> + + + diff --git a/Demo/Demo.deployproj b/Demo/Demo.deployproj new file mode 100644 index 0000000..176d78c --- /dev/null +++ b/Demo/Demo.deployproj @@ -0,0 +1,277 @@ + + + + 12 + + + K4AXB6010422F4D + K4AXB6010422F4D + + iPhone5 + + + + + + Demo\ + Demo.exe + ProjectOutput + 0 + + + True + True + + + + + + + + Demo.app\ + libcgunwind.1.0.dylib + DependencyModule + 1 + + + True + + + Demo.app\ + libpcre.dylib + DependencyModule + 1 + + + True + + + + + Demo\res\drawable-xlarge\ + splash_image.png + Android_SplashImage960 + 1 + + + True + + + Demo\res\drawable-xhdpi\ + ic_launcher.png + Android_LauncherIcon96 + 1 + + + True + + + Demo\res\drawable-hdpi\ + ic_launcher.png + Android_LauncherIcon72 + 1 + + + True + + + Demo\res\drawable-xhdpi\ + ic_notification.png + Android_NotificationIcon48 + 1 + + + True + + + Demo\res\drawable-xxxhdpi\ + ic_notification.png + Android_NotificationIcon96 + 1 + + + True + + + Demo\res\drawable-large\ + splash_image.png + Android_SplashImage640 + 1 + + + True + + + Demo\res\drawable-xxhdpi\ + ic_notification.png + Android_NotificationIcon72 + 1 + + + True + + + Demo\library\lib\armeabi-v7a\ + libDemo.so + AndroidLibnativeArmeabiv7aFile + 1 + + + True + + + Demo\res\drawable-normal\ + splash_image.png + Android_SplashImage470 + 1 + + + True + + + Demo\library\lib\mips\ + libDemo.so + AndroidLibnativeMipsFile + 1 + + + True + + + Demo\library\lib\armeabi\ + libDemo.so + AndroidLibnativeArmeabiFile + 1 + + + True + + + Demo\library\lib\arm64-v8a\ + libDemo.so + ProjectOutput + 1 + + + True + True + + + Demo\res\drawable-ldpi\ + ic_launcher.png + Android_LauncherIcon36 + 1 + + + True + + + Demo\res\drawable-xxhdpi\ + ic_launcher.png + Android_LauncherIcon144 + 1 + + + True + + + Demo\res\values\ + colors.xml + Android_Colors + 1 + + + True + + + Demo\ + AndroidManifest.xml + ProjectAndroidManifest + 1 + + + True + + + Demo\res\drawable-mdpi\ + ic_notification.png + Android_NotificationIcon24 + 1 + + + True + + + Demo\res\values\ + styles.xml + AndroidSplashStyles + 1 + + + True + + + Demo\res\drawable-hdpi\ + ic_notification.png + Android_NotificationIcon36 + 1 + + + True + + + Demo\res\drawable\ + splash_image_def.xml + AndroidSplashImageDef + 1 + + + True + + + Demo\res\drawable-mdpi\ + ic_launcher.png + Android_LauncherIcon48 + 1 + + + True + + + Demo\classes\ + classes.dex + AndroidClassesDexFile + 1 + + + True + + + Demo\res\drawable-small\ + splash_image.png + Android_SplashImage426 + 1 + + + True + + + Demo\res\values-v21\ + styles.xml + AndroidSplashStylesV21 + 1 + + + True + + + Demo\res\values\ + strings.xml + Android_Strings + 1 + + + True + + + diff --git a/Demo/Demo.dpr b/Demo/Demo.dpr new file mode 100644 index 0000000..b83d63b --- /dev/null +++ b/Demo/Demo.dpr @@ -0,0 +1,14 @@ +program Demo; + +uses + System.StartUpCopy, + FMX.Forms, + main in 'main.pas' {Form2}; + +{$R *.res} + +begin + Application.Initialize; + Application.CreateForm(TForm2, Form2); + Application.Run; +end. diff --git a/Demo/Demo.dproj b/Demo/Demo.dproj new file mode 100644 index 0000000..785560f --- /dev/null +++ b/Demo/Demo.dproj @@ -0,0 +1,1130 @@ + + + {A5D1FD99-4DA1-4D2E-898A-7A6B2AAB2B2F} + 19.0 + FMX + True + Debug + Win32 + 37915 + Application + Demo.dpr + + + true + + + true + Base + true + + + true + Base + true + + + true + Base + true + + + true + Base + true + + + true + Base + true + + + true + Base + true + + + true + Base + true + + + true + Base + true + + + true + Cfg_1 + true + true + + + true + Cfg_1 + true + true + + + true + Base + true + + + true + Cfg_2 + true + true + + + true + Cfg_2 + true + true + + + .\$(Platform)\$(Config) + .\$(Platform)\$(Config) + false + false + false + false + false + System;Xml;Data;Datasnap;Web;Soap;$(DCC_Namespace) + true + true + true + true + true + true + true + true + $(BDS)\bin\delphi_PROJECTICON.ico + $(BDS)\bin\delphi_PROJECTICNS.icns + Demo + + + DBXSqliteDriver;RESTComponents;DBXInterBaseDriver;RestDatawareCORE;ZComponent;FMXComponents;ZCore;emsclientfiredac;tethering;DataSnapFireDAC;bindcompfmx;compCielo;fmx;FireDACIBDriver;FireDACDBXDriver;dbexpress;IndyCore;ZParseSql;dsnap;emsclient;DataSnapCommon;FireDACCommon;RESTBackendComponents;soapserver;bindengine;CloudService;FireDACCommonDriver;DataSnapClient;AndoridVoiceComponents;inet;IndyIPCommon;bindcompdbx;IndyIPServer;IndySystem;SGerenciaPix;SGerenciaPago;fmxFireDAC;FireDAC;ZDbc;FireDACSqliteDriver;SGerenciaSeguro;soaprtl;DbxCommonDriver;xmlrtl;soapmidas;DataSnapNativeClient;FireDACDSDriver;rtl;DbxClientDriver;CustomIPTransport;SGerenciaNet;bindcomp;ZPlain;IndyIPClient;FrameStandPackage_10_4;dbxcds;dsnapxml;DataSnapProviderClient;dbrtl;IndyProtocols;$(DCC_UsePackage) + package=com.embarcadero.$(MSBuildProjectName);label=$(MSBuildProjectName);versionCode=1;versionName=1.0.0;persistent=False;restoreAnyVersion=False;installLocation=auto;largeHeap=False;theme=TitleBar;hardwareAccelerated=true;apiKey= + Debug + true + $(BDS)\bin\Artwork\Android\FM_LauncherIcon_36x36.png + $(BDS)\bin\Artwork\Android\FM_LauncherIcon_48x48.png + $(BDS)\bin\Artwork\Android\FM_LauncherIcon_72x72.png + $(BDS)\bin\Artwork\Android\FM_LauncherIcon_96x96.png + $(BDS)\bin\Artwork\Android\FM_LauncherIcon_144x144.png + $(BDS)\bin\Artwork\Android\FM_SplashImage_426x320.png + $(BDS)\bin\Artwork\Android\FM_SplashImage_470x320.png + $(BDS)\bin\Artwork\Android\FM_SplashImage_640x480.png + $(BDS)\bin\Artwork\Android\FM_SplashImage_960x720.png + $(BDS)\bin\Artwork\Android\FM_NotificationIcon_24x24.png + $(BDS)\bin\Artwork\Android\FM_NotificationIcon_36x36.png + $(BDS)\bin\Artwork\Android\FM_NotificationIcon_48x48.png + $(BDS)\bin\Artwork\Android\FM_NotificationIcon_72x72.png + $(BDS)\bin\Artwork\Android\FM_NotificationIcon_96x96.png + android-support-v4.dex.jar;cloud-messaging.dex.jar;com-google-android-gms.play-services-ads-base.17.2.0.dex.jar;com-google-android-gms.play-services-ads-identifier.16.0.0.dex.jar;com-google-android-gms.play-services-ads-lite.17.2.0.dex.jar;com-google-android-gms.play-services-ads.17.2.0.dex.jar;com-google-android-gms.play-services-analytics-impl.16.0.8.dex.jar;com-google-android-gms.play-services-analytics.16.0.8.dex.jar;com-google-android-gms.play-services-base.16.0.1.dex.jar;com-google-android-gms.play-services-basement.16.2.0.dex.jar;com-google-android-gms.play-services-gass.17.2.0.dex.jar;com-google-android-gms.play-services-identity.16.0.0.dex.jar;com-google-android-gms.play-services-maps.16.1.0.dex.jar;com-google-android-gms.play-services-measurement-base.16.4.0.dex.jar;com-google-android-gms.play-services-measurement-sdk-api.16.4.0.dex.jar;com-google-android-gms.play-services-stats.16.0.1.dex.jar;com-google-android-gms.play-services-tagmanager-v4-impl.16.0.8.dex.jar;com-google-android-gms.play-services-tasks.16.0.1.dex.jar;com-google-android-gms.play-services-wallet.16.0.1.dex.jar;com-google-firebase.firebase-analytics.16.4.0.dex.jar;com-google-firebase.firebase-common.16.1.0.dex.jar;com-google-firebase.firebase-iid-interop.16.0.1.dex.jar;com-google-firebase.firebase-iid.17.1.1.dex.jar;com-google-firebase.firebase-measurement-connector.17.0.1.dex.jar;com-google-firebase.firebase-messaging.17.5.0.dex.jar;fmx.dex.jar;google-play-billing.dex.jar;google-play-licensing.dex.jar + + + DBXSqliteDriver;RESTComponents;DBXInterBaseDriver;RestDatawareCORE;ZComponent;ZCore;emsclientfiredac;tethering;DataSnapFireDAC;bindcompfmx;compCielo;RaizeComponentsVcl;fmx;FireDACIBDriver;RaizeComponentsVclDb;FireDACDBXDriver;dbexpress;IndyCore;ZParseSql;dsnap;emsclient;DataSnapCommon;FireDACCommon;RESTBackendComponents;soapserver;bindengine;CloudService;FireDACCommonDriver;DataSnapClient;inet;IndyIPCommon;bindcompdbx;IndyIPServer;IndySystem;SGerenciaPix;SGerenciaPago;fmxFireDAC;FireDAC;ZDbc;FireDACSqliteDriver;SGerenciaSeguro;soaprtl;DbxCommonDriver;xmlrtl;soapmidas;DataSnapNativeClient;FireDACDSDriver;rtl;DbxClientDriver;CustomIPTransport;SGerenciaNet;bindcomp;ZPlain;IndyIPClient;FrameStandPackage_10_4;dbxcds;dsnapxml;DataSnapProviderClient;dbrtl;IndyProtocols;$(DCC_UsePackage) + package=com.embarcadero.$(MSBuildProjectName);label=$(MSBuildProjectName);versionCode=1;versionName=1.0.0;persistent=False;restoreAnyVersion=False;installLocation=auto;largeHeap=False;theme=TitleBar;hardwareAccelerated=true;apiKey= + Debug + true + $(BDS)\bin\Artwork\Android\FM_LauncherIcon_36x36.png + $(BDS)\bin\Artwork\Android\FM_LauncherIcon_48x48.png + $(BDS)\bin\Artwork\Android\FM_LauncherIcon_72x72.png + $(BDS)\bin\Artwork\Android\FM_LauncherIcon_96x96.png + $(BDS)\bin\Artwork\Android\FM_LauncherIcon_144x144.png + $(BDS)\bin\Artwork\Android\FM_SplashImage_426x320.png + $(BDS)\bin\Artwork\Android\FM_SplashImage_470x320.png + $(BDS)\bin\Artwork\Android\FM_SplashImage_640x480.png + $(BDS)\bin\Artwork\Android\FM_SplashImage_960x720.png + $(BDS)\bin\Artwork\Android\FM_NotificationIcon_24x24.png + $(BDS)\bin\Artwork\Android\FM_NotificationIcon_36x36.png + $(BDS)\bin\Artwork\Android\FM_NotificationIcon_48x48.png + $(BDS)\bin\Artwork\Android\FM_NotificationIcon_72x72.png + $(BDS)\bin\Artwork\Android\FM_NotificationIcon_96x96.png + android-support-v4.dex.jar;cloud-messaging.dex.jar;com-google-android-gms.play-services-ads-base.17.2.0.dex.jar;com-google-android-gms.play-services-ads-identifier.16.0.0.dex.jar;com-google-android-gms.play-services-ads-lite.17.2.0.dex.jar;com-google-android-gms.play-services-ads.17.2.0.dex.jar;com-google-android-gms.play-services-analytics-impl.16.0.8.dex.jar;com-google-android-gms.play-services-analytics.16.0.8.dex.jar;com-google-android-gms.play-services-base.16.0.1.dex.jar;com-google-android-gms.play-services-basement.16.2.0.dex.jar;com-google-android-gms.play-services-gass.17.2.0.dex.jar;com-google-android-gms.play-services-identity.16.0.0.dex.jar;com-google-android-gms.play-services-maps.16.1.0.dex.jar;com-google-android-gms.play-services-measurement-base.16.4.0.dex.jar;com-google-android-gms.play-services-measurement-sdk-api.16.4.0.dex.jar;com-google-android-gms.play-services-stats.16.0.1.dex.jar;com-google-android-gms.play-services-tagmanager-v4-impl.16.0.8.dex.jar;com-google-android-gms.play-services-tasks.16.0.1.dex.jar;com-google-android-gms.play-services-wallet.16.0.1.dex.jar;com-google-firebase.firebase-analytics.16.4.0.dex.jar;com-google-firebase.firebase-common.16.1.0.dex.jar;com-google-firebase.firebase-iid-interop.16.0.1.dex.jar;com-google-firebase.firebase-iid.17.1.1.dex.jar;com-google-firebase.firebase-measurement-connector.17.0.1.dex.jar;com-google-firebase.firebase-messaging.17.5.0.dex.jar;fmx.dex.jar;google-play-billing.dex.jar;google-play-licensing.dex.jar + + + DBXSqliteDriver;RESTComponents;fmxase;DBXInterBaseDriver;RestDatawareCORE;ZComponent;ACBr_TEFD;ZCore;emsclientfiredac;tethering;DataSnapFireDAC;ACBr_SATWS;SDriver.Components;ACBr_NFe;bindcompfmx;ACBr_Diversos;RaizeComponentsVcl;ACBr_LCDPR;fmx;FireDACIBDriver;RaizeComponentsVclDb;ACBr_Ponto;FireDACDBXDriver;dbexpress;IndyCore;ZParseSql;dsnap;emsclient;DataSnapCommon;FireDACCommon;RESTBackendComponents;ACBR_DeSTDA;soapserver;bindengine;CloudService;ACBr_PAF;ACBr_Sintegra;FireDACCommonDriver;DataSnapClient;inet;IndyIPCommon;bindcompdbx;IndyIPServer;ACBr_CTe;ACBr_SATExtratoESCPOS;IndySystem;ACBre_Social;fmxFireDAC;FireDAC;ACBr_SPED;ACBr_MDFe;ACBr_Comum;ZDbc;FireDACSqliteDriver;soaprtl;DbxCommonDriver;xmlrtl;soapmidas;DataSnapNativeClient;FireDACDSDriver;rtl;DbxClientDriver;CustomIPTransport;ACBr_Convenio115;bindcomp;ACBr_Serial;ZPlain;IndyIPClient;frce;ACBr_BlocoX;dbxcds;ACBr_ANe;dsnapxml;DataSnapProviderClient;dbrtl;IndyProtocols;ACBr_NFSe;$(DCC_UsePackage) + CFBundleName=$(MSBuildProjectName);CFBundleDevelopmentRegion=en;CFBundleDisplayName=$(MSBuildProjectName);CFBundleIdentifier=$(MSBuildProjectName);CFBundleInfoDictionaryVersion=7.1;CFBundleVersion=1.0.0;CFBundleShortVersionString=1.0.0;CFBundlePackageType=APPL;CFBundleSignature=????;LSRequiresIPhoneOS=true;CFBundleAllowMixedLocalizations=YES;CFBundleExecutable=$(MSBuildProjectName);UIDeviceFamily=iPhone & iPad;CFBundleResourceSpecification=ResourceRules.plist;NSLocationAlwaysUsageDescription=The reason for accessing the location information of the user;NSLocationWhenInUseUsageDescription=The reason for accessing the location information of the user;NSLocationAlwaysAndWhenInUseUsageDescription=The reason for accessing the location information of the user;FMLocalNotificationPermission=false;UIBackgroundModes=;NSContactsUsageDescription=The reason for accessing the contacts;NSPhotoLibraryUsageDescription=The reason for accessing the photo library;NSPhotoLibraryAddUsageDescription=The reason for adding to the photo library;NSCameraUsageDescription=The reason for accessing the camera;NSFaceIDUsageDescription=The reason for accessing the face id;NSMicrophoneUsageDescription=The reason for accessing the microphone;NSSiriUsageDescription=The reason for accessing Siri;ITSAppUsesNonExemptEncryption=false;NSBluetoothAlwaysUsageDescription=The reason for accessing bluetooth;NSBluetoothPeripheralUsageDescription=The reason for accessing bluetooth peripherals;NSCalendarsUsageDescription=The reason for accessing the calendar data;NSRemindersUsageDescription=The reason for accessing the reminders;NSMotionUsageDescription=The reason for accessing the accelerometer;NSSpeechRecognitionUsageDescription=The reason for requesting to send user data to Apple's speech recognition servers + iPhoneAndiPad + true + Debug + $(MSBuildProjectName) + $(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_57x57.png + $(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_60x60.png + $(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_87x87.png + $(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_114x114.png + $(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_120x120.png + $(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_180x180.png + $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_2x.png + $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImageDark_2x.png + $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_3x.png + $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImageDark_3x.png + $(BDS)\bin\Artwork\iOS\iPhone\FM_SpotlightSearchIcon_29x29.png + $(BDS)\bin\Artwork\iOS\iPhone\FM_SpotlightSearchIcon_40x40.png + $(BDS)\bin\Artwork\iOS\iPhone\FM_SpotlightSearchIcon_58x58.png + $(BDS)\bin\Artwork\iOS\iPhone\FM_SpotlightSearchIcon_80x80.png + $(BDS)\bin\Artwork\iOS\iPhone\FM_SpotlightSearchIcon_120x120.png + $(BDS)\bin\Artwork\iOS\iPad\FM_ApplicationIcon_72x72.png + $(BDS)\bin\Artwork\iOS\iPad\FM_ApplicationIcon_76x76.png + $(BDS)\bin\Artwork\iOS\iPad\FM_ApplicationIcon_144x144.png + $(BDS)\bin\Artwork\iOS\iPad\FM_ApplicationIcon_152x152.png + $(BDS)\bin\Artwork\iOS\iPad\FM_ApplicationIcon_167x167.png + $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImage_2x.png + $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImageDark_2x.png + $(BDS)\bin\Artwork\iOS\iPad\FM_SpotlightSearchIcon_40x40.png + $(BDS)\bin\Artwork\iOS\iPad\FM_SpotlightSearchIcon_50x50.png + $(BDS)\bin\Artwork\iOS\iPad\FM_SpotlightSearchIcon_80x80.png + $(BDS)\bin\Artwork\iOS\iPad\FM_SpotlightSearchIcon_100x100.png + $(BDS)\bin\Artwork\iOS\iPad\FM_SettingIcon_29x29.png + $(BDS)\bin\Artwork\iOS\iPad\FM_SettingIcon_58x58.png + + + DBXSqliteDriver;RESTComponents;fmxase;DBXInterBaseDriver;RestDatawareCORE;ZComponent;ZCore;emsclientfiredac;tethering;DataSnapFireDAC;bindcompfmx;fmx;FireDACIBDriver;FireDACDBXDriver;dbexpress;IndyCore;ZParseSql;dsnap;emsclient;DataSnapCommon;FireDACCommon;RESTBackendComponents;soapserver;bindengine;CloudService;FireDACCommonDriver;DataSnapClient;inet;IndyIPCommon;bindcompdbx;IndyIPServer;IndySystem;fmxFireDAC;FireDAC;ZDbc;FireDACSqliteDriver;soaprtl;DbxCommonDriver;xmlrtl;soapmidas;DataSnapNativeClient;FireDACDSDriver;rtl;DbxClientDriver;CustomIPTransport;bindcomp;ZPlain;IndyIPClient;FrameStandPackage_10_4;dbxcds;dsnapxml;DataSnapProviderClient;dbrtl;IndyProtocols;$(DCC_UsePackage) + CFBundleName=$(MSBuildProjectName);CFBundleDevelopmentRegion=en;CFBundleDisplayName=$(MSBuildProjectName);CFBundleIdentifier=$(MSBuildProjectName);CFBundleInfoDictionaryVersion=7.1;CFBundleVersion=1.0.0;CFBundleShortVersionString=1.0.0;CFBundlePackageType=APPL;CFBundleSignature=????;LSRequiresIPhoneOS=true;CFBundleAllowMixedLocalizations=YES;CFBundleExecutable=$(MSBuildProjectName);UIDeviceFamily=iPhone & iPad;CFBundleResourceSpecification=ResourceRules.plist;NSLocationAlwaysUsageDescription=The reason for accessing the location information of the user;NSLocationWhenInUseUsageDescription=The reason for accessing the location information of the user;NSLocationAlwaysAndWhenInUseUsageDescription=The reason for accessing the location information of the user;FMLocalNotificationPermission=false;UIBackgroundModes=;NSContactsUsageDescription=The reason for accessing the contacts;NSPhotoLibraryUsageDescription=The reason for accessing the photo library;NSPhotoLibraryAddUsageDescription=The reason for adding to the photo library;NSCameraUsageDescription=The reason for accessing the camera;NSFaceIDUsageDescription=The reason for accessing the face id;NSMicrophoneUsageDescription=The reason for accessing the microphone;NSSiriUsageDescription=The reason for accessing Siri;ITSAppUsesNonExemptEncryption=false;NSBluetoothAlwaysUsageDescription=The reason for accessing bluetooth;NSBluetoothPeripheralUsageDescription=The reason for accessing bluetooth peripherals;NSCalendarsUsageDescription=The reason for accessing the calendar data;NSRemindersUsageDescription=The reason for accessing the reminders;NSMotionUsageDescription=The reason for accessing the accelerometer;NSSpeechRecognitionUsageDescription=The reason for requesting to send user data to Apple's speech recognition servers + iPhoneAndiPad + true + $(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_57x57.png + $(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_60x60.png + $(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_87x87.png + $(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_114x114.png + $(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_120x120.png + $(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_180x180.png + $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_2x.png + $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImageDark_2x.png + $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_3x.png + $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImageDark_3x.png + $(BDS)\bin\Artwork\iOS\iPhone\FM_SpotlightSearchIcon_29x29.png + $(BDS)\bin\Artwork\iOS\iPhone\FM_SpotlightSearchIcon_40x40.png + $(BDS)\bin\Artwork\iOS\iPhone\FM_SpotlightSearchIcon_58x58.png + $(BDS)\bin\Artwork\iOS\iPhone\FM_SpotlightSearchIcon_80x80.png + $(BDS)\bin\Artwork\iOS\iPhone\FM_SpotlightSearchIcon_120x120.png + $(BDS)\bin\Artwork\iOS\iPad\FM_ApplicationIcon_72x72.png + $(BDS)\bin\Artwork\iOS\iPad\FM_ApplicationIcon_76x76.png + $(BDS)\bin\Artwork\iOS\iPad\FM_ApplicationIcon_144x144.png + $(BDS)\bin\Artwork\iOS\iPad\FM_ApplicationIcon_152x152.png + $(BDS)\bin\Artwork\iOS\iPad\FM_ApplicationIcon_167x167.png + $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImage_2x.png + $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImageDark_2x.png + $(BDS)\bin\Artwork\iOS\iPad\FM_SpotlightSearchIcon_40x40.png + $(BDS)\bin\Artwork\iOS\iPad\FM_SpotlightSearchIcon_50x50.png + $(BDS)\bin\Artwork\iOS\iPad\FM_SpotlightSearchIcon_80x80.png + $(BDS)\bin\Artwork\iOS\iPad\FM_SpotlightSearchIcon_100x100.png + $(BDS)\bin\Artwork\iOS\iPad\FM_SettingIcon_29x29.png + $(BDS)\bin\Artwork\iOS\iPad\FM_SettingIcon_58x58.png + 10.0 + + + DBXSqliteDriver;RESTComponents;fmxase;DBXInterBaseDriver;RestDatawareCORE;ZComponent;ZCore;emsclientfiredac;tethering;DataSnapFireDAC;FireDACMSSQLDriver;bindcompfmx;DBXOracleDriver;inetdb;RaizeComponentsVcl;fmx;FireDACIBDriver;fmxdae;RaizeComponentsVclDb;FireDACDBXDriver;dbexpress;IndyCore;ZParseSql;dsnap;emsclient;DataSnapCommon;FireDACCommon;RESTBackendComponents;soapserver;IcsCommonD104Run;bindengine;DBXMySQLDriver;CloudService;FireDACOracleDriver;FireDACMySQLDriver;DBXFirebirdDriver;FireDACCommonODBC;FireDACCommonDriver;DataSnapClient;inet;IndyIPCommon;bindcompdbx;IcsVclD104Run;IndyIPServer;IndySystem;fmxFireDAC;IcsFmxD104Run;FireDAC;ZDbc;FireDACSqliteDriver;FireDACPgDriver;FireDACASADriver;FireDACTDataDriver;soaprtl;DbxCommonDriver;DataSnapServer;xmlrtl;soapmidas;DataSnapNativeClient;fmxobj;FireDACDSDriver;rtl;DbxClientDriver;DBXSybaseASADriver;CustomIPTransport;bindcomp;DBXInformixDriver;ZPlain;IndyIPClient;FrameStandPackage_10_4;dbxcds;FireDACODBCDriver;DataSnapIndy10ServerTransport;dsnapxml;DataSnapProviderClient;dbrtl;IndyProtocols;inetdbxpress;FireDACMongoDBDriver;DataSnapServerMidas;$(DCC_UsePackage) + CFBundleName=$(MSBuildProjectName);CFBundleDisplayName=$(MSBuildProjectName);CFBundleIdentifier=$(MSBuildProjectName);CFBundleVersion=1.0.0;CFBundleShortVersionString=1.0.0;CFBundlePackageType=APPL;CFBundleSignature=????;CFBundleAllowMixedLocalizations=YES;CFBundleExecutable=$(MSBuildProjectName);NSHighResolutionCapable=true;LSApplicationCategoryType=public.app-category.utilities;NSLocationUsageDescription=The reason for accessing the location information of the user;NSContactsUsageDescription=The reason for accessing the contacts;NSCalendarsUsageDescription=The reason for accessing the calendar data;NSRemindersUsageDescription=The reason for accessing the reminders;NSCameraUsageDescription=The reason for accessing the camera;NSMicrophoneUsageDescription=The reason for accessing the microphone;NSMotionUsageDescription=The reason for accessing the accelerometer;NSDesktopFolderUsageDescription=The reason for accessing the Desktop folder;NSDocumentsFolderUsageDescription=The reason for accessing the Documents folder;NSDownloadsFolderUsageDescription=The reason for accessing the Downloads folder;NSNetworkVolumesUsageDescription=The reason for accessing files on a network volume;NSRemovableVolumesUsageDescription=The reason for accessing files on a removable volume;NSSpeechRecognitionUsageDescription=The reason for requesting to send user data to Apple's speech recognition servers + Debug + true + + + DBXSqliteDriver;RESTComponents;fmxase;DBXDb2Driver;DBXInterBaseDriver;RestDatawareCORE;ZComponent;vclactnband;ACBr_NF3e;vclFireDAC;ACBr_TEFD;FMXComponents;ZCore;bindcompvclsmp;emsclientfiredac;tethering;svnui;DataSnapFireDAC;ACBr_SATWS;FireDACADSDriver;esbpcs_dates_rt_d27;ACBr_BPeDabpeESCPOS;ACBr_BPe;SDriver.Components;DBXMSSQLDriver;DatasnapConnectorsFreePascal;FireDACMSSQLDriver;ACBr_EDI;vcltouch;ACBr_NFe;ACBr_ONE;vcldb;bindcompfmx;svn;DBXOracleDriver;inetdb;ACBr_NFeDanfeESCPOS;compCielo;ACBr_Diversos;RaizeComponentsVcl;ACBr_LCDPR;emsedge;TMSVCLUIPackPkgWizDXE13;fmx;FireDACIBDriver;fmxdae;RaizeComponentsVclDb;vcledge;DragDropDR104R;esbpcs_calcs_rt_d27;ACBr_Ponto;FireDACDBXDriver;dbexpress;IndyCore;TMSVCLUIPackPkgXlsDXE13;RESTDWDriverFD;vclx;ZParseSql;dsnap;emsclient;DataSnapCommon;esbpcs_calcs_db_rt_d27;FireDACCommon;TRCGooglePlaces_r;RESTBackendComponents;DataSnapConnectors;ACBR_DeSTDA;VCLRESTComponents;ACBr_Reinf;soapserver;ACBr_SAT;MARSServerWizard;TMSVCLUIPackPkgDXE13;vclie;IcsCommonD104Run;bindengine;DBXMySQLDriver;CloudService;FireDACOracleDriver;FireDACMySQLDriver;DBXFirebirdDriver;ACBr_PAF;ACBr_SATECFVirtual;ACBr_Sintegra;FireDACCommonODBC;FireDACCommonDriver;ACBr_GNRE;DataSnapClient;ACBr_ADRCST;AndoridVoiceComponents;inet;FMXComponentEd;TMSVCLUIPackPkgExDXE13;IndyIPCommon;bindcompdbx;ACBr_TCP;IcsVclD104Run;vcl;IndyIPServer;DBXSybaseASEDriver;ACBr_CTe;ACBr_SATExtratoESCPOS;IndySystem;esbpcs_base_rt_d27;FireDACDb2Driver;esbpcs_base_db_rt_d27;ACBr_Integrador;dsnapcon;SGerenciaPix;esbpcs_xtras_rt_d27;ACBre_Social;SGerenciaPago;FireDACMSAccDriver;fmxFireDAC;FireDACInfxDriver;vclimg;ACBr_SPEDImportar;IcsFmxD104Run;FireDAC;YxdUI;ACBr_SPED;ACBr_MDFe;emshosting;ACBr_Comum;ZDbc;FireDACSqliteDriver;FireDACPgDriver;ACBr_LFD;FireDACASADriver;esbpcs_xtras_db_rt_d27;DBXOdbcDriver;FireDACTDataDriver;SGerenciaSeguro;soaprtl;DbxCommonDriver;ACBr_CIOT;DataSnapServer;xmlrtl;soapmidas;DataSnapNativeClient;fmxobj;vclwinx;FireDACDSDriver;rtl;emsserverresource;DbxClientDriver;ACBr_OpenSSL;DBXSybaseASADriver;esbpcs_stats_rt_d27;CustomIPTransport;vcldsnap;SGerenciaNet;RESTDWDriverZEOS;esbpcs_stats_db_rt_d27;MARSClient.Core;ACBr_Convenio115;bindcomp;appanalytics;ACBr_Serial;DBXInformixDriver;ZPlain;esbpcs_dates_db_rt_d27;IndyIPClient;frce;bindcompvcl;FrameStandPackage_10_4;ACBr_BlocoX;dbxcds;VclSmp;ACBr_NFCeECFVirtual;adortl;FireDACODBCDriver;DataSnapIndy10ServerTransport;ACBr_Boleto;ACBr_ANe;dsnapxml;DataSnapProviderClient;dbrtl;IndyProtocols;inetdbxpress;FireDACMongoDBDriver;ACBr_SEF2;TRCGooglePlaces_d;FieFox;ACBr_NFSe;ACBr_NF3eDANF3eESCPOS;ACBr_MTER;DataSnapServerMidas;$(DCC_UsePackage) + Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace) + Debug + true + CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments= + 1033 + $(BDS)\bin\default_app.manifest + $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_44.png + $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_150.png + + + DBXSqliteDriver;RESTComponents;fmxase;DBXDb2Driver;DBXInterBaseDriver;RestDatawareCORE;ZComponent;vclactnband;vclFireDAC;ZCore;bindcompvclsmp;emsclientfiredac;tethering;DataSnapFireDAC;FireDACADSDriver;DBXMSSQLDriver;DatasnapConnectorsFreePascal;FireDACMSSQLDriver;vcltouch;vcldb;bindcompfmx;DBXOracleDriver;inetdb;emsedge;fmx;FireDACIBDriver;fmxdae;vcledge;DragDropDR104R;FireDACDBXDriver;dbexpress;IndyCore;RESTDWDriverFD;vclx;ZParseSql;dsnap;emsclient;DataSnapCommon;FireDACCommon;RESTBackendComponents;DataSnapConnectors;VCLRESTComponents;soapserver;TMSVCLUIPackPkgDXE13;vclie;IcsCommonD104Run;bindengine;DBXMySQLDriver;CloudService;FireDACOracleDriver;FireDACMySQLDriver;DBXFirebirdDriver;FireDACCommonODBC;FireDACCommonDriver;DataSnapClient;inet;TMSVCLUIPackPkgExDXE13;IndyIPCommon;bindcompdbx;IcsVclD104Run;vcl;IndyIPServer;DBXSybaseASEDriver;IndySystem;FireDACDb2Driver;dsnapcon;SGerenciaPix;SGerenciaPago;FireDACMSAccDriver;fmxFireDAC;FireDACInfxDriver;vclimg;IcsFmxD104Run;FireDAC;emshosting;ZDbc;FireDACSqliteDriver;FireDACPgDriver;FireDACASADriver;DBXOdbcDriver;FireDACTDataDriver;SGerenciaSeguro;soaprtl;DbxCommonDriver;DataSnapServer;xmlrtl;soapmidas;DataSnapNativeClient;fmxobj;vclwinx;FireDACDSDriver;rtl;emsserverresource;DbxClientDriver;DBXSybaseASADriver;CustomIPTransport;vcldsnap;SGerenciaNet;MARSClient.Core;bindcomp;appanalytics;DBXInformixDriver;ZPlain;IndyIPClient;bindcompvcl;FrameStandPackage_10_4;dbxcds;VclSmp;adortl;FireDACODBCDriver;DataSnapIndy10ServerTransport;dsnapxml;DataSnapProviderClient;dbrtl;IndyProtocols;inetdbxpress;FireDACMongoDBDriver;DataSnapServerMidas;$(DCC_UsePackage) + Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;$(DCC_Namespace) + Debug + true + CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments= + 1033 + $(BDS)\bin\default_app.manifest + $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_44.png + $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_150.png + + + DEBUG;$(DCC_Define) + true + false + true + true + true + + + false + true + PerMonitorV2 + .\$(Platform)\dcu + true + 1033 + .\$(Platform)\ + + + true + PerMonitorV2 + + + false + RELEASE;$(DCC_Define) + 0 + 0 + + + true + PerMonitorV2 + + + true + PerMonitorV2 + + + + MainSource + + +
Form2
+ fmx +
+ + Cfg_2 + Base + + + Base + + + Cfg_1 + Base + +
+ + Delphi.Personality.12 + Application + + + + Demo.dpr + + + Microsoft Office 2000 Sample Automation Server Wrapper Components + Microsoft Office XP Sample Automation Server Wrapper Components + + + + True + True + True + True + True + True + True + + + + + splash_image.png + true + + + + + ic_launcher.png + true + + + + + ic_launcher.png + true + + + + + ic_notification.png + true + + + + + ic_notification.png + true + + + + + Demo.exe + true + + + + + splash_image.png + true + + + + + ic_notification.png + true + + + + + libDemo.so + true + + + + + splash_image.png + true + + + + + libDemo.so + true + + + + + libDemo.so + true + + + + + libDemo.so + true + + + + + ic_launcher.png + true + + + + + ic_launcher.png + true + + + + + true + + + + + true + + + + + ic_notification.png + true + + + + + true + + + + + ic_notification.png + true + + + + + true + + + + + ic_launcher.png + true + + + + + classes.dex + true + + + + + true + + + + + true + + + + + true + + + + + splash_image.png + true + + + + + styles.xml + true + + + + + true + + + + + 1 + + + Contents\MacOS + 1 + + + 0 + + + + + classes + 1 + + + classes + 1 + + + + + res\xml + 1 + + + res\xml + 1 + + + + + library\lib\armeabi-v7a + 1 + + + + + library\lib\armeabi + 1 + + + library\lib\armeabi + 1 + + + + + library\lib\armeabi-v7a + 1 + + + + + library\lib\mips + 1 + + + library\lib\mips + 1 + + + + + library\lib\armeabi-v7a + 1 + + + library\lib\arm64-v8a + 1 + + + + + library\lib\armeabi-v7a + 1 + + + + + res\drawable + 1 + + + res\drawable + 1 + + + + + res\values + 1 + + + res\values + 1 + + + + + res\values-v21 + 1 + + + res\values-v21 + 1 + + + + + res\values + 1 + + + res\values + 1 + + + + + res\drawable + 1 + + + res\drawable + 1 + + + + + res\drawable-xxhdpi + 1 + + + res\drawable-xxhdpi + 1 + + + + + res\drawable-ldpi + 1 + + + res\drawable-ldpi + 1 + + + + + res\drawable-mdpi + 1 + + + res\drawable-mdpi + 1 + + + + + res\drawable-hdpi + 1 + + + res\drawable-hdpi + 1 + + + + + res\drawable-xhdpi + 1 + + + res\drawable-xhdpi + 1 + + + + + res\drawable-mdpi + 1 + + + res\drawable-mdpi + 1 + + + + + res\drawable-hdpi + 1 + + + res\drawable-hdpi + 1 + + + + + res\drawable-xhdpi + 1 + + + res\drawable-xhdpi + 1 + + + + + res\drawable-xxhdpi + 1 + + + res\drawable-xxhdpi + 1 + + + + + res\drawable-xxxhdpi + 1 + + + res\drawable-xxxhdpi + 1 + + + + + res\drawable-small + 1 + + + res\drawable-small + 1 + + + + + res\drawable-normal + 1 + + + res\drawable-normal + 1 + + + + + res\drawable-large + 1 + + + res\drawable-large + 1 + + + + + res\drawable-xlarge + 1 + + + res\drawable-xlarge + 1 + + + + + res\values + 1 + + + res\values + 1 + + + + + 1 + + + Contents\MacOS + 1 + + + 0 + + + + + Contents\MacOS + 1 + .framework + + + Contents\MacOS + 1 + .framework + + + 0 + + + + + 1 + .dylib + + + 1 + .dylib + + + 1 + .dylib + + + Contents\MacOS + 1 + .dylib + + + Contents\MacOS + 1 + .dylib + + + 0 + .dll;.bpl + + + + + 1 + .dylib + + + 1 + .dylib + + + 1 + .dylib + + + Contents\MacOS + 1 + .dylib + + + Contents\MacOS + 1 + .dylib + + + 0 + .bpl + + + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + Contents\Resources\StartUp\ + 0 + + + Contents\Resources\StartUp\ + 0 + + + 0 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset + 1 + + + + + 1 + + + 1 + + + + + ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF + 1 + + + ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF + 1 + + + + + 1 + + + 1 + + + + + ..\ + 1 + + + ..\ + 1 + + + + + 1 + + + 1 + + + 1 + + + + + ..\$(PROJECTNAME).launchscreen + 64 + + + ..\$(PROJECTNAME).launchscreen + 64 + + + + + 1 + + + 1 + + + 1 + + + + + ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF + 1 + + + + + ..\ + 1 + + + ..\ + 1 + + + + + Contents + 1 + + + Contents + 1 + + + + + Contents\Resources + 1 + + + Contents\Resources + 1 + + + + + library\lib\armeabi-v7a + 1 + + + library\lib\arm64-v8a + 1 + + + 1 + + + 1 + + + 1 + + + 1 + + + Contents\MacOS + 1 + + + Contents\MacOS + 1 + + + 0 + + + + + library\lib\armeabi-v7a + 1 + + + + + 1 + + + 1 + + + + + Assets + 1 + + + Assets + 1 + + + + + Assets + 1 + + + Assets + 1 + + + + + + + + + + + + + + + 12 + + + + +
diff --git a/Demo/Demo.dproj.local b/Demo/Demo.dproj.local new file mode 100644 index 0000000..9e7ae28 --- /dev/null +++ b/Demo/Demo.dproj.local @@ -0,0 +1,12 @@ + + + + 2021/05/12 11:14:37.000.956,=C:\Users\Sergio\Documents\Embarcadero\Studio\Projects\Unit2.pas + 2021/05/12 11:26:53.000.486,C:\Users\Sergio\Documents\Embarcadero\Studio\Projects\Unit2.fmx=I:\PagOnLine\GerenciaPago\Demo\main.fmx + 2021/05/12 11:26:53.000.486,C:\Users\Sergio\Documents\Embarcadero\Studio\Projects\Unit2.pas=I:\PagOnLine\GerenciaPago\Demo\main.pas + 2021/05/12 11:26:59.000.536,C:\Users\Sergio\Documents\Embarcadero\Studio\Projects\Project2.dproj=I:\PagOnLine\GerenciaPago\Demo\Demo.dproj + + + + + diff --git a/Demo/Demo.identcache b/Demo/Demo.identcache new file mode 100644 index 0000000..6a43447 Binary files /dev/null and b/Demo/Demo.identcache differ diff --git a/Demo/json b/Demo/json new file mode 100644 index 0000000..ae204ce --- /dev/null +++ b/Demo/json @@ -0,0 +1,136 @@ +{ + "paging": { + "total": 1, + "limit": 30, + "offset": 0 + }, + "results": [{ + "acquirer_reconciliation": [], + "additional_info": { + "available_balance": null, + "bank_info": { + "is_same_bank_account_owner": true + }, + "nsu_processadora": null + }, + "authorization_code": null, + "binary_mode": false, + "brand_id": null, + "call_for_authorize_id": null, + "callback_url": null, + "captured": true, + "card": {}, + "charges_details": [], + "collector_id": 166957358, + "corporation_id": null, + "counter_currency": null, + "coupon_amount": 0, + "currency_id": "BRL", + "date_approved": "2021-05-13T00:11:14.000-04:00", + "date_created": "2021-05-13T00:09:21.000-04:00", + "date_last_updated": "2021-05-13T00:11:14.000-04:00", + "date_of_expiration": "2021-05-13T23:00:00.000-04:00", + "deduction_schema": null, + "description": "LOCAÇÃO DE SISTEMA 132789", + "differential_pricing_id": null, + "external_reference": "132789", + "fee_details": [{ + "amount": 0.01, + "fee_payer": "collector", + "type": "mercadopago_fee" + }], + "id": 14857136091, + "installments": 1, + "integrator_id": null, + "issuer_id": null, + "live_mode": true, + "marketplace_owner": null, + "merchant_account_id": null, + "merchant_number": null, + "metadata": {}, + "money_release_date": "2021-05-13T00:11:14.000-04:00", + "money_release_schema": null, + "notification_url": null, + "operation_type": "regular_payment", + "order": {}, + "payer": { + "email": "test@test.com", + "entity_type": null, + "first_name": "Test", + "id": "192528586", + "identification": { + "number": "19119119100", + "type": "CPF" + }, + "last_name": "User", + "operator_id": null, + "phone": { + "area_code": null, + "extension": null, + "number": null + }, + "type": "guest" + }, + "payment_method_id": "pix", + "payment_type_id": "bank_transfer", + "platform_id": null, + "point_of_interaction": { + "application_data": { + "name": null, + "version": null + }, + "sub_type": "INTER_PSP", + "transaction_data": { + "bank_info": { + "collector": { + "account_holder_name": "Sergio Alonso de Almeida", + "account_id": 62083798652, + "long_name": "Mercadopago.com Representações Ltda.", + "transfer_account_id": null + }, + "is_same_bank_account_owner": true, + "payer": { + "account_id": 12840173, + "id": null, + "long_name": "BANCO INTER S.A." + } + }, + "bank_transfer_id": 64805201, + "financial_institution": 1, + "qr_code": "00020126580014br.gov.bcb.pix01364b0c1fe6-d572-4d2c-b7a8-d03aa85ee8df52040000530398654041.005802BR5915LUAR INFORMTICA6007Itapevi62240520mpqrinter148571360916304AA10", + "qr_code_base64": "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", + "transaction_id": "PIXE00416968202105130411UpQPkwhu50o" + }, + "type": "OPENPLATFORM" + }, + "pos_id": null, + "processing_mode": "aggregator", + "refunds": [], + "shipping_amount": 0, + "sponsor_id": null, + "statement_descriptor": null, + "status": "approved", + "status_detail": "accredited", + "store_id": null, + "taxes_amount": 0, + "transaction_amount": 1, + "transaction_amount_refunded": 0, + "transaction_details": { + "acquirer_reference": null, + "bank_transfer_id": 64805201, + "external_resource_url": null, + "financial_institution": "1", + "installment_amount": 0, + "net_received_amount": 0.99, + "overpaid_amount": 0, + "payable_deferral_period": null, + "payment_method_reference_id": null, + "total_paid_amount": 1, + "transaction_id": "PIXE00416968202105130411UpQPkwhu50o" + }, + "shipping_cost": 0 + }] +} diff --git a/Demo/json1.txt b/Demo/json1.txt new file mode 100644 index 0000000..e95013e --- /dev/null +++ b/Demo/json1.txt @@ -0,0 +1,14 @@ +[ + { + "a":{ + "username":"aaa", + "email":"aaa@gmail.com" + } + }, + { + "b":{ + "username":"bbb", + "email":"bbb@gmail.com" + } + } +] diff --git a/Demo/lista.json b/Demo/lista.json new file mode 100644 index 0000000..ae204ce --- /dev/null +++ b/Demo/lista.json @@ -0,0 +1,136 @@ +{ + "paging": { + "total": 1, + "limit": 30, + "offset": 0 + }, + "results": [{ + "acquirer_reconciliation": [], + "additional_info": { + "available_balance": null, + "bank_info": { + "is_same_bank_account_owner": true + }, + "nsu_processadora": null + }, + "authorization_code": null, + "binary_mode": false, + "brand_id": null, + "call_for_authorize_id": null, + "callback_url": null, + "captured": true, + "card": {}, + "charges_details": [], + "collector_id": 166957358, + "corporation_id": null, + "counter_currency": null, + "coupon_amount": 0, + "currency_id": "BRL", + "date_approved": "2021-05-13T00:11:14.000-04:00", + "date_created": "2021-05-13T00:09:21.000-04:00", + "date_last_updated": "2021-05-13T00:11:14.000-04:00", + "date_of_expiration": "2021-05-13T23:00:00.000-04:00", + "deduction_schema": null, + "description": "LOCAÇÃO DE SISTEMA 132789", + "differential_pricing_id": null, + "external_reference": "132789", + "fee_details": [{ + "amount": 0.01, + "fee_payer": "collector", + "type": "mercadopago_fee" + }], + "id": 14857136091, + "installments": 1, + "integrator_id": null, + "issuer_id": null, + "live_mode": true, + "marketplace_owner": null, + "merchant_account_id": null, + "merchant_number": null, + "metadata": {}, + "money_release_date": "2021-05-13T00:11:14.000-04:00", + "money_release_schema": null, + "notification_url": null, + "operation_type": "regular_payment", + "order": {}, + "payer": { + "email": "test@test.com", + "entity_type": null, + "first_name": "Test", + "id": "192528586", + "identification": { + "number": "19119119100", + "type": "CPF" + }, + "last_name": "User", + "operator_id": null, + "phone": { + "area_code": null, + "extension": null, + "number": null + }, + "type": "guest" + }, + "payment_method_id": "pix", + "payment_type_id": "bank_transfer", + "platform_id": null, + "point_of_interaction": { + "application_data": { + "name": null, + "version": null + }, + "sub_type": "INTER_PSP", + "transaction_data": { + "bank_info": { + "collector": { + "account_holder_name": "Sergio Alonso de Almeida", + "account_id": 62083798652, + "long_name": "Mercadopago.com Representações Ltda.", + "transfer_account_id": null + }, + "is_same_bank_account_owner": true, + "payer": { + "account_id": 12840173, + "id": null, + "long_name": "BANCO INTER S.A." + } + }, + "bank_transfer_id": 64805201, + "financial_institution": 1, + "qr_code": "00020126580014br.gov.bcb.pix01364b0c1fe6-d572-4d2c-b7a8-d03aa85ee8df52040000530398654041.005802BR5915LUAR INFORMTICA6007Itapevi62240520mpqrinter148571360916304AA10", + "qr_code_base64": "iVBORw0KGgoAAAANSUhEUgAABWQAAAVkAQAAAAB79iscAAAI5UlEQVR42u3dW27cOBAFUO5A+98ld6BgBonTYl2yO0iAmZBHH0bbrceR/y6qWGz3X3T0RktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0v757VtPK6vv/349Hre8Lfr68fj+OcR7ed5P0/+94vv3/74Nd3g+7e0tLS0tLS0tLS0tLRHaK/XyPbz18H9dWlL55UXeshef9zPm/bnFUlFS0tLS0tLS0tLS0t7gDY95/VTez7senW/BsOWTx5yYsmO14xBS0tLS0tLS0tLS0t7srZ47lLse/3U29jK+frFo9j3yrvCC9HS0tLS0tLS0tLS0h6vHfolS0S8S+mudF3WtJnw5Q1oaWlpaWlpaWlpaWkP1Rb8dd85E9Z1ccMVQ1EwLXBL/Zy/0SNKS0tLS0tLS0tLS0v7t2vTlJL/4MdvzFShpaWlpaWlpaWlpaX9m7X5mMx4HD6V8+5ZnkwDT+5QRswWWlpaWlpaWlpaWlravbWTpsnhOdMxkDmLTm41lAfz/2FR3aOlpaWlpaWlpaWlpd1ZO0waKfdsz3Ej9VMuzk0S42I3gbIUj5aWlpaWlpaWlpaWdnttiY1XXvQ2ZL0U/cpm160MolykzTusx6OlpaWlpaWlpaWlpT1C29skWd55ckmJknfYQTt1XbawX0DPg0xoaWlpaWlpaWlpaWmP0A59lcNU/8VytfTE1KI51O9Sx2aJjY2WlpaWlpaWlpaWlvYwbdr2erEQri/rcq19stgu8YYXoqWlpaWlpaWlpaWlPUL7muuusFnaVVaqlTVwV8iELZQM61tN18C97xGlpaWlpaWlpaWlpaXdRbt4YsXnKyYZswTIWkZcTD2hpaWlpaWlpaWlpaU9R3stOieHGlzKjkmWin05fE7yJC0tLS0tLS0tLS0t7Tna2Qq0lr4tvZY1D +g6K3MB5Pxs9e7npvOuSlpaWlpaWlpaWlpZ2P+2qGjf0WubIuR7y356o61k8bGGJ3bup/rS0tLS0tLS0tLS0tFtph2rcuzpf/VTyX/pxlz3bSslwUVWkpaWlpaWlpaWlpaXdW5vmkFzv1sqVcSNpJV3Lc/vffdtoaWlpaWlpaWlpaWmP0y6Wq03aLMs6tr7Yla1MPVln1nIDWlpaWlpaWlpaWlra7bVlRVsq2E1LgdPs2GYFwBRXfznz0tLS0tLS0tLS0tLS7qEt/ZdpP+zaerl4l7pMLi+nS/h3KZKWlpaWlpaWlpaWlnZb7QdxcNVXmV43DSgpJ0+6LmlpaWlpaWlpaWlpac/RpvJbgqbbrTe2XhTsUoSd9m7S0tLS0tLS0tLS0tLurm2LPsjFaMia/3JlMPVVXothkuWtaGlpaWlpaWlpaWlp99bmHa9b2XxteKHpgMnXK/qiCTPXA+ur0dLS0tLS0tLS0tLSHqHNxzr/tfxWZZ/ryZK4NBgl/TNoaWlpaWlpaWlpaWl315ZS2x1GQ7awnXVbbKU23KW8Rnu2aF7L1ktaWlpaWlpaWlpaWtq9tXlAyQfbVLewNdsVguYV6oa1UDgNn7S0tLS0tLS0tLS0tLtrp42UwxjIIUrmxDj0S95hqdsjgZYU2cKoSVpaWlpaWlpaWlpa2r21CbVogbwXBcCyLu7Kxb7FIroPMy8tLS0tLS0tLS0tLe1G2jT8sfRVttku2JMYutheLc3tv3MBkJaWlpaWlpaWlpaW9ght8dQkWKA9b3adqnbv3m/oznx0gNLS0tLS0tLS0tLS0p6jLSvVUjdlay2X+Oq3eczJ9Iq+uDMtLS0tLS0tLS0tLe3u2jRdv9ykP1fD9XDeKiem4uFw52mzJi0tLS0tLS0tLS0t7e7alPrSQP9pd2Zux0xXpMTYn2/1YS2SlpaWlpaWlpaWlpZ2N20Ki6kkN0TEIUCWa2tETOe93i+/KS0tLS0tLS0tLS0t7c7acu4dBzjW2t9d2ienNb3hWIwqS +V/Q0tLS0tLS0tLS0tLurn07nj+9WmrCHDzD/yHnxL7InbS0tLS0tLS0tLS0tIdo03K1K2fCkhgfq9dym+Xj5FlOHBfbLTMvLS0tLS0tLS0tLS3tZtr1nmh9gUqPGDJmiaHXYg+BshkALS0tLS0tLS0tLS3tAdpUbyv7pPUyjCQdJYvWQmEOi71MQqGlpaWlpaWlpaWlpT1OewfosEhteruhQvdYTreYS3nlaiEtLS0tLS0tLS0tLe3Z2lzYa7M5kilt1qJgqhsuMmtR0dLS0tLS0tLS0tLS7q3ti6kiZYZJ2ti6njwtDw53KbmzvZlSQktLS0tLS0tLS0tLu582DxkZCnbr1sv6a0qMZSXdNVs612lpaWlpaWlpaWlpaU/SvvY81iSYJkoOAXKRItt8gVscJpkuo6WlpaWlpaWlpaWlPUJblrq18MT+HO1fZu9PXmjaV9nLdm3vp/rT0tLS0tLS0tLS0tJuqk2DHsud7rIpdlq9trhVrfOlNsv3U/1paWlpaWlpaWlpaWm30pbC3pD/WmiuvGYVulUcTGvgBkaZYUJLS0tLS0tLS0tLS3uOtj2n61/hU8uj/Vs86lK3hF/sykZLS0tLS0tLS0tLS3uKNh1pFH/utbzz9JH1TYt2eFppCKWlpaWlpaWlpaWlpd1Zm/NfC5tT9zxHssTGmjHzVP/pHMmPqnu0tLS0tLS0tLS0tLT7aNPG1qnNchIMy7MrvmTR14j4iymSlpaWlpaWlpaWlpZ2S21Ogj3/raDqUbYFuEOb5bWIsG/2hqOlpaWlpaWlpaWlpT1De389rJdQOd0Ku5wyhMW+eJcPq3u0tLS0tLS0tLS0tLQHaKf4oS63vmxSI5wOPEk9mbS0tLS0tLS0tLS0tEdoE76M9h9u3POQyLzHWlpTV1sv86wTWlpaWlpaWlpaWlra3bW18TG/SxpQcoVM2Musk7Smbij2pWhKS0tLS0tLS0tLS0t7hPb/f9DS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0 +tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS/jHtNzodun1ebfV3AAAAAElFTkSuQmCC", + "transaction_id": "PIXE00416968202105130411UpQPkwhu50o" + }, + "type": "OPENPLATFORM" + }, + "pos_id": null, + "processing_mode": "aggregator", + "refunds": [], + "shipping_amount": 0, + "sponsor_id": null, + "statement_descriptor": null, + "status": "approved", + "status_detail": "accredited", + "store_id": null, + "taxes_amount": 0, + "transaction_amount": 1, + "transaction_amount_refunded": 0, + "transaction_details": { + "acquirer_reference": null, + "bank_transfer_id": 64805201, + "external_resource_url": null, + "financial_institution": "1", + "installment_amount": 0, + "net_received_amount": 0.99, + "overpaid_amount": 0, + "payable_deferral_period": null, + "payment_method_reference_id": null, + "total_paid_amount": 1, + "transaction_id": "PIXE00416968202105130411UpQPkwhu50o" + }, + "shipping_cost": 0 + }] +} diff --git a/Demo/main.fmx b/Demo/main.fmx new file mode 100644 index 0000000..9752849 --- /dev/null +++ b/Demo/main.fmx @@ -0,0 +1,1124 @@ +object Form2: TForm2 + Left = 0 + Top = 0 + Caption = 'Form2' + ClientHeight = 655 + ClientWidth = 491 + FormFactor.Width = 320 + FormFactor.Height = 480 + FormFactor.Devices = [Desktop] + OnCreate = FormCreate + DesignerMasterStyle = 3 + object TabControl1: TTabControl + Align = Client + Size.Width = 491.000000000000000000 + Size.Height = 440.000000000000000000 + Size.PlatformDefault = False + TabHeight = 49.000000000000000000 + TabIndex = 0 + TabPosition = PlatformDefault + OnChange = TabControl1Change + Sizes = ( + 491s + 391s + 491s + 391s + 491s + 391s + 491s + 391s + 491s + 391s + 491s + 391s) + object TabItem1: TTabItem + CustomIcon = < + item + end> + IsSelected = True + Size.Width = 81.000000000000000000 + Size.Height = 49.000000000000000000 + Size.PlatformDefault = False + StyleLookup = '' + TabOrder = 0 + Text = 'CHAVES' + ExplicitSize.cx = 234.000000000000000000 + ExplicitSize.cy = 49.000000000000000000 + object Layout01: TLayout + Align = Top + Margins.Top = 10.000000000000000000 + Position.Y = 10.000000000000000000 + Size.Width = 491.000000000000000000 + Size.Height = 50.000000000000000000 + Size.PlatformDefault = False + object Edit1: TEdit + Touch.InteractiveGestures = [LongTap, DoubleTap] + Align = VertCenter + Position.X = 10.000000000000000000 + Position.Y = 19.000000000000000000 + Margins.Left = 10.000000000000000000 + Margins.Right = 10.000000000000000000 + Size.Width = 471.000000000000000000 + Size.Height = 32.000000000000000000 + Size.PlatformDefault = False + end + object Label1: TLabel + Align = Top + Margins.Left = 10.000000000000000000 + Margins.Top = 2.000000000000000000 + Margins.Right = 10.000000000000000000 + Position.X = 10.000000000000000000 + Position.Y = 2.000000000000000000 + Size.Width = 471.000000000000000000 + Size.Height = 17.000000000000000000 + Size.PlatformDefault = False + Text = 'Public Key' + end + end + object Layout02: TLayout + Align = Top + Position.Y = 60.000000000000000000 + Size.Width = 491.000000000000000000 + Size.Height = 50.000000000000000000 + Size.PlatformDefault = False + object Edit2: TEdit + Touch.InteractiveGestures = [LongTap, DoubleTap] + Align = VertCenter + Position.X = 10.000000000000000000 + Position.Y = 19.000000000000000000 + Margins.Left = 10.000000000000000000 + Margins.Right = 10.000000000000000000 + Size.Width = 471.000000000000000000 + Size.Height = 32.000000000000000000 + Size.PlatformDefault = False + end + object Label2: TLabel + Align = Top + Margins.Left = 10.000000000000000000 + Margins.Top = 2.000000000000000000 + Margins.Right = 10.000000000000000000 + Position.X = 10.000000000000000000 + Position.Y = 2.000000000000000000 + Size.Width = 471.000000000000000000 + Size.Height = 17.000000000000000000 + Size.PlatformDefault = False + Text = 'Access Token' + end + end + object Layout03: TLayout + Align = Top + Position.Y = 110.000000000000000000 + Size.Width = 491.000000000000000000 + Size.Height = 50.000000000000000000 + Size.PlatformDefault = False + object Edit3: TEdit + Touch.InteractiveGestures = [LongTap, DoubleTap] + Align = VertCenter + Position.X = 10.000000000000000000 + Position.Y = 19.000000000000000000 + Margins.Left = 10.000000000000000000 + Margins.Right = 10.000000000000000000 + Size.Width = 471.000000000000000000 + Size.Height = 32.000000000000000000 + Size.PlatformDefault = False + end + object Label3: TLabel + Align = Top + Margins.Left = 10.000000000000000000 + Margins.Top = 2.000000000000000000 + Margins.Right = 10.000000000000000000 + Position.X = 10.000000000000000000 + Position.Y = 2.000000000000000000 + Size.Width = 471.000000000000000000 + Size.Height = 17.000000000000000000 + Size.PlatformDefault = False + Text = 'Client ID' + end + end + object Layout05: TLayout + Align = Top + Position.Y = 210.000000000000000000 + Size.Width = 491.000000000000000000 + Size.Height = 50.000000000000000000 + Size.PlatformDefault = False + object CheckBox1: TCheckBox + Align = Left + IsChecked = True + Margins.Left = 10.000000000000000000 + Position.X = 10.000000000000000000 + Size.Width = 95.000000000000000000 + Size.Height = 50.000000000000000000 + Size.PlatformDefault = False + Text = 'SendBox' + end + object Button3: TButton + Align = Client + Margins.Right = 10.000000000000000000 + Size.Width = 376.000000000000000000 + Size.Height = 50.000000000000000000 + Size.PlatformDefault = False + Text = 'INICIAR' + OnClick = Button3Click + end + end + object Layout04: TLayout + Align = Top + Position.Y = 160.000000000000000000 + Size.Width = 491.000000000000000000 + Size.Height = 50.000000000000000000 + Size.PlatformDefault = False + object Edit4: TEdit + Touch.InteractiveGestures = [LongTap, DoubleTap] + Align = VertCenter + Position.X = 10.000000000000000000 + Position.Y = 19.000000000000000000 + Margins.Left = 10.000000000000000000 + Margins.Right = 10.000000000000000000 + Size.Width = 471.000000000000000000 + Size.Height = 32.000000000000000000 + Size.PlatformDefault = False + end + object Label4: TLabel + Align = Top + Margins.Left = 10.000000000000000000 + Margins.Top = 2.000000000000000000 + Margins.Right = 10.000000000000000000 + Position.X = 10.000000000000000000 + Position.Y = 2.000000000000000000 + Size.Width = 471.000000000000000000 + Size.Height = 17.000000000000000000 + Size.PlatformDefault = False + Text = 'Client Secret' + end + end + end + object TabItem2: TTabItem + CustomIcon = < + item + end> + IsSelected = False + Size.Width = 81.000000000000000000 + Size.Height = 49.000000000000000000 + Size.PlatformDefault = False + StyleLookup = '' + TabOrder = 0 + Text = 'PRINCIPAL' + ExplicitSize.cx = 234.000000000000000000 + ExplicitSize.cy = 49.000000000000000000 + object TabControl2: TTabControl + Align = Client + Size.Width = 491.000000000000000000 + Size.Height = 391.000000000000000000 + Size.PlatformDefault = False + TabHeight = 49.000000000000000000 + TabIndex = 0 + TabPosition = PlatformDefault + Sizes = ( + 491s + 342s + 491s + 342s) + object TabItem4: TTabItem + CustomIcon = < + item + end> + IsSelected = True + Size.Width = 245.000000000000000000 + Size.Height = 49.000000000000000000 + Size.PlatformDefault = False + StyleLookup = '' + TabOrder = 0 + Text = 'COMPRADOR' + ExplicitSize.cx = 245.000000000000000000 + ExplicitSize.cy = 49.000000000000000000 + object ListBox1: TListBox + Align = Client + Margins.Top = 10.000000000000000000 + Margins.Bottom = 10.000000000000000000 + Size.Width = 491.000000000000000000 + Size.Height = 322.000000000000000000 + Size.PlatformDefault = False + DisableFocusEffect = True + DefaultItemStyles.ItemStyle = '' + DefaultItemStyles.GroupHeaderStyle = '' + DefaultItemStyles.GroupFooterStyle = '' + Viewport.Width = 486.000000000000000000 + Viewport.Height = 322.000000000000000000 + object ListBoxItem1: TListBoxItem + Selectable = False + Size.Width = 486.000000000000000000 + Size.Height = 40.000000000000000000 + Size.PlatformDefault = False + object EditVenc: TDateEdit + Date = 44330.000000000000000000 + Align = VertCenter + Margins.Left = 50.000000000000000000 + Margins.Right = 50.000000000000000000 + Position.X = 50.000000000000000000 + Position.Y = 4.000000000000000000 + Size.Width = 386.000000000000000000 + Size.Height = 32.000000000000000000 + Size.PlatformDefault = False + end + end + object ListBoxItem2: TListBoxItem + Selectable = False + Position.Y = 40.000000000000000000 + Size.Width = 486.000000000000000000 + Size.Height = 40.000000000000000000 + Size.PlatformDefault = False + object EditValor: TEdit + Touch.InteractiveGestures = [LongTap, DoubleTap] + Align = VertCenter + Text = '5.00' + Position.X = 50.000000000000000000 + Position.Y = 4.000000000000000000 + Margins.Left = 50.000000000000000000 + Margins.Right = 50.000000000000000000 + Size.Width = 386.000000000000000000 + Size.Height = 32.000000000000000000 + Size.PlatformDefault = False + TextPrompt = 'Valor' + end + end + object ListBoxItem3: TListBoxItem + Selectable = False + Position.Y = 80.000000000000000000 + Size.Width = 486.000000000000000000 + Size.Height = 40.000000000000000000 + Size.PlatformDefault = False + object EditPedido: TEdit + Touch.InteractiveGestures = [LongTap, DoubleTap] + Align = VertCenter + Text = '123456' + Position.X = 50.000000000000000000 + Position.Y = 4.000000000000000000 + Margins.Left = 50.000000000000000000 + Margins.Right = 50.000000000000000000 + Size.Width = 386.000000000000000000 + Size.Height = 32.000000000000000000 + Size.PlatformDefault = False + TextPrompt = 'N'#250'mero do Pedido' + end + end + object ListBoxItem4: TListBoxItem + Selectable = False + Position.Y = 120.000000000000000000 + Size.Width = 486.000000000000000000 + Size.Height = 40.000000000000000000 + Size.PlatformDefault = False + object EditDescri: TEdit + Touch.InteractiveGestures = [LongTap, DoubleTap] + Align = VertCenter + Text = 'Presta'#231#227'o de Servi'#231'o' + Position.X = 50.000000000000000000 + Position.Y = 4.000000000000000000 + Margins.Left = 50.000000000000000000 + Margins.Right = 50.000000000000000000 + Size.Width = 386.000000000000000000 + Size.Height = 32.000000000000000000 + Size.PlatformDefault = False + TextPrompt = 'Descri'#231#227'o' + end + end + object ListBoxItem5: TListBoxItem + Selectable = False + Position.Y = 160.000000000000000000 + Size.Width = 486.000000000000000000 + Size.Height = 40.000000000000000000 + Size.PlatformDefault = False + object EditPgto: TComboBox + Align = VertCenter + Items.Strings = ( + 'BOLETO' + 'LOTERICA' + 'PIX' + 'CARTAO DEBITO' + 'CARTAO CREDITO') + ItemIndex = 2 + Margins.Left = 50.000000000000000000 + Margins.Right = 50.000000000000000000 + Position.X = 50.000000000000000000 + Position.Y = 4.000000000000000000 + Size.Width = 386.000000000000000000 + Size.Height = 32.000000000000000000 + Size.PlatformDefault = False + end + end + object ListBoxItem6: TListBoxItem + Selectable = False + Position.Y = 200.000000000000000000 + Size.Width = 486.000000000000000000 + Size.Height = 40.000000000000000000 + Size.PlatformDefault = False + object EditEmail: TEdit + Touch.InteractiveGestures = [LongTap, DoubleTap] + Align = VertCenter + Text = 'test@test.com' + Position.X = 50.000000000000000000 + Position.Y = 4.000000000000000000 + Margins.Left = 50.000000000000000000 + Margins.Right = 50.000000000000000000 + Size.Width = 386.000000000000000000 + Size.Height = 32.000000000000000000 + Size.PlatformDefault = False + TextPrompt = 'Email' + end + end + object ListBoxItem7: TListBoxItem + Selectable = False + Position.Y = 240.000000000000000000 + Size.Width = 486.000000000000000000 + Size.Height = 40.000000000000000000 + Size.PlatformDefault = False + object EditNome: TEdit + Touch.InteractiveGestures = [LongTap, DoubleTap] + Align = VertCenter + Text = 'Test' + Position.X = 50.000000000000000000 + Position.Y = 4.000000000000000000 + Margins.Left = 50.000000000000000000 + Margins.Right = 50.000000000000000000 + Size.Width = 386.000000000000000000 + Size.Height = 32.000000000000000000 + Size.PlatformDefault = False + TextPrompt = 'Nome' + end + end + object ListBoxItem8: TListBoxItem + Selectable = False + Position.Y = 280.000000000000000000 + Size.Width = 486.000000000000000000 + Size.Height = 40.000000000000000000 + Size.PlatformDefault = False + object EditSobre: TEdit + Touch.InteractiveGestures = [LongTap, DoubleTap] + Align = VertCenter + Text = 'User' + Position.X = 50.000000000000000000 + Position.Y = 4.000000000000000000 + Margins.Left = 50.000000000000000000 + Margins.Right = 50.000000000000000000 + Size.Width = 386.000000000000000000 + Size.Height = 32.000000000000000000 + Size.PlatformDefault = False + TextPrompt = 'SobreNome' + end + end + object ListBoxItem9: TListBoxItem + Selectable = False + Position.Y = 320.000000000000000000 + Size.Width = 486.000000000000000000 + Size.Height = 40.000000000000000000 + Size.PlatformDefault = False + object EditDoc: TComboBox + Align = VertCenter + Items.Strings = ( + 'CPF' + 'CNPJ') + ItemIndex = 0 + Margins.Left = 50.000000000000000000 + Margins.Right = 50.000000000000000000 + Position.X = 50.000000000000000000 + Position.Y = 4.000000000000000000 + Size.Width = 386.000000000000000000 + Size.Height = 32.000000000000000000 + Size.PlatformDefault = False + end + end + object ListBoxItem10: TListBoxItem + Selectable = False + Position.Y = 360.000000000000000000 + Size.Width = 486.000000000000000000 + Size.Height = 40.000000000000000000 + Size.PlatformDefault = False + object EditDCN: TEdit + Touch.InteractiveGestures = [LongTap, DoubleTap] + Align = VertCenter + Text = '19119119100' + Position.X = 50.000000000000000000 + Position.Y = 4.000000000000000000 + Margins.Left = 50.000000000000000000 + Margins.Right = 50.000000000000000000 + Size.Width = 386.000000000000000000 + Size.Height = 32.000000000000000000 + Size.PlatformDefault = False + TextPrompt = 'N'#250'mero do Documento' + end + end + object ListBoxItem11: TListBoxItem + Selectable = False + Position.Y = 400.000000000000000000 + Size.Width = 486.000000000000000000 + Size.Height = 40.000000000000000000 + Size.PlatformDefault = False + object EditCep: TEdit + Touch.InteractiveGestures = [LongTap, DoubleTap] + Align = VertCenter + Text = '06663055' + Position.X = 50.000000000000000000 + Position.Y = 4.000000000000000000 + Margins.Left = 50.000000000000000000 + Margins.Right = 50.000000000000000000 + Size.Width = 386.000000000000000000 + Size.Height = 32.000000000000000000 + Size.PlatformDefault = False + TextPrompt = 'Cep' + end + end + object ListBoxItem12: TListBoxItem + Selectable = False + Position.Y = 440.000000000000000000 + Size.Width = 486.000000000000000000 + Size.Height = 40.000000000000000000 + Size.PlatformDefault = False + object EditEnd: TEdit + Touch.InteractiveGestures = [LongTap, DoubleTap] + Align = VertCenter + Text = 'Rua Sebasti'#227'o Mamede' + Position.X = 50.000000000000000000 + Position.Y = 4.000000000000000000 + Margins.Left = 50.000000000000000000 + Margins.Right = 50.000000000000000000 + Size.Width = 386.000000000000000000 + Size.Height = 32.000000000000000000 + Size.PlatformDefault = False + TextPrompt = 'Endere'#231'o' + end + end + object ListBoxItem13: TListBoxItem + Selectable = False + Position.Y = 480.000000000000000000 + Size.Width = 486.000000000000000000 + Size.Height = 40.000000000000000000 + Size.PlatformDefault = False + object EditNumero: TEdit + Touch.InteractiveGestures = [LongTap, DoubleTap] + Align = VertCenter + Text = 'Sem Numero' + Position.X = 50.000000000000000000 + Position.Y = 4.000000000000000000 + Margins.Left = 50.000000000000000000 + Margins.Right = 50.000000000000000000 + Size.Width = 386.000000000000000000 + Size.Height = 32.000000000000000000 + Size.PlatformDefault = False + TextPrompt = 'N'#250'mero' + end + end + object ListBoxItem14: TListBoxItem + Selectable = False + Position.Y = 520.000000000000000000 + Size.Width = 486.000000000000000000 + Size.Height = 40.000000000000000000 + Size.PlatformDefault = False + object EditBairro: TEdit + Touch.InteractiveGestures = [LongTap, DoubleTap] + Align = VertCenter + Text = 'Coahb 1' + Position.X = 50.000000000000000000 + Position.Y = 4.000000000000000000 + Margins.Left = 50.000000000000000000 + Margins.Right = 50.000000000000000000 + Size.Width = 386.000000000000000000 + Size.Height = 32.000000000000000000 + Size.PlatformDefault = False + TextPrompt = 'Bairro' + end + end + object ListBoxItem15: TListBoxItem + Selectable = False + Position.Y = 560.000000000000000000 + Size.Width = 486.000000000000000000 + Size.Height = 40.000000000000000000 + Size.PlatformDefault = False + object EditCidade: TEdit + Touch.InteractiveGestures = [LongTap, DoubleTap] + Align = VertCenter + Text = 'Itapevi' + Position.X = 50.000000000000000000 + Position.Y = 4.000000000000000000 + Margins.Left = 50.000000000000000000 + Margins.Right = 50.000000000000000000 + Size.Width = 386.000000000000000000 + Size.Height = 32.000000000000000000 + Size.PlatformDefault = False + TextPrompt = 'Cidade' + end + end + object ListBoxItem16: TListBoxItem + Selectable = False + Position.Y = 600.000000000000000000 + Size.Width = 486.000000000000000000 + Size.Height = 40.000000000000000000 + Size.PlatformDefault = False + object EditEstado: TEdit + Touch.InteractiveGestures = [LongTap, DoubleTap] + Align = VertCenter + Text = 'SP' + Position.X = 50.000000000000000000 + Position.Y = 4.000000000000000000 + Margins.Left = 50.000000000000000000 + Margins.Right = 50.000000000000000000 + Size.Width = 386.000000000000000000 + Size.Height = 32.000000000000000000 + Size.PlatformDefault = False + TextPrompt = 'Estado' + end + end + end + end + object TabItem8: TTabItem + CustomIcon = < + item + end> + IsSelected = False + Size.Width = 246.000000000000000000 + Size.Height = 49.000000000000000000 + Size.PlatformDefault = False + StyleLookup = '' + TabOrder = 0 + Text = 'CART'#195'O' + ExplicitSize.cx = 246.000000000000000000 + ExplicitSize.cy = 49.000000000000000000 + end + end + end + object TabItem6: TTabItem + CustomIcon = < + item + end> + IsSelected = False + Size.Width = 81.000000000000000000 + Size.Height = 49.000000000000000000 + Size.PlatformDefault = False + StyleLookup = '' + TabOrder = 0 + Text = 'EMISS'#195'O' + ExplicitSize.cx = 68.000000000000000000 + ExplicitSize.cy = 49.000000000000000000 + object Layout17: TLayout + Align = Top + Size.Width = 491.000000000000000000 + Size.Height = 50.000000000000000000 + Size.PlatformDefault = False + object Button2: TButton + Align = Client + Size.Width = 491.000000000000000000 + Size.Height = 50.000000000000000000 + Size.PlatformDefault = False + Text = 'GERAR BOLETO BANC'#193'RIO' + OnClick = Button2Click + end + end + object Layout10: TLayout + Align = Client + Size.Width = 491.000000000000000000 + Size.Height = 259.000000000000000000 + Size.PlatformDefault = False + object QRCodeBitmap: TImage + MultiResBitmap = < + item + end> + Align = Center + Size.Width = 176.000000000000000000 + Size.Height = 174.000000000000000000 + Size.PlatformDefault = False + end + end + object Layout5: TLayout + Align = Bottom + Position.Y = 341.000000000000000000 + Size.Width = 491.000000000000000000 + Size.Height = 50.000000000000000000 + Size.PlatformDefault = False + object Button1: TButton + Align = Client + Enabled = False + Size.Width = 491.000000000000000000 + Size.Height = 50.000000000000000000 + Size.PlatformDefault = False + Text = 'COPIA E COLA' + OnClick = Button1Click + end + end + object Edit6: TEdit + Touch.InteractiveGestures = [LongTap, DoubleTap] + Align = Bottom + Position.Y = 309.000000000000000000 + Size.Width = 491.000000000000000000 + Size.Height = 32.000000000000000000 + Size.PlatformDefault = False + end + end + object TabItem3: TTabItem + CustomIcon = < + item + end> + IsSelected = False + Size.Width = 81.000000000000000000 + Size.Height = 49.000000000000000000 + Size.PlatformDefault = False + StyleLookup = '' + TabOrder = 0 + Text = 'CONSULTAR' + ExplicitSize.cx = 156.000000000000000000 + ExplicitSize.cy = 49.000000000000000000 + object Layout13: TLayout + Align = Top + Margins.Top = 10.000000000000000000 + Position.Y = 60.000000000000000000 + Size.Width = 491.000000000000000000 + Size.Height = 63.000000000000000000 + Size.PlatformDefault = False + object Layout14: TLayout + Align = Client + Size.Width = 360.000000000000000000 + Size.Height = 63.000000000000000000 + Size.PlatformDefault = False + object Edit5: TEdit + Touch.InteractiveGestures = [LongTap, DoubleTap] + Align = VertCenter + Position.X = 20.000000000000000000 + Position.Y = 27.000000000000000000 + Margins.Left = 20.000000000000000000 + Margins.Right = 20.000000000000000000 + Size.Width = 320.000000000000000000 + Size.Height = 32.000000000000000000 + Size.PlatformDefault = False + end + object Label11: TLabel + Align = Top + Margins.Left = 20.000000000000000000 + Margins.Right = 20.000000000000000000 + Position.X = 20.000000000000000000 + Size.Width = 320.000000000000000000 + Size.Height = 23.000000000000000000 + Size.PlatformDefault = False + Text = 'INFORME O ID DO PEDIDO:' + end + end + object Layout1: TLayout + Align = Right + Margins.Right = 10.000000000000000000 + Position.X = 360.000000000000000000 + Size.Width = 121.000000000000000000 + Size.Height = 63.000000000000000000 + Size.PlatformDefault = False + object Button6: TButton + Align = Bottom + Margins.Top = 23.000000000000000000 + Position.Y = 23.000000000000000000 + Size.Width = 121.000000000000000000 + Size.Height = 40.000000000000000000 + Size.PlatformDefault = False + Text = 'EXECUTAR' + OnClick = Button6Click + end + end + end + object Label12: TLabel + Align = Top + StyledSettings = [Family, Style, FontColor] + Margins.Left = 30.000000000000000000 + Margins.Top = 10.000000000000000000 + Margins.Right = 30.000000000000000000 + Position.X = 30.000000000000000000 + Position.Y = 133.000000000000000000 + Size.Width = 431.000000000000000000 + Size.Height = 23.000000000000000000 + Size.PlatformDefault = False + TextSettings.Font.Size = 22.000000000000000000 + Text = 'Status:' + end + object Label13: TLabel + Align = Top + StyledSettings = [Family, Style, FontColor] + Margins.Left = 30.000000000000000000 + Margins.Top = 10.000000000000000000 + Margins.Right = 30.000000000000000000 + Position.X = 30.000000000000000000 + Position.Y = 166.000000000000000000 + Size.Width = 431.000000000000000000 + Size.Height = 23.000000000000000000 + Size.PlatformDefault = False + TextSettings.Font.Size = 22.000000000000000000 + Text = 'Creditado:' + end + object Label14: TLabel + Align = Top + StyledSettings = [Family, Style] + Margins.Left = 30.000000000000000000 + Margins.Top = 10.000000000000000000 + Margins.Right = 30.000000000000000000 + Position.X = 30.000000000000000000 + Position.Y = 199.000000000000000000 + Size.Width = 431.000000000000000000 + Size.Height = 153.000000000000000000 + Size.PlatformDefault = False + TextSettings.Font.Size = 22.000000000000000000 + TextSettings.FontColor = xFFC90D0D + TextSettings.HorzAlign = Center + Text = + 'Para a consulta funcionar a chave Access Token tem que ser a de ' + + 'produ'#231#227'o.' + end + object Layout11: TLayout + Align = Top + Size.Width = 491.000000000000000000 + Size.Height = 50.000000000000000000 + Size.PlatformDefault = False + object BoxTipo: TComboBox + Align = VertCenter + Items.Strings = ( + 'BUSCAR' + 'CANCELAR') + ItemIndex = 0 + Margins.Left = 100.000000000000000000 + Margins.Right = 100.000000000000000000 + Position.X = 100.000000000000000000 + Position.Y = 9.000000000000000000 + Size.Width = 291.000000000000000000 + Size.Height = 32.000000000000000000 + Size.PlatformDefault = False + end + end + end + object TabItem5: TTabItem + CustomIcon = < + item + end> + StyledSettings = [Family, Style, FontColor] + IsSelected = False + Size.Width = 81.000000000000000000 + Size.Height = 49.000000000000000000 + Size.PlatformDefault = False + StyleLookup = '' + TabOrder = 0 + Text = 'SALDO' + ExplicitSize.cx = 67.000000000000000000 + ExplicitSize.cy = 49.000000000000000000 + object Layout16: TLayout + Align = Top + Size.Width = 491.000000000000000000 + Size.Height = 50.000000000000000000 + Size.PlatformDefault = False + object Button8: TButton + Align = Contents + Size.Width = 491.000000000000000000 + Size.Height = 50.000000000000000000 + Size.PlatformDefault = False + Text = 'BUSCAR SALDO DA CONTA' + OnClick = Button8Click + end + end + object Layout8: TLayout + Align = Top + Margins.Top = 10.000000000000000000 + Position.Y = 60.000000000000000000 + Size.Width = 491.000000000000000000 + Size.Height = 69.000000000000000000 + Size.PlatformDefault = False + object Label6: TLabel + Align = Top + StyledSettings = [Family, Style, FontColor] + Margins.Left = 30.000000000000000000 + Margins.Top = 10.000000000000000000 + Margins.Right = 30.000000000000000000 + Position.X = 30.000000000000000000 + Position.Y = 43.000000000000000000 + Size.Width = 431.000000000000000000 + Size.Height = 23.000000000000000000 + Size.PlatformDefault = False + TextSettings.Font.Size = 22.000000000000000000 + Text = 'Saldo em conta '#233' de:' + end + object Label9: TLabel + Align = Top + StyledSettings = [Family, Style, FontColor] + Margins.Left = 30.000000000000000000 + Margins.Top = 10.000000000000000000 + Margins.Right = 30.000000000000000000 + Position.X = 30.000000000000000000 + Position.Y = 10.000000000000000000 + Size.Width = 431.000000000000000000 + Size.Height = 23.000000000000000000 + Size.PlatformDefault = False + TextSettings.Font.Size = 22.000000000000000000 + Text = 'SALDO CONTA' + end + end + object Label15: TLabel + Align = Top + StyledSettings = [Family, Style] + Margins.Left = 30.000000000000000000 + Margins.Top = 10.000000000000000000 + Margins.Right = 30.000000000000000000 + Position.X = 30.000000000000000000 + Position.Y = 139.000000000000000000 + Size.Width = 431.000000000000000000 + Size.Height = 153.000000000000000000 + Size.PlatformDefault = False + TextSettings.Font.Size = 22.000000000000000000 + TextSettings.FontColor = xFFC90D0D + TextSettings.HorzAlign = Center + Text = + 'Para a consulta funcionar a chave Access Token tem que ser a de ' + + 'produ'#231#227'o.' + end + end + object TabItem7: TTabItem + CustomIcon = < + item + end> + IsSelected = False + Size.Width = 86.000000000000000000 + Size.Height = 49.000000000000000000 + Size.PlatformDefault = False + StyleLookup = '' + TabOrder = 0 + Text = 'SUA ID' + ExplicitSize.cx = 71.000000000000000000 + ExplicitSize.cy = 49.000000000000000000 + object Layout2: TLayout + Align = Top + Size.Width = 491.000000000000000000 + Size.Height = 50.000000000000000000 + Size.PlatformDefault = False + object Button5: TButton + Align = Client + Size.Width = 491.000000000000000000 + Size.Height = 50.000000000000000000 + Size.PlatformDefault = False + Text = 'OBTER DADOS DA SUA ID NO MERCADO PAGO' + OnClick = Button5Click + end + object Button9: TButton + Align = Left + Position.X = 73.000000000000000000 + Size.Width = 73.000000000000000000 + Size.Height = 50.000000000000000000 + Size.PlatformDefault = False + Text = '[]' + Visible = False + OnClick = Button9Click + end + end + object Layout3: TLayout + Align = Top + Position.Y = 50.000000000000000000 + Size.Width = 491.000000000000000000 + Size.Height = 50.000000000000000000 + Size.PlatformDefault = False + object Label16: TLabel + Align = VertCenter + StyledSettings = [Family, Style, FontColor] + Margins.Left = 30.000000000000000000 + Margins.Right = 30.000000000000000000 + Position.X = 30.000000000000000000 + Position.Y = 12.000000000000000000 + Size.Width = 431.000000000000000000 + Size.Height = 26.000000000000000000 + Size.PlatformDefault = False + TextSettings.Font.Size = 22.000000000000000000 + Text = 'UserID:' + end + end + object Layout4: TLayout + Align = Top + Position.Y = 100.000000000000000000 + Size.Width = 491.000000000000000000 + Size.Height = 50.000000000000000000 + Size.PlatformDefault = False + object Label17: TLabel + Align = VertCenter + StyledSettings = [Family, Style, FontColor] + Margins.Left = 30.000000000000000000 + Margins.Right = 30.000000000000000000 + Position.X = 30.000000000000000000 + Position.Y = 12.000000000000000000 + Size.Width = 431.000000000000000000 + Size.Height = 26.000000000000000000 + Size.PlatformDefault = False + TextSettings.Font.Size = 22.000000000000000000 + Text = 'Usu'#225'rio:' + end + end + object Layout6: TLayout + Align = Top + Position.Y = 150.000000000000000000 + Size.Width = 491.000000000000000000 + Size.Height = 50.000000000000000000 + Size.PlatformDefault = False + object Label18: TLabel + Align = VertCenter + StyledSettings = [Family, Style, FontColor] + Margins.Left = 30.000000000000000000 + Margins.Right = 30.000000000000000000 + Position.X = 30.000000000000000000 + Position.Y = 12.000000000000000000 + Size.Width = 431.000000000000000000 + Size.Height = 26.000000000000000000 + Size.PlatformDefault = False + TextSettings.Font.Size = 22.000000000000000000 + Text = 'Name:' + end + end + object Layout18: TLayout + Align = Top + Position.Y = 200.000000000000000000 + Size.Width = 491.000000000000000000 + Size.Height = 50.000000000000000000 + Size.PlatformDefault = False + object Label19: TLabel + Align = VertCenter + StyledSettings = [Family, Style, FontColor] + Margins.Left = 30.000000000000000000 + Margins.Right = 30.000000000000000000 + Position.X = 30.000000000000000000 + Position.Y = 12.000000000000000000 + Size.Width = 431.000000000000000000 + Size.Height = 26.000000000000000000 + Size.PlatformDefault = False + TextSettings.Font.Size = 22.000000000000000000 + Text = 'Email:' + end + end + end + end + object Layout9: TLayout + Align = Bottom + Position.Y = 605.000000000000000000 + Size.Width = 491.000000000000000000 + Size.Height = 50.000000000000000000 + Size.PlatformDefault = False + object Rectangle2: TRectangle + Align = Contents + Fill.Color = claBrown + Margins.Left = 5.000000000000000000 + Margins.Top = 5.000000000000000000 + Margins.Right = 5.000000000000000000 + Margins.Bottom = 5.000000000000000000 + Size.Width = 481.000000000000000000 + Size.Height = 40.000000000000000000 + Size.PlatformDefault = False + Stroke.Kind = None + XRadius = 6.000000000000000000 + YRadius = 6.000000000000000000 + object Label7: TLabel + Align = VertCenter + StyledSettings = [Family, Style] + Margins.Left = 10.000000000000000000 + Margins.Right = 10.000000000000000000 + Margins.Bottom = 2.000000000000000000 + Position.X = 10.000000000000000000 + Position.Y = 20.000000000000000000 + Size.Width = 461.000000000000000000 + Size.Height = 17.000000000000000000 + Size.PlatformDefault = False + TextSettings.Font.Size = 14.000000000000000000 + TextSettings.FontColor = claWhite + Text = '...' + end + object Label10: TLabel + Align = Top + StyledSettings = [Family] + Margins.Left = 10.000000000000000000 + Margins.Top = 3.000000000000000000 + Margins.Right = 10.000000000000000000 + Position.X = 10.000000000000000000 + Position.Y = 3.000000000000000000 + Size.Width = 461.000000000000000000 + Size.Height = 17.000000000000000000 + Size.PlatformDefault = False + TextSettings.Font.Size = 14.000000000000000000 + TextSettings.Font.StyleExt = {00070000000000000004000000} + TextSettings.FontColor = claWhite + Text = 'Error:' + end + end + end + object Layout12: TLayout + Align = Bottom + Position.Y = 440.000000000000000000 + Size.Width = 491.000000000000000000 + Size.Height = 115.000000000000000000 + Size.PlatformDefault = False + object Memo2: TMemo + Touch.InteractiveGestures = [Pan, LongTap, DoubleTap] + DataDetectorTypes = [] + TextSettings.WordWrap = True + Align = Client + Size.Width = 491.000000000000000000 + Size.Height = 115.000000000000000000 + Size.PlatformDefault = False + Viewport.Width = 483.000000000000000000 + Viewport.Height = 107.000000000000000000 + end + end + object Layout7: TLayout + Align = Bottom + Position.Y = 555.000000000000000000 + Size.Width = 491.000000000000000000 + Size.Height = 50.000000000000000000 + Size.PlatformDefault = False + object Rectangle1: TRectangle + Align = Contents + Fill.Color = claBrown + Margins.Left = 5.000000000000000000 + Margins.Top = 5.000000000000000000 + Margins.Right = 5.000000000000000000 + Margins.Bottom = 5.000000000000000000 + Size.Width = 481.000000000000000000 + Size.Height = 40.000000000000000000 + Size.PlatformDefault = False + Stroke.Kind = None + XRadius = 6.000000000000000000 + YRadius = 6.000000000000000000 + object Label8: TLabel + Align = Top + StyledSettings = [Family] + Margins.Left = 10.000000000000000000 + Margins.Top = 3.000000000000000000 + Margins.Right = 10.000000000000000000 + Position.X = 10.000000000000000000 + Position.Y = 3.000000000000000000 + Size.Width = 461.000000000000000000 + Size.Height = 17.000000000000000000 + Size.PlatformDefault = False + TextSettings.Font.Size = 14.000000000000000000 + TextSettings.Font.StyleExt = {00070000000000000004000000} + TextSettings.FontColor = claWhite + Text = 'Status:' + end + object Label5: TLabel + Align = VertCenter + StyledSettings = [Family, Style] + Margins.Left = 10.000000000000000000 + Margins.Right = 10.000000000000000000 + Margins.Bottom = 2.000000000000000000 + Position.X = 10.000000000000000000 + Position.Y = 20.000000000000000000 + Size.Width = 461.000000000000000000 + Size.Height = 17.000000000000000000 + Size.PlatformDefault = False + TextSettings.Font.Size = 14.000000000000000000 + TextSettings.FontColor = claWhite + Text = '...' + end + end + end + object GerenciaPago1: TGerenciaPago + Ativo = False + ConfigKey.SandBox = False + LancarDados.MeioPagar = Boleto + OnError = GerenciaPago1Error + OnStatus = GerenciaPago1Status + OnSaldo = GerenciaPago1Saldo + OnBoletoLink = GerenciaPago1BoletoLink + OnPixBase64 = GerenciaPago1PixBase64 + OnPixCopiar = GerenciaPago1PixCopiar + Left = 216 + Top = 504 + end +end diff --git a/Demo/main.pas b/Demo/main.pas new file mode 100644 index 0000000..e7d985f --- /dev/null +++ b/Demo/main.pas @@ -0,0 +1,608 @@ +unit main; + +interface + +uses + {$IFDEF MSWINDOWS} + Winapi.ShellAPI, Winapi.Windows, + {$ENDIF MSWINDOWS} + {$IFDEF POSIX} + Posix.Stdlib, + {$ENDIF POSIX} + + System.SysUtils, System.Types, System.UITypes, System.Classes, + System.StrUtils, System.Variants, System.Math, System.Character, + System.NetEncoding, System.DateUtils, + + GerenciaPago, {DBXJSON,} System.JSON, + + FireDAC.Stan.Error, FireDAC.DatS, FireDAC.Phys.Intf, FireDAC.DApt.Intf, + Data.DB, FireDAC.Comp.DataSet, FireDAC.Comp.Client, FireDAC.Stan.StorageBin, + FireDAC.Stan.Intf, FireDAC.Stan.Option, FireDAC.Stan.Param, + + FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, + FMX.Controls.Presentation, FMX.Edit, FMX.Layouts, FMX.StdCtrls, + FMX.Memo.Types, FMX.ScrollBox, FMX.Memo, FMXDelphiZXingQRCode, + FMX.Objects, FMX.TabControl, FMX.WebBrowser, FMX.ListBox, + FMX.DateTimeCtrls, FMX.Platform + + {$IFDEF ANDROID} + ,Androidapi.JNI.Provider //TJSettings_Secure GPS + ,Androidapi.JNI.OS + ,Androidapi.JNI.App + ,Androidapi.JNIBridge + ,Androidapi.JNI.GraphicsContentViewText // JIntent + ,Androidapi.JNI.JavaTypes + ,Androidapi.Helpers + ,Androidapi.JNI.Location // Sensor de Localização + ,Androidapi.JNI.Telephony // Telefone Número + {$ENDIF} + ; + +type + TForm2 = class(TForm) + Layout01: TLayout; + Layout02: TLayout; + Layout03: TLayout; + Layout04: TLayout; + Edit1: TEdit; + Edit2: TEdit; + Edit3: TEdit; + Edit4: TEdit; + Label1: TLabel; + Label2: TLabel; + Label3: TLabel; + Label4: TLabel; + Layout7: TLayout; + Label5: TLabel; + Layout8: TLayout; + Label6: TLabel; + Layout9: TLayout; + Label7: TLabel; + Label8: TLabel; + Label9: TLabel; + Label10: TLabel; + Layout10: TLayout; + QRCodeBitmap: TImage; + Layout12: TLayout; + Memo2: TMemo; + TabControl1: TTabControl; + TabItem1: TTabItem; + TabItem2: TTabItem; + TabItem3: TTabItem; + Layout13: TLayout; + Label11: TLabel; + Edit5: TEdit; + Button6: TButton; + Layout14: TLayout; + Label12: TLabel; + Label13: TLabel; + Label14: TLabel; + TabItem5: TTabItem; + Layout16: TLayout; + Button8: TButton; + Label15: TLabel; + TabItem6: TTabItem; + Layout17: TLayout; + Button2: TButton; + Rectangle1: TRectangle; + Rectangle2: TRectangle; + GerenciaPago1: TGerenciaPago; + Layout05: TLayout; + CheckBox1: TCheckBox; + Button3: TButton; + Layout1: TLayout; + TabItem7: TTabItem; + Layout2: TLayout; + Button5: TButton; + Button9: TButton; + Layout3: TLayout; + Layout4: TLayout; + Layout6: TLayout; + Layout18: TLayout; + Label16: TLabel; + Label17: TLabel; + Label18: TLabel; + Label19: TLabel; + ListBox1: TListBox; + ListBoxItem1: TListBoxItem; + ListBoxItem2: TListBoxItem; + ListBoxItem3: TListBoxItem; + ListBoxItem4: TListBoxItem; + ListBoxItem5: TListBoxItem; + ListBoxItem6: TListBoxItem; + ListBoxItem7: TListBoxItem; + ListBoxItem8: TListBoxItem; + ListBoxItem9: TListBoxItem; + ListBoxItem10: TListBoxItem; + ListBoxItem11: TListBoxItem; + ListBoxItem12: TListBoxItem; + ListBoxItem13: TListBoxItem; + ListBoxItem14: TListBoxItem; + ListBoxItem15: TListBoxItem; + ListBoxItem16: TListBoxItem; + EditVenc: TDateEdit; + EditValor: TEdit; + EditPedido: TEdit; + EditDescri: TEdit; + EditPgto: TComboBox; + EditEmail: TEdit; + EditNome: TEdit; + EditSobre: TEdit; + EditDCN: TEdit; + EditCep: TEdit; + EditEnd: TEdit; + EditNumero: TEdit; + EditBairro: TEdit; + EditCidade: TEdit; + EditEstado: TEdit; + EditDoc: TComboBox; + Layout5: TLayout; + Button1: TButton; + Edit6: TEdit; + TabControl2: TTabControl; + TabItem4: TTabItem; + TabItem8: TTabItem; + Layout11: TLayout; + BoxTipo: TComboBox; + procedure GerenciaPago1Status(const Value: string); + procedure GerenciaPago1Saldo(const Value: Double); + procedure GerenciaPago1Error(const Value: string); + procedure GerenciaPago1BoletoLink(const Value: string); + procedure Button6Click(Sender: TObject); + procedure Button8Click(Sender: TObject); + procedure Button2Click(Sender: TObject); + procedure Button3Click(Sender: TObject); + procedure Button5Click(Sender: TObject); + procedure Button9Click(Sender: TObject); + procedure TabControl1Change(Sender: TObject); + procedure FormCreate(Sender: TObject); + procedure Button1Click(Sender: TObject); + procedure GerenciaPago1PixCopiar(const Value: string); + procedure GerenciaPago1PixBase64(const Value: WideString); + private + { Private declarations } + procedure QrCodeMobile(imgQRCode: TImage; texto: string); + procedure QRCodeWin(imgQRCode: TImage; texto: string); + procedure m( s: String ); + public + { Public declarations } + end; + +var + Form2: TForm2; + +implementation + +{$R *.fmx} + +{function OpenURL(const URL: string; const DisplayError: Boolean = False): Boolean; +var + Intent: JIntent; +begin +// There may be an issue with the geo: prefix and URLEncode. +// will need to research + Intent := TJIntent.JavaClass.init(TJIntent.JavaClass.ACTION_VIEW, + TJnet_Uri.JavaClass.parse(StringToJString(URL))); + try + TAndroidHelper.Activity.startActivity(Intent); + exit(true); + except + on e: Exception do + begin + if DisplayError then ShowMessage('Error: ' + e.Message); + exit(false); + end; + end; +end;} + +function getCamposJsonString(json,value:String): String; +var + LJSONObject: TJSONObject; + function TrataObjeto(jObj:TJSONObject):string; + var i:integer; + jPar: TJSONPair; + begin + result := ''; + for i := 0 to jObj.Size - 1 do + begin + jPar := jObj.Get(i); + if jPar.JsonValue Is TJSONObject then + result := TrataObjeto((jPar.JsonValue As TJSONObject)) else + if sametext(trim(jPar.JsonString.Value),value) then + begin + Result := jPar.JsonValue.Value; + break; + end; + if result <> '' then + break; + end; + end; +begin + try + LJSONObject := nil; + LJSONObject := TJSONObject.ParseJSONValue(TEncoding.ASCII.GetBytes(json),0) as TJSONObject; + result := TrataObjeto(LJSONObject); + finally + LJSONObject.Free; + end; +end; + +function StripNonJson(s: string): string; +var + ch: char; + inString: boolean; +begin + Result := ''; + inString := false; + for ch in s do + begin + if ch = '"' then + inString := not inString; + if TCharacter.IsWhiteSpace(ch) and not inString then + continue; + Result := Result + ch; + end; +end; + +function JsonSinComillas(s: String): String; +begin + result := StringReplace( s, '"','', [rfReplaceAll] ); +end; + +procedure TForm2.Button1Click(Sender: TObject); +begin + GerenciaPago1.CopiaColaPix; +end; + +procedure TForm2.Button2Click(Sender: TObject); +begin + with GerenciaPago1.LancarDados do begin + Vencimento := Editvenc.Text; + Valor := EditValor.Text; + PedidoNumero := EditPedido.Text; + Descricao := EditDescri.Text; + + case EditPgto.ItemIndex of + 0: MeioPagar := TPgto.Boleto; + 1: MeioPagar := TPgto.Loterica; + 2: MeioPagar := TPgto.Pix; + end; + + Email := EditEmail.Text; + Nome := EditNome.Text; + SobreNome := EditSobre.Text; + Doc := EditDoc.Selected.Text; + DocNumero := EditDCN.Text; + Cep := EditCep.Text; + Endereco := EditEnd.Text; + Numero := EditNumero.Text; + Bairro := EditBairro.Text; + Cidade := EditCidade.Text; + Estado := EditEstado.Text; + end; + + GerenciaPago1.GerarBoleto; + + if GerenciaPago1.LancarDados.MeioPagar = TPgto.Pix then + Button1.Enabled := True else + Button1.Enabled := False; + + //m(GerenciaPago1.MemoRetono); + m(GerenciaPago1.RetornaID); +end; + +procedure TForm2.Button3Click(Sender: TObject); +begin + if not GerenciaPago1.Ativo then + begin + with GerenciaPago1 do begin + Ativo := True; + ConfigKey.PublicKey := Edit1.Text; + ConfigKey.AccessToken := Edit2.Text; + ConfigKey.Cliente_id := Edit3.Text; + ConfigKey.Cliente_Secret := Edit4.Text; + ConfigKey.SandBox := CheckBox1.IsChecked; + end; + + {lbStatus.Text := MP.lbStatus; + MemoCore.Lines.Text := MP.MemoRetono; + MemoError.Lines.Text := MP.MemoError;} + Button3.Text := 'Stop'; + end + else + begin + GerenciaPago1.Ativo := False; + Button3.Text := 'INICIAR'; + end; +end; + +procedure TForm2.Button5Click(Sender: TObject); +begin + GerenciaPago1.RetornaConta; + + Label16.Text := 'UserID: ' + GerenciaPago1.DadosConta.ID; + Label17.Text := 'Usuário: ' + GerenciaPago1.DadosConta.nickname; + Label18.Text := 'Name: ' + GerenciaPago1.DadosConta.first_name+' '+GerenciaPago1.DadosConta.last_name; + Label19.Text := 'Email: ' + GerenciaPago1.DadosConta.email; +end; + +function getData2(JsonString: String; User: String; Field: String): String; +var + JSonValue: TJSonValue; + JsonArray: TJSONArray; + ArrayElement: TJSonValue; + FoundValue: TJSonValue; +begin + Result :=''; + + // create TJSonObject from string + JsonValue := TJSonObject.ParseJSONValue(JsonString); + + // get the array + JsonArray := JsonValue as TJSONArray; + + // iterate the array + for ArrayElement in JsonArray do begin + FoundValue := ArrayElement.FindValue(User); + if FoundValue <> nil then begin + Result := ArrayElement.GetValue(User + '.' + Field); + break; + end; + end; +end; + +procedure TForm2.Button6Click(Sender: TObject); +begin + case BoxTipo.ItemIndex of + 0: begin + GerenciaPago1.BuscarPedido(Edit5.Text); + Label12.Text := 'Status: '+ GerenciaPago1.RetConsulta.RetStatus; + Label13.Text := 'Creditado: '+ GerenciaPago1.RetConsulta.RetDataCredt; + end; + 1: begin + GerenciaPago1.CancelarPedido(Edit5.Text); + end; + end; + + m( GerenciaPago1.MemoRetono ); +end; + +procedure TForm2.Button8Click(Sender: TObject); +begin + GerenciaPago1.ConfigKey.PublicKey := Edit1.Text; + GerenciaPago1.ConfigKey.AccessToken := Edit2.Text; + GerenciaPago1.ConfigKey.Cliente_id := Edit3.Text; + GerenciaPago1.ConfigKey.Cliente_Secret := Edit4.Text; + + GerenciaPago1.SaldoConta; +end; + +procedure TForm2.Button9Click(Sender: TObject); +var + Base64 : WideString; + Json : TJSONObject; +begin + // PEGANDO SO O RESULTS E REMOVENDO [] + {Json := TJsonObject(TJSONObject.ParseJSONValue(TEncoding.ASCII.GetBytes(StripNonJson(Memo1.Text)),0)); + Base64 := ( TJSONObject(Json.Get('results').JsonValue).ToString ); + Memo1.Lines.Clear; + Memo1.Lines.Add(Base64); + + Json := TJsonObject(TJSONObject.ParseJSONValue(TEncoding.ASCII.GetBytes(StripNonJson(Memo1.Text)),0)); + Base64 := ( TJSONObject(Json.Get('point_of_interaction').JsonValue).ToString ); + Base64 := getCamposJsonString(Base64, 'qr_code'); + Memo2.Lines.Add(Base64); + Base64 := ( TJSONObject(Json.Get('point_of_interaction').JsonValue).ToString ); + Base64 := getCamposJsonString(Base64, 'qr_code_base64'); + Memo2.Lines.Add(Base64); + Base64 := getCamposJsonString(Memo1.Text, 'status'); + Memo2.Lines.Add(Base64);} +end; + +procedure TForm2.FormCreate(Sender: TObject); +begin + TabControl1.TabIndex := 0; + TabControl1.OnChange(Sender); +end; + +procedure TForm2.GerenciaPago1BoletoLink(const Value: string); +{$IF Defined(ANDROID)} +var + Intent: JIntent; +{$ENDIF} +begin + {$IF Defined(ANDROID)} + Intent := TJIntent.Create; + Intent.setAction(TJIntent.JavaClass.ACTION_VIEW); + Intent.setData(StrToJURI(Value)); + tandroidhelper.Activity.startActivity(Intent); + // SharedActivity.startActivity(Intent); + {$ELSEIF Defined(MSWINDOWS)} + ShellExecute(0, 'OPEN', PChar(Value), '', '', SW_SHOWNORMAL); + {$ELSEIF Defined(IOS)} + SharedApplication.OpenURL(StrToNSUrl(Value)); + {$ELSEIF Defined(MACOS)} + _system(PAnsiChar('open ' + AnsiString(Value))); + {$ENDIF} +end; + +procedure TForm2.GerenciaPago1Error(const Value: string); +begin + Label7.Text := Value; +end; + +procedure TForm2.GerenciaPago1PixBase64(const Value: WideString); +begin + m(Value); +end; + +procedure TForm2.GerenciaPago1PixCopiar(const Value: string); +begin + Edit6.Text := Value; + + {$IFDEF MSWINDOWS} + QRCodeWin(QRCodeBitmap, Value); + {$ELSE} + QRCodeMobile(QRCodeBitmap, Value); + {$ENDIF} +end; + +procedure TForm2.GerenciaPago1Saldo(const Value: Double); +begin + Label6.Text := 'Saldo em conta é de: '+Value.ToString; +end; + +procedure TForm2.GerenciaPago1Status(const Value: string); +begin + Label5.Text := Value; +end; + +procedure TForm2.m(s: String); +begin + //Memo2.Lines.Clear; + Memo2.Lines.Add(s); +end; + +procedure TForm2.QrCodeMobile(imgQRCode: TImage; texto: string); +const + downsizeQuality: Integer = 2; // bigger value, better quality, slower rendering +var + QRCode: TDelphiZXingQRCode; + Row, Column: Integer; + pixelColor : TAlphaColor; + vBitMapData : TBitmapData; + pixelCount, y, x: Integer; + columnPixel, rowPixel: Integer; + + function GetPixelCount(AWidth, AHeight: Single): Integer; + begin + if QRCode.Rows > 0 then + Result := Trunc(Min(AWidth, AHeight)) div QRCode.Rows + else + Result := 0; + end; +begin + // Not a good idea to stretch the QR Code... + if imgQRCode.WrapMode = TImageWrapMode.iwStretch then + imgQRCode.WrapMode := TImageWrapMode.Fit; + + + QRCode := TDelphiZXingQRCode.Create; + + try + QRCode.Data := ' ' + texto; + QRCode.Encoding := TQRCodeEncoding.qrAuto; + QRCode.QuietZone := 4; + pixelCount := GetPixelCount(imgQRCode.Width, imgQRCode.Height); + + case imgQRCode.WrapMode of + TImageWrapMode.iwOriginal, + TImageWrapMode.iwTile, + TImageWrapMode.iwCenter: + begin + if pixelCount > 0 then + imgQRCode.Bitmap.SetSize(QRCode.Columns * pixelCount, + QRCode.Rows * pixelCount); + end; + + TImageWrapMode.iwFit: + begin + if pixelCount > 0 then + begin + imgQRCode.Bitmap.SetSize(QRCode.Columns * pixelCount * downsizeQuality, + QRCode.Rows * pixelCount * downsizeQuality); + pixelCount := pixelCount * downsizeQuality; + end; + end; + + //TImageWrapMode.iwStretch: + // raise Exception.Create('Not a good idea to stretch the QR Code'); + end; + if imgQRCode.Bitmap.Canvas.BeginScene then + begin + try + imgQRCode.Bitmap.Canvas.Clear(TAlphaColors.White); + if pixelCount > 0 then + begin + if imgQRCode.Bitmap.Map(TMapAccess.maWrite, vBitMapData) then + begin + try + For Row := 0 to QRCode.Rows - 1 do + begin + for Column := 0 to QRCode.Columns - 1 do + begin + if (QRCode.IsBlack[Row, Column]) then + pixelColor := TAlphaColors.Black + else + pixelColor := TAlphaColors.White; + + columnPixel := Column * pixelCount; + rowPixel := Row * pixelCount; + + for x := 0 to pixelCount - 1 do + for y := 0 to pixelCount - 1 do + vBitMapData.SetPixel(columnPixel + x, + rowPixel + y, pixelColor); + end; + end; + finally + imgQRCode.Bitmap.Unmap(vBitMapData); + end; + end; + end; + finally + imgQRCode.Bitmap.Canvas.EndScene; + end; + end; + finally + QRCode.Free; + end; +end; + +procedure TForm2.QRCodeWin(imgQRCode: TImage; texto: string); +var + QRCode: TDelphiZXingQRCode; + Row, Column: Integer; + pixelColor : TAlphaColor; + vBitMapData : TBitmapData; +begin + imgQRCode.DisableInterpolation := true; + imgQRCode.WrapMode := TImageWrapMode.iwStretch; + + QRCode := TDelphiZXingQRCode.Create; + try + QRCode.Data := texto; + QRCode.Encoding := TQRCodeEncoding.qrAuto; + QRCode.QuietZone := 4; + imgQRCode.Bitmap.SetSize(QRCode.Rows, QRCode.Columns); + + for Row := 0 to QRCode.Rows - 1 do + begin + for Column := 0 to QRCode.Columns - 1 do + begin + if (QRCode.IsBlack[Row, Column]) then + pixelColor := TAlphaColors.Black + else + pixelColor := TAlphaColors.White; + + if imgQRCode.Bitmap.Map(TMapAccess.maWrite, vBitMapData) then + try + vBitMapData.SetPixel(Column, Row, pixelColor); + finally + imgQRCode.Bitmap.Unmap(vBitMapData); + end; + end; + end; + + finally + QRCode.Free; + end; +end; + +procedure TForm2.TabControl1Change(Sender: TObject); +begin + Button2.Text := 'EMITIR '+EditPgto.Selected.Text; +end; + +end. diff --git a/Demo/main.vlb b/Demo/main.vlb new file mode 100644 index 0000000..e1f4392 --- /dev/null +++ b/Demo/main.vlb @@ -0,0 +1,72 @@ +[Label1] +Coordinates=326,78,53,58 + +[Edit1] +Coordinates=73,146,44,58 + +[Label7] +Coordinates=452,78,53,58 + +[Label5] +Coordinates=10,146,53,58 + +[Label4] +Coordinates=127,78,53,58 + +[Edit3] +Coordinates=10,78,44,58 + +[Label8] +Coordinates=64,78,53,58 + +[Edit2] +Coordinates=190,146,44,58 + +[Layout8] +Coordinates=290,214,60,36 + +[Label3] +Coordinates=148,10,53,58 + +[Label10] +Coordinates=211,10,60,58 + +[Label9] +Coordinates=389,78,53,58 + +[Label6] +Coordinates=395,10,53,58 + +[Label2] +Coordinates=127,146,53,58 + +[QRCodeBitmap] +Coordinates=281,10,104,58 + +[Edit4] +Coordinates=458,10,44,58 + +[Layout9] +Coordinates=391,146,60,36 + +[Layout10] +Coordinates=314,146,67,36 + +[Layout7] +Coordinates=244,146,60,36 + +[] +Coordinates=80,214,60,36 + +[Layout01] +Coordinates=360,214,60,36 + +[Layout02] +Coordinates=10,214,60,36 + +[Layout03] +Coordinates=461,146,60,36 + +[Layout04] +Coordinates=220,214,60,36 + diff --git a/GerenciaPago.dcu b/GerenciaPago.dcu new file mode 100644 index 0000000..3600088 Binary files /dev/null and b/GerenciaPago.dcu differ diff --git a/GerenciaPago.pas b/GerenciaPago.pas new file mode 100644 index 0000000..81f8eb6 --- /dev/null +++ b/GerenciaPago.pas @@ -0,0 +1,691 @@ +unit GerenciaPago; + +interface + +uses + DBXJSON, JSON, System.SysUtils, System.StrUtils, System.Classes, + + FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.StdCtrls, + FMX.Platform, + + RestClient_u, DateUtils, Character; + +type + TOnStatus = procedure(const Value: string) of object; + TOnSaldo = procedure(const Value: Double) of object; + TOnError = procedure(const Value: String) of object; + TOnBoletoLink = procedure(const Value: String) of object; + + TOnPixBase64 = procedure(const Value: WideString) of object; + TOnPixCopiar = procedure(const Value: String) of object; + //TIPOS DE PAGAMENTO + TPgto = (Boleto = 0, Loterica = 1, Pix = 2); + + TRetBusca = record + RetStatus, RetDataCredt: String; + end; + + // INFORMAÇÕES DA CONTA DO USUÁRRIO + TConta = record + ID, + nickname, + first_name, + last_name, + email :String; + end; + + // ENDEREÇO DA API + TMPRestClient = Class ( TRestClient ) + private + protected + constructor Create ; override ; + end; + + // LANÇAMENTO DE DADOS + TDados = class(tComponent) + private + // DADOS DO BOLETO + Vinstallments, + Vdate_of_expiration, + Vtransaction_amount, + Vexternal_reference, + Vdescription, + // DOADOS DO COMPRADOS + Vemail, + Vfirst_name, + Vlast_name, + Vtype, //TIPO DE DOCUMENTO, CPF OU CNPJ CASO BRASIL + Vnumber, //NUMERO DO CPF OU CNPJ + //ENDEREÇO DO COMPRADOR + Vzip_code, + Vstreet_name, + Vstreet_number, + Vneighborhood, + Vcity, + Vfederal_unit : String; + vError : String; + Vpayment_method_id: TPgto; + + published + // LANÇAMENTO DO BOLETO + property Parcelas : String read Vinstallments write Vinstallments ; // Número de poarcelas + property Vencimento : String read Vdate_of_expiration write Vdate_of_expiration ; // Vencimento + property Valor : String read Vtransaction_amount write Vtransaction_amount ; // Valor + property PedidoNumero : String read Vexternal_reference write Vexternal_reference ; // Numero do Pedido + property Descricao : String read Vdescription write Vdescription ; // Descricao do produto ou serviço + // Dados do Pagador + property Email : String read Vemail write Vemail ; + property Nome : String read Vfirst_name write Vfirst_name ; + property SobreNome : String read Vlast_name write Vlast_name ; + property Doc : String read Vtype write Vtype ; + property DocNumero : String read Vnumber write Vnumber ; + + // Enderço do Pagador + property Cep : String read Vzip_code write Vzip_code ; + property Endereco : String read Vstreet_name write Vstreet_name ; + property Numero : String read Vstreet_number write Vstreet_number ; + property Bairro : String read Vneighborhood write Vneighborhood ; + property Cidade : String read Vcity write Vcity ; + property Estado : String read Vfederal_unit write Vfederal_unit ; + + property MeioPagar : TPgto read Vpayment_method_id write Vpayment_method_id; // Meio de pagamento [Boleto, Pix, Cartao, Loterica] + end; + + // MENU DE CHAVES KEYS + TConfig = class(TComponent) + private + FSandBox : Boolean; + FAccessToken : String; + FPublicKey : String; + FCliente_id : String; + FCliente_Secret : String; + procedure SetAccessToken(const Value: String); + procedure SetCliente_id(const Value: String); + procedure SetCliente_Secret(const Value: String); + procedure SetPublicKey(const Value: String); + procedure SetSandBox(const Value: Boolean); + published + property PublicKey : String read FPublicKey write SetPublicKey; + property AccessToken : String read FAccessToken write SetAccessToken; + property Cliente_id : String read FCliente_id write SetCliente_id; + property Cliente_Secret : String read FCliente_Secret write SetCliente_Secret; + property SandBox: Boolean read FSandBox write FSandBox; + end; + + TGerenciaPago = class(TComponent) + private + // Verifica se o componente está ativo + FAtivo : Boolean; + + req : TRequest; + Json : TJSONObject; + // Pega o status + FStatus : TOnStatus; + // Pega o saldo da conta + FSaldo : TOnSaldo; + // Infomações da Conta + FUser : TConta; + // Informações de error + FError : TOnError; + // Link do Boleto + FBoletoLink : TOnBoletoLink; + // Imagem do pix + FPixBase64 : TOnPixBase64; + // Copiar e colar pix + FPixCopiar : TOnPixCopiar; + // Retorna o status do pedido de cobrança + FRetBusca : TRetBusca; + + TimerApagaStatus : TTimer; + sResposta : String; + FMemoRetorno : WideString; + + vError : String; + CopiaCola : String; + FRetornaID : String; + + procedure SetError(const Value: String); + procedure SetStatus(const Value: String); + procedure SetSaldo(const Value: Double); + procedure SetBoletoLink(const Value: String); + procedure SetMemo(const Value: WideString); + + procedure SetPixBase64(const Value: WideString); + procedure SetPixCopiar(const Value: String); + + protected + { Protected declarations } + FSubConfig : TConfig; + FSubDados : TDados; + public + { Public declarations } + constructor Create (AOwner: TComponent); override; + destructor Destroy ; + + // SandBoxURL + function SandBoxURL( s : String ) : String ; + // Informações da conta + procedure RetornaConta; + // Informações do saldo da conta + procedure SaldoConta; + // Retorna o status do pedido de cobrança + procedure BuscarPedido(s: String); + // Faz a emissão do boleto + procedure GerarBoleto(); + // Retorna erro se ouver + procedure xError( s : String ); + // Retorna a resposta + procedure m( s : WideString ); + // Copia e Cola Pix + procedure CopiaColaPix; + // Verifica se esta ativo ou nao + function StatusAtivo:Boolean; + // Cancelar Pedido + function CancelarPedido(s: String): String; + + published + { Published declarations } + // Informações da Conta + property Ativo : Boolean read FAtivo write FAtivo; + property ConfigKey : TConfig read FSubConfig; + property LancarDados : TDados read FSubDados; + property DadosConta : TConta read FUser write FUser; + property RetConsulta : TRetBusca read FRetBusca write FRetBusca; + + property RetornaID : String read FRetornaID write FRetornaID; + + property OnError : TOnError read FError write FError; + property OnStatus : TOnStatus read FStatus write FStatus; + property OnSaldo : TOnSaldo read FSaldo write FSaldo; + property OnBoletoLink : TOnBoletoLink read FBoletoLink write FBoletoLink; + + property MemoRetono : WideString read FMemoRetorno write SetMemo ; + property OnPixBase64 : TOnPixBase64 read FPixBase64 write FPixBase64; + property OnPixCopiar : TOnPixCopiar read FPixCopiar write FPixCopiar; + + end; + +procedure Register; + +implementation + +{$R ./SGerenciaPago.dcr} + +procedure Register; +begin + RegisterComponents('pagOnline', [TGerenciaPago]); +end; + +function getCamposJsonString(json,value:String): String; +var + LJSONObject: TJSONObject; + function TrataObjeto(jObj:TJSONObject):string; + var i:integer; + jPar: TJSONPair; + begin + result := ''; + for i := 0 to jObj.Size - 1 do + begin + jPar := jObj.Get(i); + if jPar.JsonValue Is TJSONObject then + result := TrataObjeto((jPar.JsonValue As TJSONObject)) else + if sametext(trim(jPar.JsonString.Value),value) then + begin + Result := jPar.JsonValue.Value; + break; + end; + if result <> '' then + break; + end; + end; +begin + try + LJSONObject := nil; + LJSONObject := TJSONObject.ParseJSONValue(TEncoding.ASCII.GetBytes(json),0) as TJSONObject; + result := TrataObjeto(LJSONObject); + finally + LJSONObject.Free; + end; +end; + +function StripNonJson(s: string): string; +var + ch: char; + inString: boolean; +begin + Result := ''; + inString := false; + for ch in s do + begin + if ch = '"' then + inString := not inString; + if TCharacter.IsWhiteSpace(ch) and not inString then + continue; + Result := Result + ch; + end; +end; + +function JsonSinComillas(s: String): String; +begin + result := StringReplace( s, '"','', [rfReplaceAll] ); +end; + +procedure SaveToFile( sFileName: String ; sTexto : String ); +var + f : textfile; +begin + try + AssignFile( f, sFileName ); + Rewrite( f ); + Write(f, sTexto ); + Flush(f); + CloseFile(f); + except + end; +end; + + +{ TGerenciaPago } + +procedure TConfig.SetAccessToken(const Value: String); +begin + FAccessToken := Value; +end; + +procedure TConfig.SetCliente_id(const Value: String); +begin + FCliente_id := Value; +end; + +procedure TConfig.SetCliente_Secret(const Value: String); +begin + FCliente_Secret := Value; +end; + +procedure TConfig.SetPublicKey(const Value: String); +begin + FPublicKey := Value; +end; + +procedure TConfig.SetSandBox(const Value: Boolean); +begin + FSandBox := Value; +end; + +{ TGerenciaPago } + +procedure TGerenciaPago.BuscarPedido(s: String); +var + vStatus : String; + i : Integer; + JSObj,jsonObject : TJSONObject; + JSArray : TJSONArray; + JSValue : TJSONValue; +begin + if not StatusAtivo then exit; + + SetStatus( 'Buscando Pagamento' ); + + req.Clear; + if s = '' then + begin + req.uri := '/v1/payments/search/?status=approved'; + req.params.Add('?access_token='+FSubConfig.FAccessToken); + end + else + begin + req.uri := '/v1/payments/search?id='+s; //external_reference + req.params.Add('&access_token='+FSubConfig.FAccessToken); + end; + + try + sResposta := TMPRestClient.Get(req); + except + on E: Exception do + xError( 'Error: '+E.ClassName + ': ' +E.Message ); + end; + + m( 'Resposta: '+sResposta ); + + Json := TJsonObject(TJSONObject.ParseJSONValue(TEncoding.ASCII.GetBytes(StripNonJson(sResposta)),0)); + vError := getCamposJsonString(sResposta, 'error'); + if vError <> '' then + begin + xError( 'Error: '+( TJSONObject(Json.Get('message').JsonValue).ToString ) ); + exit; + end; + + // Pega o status do pedido + JSObj := TJSONObject.ParseJSONValue(sResposta) as TJSONObject; + if(JSObj <> nil)then + begin + jsArray := JSObj.GetValue('results') as TJSONArray; + for i := 0 to jsArray .Count-1 do + begin + jsonObject := jsArray.Items[i] as TJSONObject; + + case AnsiIndexStr(jsonObject.GetValue('status'), + ['pending', 'approved', 'in_process', 'rejected', 'cancelled', 'refunded', 'charged_back']) of + 0 : FRetBusca.RetStatus := 'Pendente'; + 1 : FRetBusca.RetStatus := 'Aprovado'; + 2 : FRetBusca.RetStatus := 'Em Processo'; + 3 : FRetBusca.RetStatus := 'Rejeitado'; + 4 : FRetBusca.RetStatus := 'Cancelado'; + 5 : FRetBusca.RetStatus := 'Reembolso'; + 6 : FRetBusca.RetStatus := 'Estorno Cartão'; + end; + + // DATA DA APROVAÇÃO + FRetBusca.RetDataCredt := DateToStr(ISO8601ToDate(jsonObject.GetValue('date_created'))); + end; + end; + + SetStatus( 'Buscando Pagamento '+FRetBusca.RetStatus+' '+FRetBusca.RetDataCredt ); +end; + +function TGerenciaPago.CancelarPedido(s: String): String; +begin + req.Clear; + req.uri := '/v1/payments/'+s; + req.params.Add('?access_token='+FSubConfig.FAccessToken); + + //Os cancelamentos podem ser realizados somente com status pending e in process + req.body.Add('{"status" : "cancelled"}'); + + try + sResposta := TMPRestClient.Put(req); + except + on E: Exception do + xError( 'Error: '+E.ClassName + ': ' +E.Message ); + end; + + m( 'Resposta: '+sResposta ); + + Json := TJsonObject(TJSONObject.ParseJSONValue(TEncoding.ASCII.GetBytes(StripNonJson(sResposta)),0)); + vError := getCamposJsonString(sResposta, 'error'); + if vError <> '' then + begin + xError( 'Error: '+( TJSONObject(Json.Get('message').JsonValue).ToString ) ); + exit; + end; +end; + +procedure TGerenciaPago.CopiaColaPix; +var + Svc: IFMXClipboardService; + Image: TBitmap; +begin + if TPlatformServices.Current.SupportsPlatformService(IFMXClipboardService, Svc) then + Svc.SetClipboard(CopiaCola); +end; + +constructor TGerenciaPago.Create(AOwner: TComponent); +begin + inherited; + req := TRequest.Create; + + {TimerApagaStatus := TTimer.Create( Self ); + TimerApagaStatus.Interval := 2*1000 ; + TimerApagaStatus.Enabled := False ; + TimerApagaStatus.OnTimer := TimerApagaStatusOnTimer;} + + // CRIA OS MENUS NO OBJETO SPECTOR + FSubConfig := TConfig.Create(Self); + FSubConfig.Name := 'ConfigKey'; + FSubConfig.SetSubComponent(True); + + FSubDados := TDados.Create(Self); + FSubDados.Name := 'LancarDados'; + FSubDados.SetSubComponent(True); +end; + +destructor TGerenciaPago.Destroy; +begin + //TimerApagaStatus.Free; + req.Free; +end; + +procedure TGerenciaPago.GerarBoleto; +var + Enviar : TStringList; + ano, mes, dia : word; + data : TDateTime; + vError, Link, Base64, Copiar : WideString; +begin + try + if not StatusAtivo then exit; + + with FSubDados do begin + Enviar := TStringList.Create; + Enviar.Add( + '{'+#10+ + '"installments": 1,'+#10+ // NUMERO DE PACELAS + '"date_of_expiration": "'+ DateToISO8601(StrToDate(Vencimento), False)+'",'+#10+ + '"transaction_amount": '+ StringReplace(Valor, ',', '.', [])+','+#10+ // + '"external_reference": "'+ PedidoNumero+'",'+#10+ //NUMERO DO PEDIDO DE SEU SITE PARA FUTURA CONCILIAÇÃO FINANCEIRA + '"description": "'+ Descricao+'",'); + + if Vpayment_method_id = Boleto then + Enviar.Add('"payment_method_id": "bolbradesco",'); // MEIO DE PAGAMENTO + if Vpayment_method_id = Loterica then + Enviar.Add('"payment_method_id": "pec",'); // MEIO DE PAGAMENTO + if Vpayment_method_id = Pix then + Enviar.Add('"payment_method_id": "pix",'); // MEIO DE PAGAMENTO + + // DODOS DO COMPRADOS + Enviar.Add( + '"payer": {'+#10+ + '"email": "'+ Email+'",'+#10+ + '"first_name": "'+ Nome+'",'+#10+ + '"last_name": "'+ SobreNome+'",'+#10+ + + '"identification": {'+#10+ + '"type": "'+ Doc+'",'+#10+ //TIPO DE DOCUMENTO, CPF OU CNPJ CASO BRASIL + '"number": "'+ DocNumero+'"'+#10+ + '},'+#10+ + + //ENDEREÇO DO COMPRADOR + '"address": {'+#10+ + '"zip_code": "'+ Cep+'",'+#10+ + '"street_name": "'+ Endereco+'",'+#10+ + '"street_number": "'+ Numero+'",'+#10+ + '"neighborhood": "'+ Bairro+'",'+#10+ + '"city": "'+ Cidade+'",'+#10+ + '"federal_unit": "'+ Estado+'"'+#10+ + '}'+#10+ + '}'+#10+ + '}'); + + {if Vpayment_method_id in [Boleto, Loterica] then + begin + if Valor.tointeger > 5 then + xError( 'Error: O valor minimo para boleto e letrica não pode ser menor que 5.00' ); + exit; + end;} + + SetStatus( 'Adicionando Pagamento Por Boleto' ); + + req.Clear ; + req.uri := '/v1/payments'; //advanced_payments + req.params.Add('?access_token='+FSubConfig.FAccessToken); + req.body.Add( Enviar.Text ); + + try + sResposta := TMPRestClient.Post(req); + except + on E: Exception do + xError( 'Error: '+E.ClassName + ': ' +E.Message ); + end; + + m( 'Resposta: '+sResposta ); + + Json := TJsonObject(TJSONObject.ParseJSONValue(TEncoding.ASCII.GetBytes(StripNonJson(sResposta)),0)); + + FRetornaID := ( TJSONObject(Json.Get('id').JsonValue).ToString ); + + if Vpayment_method_id in [Boleto, Loterica] then + begin + Link := ( TJSONObject(Json.Get('transaction_details').JsonValue).ToString ); + Link := getCamposJsonString(Link, 'external_resource_url'); + FBoletoLink( Link ); + end; + + if Vpayment_method_id = Pix then + begin + Copiar := ( TJSONObject(Json.Get('point_of_interaction').JsonValue).ToString ); + Copiar := getCamposJsonString(Copiar, 'qr_code'); + FPixCopiar( Copiar ); + CopiaCola := Copiar; + + Base64 := ( TJSONObject(Json.Get('point_of_interaction').JsonValue).ToString ); + Base64 := getCamposJsonString(Base64, 'qr_code_base64'); + FPixBase64( Base64 ); + end; + + SetStatus( 'Pagamento gerado e incluído com sucesso!' ); + end; + Except + On E: Exception do + begin + xError( 'Error: '+E.ClassName + ': ' +E.Message ); + end; + end; +end; + +procedure TGerenciaPago.m(s: WideString); +begin + FMemoRetorno := s; +end; + +procedure TGerenciaPago.RetornaConta; +var + vError : String; +begin + if not StatusAtivo then exit; + SetStatus( 'Buscando dados da conta' ); + + req.Clear ; + req.uri := '/users/me'; + req.params.Add('?access_token='+ FSubConfig.FAccessToken); + try + sResposta := TMPRestClient.Get(req); + except + on E: Exception do + xError( 'Error: '+E.ClassName + ': ' +E.Message ); + end; + + m( 'Resposta: '+sResposta ); + + Json := TJsonObject(TJSONObject.ParseJSONValue(TEncoding.ASCII.GetBytes(StripNonJson(sResposta)),0)); + FUser.ID := JsonSinComillas( TJSONObject(Json.Get('id').JsonValue).ToString ); + FUser.nickname := JsonSinComillas( TJSONObject(Json.Get('nickname').JsonValue).ToString ); + FUser.first_name := JsonSinComillas( TJSONObject(Json.Get('first_name').JsonValue).ToString ); + FUser.last_name := JsonSinComillas( TJSONObject(Json.Get('last_name').JsonValue).ToString ); + FUser.email := JsonSinComillas( TJSONObject(Json.Get('email').JsonValue).ToString ); + + SetStatus( 'Dados da conta retornados corretamente!' ); +end; + +procedure TGerenciaPago.SaldoConta; +var + vError : String; + const + vID = '166957358'; +begin + if not StatusAtivo then exit; + + SetStatus( 'Buscando saldo da conta!' ); + req.Clear ; + req.uri := '/users/'+vID+'/mercadopago_account/balance'; + req.params.Add('?access_token='+FSubConfig.FAccessToken); + try + sResposta := TMPRestClient.Get(req); + except + on E: Exception do + xError( 'Error: '+E.ClassName + ': ' +E.Message ); + end; + m( 'Resposta: '+sResposta ); + + Json := TJsonObject(TJSONObject.ParseJSONValue(TEncoding.ASCII.GetBytes(StripNonJson(sResposta)),0)); + + vError := getCamposJsonString(sResposta, 'error'); + if vError <> '' then + begin + xError( 'Error: '+( TJSONObject(Json.Get('message').JsonValue).ToString ) ); + exit; + end; + + SetSaldo(StrToCurr(StringReplace(JsonSinComillas( TJSONObject(Json.Get('total_amount').JsonValue).ToString), '.', ',', [] ))); + SetStatus( 'Buscando saldo da conta!' ); +end; + +function TGerenciaPago.SandBoxURL(s: String): String; +begin + if FSubConfig.FSandBox then + result := result+'/sandbox'; + result := result + s; +end; + +procedure TGerenciaPago.SetBoletoLink(const Value: String); +begin + FBoletoLink(Value); +end; + +procedure TGerenciaPago.SetError(const Value: String); +begin + FError(Value); +end; + +procedure TGerenciaPago.SetMemo(const Value: WideString); +begin + FMemoRetorno := Value; +end; + +procedure TGerenciaPago.SetPixBase64(const Value: WideString); +begin + FPixBase64(Value); +end; + +procedure TGerenciaPago.SetPixCopiar(const Value: String); +begin + FPixCopiar(Value); +end; + +procedure TGerenciaPago.SetSaldo(const Value: Double); +begin + FSaldo(Value); +end; + +procedure TGerenciaPago.SetStatus(const Value: String); +begin + FStatus(Value); +end; + +function TGerenciaPago.StatusAtivo: Boolean; +begin + if not FAtivo then + begin + xError( 'Error: Componente não ativo!' ); + Result := False; + end + else + begin + xError( '' ); + Result := True; + end; +end; + +procedure TGerenciaPago.xError(s: String); +begin + SetError(s); +end; + +{ TMPRestClient } + +constructor TMPRestClient.Create; +begin + inherited; + sURLDominio := 'https://api.mercadopago.com'; +end; + +end. diff --git a/MercadoPago_u.pas b/MercadoPago_u.pas new file mode 100644 index 0000000..fefe59b --- /dev/null +++ b/MercadoPago_u.pas @@ -0,0 +1,679 @@ +unit MercadoPago_u; + +interface + +uses + DBXJSON, JSON, System.SysUtils, System.StrUtils, System.Classes, + + FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.StdCtrls, + + RestClient_u; + +type + + TMPRestClient = Class ( TRestClient ) + private + protected + constructor Create ; override ; + End; + + TRetBusca = record + RetStatus, RetDataCredt: String; + end; + + TBoleto = record + BoletoRetorno : Boolean; + BoletoLink, BoletoBarra, BoletoID, BoletoVencimento : String; + end; + + // INFORMAÇÕES DA CONTA DO USUÁRRIO + TMPUser = record + ID, + nickname, + first_name, + last_name, + email :String; + end; + + TMPCobro = record + ID : String; + date_created, + status, + external_reference, + merchant_order_id, + reason, + currency_id, + payment_type, + json :String; + + transaction_amount, + total_paid_amount, + shipping_cost :Real; + + end; + + TProcedureMPCobro = procedure ( x : TMPCobro ) of object ; + + TMercadoPago = Class( TComponent ) + private + sResposta : String ; + FMemoRetorno : WideString; + FMemoError : String; + + FClient_ID : String; + FClient_Secret : String; + FSandBox : Boolean; + FUser : TMPUser; + FStatus : String; + FBoleto : TBoleto; + FContaSaldo : Double; + + req : TRequest ; + Json : TJSONObject; + TimerApagaStatus: TTimer ; + + FPublicKey : String; + FAccessToken : String; + + FCollector_ID : String; + + FStatusCon : TRetBusca; + + // DADOS DO BOLETO + Vdate_of_expiration, + Vtransaction_amount, + Vexternal_reference, + Vdescription, + Vpayment_method_id, + // DOADOS DO COMPRADOS + Vemail, + Vfirst_name, + Vlast_name, + Vtype, //TIPO DE DOCUMENTO, CPF OU CNPJ CASO BRASIL + Vnumber, //NUMERO DO CPF OU CNPJ + //ENDEREÇO DO COMPRADOR + Vzip_code, + Vstreet_name, + Vstreet_number, + Vneighborhood, + Vcity, + Vfederal_unit : String; + + vError : String; + + // ESTORNO + Rid, + Rpayments, + Rcurrency, + Ramount, + Rcoverage_applied, + Rcoverage_elegible, + Rdocumentation_required, + Rdocumentation_status, + Rdocumentation, + Rdate_documentation_deadline, + Rdate_created, + Rdate_last_updated, + Rlive_mode: String; + + procedure TimerApagaStatusOnTimer(Sender: TObject); + procedure Status( s : String ); + procedure m( s : WideString ); + procedure xError( s : String ); + procedure SetClient_ID(const Value: String); + procedure SetClient_Secret(const Value: String); + procedure SetMemo(const Value: WideString); + + function sandboxurl( s : String ) : String ; + function JSONDateTimeToDelphiDateTime( s : String ) : TDateTime ; + procedure SetStatus(const Value: String); + + procedure SetPublicKey(const Value: String); + procedure SetAccessToken(const Value: String); + function UriSaveName( s : String ) : String ; + public + constructor Create( sPublicKey, sAccessToken, sClientID, sClientSecret : String ); + destructor Destroy ; + procedure get_user_me ; + + function SaldoConta(s: String):String; + function CadBoleto(): String; + function GerarBoleto() : String; + function BuscarPedido(s: String): String; + function CancelarPedido(s: String): String; + + function CadCliente(): String; + function GerarCliente(): String; + published + property lbStatus : String read FStatus write SetStatus ; + + property MemoRetono : WideString read FMemoRetorno write SetMemo ; + property MemoError : String read FMemoError write FMemoError ; + + property PublicKey : String read FPublicKey write SetPublicKey ; + property AccessToken : String read FAccessToken write SetAccessToken ; + property Client_ID : String read FClient_ID write SetClient_ID ; + property Collector_ID : String read FCollector_ID write FCollector_ID ; + property Client_Secret : String read FClient_Secret write SetClient_Secret ; + + property User : TMPUser read FUser write FUser ; + + property RetConsulta : TRetBusca read FStatusCon write FStatusCon ; + property Boleto : TBoleto read FBoleto write FBoleto ; + property ContaSaldo : Double read FContaSaldo write FContaSaldo ; + property SandBox : Boolean read FSandBox write FSandBox ; + + // LANÇAMENTO DO BOLETO + property Bdate_of_expiration : String read Vdate_of_expiration write Vdate_of_expiration ; + property Btransaction_amount : String read Vtransaction_amount write Vtransaction_amount ; + property Bexternal_reference : String read Vexternal_reference write Vexternal_reference ; + property Bdescription : String read Vdescription write Vdescription ; + property Bpayment_method_id : String read Vpayment_method_id write Vpayment_method_id ; + property Bemail : String read Vemail write Vemail ; + property Bfirst_name : String read Vfirst_name write Vfirst_name ; + property Blast_name : String read Vlast_name write Vlast_name ; + property Btype : String read Vtype write Vtype ; + property Bnumber : String read Vnumber write Vnumber ; + property Bzip_code : String read Vzip_code write Vzip_code ; + property Bstreet_name : String read Vstreet_name write Vstreet_name ; + property Bstreet_number : String read Vstreet_number write Vstreet_number ; + property Bneighborhood : String read Vneighborhood write Vneighborhood ; + property Bcity : String read Vcity write Vcity ; + property Bfederal_unit : String read Vfederal_unit write Vfederal_unit ; + + // ESTORNO + property id : String read Rid write Rid ; + property payments : String read Rpayments write Rpayments ; + property currency : String read Rcurrency write Rcurrency ; + property amount : String read Ramount write Ramount ; + property coverage_applied : String read Rcoverage_applied write Rcoverage_applied ; + property coverage_elegible : String read Rcoverage_elegible write Rcoverage_elegible ; + property documentation_required : String read Rdocumentation_required write Rdocumentation_required ; + property documentation_status : String read Rdocumentation_status write Rdocumentation_status ; + property documentation : String read Rdocumentation write Rdocumentation ; + property date_documentation_deadline : String read Rdate_documentation_deadline write Rdate_documentation_deadline ; + property date_created : String read Rdate_created write Rdate_created ; + property date_last_updated : String read Rdate_last_updated write Rdate_last_updated ; + property live_mode : String read Rlive_mode write Rlive_mode ; + end; + +implementation + +uses DateUtils, Character ; + +function getCamposJsonString(json,value:String): String; +var + LJSONObject: TJSONObject; + function TrataObjeto(jObj:TJSONObject):string; + var i:integer; + jPar: TJSONPair; + begin + result := ''; + for i := 0 to jObj.Size - 1 do + begin + jPar := jObj.Get(i); + if jPar.JsonValue Is TJSONObject then + result := TrataObjeto((jPar.JsonValue As TJSONObject)) else + if sametext(trim(jPar.JsonString.Value),value) then + begin + Result := jPar.JsonValue.Value; + break; + end; + if result <> '' then + break; + end; + end; +begin + try + LJSONObject := nil; + LJSONObject := TJSONObject.ParseJSONValue(TEncoding.ASCII.GetBytes(json),0) as TJSONObject; + result := TrataObjeto(LJSONObject); + finally + LJSONObject.Free; + end; +end; + +function StripNonJson(s: string): string; +var + ch: char; + inString: boolean; +begin + Result := ''; + inString := false; + for ch in s do + begin + if ch = '"' then + inString := not inString; + if TCharacter.IsWhiteSpace(ch) and not inString then + continue; + Result := Result + ch; + end; +end; + +function JsonSinComillas(s: String): String; +begin + result := StringReplace( s, '"','', [rfReplaceAll] ); +end; + +procedure SaveToFile( sFileName: String ; sTexto : String ); +var + f : textfile; +begin + try + AssignFile( f, sFileName ); + Rewrite( f ); + Write(f, sTexto ); + Flush(f); + CloseFile(f); + except + end; +end; + +{ TMercadoPago } + +constructor TMercadoPago.Create( + sPublicKey, + sAccessToken, + sClientID, + sClientSecret : String ); +begin + req := TRequest.Create ; + TimerApagaStatus := TTimer.Create( Self ); + TimerApagaStatus.Interval := 2*1000 ; + TimerApagaStatus.Enabled := False ; + TimerApagaStatus.OnTimer := TimerApagaStatusOnTimer ; + PublicKey := sPublicKey ; + AccessToken := sAccessToken ; + Client_ID := sClientID ; + Client_Secret := sClientSecret ; +end; + +destructor TMercadoPago.Destroy; +begin + TimerApagaStatus.Free ; + req.Free ; +end; + +function TMercadoPago.CancelarPedido(s: String): String; +begin + req.uri := '/v1/payments/'+s; + req.params.Add('?access_token='+FAccessToken); + + //Os cancelamentos podem ser realizados somente com status pending e in process + req.body.Add('{"status" : "cancelled"}'); + + try + sResposta := TMPRestClient.Put(req); + except + on E: Exception do + xError( 'Error: '+E.ClassName + ': ' +E.Message ); + end; + + m( 'Resposta: '+sResposta ); + + Json := TJsonObject(TJSONObject.ParseJSONValue(TEncoding.ASCII.GetBytes(StripNonJson(sResposta)),0)); + vError := getCamposJsonString(sResposta, 'error'); + if vError <> '' then + begin + xError( 'Error: '+( TJSONObject(Json.Get('message').JsonValue).ToString ) ); + exit; + end; + end; + +function TMercadoPago.JSONDateTimeToDelphiDateTime(s: String): TDateTime; +var ano, mes, dia, hora, min, seg : Word; +begin + // 12345678901234567890 + // 2018-08-02T14:02:33.000-04:00 + s := JsonSinComillas( s ); + ano := StrToInt( Copy( s, 1, 4 )); + mes := StrToInt( Copy( s, 6, 2 )); + dia := StrToInt( Copy( s, 9, 2 )); + hora := StrToInt( Copy( s,12, 2 )); + min := StrToInt( Copy( s,15, 2 )); + seg := StrToInt( Copy( s,18, 2 )); + Result := EncodeDateTime( ano, mes, dia, hora, min, seg, 0); +end; + +procedure TMercadoPago.m(s: WideString); +begin + FMemoRetorno := s; +end; + +procedure TMercadoPago.xError(s: String); +begin + FMemoError := s; +end; + +function TMercadoPago.BuscarPedido(s: String): String; +var + vStatus : String; +begin + Status( 'Buscando Pagamento' ); + + req.Clear; + if s = '' then + begin + req.uri := '/v1/payments/search'; + req.params.Add('?access_token='+FAccessToken); + end + else + begin + req.uri := '/v1/payments/search?id='+s; //external_reference + req.params.Add('&access_token='+FAccessToken); + end; + + try + sResposta := TMPRestClient.Get(req); + except + on E: Exception do + xError( 'Error: '+E.ClassName + ': ' +E.Message ); + end; + + m( 'Resposta: '+sResposta ); +// raise Exception.Create(getCamposJsonString(sResposta, 'status')); + + Json := TJsonObject(TJSONObject.ParseJSONValue(TEncoding.ASCII.GetBytes(StripNonJson(sResposta)),0)); + vError := getCamposJsonString(sResposta, 'error'); + if vError <> '' then + begin + xError( 'Error: '+( TJSONObject(Json.Get('message').JsonValue).ToString ) ); + exit; + end; + + case AnsiIndexStr(getCamposJsonString(sResposta, 'status'), + ['pending', 'approved', 'in_process', 'rejected', 'cancelled', 'refunded', 'charged_back']) of + 0 : FStatusCon.RetStatus := 'Pendente'; + 1 : FStatusCon.RetStatus := 'Aprovado'; + 2 : FStatusCon.RetStatus := 'Em Processo'; + 3 : FStatusCon.RetStatus := 'Rejeitado'; + 4 : FStatusCon.RetStatus := 'Cancelado'; + 5 : FStatusCon.RetStatus := 'Reembolso'; + 6 : FStatusCon.RetStatus := 'Estorno Cartão'; + end; + + Status( 'Buscando Pagamento '+FStatusCon.RetStatus ); +end; + +function TMercadoPago.CadCliente(): String; +var + Enviar : TStringList; +begin + Enviar := TStringList.Create; + Enviar.Add( + '{'+#10+ + ' "email": "bruno@gmail.com",'+#10+ + ' "first_name": "Bruce",'+#10+ + ' "last_name": "Wayne",'+#10+ + ' "phone": {'+#10+ + ' "area_code": "023",'+#10+ + ' "number": "12345678"'+#10+ + ' },'+#10+ + ' "identification": {'+#10+ + ' "type": "DNI",'+#10+ + ' "number": "12345678"'+#10+ + ' },'+#10+ + ' "address": {'+#10+ + ' "zip_code": "SG1 2AX",'+#10+ + ' "street_name": "Old Knebworth Ln"'+#10+ + ' },'+#10+ + ' "description": "Lorem Ipsum"'+#10+ + ' }'); + Result := Enviar.Text; +end; + +function TMercadoPago.GerarCliente(): String; +var + vError : String; +begin + Status( 'Adicionar Cliente' ); + + req.Clear ; + req.uri := '/v1/customers'; + req.params.Add('?access_token='+FAccessToken); + req.body.Add( CadCliente ); + + try + sResposta := TMPRestClient.Post(req); + except + on E: Exception do + xError( 'Error: '+E.ClassName + ': ' +E.Message ); + end; + + m( 'Resposta: '+sResposta ); + + Json := TJsonObject(TJSONObject.ParseJSONValue(TEncoding.ASCII.GetBytes(StripNonJson(sResposta)),0)); + + vError := getCamposJsonString(sResposta, 'error'); + if vError <> '' then + begin + xError( 'Error: '+( TJSONObject(Json.Get('message').JsonValue).ToString )); + exit; + end; + + //FBoleto.BoletoLink := ( TJSONObject(Json.Get('transaction_details').JsonValue).ToString ); + + Status( 'Cliente Adicionado com sucesso!' ); +end; + +function TMercadoPago.CadBoleto: String; +var + Enviar : TStringList; +begin + Enviar := TStringList.Create; + Enviar.Add( + '{'+#10+ + '"installments": 1,'+#10+ // NUMERO DE PACELAS + '"date_of_expiration": "'+ DateToISO8601(StrToDate(Bdate_of_expiration), False)+'",'+#10+ + '"transaction_amount": "'+ Btransaction_amount+'",'+#10+ + '"external_reference": "'+ Bexternal_reference+'",'+#10+ //NUMERO DO PEDIDO DE SEU SITE PARA FUTURA CONCILIAÇÃO FINANCEIRA + '"description": "'+ Bdescription+'",'+#10+ + '"payment_method_id": "'+ Bpayment_method_id+'",'+#10+ // MEIO DE PAGAMENTO + + // DODOS DO COMPRADOS + '"payer": {'+#10+ + '"email": "'+ Bemail+'",'+#10+ + '"first_name": "'+ Bfirst_name+'",'+#10+ + '"last_name": "'+ Blast_name+'",'+#10+ + + '"identification": {'+#10+ + '"type": "'+ Btype+'",'+#10+ //TIPO DE DOCUMENTO, CPF OU CNPJ CASO BRASIL + '"number": "'+ Bnumber+'"'+#10+ + '},'+#10+ + + //ENDEREÇO DO COMPRADOR + '"address": {'+#10+ + '"zip_code": "'+ Bzip_code+'",'+#10+ + '"street_name": "'+ Bstreet_name+'",'+#10+ + '"street_number": "'+ Bstreet_number+'",'+#10+ + '"neighborhood": "'+ Bneighborhood+'",'+#10+ + '"city": "'+ Bcity+'",'+#10+ + '"federal_unit": "'+ Bfederal_unit+'"'+#10+ + '}'+#10+ + '}'+#10+ + '}'); + + Result := Enviar.Text; +end; + +function TMercadoPago.GerarBoleto: String; +var + ano, mes, dia : word; + data : TDateTime; + vError : String; +begin + Status( 'Adicionando Pagamento Por Boleto' ); + + req.Clear ; + req.uri := '/v1/payments'; //advanced_payments + req.params.Add('?access_token='+FAccessToken); + req.body.Add( CadBoleto ); + + try + sResposta := TMPRestClient.Post(req); + except + on E: Exception do + xError( 'Error: '+E.ClassName + ': ' +E.Message ); + end; + + m( 'Resposta: '+sResposta ); + + Json := TJsonObject(TJSONObject.ParseJSONValue(TEncoding.ASCII.GetBytes(StripNonJson(sResposta)),0)); + + vError := getCamposJsonString(sResposta, 'error'); + if vError <> '' then + begin + xError( 'Error: '+( TJSONObject(Json.Get('message').JsonValue).ToString ) ); + exit; + end; + + FBoleto.BoletoLink := ( TJSONObject(Json.Get('transaction_details').JsonValue).ToString ); + FBoleto.BoletoLink := getCamposJsonString(Boleto.BoletoLink, 'external_resource_url'); + + FBoleto.BoletoBarra := ( TJSONObject(Json.Get('barcode').JsonValue).ToString ); + FBoleto.BoletoBarra := getCamposJsonString(Boleto.BoletoBarra, 'content'); + + FBoleto.BoletoRetorno := StrToBool( TJSONObject(Json.Get('captured').JsonValue).ToString ); + FBoleto.BoletoID := ( TJSONObject(Json.Get('id').JsonValue).ToString ); + + ano := StrToInt(Copy(TJSONObject(Json.Get('date_of_expiration').JsonValue).ToString,2,4)); + mes := StrToInt(Copy(TJSONObject(Json.Get('date_of_expiration').JsonValue).ToString,7,2)); + dia := StrToInt(Copy(TJSONObject(Json.Get('date_of_expiration').JsonValue).ToString,10,2)); + data := EncodeDate(ano, mes, dia); + FBoleto.BoletoVencimento := ( FormatdateTime('yyyy/mm/dd', data)); + + Status( 'Pagamento gerado e incluído com sucesso!' ); +end; + +procedure TMercadoPago.get_user_me; +var + vError : String; +begin + Status( 'Buscando dados da conta' ); + req.Clear ; + req.uri := '/users/me'; + req.params.Add('?access_token='+FAccessToken); + try + sResposta := TMPRestClient.Get(req); + except + on E: Exception do + xError( 'Error: '+E.ClassName + ': ' +E.Message ); + end; + + m( 'Resposta: '+sResposta ); + + Json := TJsonObject(TJSONObject.ParseJSONValue(TEncoding.ASCII.GetBytes(StripNonJson(sResposta)),0)); + FUser.ID := JsonSinComillas( TJSONObject(Json.Get('id').JsonValue).ToString ); + FUser.nickname := JsonSinComillas( TJSONObject(Json.Get('nickname').JsonValue).ToString ); + FUser.first_name := JsonSinComillas( TJSONObject(Json.Get('first_name').JsonValue).ToString ); + FUser.last_name := JsonSinComillas( TJSONObject(Json.Get('last_name').JsonValue).ToString ); + FUser.email := JsonSinComillas( TJSONObject(Json.Get('email').JsonValue).ToString ); + Status( 'Datos da conta retornados corretamente!' ); +end; + +function TMercadoPago.SaldoConta(s: String): String; +var + vError : String; + const + vID = '166957358'; + vToken = 'APP_USR-3067742096444572-042712-95042da85e0714597f6b707e6234d23c-166957358'; +begin + Status( 'Buscando saldo da conta!' ); + req.Clear ; + req.uri := '/users/'+vID+'/mercadopago_account/balance'; + req.params.Add('?access_token='+vToken); + //req.params.Add('&access_token='+FAccessToken); + try + sResposta := TMPRestClient.Get(req); + except + on E: Exception do + xError( 'Error: '+E.ClassName + ': ' +E.Message ); + end; + m( 'Resposta: '+sResposta ); + + Json := TJsonObject(TJSONObject.ParseJSONValue(TEncoding.ASCII.GetBytes(StripNonJson(sResposta)),0)); + + vError := getCamposJsonString(sResposta, 'error'); + if vError <> '' then + begin + xError( 'Error: '+( TJSONObject(Json.Get('message').JsonValue).ToString ) ); + exit; + end; + + ContaSaldo := StrToCurr(StringReplace(JsonSinComillas( TJSONObject(Json.Get('total_amount').JsonValue).ToString), '.', ',', [] )); + Status( 'Buscando saldo da conta!' ); +end; + +function TMercadoPago.sandboxurl(s: String): String; +begin + if FSandBox then + result := result+'/sandbox'; + result := result + s; +end; + +procedure TMercadoPago.SetAccessToken(const Value: String); +begin + FAccessToken := Value; + m( 'Access Token: '+Value ); +end; + +procedure TMercadoPago.SetClient_ID(const Value: String); +begin + FClient_ID := Value; + m( 'ClientID: '+Value ); +end; + +procedure TMercadoPago.SetMemo(const Value: WideString); +begin + FMemoRetorno := Value; + PublicKey := FPublicKey ; + AccessToken := FAccessToken ; + Client_ID := FClient_ID ; // Para ser visto no memorando + Client_Secret := FClient_Secret ; +end; + +procedure TMercadoPago.SetPublicKey(const Value: String); +begin + FPublicKey := Value; + m( 'PublicKey: '+Value); +end; + +procedure TMercadoPago.SetStatus(const Value: String); +begin + FStatus := Value; + //FStatus.Visible := False ; +end; + +procedure TMercadoPago.Status(s: String); +begin + FStatus := s ; +end; + +procedure TMercadoPago.TimerApagaStatusOnTimer(Sender: TObject); +begin + {if Assigned( FStatus ) then + FStatus.Visible := False ;} +end; + +function TMercadoPago.UriSaveName(s: String): String; +begin + s := RightStr( s, Length(s)-1 ); + result := StringReplace( s, '\','',[rfReplaceAll]); +end; + +procedure TMercadoPago.SetClient_Secret(const Value: String); +begin + FClient_Secret := Value; + m( 'ClientSecret: '+Value ); +end; + +{ TMPRestClient } + +constructor TMPRestClient.Create; +begin + inherited; + sURLDominio := 'https://api.mercadopago.com'; +end; + +end. + diff --git a/RestClient_u.dcu b/RestClient_u.dcu new file mode 100644 index 0000000..7027ccb Binary files /dev/null and b/RestClient_u.dcu differ diff --git a/RestClient_u.pas b/RestClient_u.pas new file mode 100644 index 0000000..5dbb76f --- /dev/null +++ b/RestClient_u.pas @@ -0,0 +1,171 @@ +unit RestClient_u; + +interface + +uses + DBXJSON, JSON, System.Classes, System.SysUtils, + + FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, + + System.Net.URLClient, System.Net.HttpClient, + System.Net.HttpClientComponent; + +type + + TRequest = class + uri : String; + vToken : String; + body : TStringList; + headers : TStringList; + params : TStringList; + + public + procedure Clear ; + constructor Create ; + destructor Destroy ; + end; + + TRestClient = Class ( TComponent ) + private + NetHTTP : TNetHTTPClient; + function armarParametros( sl : TStringList ) : String ; + protected + constructor Create ; virtual ; + destructor Destroy ; + public + sURLDominio : String ; + class function Get( req : TRequest ) : String ; + class function Post( req : TRequest ) : String ; + class function Put( req : TRequest ) : String ; + End; + +implementation + +uses StrUtils ; + +{ TRestClient } + +function TRestClient.armarParametros(sl: TStringList): String; +var i : integer ; +begin + result := ''; + for I := 0 to sl.Count - 1 do begin + result := result+sl[i]; + if i + + {1BF34D6E-C398-4AE8-A8EA-F85DF4CA8A52} + SGerenciaPago.dpk + 19.0 + FMX + True + Debug + Win32 + 32787 + Package + + + true + + + true + Base + true + + + true + Base + true + + + true + Base + true + + + true + Base + true + + + true + Base + true + + + true + Base + true + + + true + Base + true + + + true + Base + true + + + true + Base + true + + + true + Cfg_1 + true + true + + + true + Base + true + + + .\$(Platform)\$(Config) + .\$(Platform)\$(Config) + false + false + false + false + false + true + true + System;Xml;Data;Datasnap;Web;Soap;$(DCC_Namespace) + All + GerenciaPago + SGerenciaPago + + + None + android-support-v4.dex.jar;cloud-messaging.dex.jar;com-google-android-gms.play-services-ads-base.17.2.0.dex.jar;com-google-android-gms.play-services-ads-identifier.16.0.0.dex.jar;com-google-android-gms.play-services-ads-lite.17.2.0.dex.jar;com-google-android-gms.play-services-ads.17.2.0.dex.jar;com-google-android-gms.play-services-analytics-impl.16.0.8.dex.jar;com-google-android-gms.play-services-analytics.16.0.8.dex.jar;com-google-android-gms.play-services-base.16.0.1.dex.jar;com-google-android-gms.play-services-basement.16.2.0.dex.jar;com-google-android-gms.play-services-gass.17.2.0.dex.jar;com-google-android-gms.play-services-identity.16.0.0.dex.jar;com-google-android-gms.play-services-maps.16.1.0.dex.jar;com-google-android-gms.play-services-measurement-base.16.4.0.dex.jar;com-google-android-gms.play-services-measurement-sdk-api.16.4.0.dex.jar;com-google-android-gms.play-services-stats.16.0.1.dex.jar;com-google-android-gms.play-services-tagmanager-v4-impl.16.0.8.dex.jar;com-google-android-gms.play-services-tasks.16.0.1.dex.jar;com-google-android-gms.play-services-wallet.16.0.1.dex.jar;com-google-firebase.firebase-analytics.16.4.0.dex.jar;com-google-firebase.firebase-common.16.1.0.dex.jar;com-google-firebase.firebase-iid-interop.16.0.1.dex.jar;com-google-firebase.firebase-iid.17.1.1.dex.jar;com-google-firebase.firebase-measurement-connector.17.0.1.dex.jar;com-google-firebase.firebase-messaging.17.5.0.dex.jar;fmx.dex.jar;google-play-billing.dex.jar;google-play-licensing.dex.jar + rtl;fmx;dbrtl;DbxCommonDriver;$(DCC_UsePackage) + package=com.embarcadero.$(MSBuildProjectName);label=$(MSBuildProjectName);versionCode=1;versionName=1.0.0;persistent=False;restoreAnyVersion=False;installLocation=auto;largeHeap=False;theme=TitleBar;hardwareAccelerated=true;apiKey= + Debug + + + None + android-support-v4.dex.jar;cloud-messaging.dex.jar;com-google-android-gms.play-services-ads-base.17.2.0.dex.jar;com-google-android-gms.play-services-ads-identifier.16.0.0.dex.jar;com-google-android-gms.play-services-ads-lite.17.2.0.dex.jar;com-google-android-gms.play-services-ads.17.2.0.dex.jar;com-google-android-gms.play-services-analytics-impl.16.0.8.dex.jar;com-google-android-gms.play-services-analytics.16.0.8.dex.jar;com-google-android-gms.play-services-base.16.0.1.dex.jar;com-google-android-gms.play-services-basement.16.2.0.dex.jar;com-google-android-gms.play-services-gass.17.2.0.dex.jar;com-google-android-gms.play-services-identity.16.0.0.dex.jar;com-google-android-gms.play-services-maps.16.1.0.dex.jar;com-google-android-gms.play-services-measurement-base.16.4.0.dex.jar;com-google-android-gms.play-services-measurement-sdk-api.16.4.0.dex.jar;com-google-android-gms.play-services-stats.16.0.1.dex.jar;com-google-android-gms.play-services-tagmanager-v4-impl.16.0.8.dex.jar;com-google-android-gms.play-services-tasks.16.0.1.dex.jar;com-google-android-gms.play-services-wallet.16.0.1.dex.jar;com-google-firebase.firebase-analytics.16.4.0.dex.jar;com-google-firebase.firebase-common.16.1.0.dex.jar;com-google-firebase.firebase-iid-interop.16.0.1.dex.jar;com-google-firebase.firebase-iid.17.1.1.dex.jar;com-google-firebase.firebase-measurement-connector.17.0.1.dex.jar;com-google-firebase.firebase-messaging.17.5.0.dex.jar;fmx.dex.jar;google-play-billing.dex.jar;google-play-licensing.dex.jar + rtl;fmx;dbrtl;DbxCommonDriver;$(DCC_UsePackage) + package=com.embarcadero.$(MSBuildProjectName);label=$(MSBuildProjectName);versionCode=1;versionName=1.0.0;persistent=False;restoreAnyVersion=False;installLocation=auto;largeHeap=False;theme=TitleBar;hardwareAccelerated=true;apiKey= + Debug + + + None + rtl;fmx;dbrtl;DbxCommonDriver;$(DCC_UsePackage) + + + None + rtl;fmx;dbrtl;DbxCommonDriver;$(DCC_UsePackage) + + + rtl;fmx;dbrtl;DbxCommonDriver;$(DCC_UsePackage) + + + rtl;fmx;dbrtl;DbxCommonDriver;$(DCC_UsePackage) + + + Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace) + Debug + true + CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments= + 1033 + rtl;fmx;dbrtl;DbxCommonDriver;$(DCC_UsePackage) + + + rtl;fmx;dbrtl;DbxCommonDriver;$(DCC_UsePackage) + Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;$(DCC_Namespace) + Debug + true + CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments= + 1033 + + + DEBUG;$(DCC_Define) + true + false + true + true + true + + + false + + + false + RELEASE;$(DCC_Define) + 0 + 0 + + + + MainSource + + + + + + + + + + Cfg_2 + Base + + + Base + + + Cfg_1 + Base + + + + Delphi.Personality.12 + Package + + + + SGerenciaPago.dpk + + + + True + True + False + False + False + False + True + True + + + + + true + + + + + true + + + + + true + + + + + SGerenciaPago.bpl + true + + + + + 1 + + + 0 + + + + + classes + 1 + + + classes + 1 + + + + + res\xml + 1 + + + res\xml + 1 + + + + + library\lib\armeabi-v7a + 1 + + + + + library\lib\armeabi + 1 + + + library\lib\armeabi + 1 + + + + + library\lib\armeabi-v7a + 1 + + + + + library\lib\mips + 1 + + + library\lib\mips + 1 + + + + + library\lib\armeabi-v7a + 1 + + + library\lib\arm64-v8a + 1 + + + + + library\lib\armeabi-v7a + 1 + + + + + res\drawable + 1 + + + res\drawable + 1 + + + + + res\values + 1 + + + res\values + 1 + + + + + res\values-v21 + 1 + + + res\values-v21 + 1 + + + + + res\values + 1 + + + res\values + 1 + + + + + res\drawable + 1 + + + res\drawable + 1 + + + + + res\drawable-xxhdpi + 1 + + + res\drawable-xxhdpi + 1 + + + + + res\drawable-ldpi + 1 + + + res\drawable-ldpi + 1 + + + + + res\drawable-mdpi + 1 + + + res\drawable-mdpi + 1 + + + + + res\drawable-hdpi + 1 + + + res\drawable-hdpi + 1 + + + + + res\drawable-xhdpi + 1 + + + res\drawable-xhdpi + 1 + + + + + res\drawable-mdpi + 1 + + + res\drawable-mdpi + 1 + + + + + res\drawable-hdpi + 1 + + + res\drawable-hdpi + 1 + + + + + res\drawable-xhdpi + 1 + + + res\drawable-xhdpi + 1 + + + + + res\drawable-xxhdpi + 1 + + + res\drawable-xxhdpi + 1 + + + + + res\drawable-xxxhdpi + 1 + + + res\drawable-xxxhdpi + 1 + + + + + res\drawable-small + 1 + + + res\drawable-small + 1 + + + + + res\drawable-normal + 1 + + + res\drawable-normal + 1 + + + + + res\drawable-large + 1 + + + res\drawable-large + 1 + + + + + res\drawable-xlarge + 1 + + + res\drawable-xlarge + 1 + + + + + res\values + 1 + + + res\values + 1 + + + + + 1 + + + 1 + + + 0 + + + + + 1 + .framework + + + 1 + .framework + + + 0 + + + + + 1 + .dylib + + + 1 + .dylib + + + 0 + .dll;.bpl + + + + + 1 + .dylib + + + 1 + .dylib + + + 1 + .dylib + + + 1 + .dylib + + + 1 + .dylib + + + 0 + .bpl + + + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + 1 + + + 1 + + + 1 + + + + + 1 + + + 1 + + + 1 + + + + + 1 + + + 1 + + + 1 + + + + + 1 + + + 1 + + + 1 + + + + + 1 + + + 1 + + + 1 + + + + + 1 + + + 1 + + + 1 + + + + + 1 + + + 1 + + + 1 + + + + + 1 + + + 1 + + + 1 + + + + + 1 + + + 1 + + + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset + 1 + + + + + 1 + + + 1 + + + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset + 1 + + + + + 1 + + + 1 + + + 1 + + + + + 1 + + + 1 + + + 1 + + + + + 1 + + + 1 + + + 1 + + + + + 1 + + + 1 + + + 1 + + + + + 1 + + + 1 + + + 1 + + + + + 1 + + + 1 + + + 1 + + + + + 1 + + + 1 + + + 1 + + + + + 1 + + + 1 + + + 1 + + + + + 1 + + + 1 + + + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset + 1 + + + + + 1 + + + 1 + + + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset + 1 + + + + + 1 + + + 1 + + + 1 + + + + + 1 + + + 1 + + + 1 + + + + + 1 + + + 1 + + + 1 + + + + + 1 + + + 1 + + + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset + 1 + + + + + 1 + + + 1 + + + + + ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF + 1 + + + ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF + 1 + + + + + + + + + 1 + + + 1 + + + 1 + + + + + + + + Contents\Resources + 1 + + + Contents\Resources + 1 + + + + + library\lib\armeabi-v7a + 1 + + + library\lib\arm64-v8a + 1 + + + 1 + + + 1 + + + 1 + + + 1 + + + 1 + + + 1 + + + 0 + + + + + library\lib\armeabi-v7a + 1 + + + + + 1 + + + 1 + + + + + Assets + 1 + + + Assets + 1 + + + + + Assets + 1 + + + Assets + 1 + + + + + + + + + + + + + + + 12 + + + + + diff --git a/SGerenciaPago.dproj.local b/SGerenciaPago.dproj.local new file mode 100644 index 0000000..b0e7c5b --- /dev/null +++ b/SGerenciaPago.dproj.local @@ -0,0 +1,15 @@ + + + + 2021/02/07 11:14:55.000.131,=rtl.dcp + 2021/02/07 11:15:00.000.462,=I:\PagOnLine\GerenciaPago\GerenciaPago.pas + 2021/05/11 07:23:51.000.022,=I:\PagOnLine\GerenciaPago\RestClient_u.pas + 2021/05/11 07:24:21.000.973,=I:\PagOnLine\GerenciaPago\MercadoPago_u.pas + 2021/05/11 07:27:51.000.378,=fmx.dcp + 2021/05/11 07:27:51.000.432,=dbrtl.dcp + 2021/05/11 07:27:51.000.537,=DbxCommonDriver.dcp + + + + + diff --git a/SGerenciaPago.identcache b/SGerenciaPago.identcache new file mode 100644 index 0000000..7c80ac6 Binary files /dev/null and b/SGerenciaPago.identcache differ diff --git a/SGerenciaPago.res b/SGerenciaPago.res new file mode 100644 index 0000000..75d49ab Binary files /dev/null and b/SGerenciaPago.res differ diff --git a/TGERENCIAPAGO.bmp b/TGERENCIAPAGO.bmp new file mode 100644 index 0000000..f562648 Binary files /dev/null and b/TGERENCIAPAGO.bmp differ