Android Card IO SDK Kullanımı (Kameradan Kredi Kartı Okuma)

Merhaba arkadaşlar,
Mobilhanem.com sitemizden anlattığımız/yayınladığımız derslerimize bu dersimizde, Card IO Android SDK kullanımı dersi ile devam ediyoruz.

card.io sayesinde hızlı ve kolay bir şekilde kredi kartını okutabiliyoruz. Daha sonra kredi kartı ile ilgili gerçekleşmesini istediğimiz işlemleri tamamlayabiliyoruz. Online ödeme yapmanın daha güvenli ve kolay yolu olan Paypal ile kredi kartı numaranızı mağazayla paylaşmadan ödemelerini gerçekleştirebilirsiniz. Pek çoğumuzun Paypal ile alışveriş yaptığını düşünürsek , card.io nun da Paypal desteği aldığını ve kredi kartı işlemlerinde; güvenlik konusunda kafamızda soru işaretleri olmaması gerektiğini de ayrıca belirtmek istedim.

Şimdi gelelim card.io uygulamamızda nasıl kullanacağımıza; projemizin build.gradle dosyasına giriyoruz ve dependencies kısmına aşağıdaki kodu yapıştırıp sync now diyoruz.

compile 'io.card:android-sdk:5.4.2'

AndroidManifest.xml dosyasına gerekli izinleri ve  özellikleri  ekliyoruz.

android.permission.VIBRATE = titreşim özelliğini açmak için

android.permission.CAMERA = cihazın kamerasını kullanabilmek için

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.mobilhanem.androidcardio">

    <uses-permission android:name="android.permission.VIBRATE" />
    <uses-permission android:name="android.permission.CAMERA" />

    <uses-feature android:name="android.hardware.camera" android:required="false" />
    <uses-feature android:name="android.hardware.camera.autofocus" android:required="false" />
    <uses-feature android:name="android.hardware.camera.flash" android:required="false" />

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

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

        <activity android:name="io.card.payment.CardIOActivity" android:configChanges="keyboardHidden|orientation"
            android:hardwareAccelerated="true"/>
        <activity android:name="io.card.payment.DataEntryActivity" android:screenOrientation="portrait"/>

    </application>

</manifest>

Yukarıda belirttiğimiz manifest dosyasında application tagleri içinde gördüğünüz CardIOActivity ve DataEntryActivity sınıfları card.io nun kendi içerisinde bulunan activity sınıflarıdır. Uygulamanın kaynak kodunu inidirip çalıştırdığımızda belirttiğim activity lerin nasıl çalıştığını göreceksiniz.

Uygulamamızın tasarım kısmında ise kredi kartını okumasını tetikleyeceğimiz bir buton ve scan işlemlerinden sonra gerekli bilgileri ekranda gösterecek olan bir textview kullandık.

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.mobilhanem.androidcardio.MainActivity">

    <Button
        android:text="Kredi Katını Okut"
        android:id="@+id/scanButton"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

    <TextView
        android:layout_marginTop="10dp"
        android:id="@+id/txtScan"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/scanButton" />
</RelativeLayout>

MainActivity sınıfımızda aşağıdadır. Kredi kartını okuma ve kredi kartı ile ilgili verileri ekrana basma işlemlerini bu sınıfta gerçekleştiriyoruz. Butona bastığımızda CardIOActivity sayfasını startActivityForResult ile başlatıyoruz. Karşımıza çıkan ekranda düzgün bir şekilde çerçevenin içinde kredi kartı sığacak şekilde kamerayı yerleştiriyoru ve görüntü işleme sonrasında onActivityResult fonksiyonuna düşüyoruz ; CreditCard modeline bakarsanız kredi kartı ile ilgili verileri tuttuğunu göreceksiniz. ( Kredi kartı numarası , cvv, geçerlilik süresi , kart sahibinin adı vb. )

MainActivity.java

package com.mobilhanem.androidcardio;

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

import io.card.payment.CardIOActivity;
import io.card.payment.CreditCard;

public class MainActivity extends AppCompatActivity {

    private Button scanBttn;
    private TextView scanInfo;
    private int MY_SCAN_REQUEST_CODE = 999;
    @Override
    protected void onResume() {
        super.onResume();

        if (CardIOActivity.canReadCardWithCamera()) { //Kameradan okutma yapılıyorsa
            scanBttn.setText("Kredi Kartını Okut");
        } else {
            scanBttn.setText("Kredi Kartı Bilgilerini Giriniz");
        }
    }

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

        scanBttn = (Button)findViewById(R.id.scanButton);
        scanInfo = (TextView)findViewById(R.id.txtScan);
        scanBttn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                scanCreditCard();

            }
        });
    }

    private void scanCreditCard() {

        Intent scanIntent = new Intent(this, CardIOActivity.class);

        scanIntent.putExtra(CardIOActivity.EXTRA_REQUIRE_EXPIRY, true); // default: false
        scanIntent.putExtra(CardIOActivity.EXTRA_REQUIRE_CVV, false); // default: false
        scanIntent.putExtra(CardIOActivity.EXTRA_REQUIRE_POSTAL_CODE, false); // default: false
        scanIntent.putExtra(CardIOActivity.EXTRA_RESTRICT_POSTAL_CODE_TO_NUMERIC_ONLY, false); // default: false
        scanIntent.putExtra(CardIOActivity.EXTRA_REQUIRE_CARDHOLDER_NAME, false); // default: false

        scanIntent.putExtra(CardIOActivity.EXTRA_SUPPRESS_MANUAL_ENTRY, false); // default: false

        scanIntent.putExtra(CardIOActivity.EXTRA_KEEP_APPLICATION_THEME, false); // default: false

        startActivityForResult(scanIntent, MY_SCAN_REQUEST_CODE);

    }



    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);


        String resultStr;
        if (data != null && data.hasExtra(CardIOActivity.EXTRA_SCAN_RESULT)) {
            CreditCard scanResult = data.getParcelableExtra(CardIOActivity.EXTRA_SCAN_RESULT);

            resultStr = "Card Number: " + scanResult.getLastFourDigitsOfCardNumber() + "\n";


            if (scanResult.isExpiryValid()) {
                resultStr += "Expiration Date: " + scanResult.expiryMonth + "/" + scanResult.expiryYear + "\n";
            }

            if (scanResult.cvv != null) {
                resultStr += "CVV has " + scanResult.cvv.length() + " digits.\n";
            }

            if (scanResult.postalCode != null) {
                resultStr += "Postal Code: " + scanResult.postalCode + "\n";
            }

            if (scanResult.cardholderName != null) {
                resultStr += "Cardholder Name : " + scanResult.cardholderName + "\n";
            }
        } else {
            resultStr = "Tarama İptal Edildi.";
        }
        scanInfo.setText(resultStr);
    }
}

 

Uygulamayı çalıştırdığınızda kredi kartını okutup işlemi bitirdikten sonra aşağıdaki gibi bir görüntü elde edeceksiniz. Kredi Kartınımızın son 4 hanesini (siz isterseniz hepsini yazdırabilirsiniz) ve son kullanma tarihini yazdırdığımızı göreceksiniz.

  • bu kod ile kartı okuttuktan sonra ekrana kredi kartı numaranızın tamamını açık bir şekilde yazdığını göreceksiniz.
scanResult.getFormattedCardNumber();
  • bu kod ile kartı okuttuktan sonra ekrana kredi kartı numaranızın son 4 hanesini yazdığını göreceksiniz.
scanResult.getLastFourDigitsOfCardNumber();
  • bu kod ile de kartı okuttuktan sonra ekrana kredi kartınızın numarasını maskeli bir şekilde yazmanızı sağlar.
scanResult.getRedactedCardNumber();

Biz bu uygulamamızda kredi kartını okuttuktan sonra ekrana maskeli bir şekilde kredi kartı numarasını yazdırdık. Ayrıca kredi kartınızı hem otomatik bir şekilde okutup bilgilerini alabileceğiniz gibi card.io nun kendi sınıfını uygulama içinden açıp kredi kartı numarasını ve son kullanma tarihini manuel bir şekilde girerek yine aynı işlemi yapabilirsiniz. ( DataEntryActivity )

dataentryscreen           cardiooutput        screencardio

 

Card.io ile kredi kartı okuma işte bu kadar kolay ve hızlı. Ayrıca, android 2.2 ve üzeri tüm cihazlara desteği olduğu için de kullanım açısından avantaj olduğunu söyleyebiliriz.

Mobilhanem.com üzerinden anlattığımız mobil uygulama geliştirme derslerine devam edeceğiz. Konu hakkında sorunuzu yorum alanından sorabilirsiniz. Konu dışı sorularınızı ve tüm yazılımsal sorularınızı sorucevap.mobilhanem.com sitemizden de sorabilirsiniz.

Bir dahaki dersimizde görüşmek dileğiyle..

 

0

Alper Beyler

Yüksek Lisans: Çankaya Üniversitesi / Bilgisayar Mühendisliği
Lisans: Çankaya Üniversitesi / Bilgisayar Mühendisliği (4/3.30) (2010-2014)
Lisans : Viyana Teknik Üniversitesi / Bilgisayar Bilimleri (2013)

Yorum Yaz

Haftalık Bülten

Mobilhanem'de yayınlanan dersleri haftalık mail almak ister misiniz?