Tích hợp thanh toán vào ứng dụng android thông qua API Viettel

Giới thiệu

Hôm nay chúng ta sẽ tạo một ứng dụng đơn giản. có tích hợp thanh toán thông qua API Viettel.
Ứng dụng gồm 1 textview để hiển thị tên và giá sản phẩm
Một button Mua. Click vào để mua ứng dụng.


Khi click vào button Mua. Ứng dụng sẽ xuất hiện một Dialog và tin nhắn từ Viettel yêu cầu xác nhận thanh toán.

Ứng dụng đơn giản vậy thôi.

Đăng ký

Các bạn vào trang API Viettel để đăng ký tài khoản.
Sau đó tiếp vào https://api.vietteltelecom.vn/index.php/tao-ung-dung để tạo một ứng dụng như sau.
Nhớ lưu lại 2 ID sau:
Sau đó Tải SDK về để bắt đầu công việc.
1. Giải nén file vừa tải được, Import thư mục Viettel-services-lib
2. Import Vì đây là thư viện được build trên Eclipse nên chúng ta cứ Import vào Android Studio để cho nó build lại.
3. Tạo mới app để dùng thư viện này. Tên com.androidtmc.exampleviettel
4. Mở Project exampleviettel, Vào File/New/Import Module... chọn Viettel-services-lib
5. Click chuột phải vào project chọn Open module setting...(F4), chọn Module dependency
      chọn đường dẫn đến Viettel-services-lib (đã ddc build bằng Android Studio).

Giao diện Màng hình chính

---
activity_main.xml
activity_main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" 
    android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity"> 
 
    <TextView 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:textAppearance="?android:attr/textAppearanceLarge" 
        android:text="Sản phẩm: Áo thun. Giá : 200k" 
        android:id="@+id/tv" 
        android:layout_alignParentTop="true" 
        android:layout_alignParentLeft="true" 
        android:layout_alignParentStart="true" /> 
 
    <Button 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:text="Mua" 
        android:id="@+id/btnBuy" 
        android:layout_below="@+id/tv" 
        android:layout_centerHorizontal="true" 
        android:layout_marginTop="43dp" /> 
</RelativeLayout> 

Cấu hình AndroidManifest.xml

AndroidManifest.xml
AndroidManifest.xml

xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    package="com.androidtmc.exampleviettel" > 
 
    <application 
        android:allowBackup="true" 
        android:icon="@mipmap/ic_launcher" 
        tools:replace="android:icon,android:theme" 
        android:label="@string/app_name" 
        android:theme="@style/AppTheme" > 
         
        <activity android:name="com.viettel.android.gsm.ViettelActivity" 
            android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize" 
            android:theme="@android:style/Theme.Translucent.NoTitleBar.Fullscreen" /> 
        <activity 
            android:name=".MainActivity" 
            android:label="@string/app_name" > 
            <intent-filter> 
                <action android:name="android.intent.action.MAIN" /> 
 
                <category android:name="android.intent.category.LAUNCHER" /> 
            </intent-filter> 
        </activity> 
         
        <receiver android:name="com.viettel.android.gsm.ViettelIncommingSMS" 
            android:permission="android.permission.BROADCAST_SMS" > 
            <intent-filter> 
                <action android:name="android.provider.Telephony.SMS_RECEIVED" /> 
            </intent-filter> 
            <meta-data android:name="port" android:value="9111" /> 
        </receiver> 
    </application> 
 
    <uses-permission android:name="android.permission.INTERNET" /> 
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> 
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
    <uses-permission android:name="android.permission.RECEIVE_SMS" /> 
    <uses-permission android:name="android.permission.READ_PHONE_STATE"/> 
 
</manifest> 

MainActivity.java
MainActivity.java

package com.androidtmc.exampleviettel; 
 
import android.content.Context; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.telephony.TelephonyManager; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.view.View; 
import android.widget.Button; 
import android.widget.Toast; 
 
import com.viettel.android.gsm.ViettelClient; 
import com.viettel.android.gsm.ViettelError; 
import com.viettel.android.gsm.VtResponseCode; 
import com.viettel.android.gsm.charging.ChargingGateWayApi; 
import com.viettel.android.gsm.charging.PaymentInfo; 
import com.viettel.android.gsm.listener.ViettelOnResponse; 
import com.viettel.android.gsm.mdm.MdmInfoApi; 
import com.viettel.android.gsm.mdm.SmartDeviceInfo; 
 
public class MainActivity extends AppCompatActivity implements ViettelClient.OnConnectionCallbacks { 
 
    private ViettelClient viettelClient; 
    private Button btnBuy; 
 
 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
        super.onCreate(savedInstanceState); 
        setContentView(R.layout.activity_main); 
        //Thông tin kết nối với service viettel 
        viettelClient = new ViettelClient(this, this); 
        // 2 thông số này ta lấy khi tạo ứng dụng 
        String publisherId = "112707"; 
        String appId = "10792"; 
 
        viettelClient.setViettelId(publisherId, appId); 
        viettelClient.connect(); 
 
        //thiết đặt button Mua 
        btnBuy = (Button) findViewById(R.id.btnBuy); 
        btnBuy.setOnClickListener(new View.OnClickListener() { 
            @Override 
            public void onClick(View v) { 
                String phoneNumber = "01664620655";// 
                String purchaseNameId = "aothun_200k"; 
                ChargingGateWayApi.processCharging(viettelClient, phoneNumber,purchaseNameId, new ViettelOnResponse<PaymentInfo>() { 
                            @Override 
                            public void onResult(final PaymentInfo paymentInfo, final int vtCode) { 
                                if (vtCode == VtResponseCode.VT_RESULT_OK && paymentInfo != null) { 
                                    Toast.makeText(MainActivity.this,paymentInfo != null ? paymentInfo.toString() : "" + 
                                            String.valueOf(vtCode), Toast.LENGTH_LONG).show(); 
                                } 
                                else 
                                    Toast.makeText(MainActivity.this,paymentInfo.toString(), Toast.LENGTH_LONG).show(); 
 
                            } 
                        }); 
            } 
        }); 
    } 
 
    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
        // Inflate the menu; this adds items to the action bar if it is present. 
        getMenuInflater().inflate(R.menu.menu_main, menu); 
        return true; 
    } 
 
    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
        // Handle action bar item clicks here. The action bar will 
        // automatically handle clicks on the Home/Up button, so long 
        // as you specify a parent activity in AndroidManifest.xml. 
        int id = item.getItemId(); 
 
        //noinspection SimplifiableIfStatement 
        if (id == R.id.action_settings) { 
            return true; 
        } 
 
        return super.onOptionsItemSelected(item); 
    } 
 
    @Override 
    public void onConnected() { 
        Toast.makeText(this, "connected", Toast.LENGTH_SHORT).show(); 
    } 
 
    @Override 
    public void onConnectFail(ViettelError viettelError) { 
        Toast.makeText(this, viettelError.getMessage(), Toast.LENGTH_SHORT).show(); 
 
    } 
 
    @Override 
    protected void onDestroy() { 
        super.onDestroy(); 
        if (viettelClient != null) { 
            viettelClient.onDestroy(); 
        } 
    } 
} 
Source code
SHARE

GivesTech

  • Image
  • Image
  • Image
  • Image
  • Image
    Blogger Comment
    Facebook Comment

11 nhận xét:

  1. Hay...dùng cái này được đấy, thanh toán bằng tài khoản của mobile ah Ad

    Trả lờiXóa
    Trả lời
    1. cái này sẽ thanh toán thông qua tiền sim Viettel bạn

      Xóa
  2. hướng dẫn chi tiết đấy. thanks man!

    Trả lờiXóa
  3. Có ai thử tích hợp chưa. Có dễ tích hợp không. Chia sẻ cho anh em phát :D

    Trả lờiXóa
    Trả lời
    1. rất đơn giản. có chỗ nào thắc mắc cứ comment tại đây. Mình sẽ hỗ trợ

      Xóa
  4. bạn nào test thì thay số đt giùm mình nhé.... quên mất.... nên tn gửi về hoài :D

    Trả lờiXóa
  5. bạn tích hợp thẻ cào Top-up-card đổi về tiền ứng dụng được không

    Trả lờiXóa
  6. sao vào api.vietteltelecom.vn không được nữa vậy

    Trả lờiXóa
    Trả lời
    1. mình không rõ nữa.. chắc tại bên viettel bị sao rồi

      Xóa
  7. Sao mình vào link https://api.vietteltelecom.vn không được nhỉ?

    Trả lờiXóa