Giter VIP home page Giter VIP logo

conekta-android's Introduction

README Cover Image

Conekta Android

You can use conekta-android for tokenize credit cards.

You have two methods to integrate conekta-android. Use artifacts or include our module.

Install Conekta Android Artifacts (AAR) 2.1

The artifact contains everything you need to start.

Instructions

This example uses mavenCentral to install the .aar (conektasdk) artefact.

repositories {
    mavenCentral()
}
...
configurations {
    all {
        exclude group: 'commons-logging', module: 'commons-logging'
        exclude module: 'httpclient'
    }
}
...
dependencies {
    implementation fileTree(include: ['*.jar'], dir: 'libs')
    implementation 'com.android.support:appcompat-v7:28.0.0'
    implementation 'org.jbundle.util.osgi.wrapped:org.jbundle.util.osgi.wrapped.org.apache.http.client:4.1.2'
    implementation project(':conektasdk')
}

Now just Sync gradle

Import Conekta Android module 2.0

Android Studio tested in versions 2.3, 3.0.1

This is an example about how to create Android Apps importing conekta module.

Instructions

  1. Clone this project

First you will need to open a new Android Project with ´empty´ activity

2 Set Android Environment

2.1 Add repositories

Gradle Scripts>Build.gradle(Project:YourProject)

buildscript {
    
    repositories {
        google()
        jcenter()

Add the repository

        mavenCentral()
    }

1.2 Set versions and dependencies

Gradle Scripts>Build.gradle(Project:Module:app)

android {
    compileSdkVersion 28
    defaultConfig {
        applicationId "com.conekta.conektatokenizeandroid"
        minSdkVersion 21
        targetSdkVersion 28
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}


dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation 'com.android.support:appcompat-v7:28.1.0'
    implementation 'com.android.support.constraint:constraint-layout:1.1.0'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'com.android.support.test:runner:1.0.1'
    implementation 'org.jbundle.util.osgi.wrapped:org.jbundle.util.osgi.wrapped.org.apache.http.client:4.1.2'
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1'

Add the dependency

  
    implementation 'io.conekta:conektasdk:2.2'
}

2 Build tokenize form

App>res>layout>activity_main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_form"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <TextView
        android:id="@+id/cardNumberLabel"
        android:layout_width="90dp"
        android:layout_height="wrap_content"
        android:layout_alignBottom="@+id/cardNumber"
        android:layout_alignParentTop="true"
        android:text="Card holder:" />

    <EditText
        android:id="@+id/cardNumber"
        android:layout_width="300dp"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:text="4242424242424242" />

    <TextView
        android:id="@+id/cardHolderLabel"
        android:layout_width="90dp"
        android:layout_height="wrap_content"
        android:layout_below="@id/cardNumberLabel"
        android:layout_alignBottom="@+id/cardHolder"
        android:text="Card: number:" />

    <EditText
        android:id="@+id/cardHolder"
        android:layout_width="300dp"
        android:layout_height="wrap_content"
        android:layout_below="@id/cardNumberLabel"
        android:layout_alignParentRight="true"
        android:text="Daniel Diner" />

    <TextView
        android:id="@+id/expirationLabel"

        android:layout_width="90dp"
        android:layout_height="wrap_content"
        android:layout_alignBottom="@+id/year"
        android:layout_below="@id/cardHolderLabel"
        android:text="Expiration:" />

    <EditText
        android:id="@+id/month"
        android:layout_width="80dp"
        android:layout_height="wrap_content"
        android:layout_below="@+id/cardHolderLabel"
        android:layout_toEndOf="@+id/expirationLabel"
        android:layout_toRightOf="@+id/expirationLabel"
        android:text="01" />

    <EditText
        android:id="@+id/year"
        android:layout_width="80dp"
        android:layout_height="wrap_content"
        android:layout_below="@+id/cardHolder"
        android:layout_toEndOf="@+id/month"
        android:layout_toRightOf="@+id/month"
        android:text="2020" />

    <TextView
        android:id="@+id/cvcLabel"
        android:layout_width="90dp"
        android:layout_height="wrap_content"
        android:layout_alignBottom="@+id/cvcNumber"
        android:layout_below="@id/year"
        android:text="CVV:" />

    <EditText
        android:id="@+id/cvcNumber"
        android:layout_width="50dp"
        android:layout_height="wrap_content"
        android:layout_below="@+id/month"
        android:layout_toEndOf="@+id/cvcLabel"
        android:layout_toRightOf="@+id/cvcLabel"
        android:text="123" />

    <TextView
        android:id="@+id/outputLabel"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="OUTPUT:"
        android:layout_below="@id/cvcNumber"
        android:textAppearance="?android:attr/textAppearanceLarge" />

    <Button
        android:id="@+id/btnTokenize"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@id/outputLabel"
        android:text="Tokenize" />

</RelativeLayout>

Usage Conekta SDK

3 Add Conekta code

3.1 Add needed imports

App>java>com.conekta.YourProject>MainActivity.java

import android.app.Activity;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

import io.conekta.conektasdk.Conekta;
import io.conekta.conektasdk.Card;
import io.conekta.conektasdk.Token;
import org.json.JSONObject;

3.2 Declare variables from XML

 private Button btnTokenize;
    private TextView outputLabel;
    private EditText cardNumber;
    private EditText cardHolder;
    private EditText cvcNumber;
    private EditText month;
    private EditText year;
    private Activity activity = this;

3.3 Add Conekta Code

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);



        Conekta.setPublicKey("key_CBsGarr9nE2Ueds5V5kV7Pw");
        Conekta.setApiVersion("0.3.0"); //Set api version (optional)
        Conekta.collectDevice(activity); //Collect device*/

        outputLabel = (TextView) findViewById(R.id.outputLabel);
        btnTokenize = (Button) findViewById(R.id.btnTokenize);
        cardHolder = (EditText) findViewById(R.id.cardHolder);
        cardNumber = (EditText) findViewById(R.id.cardNumber);
        month = (EditText) findViewById(R.id.month);
        year = (EditText) findViewById(R.id.year);
        cvcNumber = (EditText) findViewById(R.id.cvcNumber);


        btnTokenize.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                Card card = new Card(cardHolder.getText().toString(),
                        cardNumber.getText().toString(),
                        cvcNumber.getText().toString(),
                        month.getText().toString(),
                        year.getText().toString());


                Token token = new Token(activity);



                token.onCreateTokenListener(new Token.CreateToken() {
                    @Override
                    public void onCreateTokenReady(JSONObject data) {
                        try {
                            outputLabel.setText("Token id: " + data.getString("id"));
                        } catch (Exception error) {
                            outputLabel.setText("Error: " + error.toString());
                        }
                    }
                });
                token.create(card);//Create token
            }
        });

Review your manifest

App>manifests>AndroidManifest.xml

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.conekta.conektatokenizeandroid">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">

        <uses-library android:name ="org.apache.http.legacy" android:required ="false"/>

        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

Add internet permissions inside your manifest

(...)
<uses-permission android:name="android.permission.INTERNET" />

<application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        
 (...)       

Usage Conekta SDK

Just import all conekta classes from com.conekta namespace

  // Your code....
  import io.conekta.conektasdk.Conekta;
  import io.conekta.conektasdk.Card;
  import io.conekta.conektasdk.Token;
  import org.json.JSONObject;
  // Your code...
  
  private Activity activity = this;

  Conekta.setPublicKey("key_KJysdbf6PotS2ut2"); //Set public key
  Conekta.setApiVersion("0.3.0"); //Set api version (optional)
  Conekta.collectDevice(activity); //Collect device

  Card card = new Card("Josue Camara", "4242424242424242", "332", "11", "2017");
  Token token = new Token(activity);

  token.onCreateTokenListener( new Token.CreateToken(){
    @Override
    public void onCreateTokenReady(JSONObject data) {
      try {
        //TODO: Create charge
        Log.d("Token::::", data.getString("id"));
      } catch (Exception err) {
      //TODO: Handle error
        Log.d("Error: " + err.toString());
      }
    }
  });

  token.create(card);//Create token
  // Your code below....

Use conekta-android with Proguard

Just add

-keep class com.conekta.** { ; }

Documentation

Please see developers.conekta.com/api for up-to-date documentation.

Example

alt tag

License

Developed in Mexico by Conekta in. Available with MIT License.


We are always hiring!

If you are a comfortable working with a range of backend languages (Java, Python, Ruby, PHP, etc) and frameworks, you have solid foundation in data structures, algorithms and software design with strong analytical and debugging skills. Send us your CV and GitHub to [email protected]

conekta-android's People

Contributors

dinerdaniel avatar erickcta avatar fcarrero avatar javiermurillo avatar karlarobinson avatar leofischer avatar mauriciomurga avatar picharras avatar richpeniche avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

conekta-android's Issues

Maven Command

Cuando corro el comando para instalar la librería me arroja lo siguiente:

[INFO] Scanning for projects...
[INFO]                                                                         
[INFO] ------------------------------------------------------------------------
[INFO] Building Maven Stub Project (No POM) 1
[INFO] ------------------------------------------------------------------------
[INFO] 
[INFO] --- maven-install-plugin:2.4:install-file (default-cli) @ standalone-pom ---
[ERROR] The specified file '/home/jupazave/AndroidStudioProjects/MobileTerminal/app/libs/tokenizer-release.aar' not exists
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 0.529 s
[INFO] Finished at: 2015-05-21T19:04:59-05:00
[INFO] Final Memory: 6M/159M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-install-plugin:2.4:install-file (default-cli) on project standalone-pom: The specified file '/home/jupazave/AndroidStudioProjects/MobileTerminal/app/libs/tokenizer-release.aar' not exists -> [Help 1]
[ERROR] 
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR] 
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoFailureException

[Solicitud de documentación] Error ApacheLogging

Al momento de ejecutar la version 2.1

E  FATAL EXCEPTION: AsyncTask #2
   Process: mx.com.sfinx.jal.misaldo, PID: 4584
   java.lang.RuntimeException: An error occurred while executing doInBackground()
   	at android.os.AsyncTask$4.done(AsyncTask.java:415)
   	at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:381)
   	at java.util.concurrent.FutureTask.setException(FutureTask.java:250)
   	at java.util.concurrent.FutureTask.run(FutureTask.java:269)
   	at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:305)
   	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1137)
   	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:637)
   	at java.lang.Thread.run(Thread.java:1012)
   Caused by: java.lang.NoClassDefFoundError: Failed resolution of: Lorg/apache/commons/logging/LogFactory;
   	at org.apache.http.impl.client.AbstractHttpClient.<init>(AbstractHttpClient.java:182)
   	at org.apache.http.impl.client.DefaultHttpClient.<init>(DefaultHttpClient.java:150)
   	at io.conekta.conektasdk.Connection$Task.doInBackground(Connection.java:48)
   	at io.conekta.conektasdk.Connection$Task.doInBackground(Connection.java:43)
   	at android.os.AsyncTask$3.call(AsyncTask.java:394)
   	at java.util.concurrent.FutureTask.run(FutureTask.java:264)
   	at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:305) 
   	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1137) 
   	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:637) 
   	at java.lang.Thread.run(Thread.java:1012) 
   Caused by: java.lang.ClassNotFoundException: Didn't find class "org.apache.commons.logging.LogFactory" on path: DexPathList
   	at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:259)
   	at java.lang.ClassLoader.loadClass(ClassLoader.java:379)
   	at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
   	at org.apache.http.impl.client.AbstractHttpClient.<init>(AbstractHttpClient.java:182) 
   	at org.apache.http.impl.client.DefaultHttpClient.<init>(DefaultHttpClient.java:150) 
   	at io.conekta.conektasdk.Connection$Task.doInBackground(Connection.java:48) 
   	at io.conekta.conektasdk.Connection$Task.doInBackground(Connection.java:43) 
   	at android.os.AsyncTask$3.call(AsyncTask.java:394) 
   	at java.util.concurrent.FutureTask.run(FutureTask.java:264) 
   	at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:305) 
   	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1137) 
   	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:637) 
   	at java.lang.Thread.run(Thread.java:1012) 

La solución se encuentra al añadir en AndroidManifest.xml dentro la etiquieta

    <uses-library android:name ="org.apache.http.legacy" android:required ="false"/>

Conekta SDK on api 9

Buenas tardes, tengo una pregunta, el SDK que ustedes proveen puede trabajar en API 9??

Proguard y conekta-android

Buenas tardes, hay alguna configuración especial de proguard que se tenga que agregar para poder utilizarlo con Conekta? ya que estoy estoy intentado generar el token pero me arroja un error que dice: "El recurso no ha sido encontrado".

Proguard Expecting java type before ';'

Hola, estoy implementado conekta en una aplicación android con compileSdkVersion 27, minSdkVersion 19 y targetSdkVersion 26 y hago uso de proguard, agregue la regla a mi archivo:

-keep class com.conekta.** { ; }

Pero al momento de generar el apk firmado me da el error:

Warning: Exception while processing task java.io.IOException: proguard.ParseException: Expecting java type before ';' in line 24 of file 'C:\Users\user\StudioProjects\myapp\app\proguard-rules.pro'

¿Cual es la regla correcta para implementarlo?

ClassNotFoundException: Didn't find class "org.apache.http.message.BasicNameValuePair"

I had a problem using the conekta library on Android 9.

java.lang.NoClassDefFoundError: Failed resolution of: Lorg/apache/http/message/BasicNameValuePair; at io.conekta.conektasdk.Token.create(Token.java:41) at com.caffenio.app.fragments.payment.SummaryPaymentFragment.tokenizeCard(SummaryPaymentFragment.java:577) at com.caffenio.app.fragments.payment.SummaryPaymentFragment.lambda$onViewCreated$1(SummaryPaymentFragment.java:166)

Caused by: java.lang.ClassNotFoundException: Didn't find class "org.apache.http.message.BasicNameValuePair" on path: DexPathList[[zip file "/data/app/

I fix the problem adding the next lines on android manifest

android:usesCleartextTraffic="true"
on application

and inside
<uses-library android:name="org.apache.http.legacy" android:required="false" />

https://imgur.com/hbtwrIA

I hope someone who has the same problem could fix it

Best regards

Error en Conekta Android

Hola buenas noches, tengo un problema con conekta que cuando quiero tokenizar una tarjeta me sale lo siguiente en el apartado de http logs

{
"object": "error",
"type": null,
"message": "We can only process data from cards that have been properly tokenized or that come from a site that meets PCI compilance. If your site meets the standards , send a copy of your certificate and PCI [email protected] requests access.",
"message_to_purchaser": "Solamente podemos procesar datos de tarjetas que han sido tokenizadas o que provengan de sitios seguros que cumplan los estándares de PCI.",
"param": null,
"code": "processing_error"
}

al principio si funcionaba pero despues me dio este problema... segun yo toma el certificado (que no deberia) de conekta java

agradezco la atención

el token no existe

Cuando intento generar una tarjeta tokenizada para almacenarla en los paymentSources,
al devolverla esta devuelve "el token no existe"
pero si intento con tarjeta de un solo uso, entonces me deja proceder con la compra normalmente

Android 9- El recurso no encotrado

the object customer "cus_XXXXXXXX" could not be found

Al instlar al aplicación en un telefono con version 9.0 no pasa el cargo,
Pero en otras versiones si pasa me pueden ayudar

authentication_error

No puedo crear un token con la referencia de Android.

El error obtenido es el siguiente:

{"object":"error","type":"authentication_error","message":"Unauthorized access, please check the permissions of your key for this call.","message_to_purchaser":"Acceso no autorizado.","param":null,"code":"authentication_error","validation_error":null}

El token utilizado es: key_eYvWV7gSDkNYXsmr (El mismo de la documentación)

NO work

When converting this code to Kotlin it doesn't work,

Type mismatch: inferred type is but Token.CreateToken! was expected

token.onCreateTokenListener(new Token.CreateToken() {
@OverRide
public void onCreateTokenReady(JSONObject data) {
showTokenResult(data);
}
});

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.