├── settings.gradle ├── library ├── gradle.properties ├── src │ └── main │ │ ├── AndroidManifest.xml │ │ ├── java │ │ └── com │ │ │ └── cloudipsp │ │ │ └── android │ │ │ ├── CardDisplay.java │ │ │ ├── Currency.java │ │ │ ├── BaseConfirmationErrorHandler.java │ │ │ ├── CvvUtils.java │ │ │ ├── ReceiptUtils.java │ │ │ ├── CardExpMmEdit.java │ │ │ ├── CardExpYyEdit.java │ │ │ ├── CloudipspView.java │ │ │ ├── GooglePayCall.java │ │ │ ├── CardCvvEdit.java │ │ │ ├── Tls12SocketFactory.java │ │ │ ├── CardInputBase.java │ │ │ ├── CardInputView.java │ │ │ ├── CardNumberEdit.java │ │ │ ├── Card.java │ │ │ ├── Receipt.java │ │ │ ├── CardInputLayout.java │ │ │ ├── Order.java │ │ │ ├── CloudipspWebView.java │ │ │ └── Cloudipsp.java │ │ └── res │ │ ├── values │ │ └── strings.xml │ │ ├── values-ru │ │ └── strings.xml │ │ └── layout │ │ └── com_cloudipsp_android_card_input_view.xml └── build.gradle ├── gradle └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── app ├── src │ └── main │ │ ├── res │ │ ├── drawable-hdpi │ │ │ └── ic_launcher.png │ │ ├── drawable-mdpi │ │ │ └── ic_launcher.png │ │ ├── drawable-xhdpi │ │ │ └── ic_launcher.png │ │ ├── drawable-xxhdpi │ │ │ └── ic_launcher.png │ │ ├── values │ │ │ ├── styles.xml │ │ │ └── strings.xml │ │ └── layout │ │ │ ├── activity_main.xml │ │ │ ├── activity_simple_example.xml │ │ │ └── activity_flexible_example.xml │ │ ├── java │ │ └── com │ │ │ └── cloudipsp │ │ │ └── android │ │ │ └── demo │ │ │ ├── MainActivity.java │ │ │ ├── SimpleExampleActivity.java │ │ │ ├── FlexibleExampleActivity.java │ │ │ ├── GPay.java │ │ │ └── BaseExampleActivity.java │ │ └── AndroidManifest.xml └── build.gradle ├── .gitignore ├── gradle.properties ├── maven_push.gradle ├── gradlew.bat └── gradlew /settings.gradle: -------------------------------------------------------------------------------- 1 | include ':app', ':library' 2 | -------------------------------------------------------------------------------- /library/gradle.properties: -------------------------------------------------------------------------------- 1 | POM_NAME=Cloud IPSP Client 2 | POM_ARTIFACT_ID=android 3 | POM_PACKAGING=aar -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cloudipsp/android-sdk/HEAD/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cloudipsp/android-sdk/HEAD/app/src/main/res/drawable-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cloudipsp/android-sdk/HEAD/app/src/main/res/drawable-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cloudipsp/android-sdk/HEAD/app/src/main/res/drawable-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cloudipsp/android-sdk/HEAD/app/src/main/res/drawable-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /library/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 3 | 4 | -------------------------------------------------------------------------------- /library/src/main/java/com/cloudipsp/android/CardDisplay.java: -------------------------------------------------------------------------------- 1 | package com.cloudipsp.android; 2 | 3 | /** 4 | * Created by vberegovoy on 07.09.17. 5 | */ 6 | 7 | public interface CardDisplay { 8 | void display(Card card); 9 | } 10 | -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | #Thu Nov 17 22:42:33 EET 2016 2 | distributionBase=GRADLE_USER_HOME 3 | distributionPath=wrapper/dists 4 | zipStoreBase=GRADLE_USER_HOME 5 | zipStorePath=wrapper/dists 6 | distributionUrl=https\://services.gradle.org/distributions/gradle-6.9.3-all.zip 7 | -------------------------------------------------------------------------------- /library/src/main/java/com/cloudipsp/android/Currency.java: -------------------------------------------------------------------------------- 1 | package com.cloudipsp.android; 2 | 3 | /** 4 | * Created by vberegovoy on 09.11.15. 5 | */ 6 | public enum Currency { 7 | UAH, 8 | RUB, 9 | USD, 10 | EUR, 11 | GBP, 12 | KZT; 13 | 14 | @Override 15 | public String toString() { 16 | return name(); 17 | } 18 | 19 | 20 | } 21 | -------------------------------------------------------------------------------- /app/src/main/res/values/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | 7 | 10 | -------------------------------------------------------------------------------- /library/src/main/java/com/cloudipsp/android/BaseConfirmationErrorHandler.java: -------------------------------------------------------------------------------- 1 | package com.cloudipsp.android; 2 | 3 | import android.widget.EditText; 4 | import android.widget.FrameLayout; 5 | 6 | /** 7 | * Created by vberegovoy on 6/20/17. 8 | */ 9 | interface BaseConfirmationErrorHandler { 10 | void onCardInputErrorClear(V view, EditText editText); 11 | 12 | void onCardInputErrorCatched(V view, EditText editText, String error); 13 | } 14 | -------------------------------------------------------------------------------- /library/src/main/java/com/cloudipsp/android/CvvUtils.java: -------------------------------------------------------------------------------- 1 | package com.cloudipsp.android; 2 | 3 | /** 4 | * Created by vberegovoy on 2/19/18. 5 | */ 6 | 7 | class CvvUtils { 8 | private static final String[] CVV4_BINS = new String[] {"32", "33", "34", "37"}; 9 | 10 | static boolean isCvv4Length(String cardNumber) { 11 | for (String bin : CVV4_BINS) { 12 | if (cardNumber.startsWith(bin)) { 13 | return true; 14 | } 15 | } 16 | return false; 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # svn 2 | *.svn* 3 | 4 | # built application files 5 | *.apk 6 | *.ap_ 7 | 8 | # files for the dex VM 9 | *.dex 10 | 11 | # Java class files 12 | *.class 13 | 14 | # generated GUI files 15 | */R.java 16 | 17 | # generated folder 18 | bin 19 | gen 20 | 21 | # local 22 | local.properties 23 | 24 | proguard_logs/ 25 | 26 | # log files 27 | log*.txt 28 | 29 | # archives 30 | *.gz 31 | *.tar 32 | *.zip 33 | 34 | # eclipse 35 | *.metadata 36 | *.settings 37 | *.prefs 38 | 39 | #idea 40 | *.idea 41 | *.iml 42 | .idea/ 43 | out/ 44 | 45 | build/ 46 | .gradle/ 47 | .DS_Store 48 | -------------------------------------------------------------------------------- /library/src/main/res/values/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | Card number: 4 | Expiry: 5 | MM 6 | YY 7 | CVV: 8 | Invalid card number 9 | Invalid year 10 | Invalid month 11 | Invalid date 12 | Invalid cvv 13 | -------------------------------------------------------------------------------- /gradle.properties: -------------------------------------------------------------------------------- 1 | VERSION_NAME=1.17.2 2 | VERSION_CODE=42 3 | GROUP=com.cloudipsp 4 | 5 | POM_DESCRIPTION=Library for accepting payments directly from android application's clients. 6 | POM_URL=https://github.com/cloudipsp/android-sdk 7 | POM_SCM_URL=https://github.com/cloudipsp/android-sdk 8 | POM_SCM_CONNECTION=scm:git@github.com:cloudipsp/android-sdk.git 9 | POM_SCM_DEV_CONNECTION=scm:git@github.com:cloudipsp/android-sdk.git 10 | POM_LICENCE_NAME=The MIT License (MIT) 11 | POM_LICENCE_URL=https://opensource.org/licenses/MIT 12 | POM_LICENCE_DIST=repo 13 | POM_DEVELOPER_ID=cloudipsp 14 | POM_DEVELOPER_NAME=Maxim Kozenko 15 | 16 | android.useAndroidX=true 17 | -------------------------------------------------------------------------------- /library/src/main/res/values-ru/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | Номер карты: 4 | Срок действия: 5 | ММ 6 | ГГ 7 | CVV: 8 | Неверный номер карты 9 | Неверный год 10 | Неверный месяц 11 | Неверный срок действия 12 | Неверный cvv 13 | -------------------------------------------------------------------------------- /app/src/main/java/com/cloudipsp/android/demo/MainActivity.java: -------------------------------------------------------------------------------- 1 | package com.cloudipsp.android.demo; 2 | 3 | import android.app.Activity; 4 | import android.content.Intent; 5 | import android.os.Bundle; 6 | import android.view.View; 7 | 8 | /** 9 | * Created by vberegovoy on 6/20/17. 10 | */ 11 | 12 | public class MainActivity extends Activity { 13 | @Override 14 | protected void onCreate(Bundle savedInstanceState) { 15 | super.onCreate(savedInstanceState); 16 | setContentView(R.layout.activity_main); 17 | } 18 | 19 | public void onSimpleExampleClicked(View view) { 20 | startActivity(new Intent(this, SimpleExampleActivity.class)); 21 | } 22 | 23 | public void onFlexibleExampleClicked(View view) { 24 | startActivity(new Intent(this, FlexibleExampleActivity.class)); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /library/src/main/java/com/cloudipsp/android/ReceiptUtils.java: -------------------------------------------------------------------------------- 1 | package com.cloudipsp.android; 2 | 3 | import java.util.HashMap; 4 | import java.util.Iterator; 5 | import java.util.Map; 6 | 7 | /** 8 | * Created by vberegovoy on 11.07.16. 9 | */ 10 | public class ReceiptUtils { 11 | public static Map dumpFields(Receipt receipt) { 12 | final Iterator keys = receipt.orderData.keys(); 13 | final Map map = new HashMap(); 14 | 15 | while (keys.hasNext()) { 16 | final String key = keys.next(); 17 | final Object value = receipt.orderData.opt(key); 18 | 19 | if (value instanceof Boolean || value instanceof Number || value instanceof String) { 20 | map.put(key, value); 21 | } 22 | } 23 | 24 | return map; 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /app/build.gradle: -------------------------------------------------------------------------------- 1 | apply plugin: 'com.android.application' 2 | 3 | def safeExtGet(prop, fallback) { 4 | rootProject.ext.has(prop) ? rootProject.ext.get(prop) : fallback 5 | } 6 | 7 | android { 8 | compileSdkVersion safeExtGet('compileSdkVersion', 33) 9 | buildToolsVersion safeExtGet('buildToolsVersion', '33.0.0') 10 | 11 | defaultConfig { 12 | applicationId 'com.cloudipsp.android.demo' 13 | minSdkVersion safeExtGet('minSdkVersion', 14) 14 | targetSdkVersion safeExtGet('targetSdkVersion', 33) 15 | versionCode 1 16 | versionName '1.0' 17 | } 18 | buildTypes { 19 | release { 20 | minifyEnabled false 21 | } 22 | } 23 | } 24 | 25 | dependencies { 26 | implementation 'com.google.android.gms:play-services-base:18.1.0' 27 | implementation 'com.google.android.gms:play-services-wallet:19.1.0' 28 | implementation project(':library') 29 | } 30 | -------------------------------------------------------------------------------- /app/src/main/res/values/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | cloudipsp.com demo 4 | Simple Example 5 | Flexible Example 6 | 7 | Amount: 8 | Currency: 9 | Email: 10 | Description: 11 | GooglePay 12 | Pay by Card 13 | Invalid amount 14 | Invalid email 15 | Enter description 16 | GooglePay is not supported 17 | GooglePay has been canceled 18 | 19 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_main.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 11 | 12 |