23/12/2018, 23:15

[C#] Hướng dẫn lập trình gởi tin nhắn, lấy số điện thoại, kiểm tra tài khoản và nạp tiền vào điện thoại sử dụng GMS Modem hoặc USB 3G

Xin chào các bạn, bài viết hôm nay mình tiếp tục hướng dẫn các bạn lập trình AT command trên thiết bị GMS Modem hay USB 3G trong lập trình C#. Trong các bài viết trước, mình đã có bài hướng dẫn gởi tin nhắn và nhận tin nhắn từ thiết bị Modem GMS 3G. Bài ...

Xin chào các bạn, bài viết hôm nay mình tiếp tục hướng dẫn các bạn lập trình AT command trên thiết bị GMS Modem hay USB 3G trong lập trình C#.

Trong các bài viết trước, mình đã có bài hướng dẫn gởi tin nhắn và nhận tin nhắn từ thiết bị Modem GMS 3G.

Bài viết này, mình sẽ tích hợp cho các bạn một số chức năng như sau:

  1. Tự động tìm cổng COM để kết nối (Mình sẽ foreach qua từng port com của hệ thống và gởi lệnh AT, nếu lệnh AT trả về OK, thì mình kết nối với cổng COM đó.
  2. Lấy số điện thoại của SIM đang sử dụng
  3. Lấy tên mạng đang sử dụng (Mobifone, Viettel, Vinaphone...)
  4. Kiểm tra số dư tài khoản
  5. Nạp tiền vào tài khoản.

Để lập trình được những chức năng này, yêu cầu các bạn phải biết lập trình cơ bản về các hàm AT command.

Các bạn có thể đọc bài viết của mình để tích hợp cho hệ thống gởi tin nhắn tự động, khi hệ thống có thay đổi,... tùy mục đích của các bạn.

Dưới đây là giao diện ứng dụng:

send sms c#, nạp tiền, check số dư tài khoản điện thoại

Trong bài viết này, mình đã nạp tiền vào tài khoản điện thoại quá 5 lần (theo quy định của Mobifone điện thoại mình đã bị khóa chức năng nạp tiền, thật là quá nhọ phải không các bạn).

Nên các bạn lưu ý, khi chạy ứng dụng này nhớ số lần nạp tiền vào tài khoản, không lại bị nhà mạng khóa giống như mình.

Dưới đây là full source code C# của ứng dụng:

Các bạn có thể tham khảo code bên dưới và có thể download demo của mình ở cuối bài để thực hiện nhé.

Trong bài viết này, mình đã viết sẵn có thư viện rồi, các bạn chỉ cần mang ra sử dụng thôi.

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Drawing;
using System.IO.Ports;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace SMSManager
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        //congfig sms 
        SerialPort port = new SerialPort();
        clsSMS objclsSMS = new clsSMS();
        ShortMessageCollection objShortMessageCollection = new ShortMessageCollection();
        public bool isModemConnect = false;

        private void btn_connect_Click(object sender, EventArgs e)
        {
            if (isModemConnect)
            {
                try
                {
                    objclsSMS.ClosePort(this.port);
                    lbl_status.Text = "Đã ngắt kết nối đến Modem GMS port " + txt_port.Text;
                    btn_connect.Text = "Kết nối";
                  
                   
                    lbl_status.ForeColor = Color.Red;
                  
                }
                catch (Exception ex)
                {
                    Debug.Write(ex.Message);
                }
                isModemConnect = false;
            }
            else
            {
                var str_Port_Connect = FindPortAndConnect();
                if (string.IsNullOrEmpty(str_Port_Connect))
                {
                    txt_port.Text = "";
                    btn_connect.Text = "Kết nối";
               
                   
                    lbl_status.Text = "Trạng thái: Không tìm thấy thiết bị Modem GMS!";
                    lbl_status.ForeColor = Color.Red;
                  
                    isModemConnect = false;

                }
                else
                {
                    txt_port.Text = str_Port_Connect;
                    btn_connect.Text = "Ngắt kết nối";
                    
                    lbl_status.ForeColor = Color.Blue;
                    lbl_status.Text = "Trạng thái: Đang kết nối Modem GMS cổng " + str_Port_Connect;
                  
                    isModemConnect = true;
                }
            }
        }

        public string FindPortAndConnect()
        {
            string result = null;
            string[] ports = SerialPort.GetPortNames();
            foreach (string port in ports)
            {
                this.port = objclsSMS.OpenPort(port, Convert.ToInt32(115200), Convert.ToInt32(8), Convert.ToInt32(100), Convert.ToInt32(100));
                bool isConnect = objclsSMS.CheckPortSendSMS(this.port);
                if (isConnect)
                {
                    return port;

                }

            }
            return result;
        }

        private void button1_Click(object sender, EventArgs e)
        {
            getInfoNetWorkAndNumber();
        }

        public void getInfoNetWorkAndNumber()
        {
            Task.Factory.StartNew(new Action(() =>
            {

                string value = objclsSMS.GetInfoNumberAndNetWork(this.port);
                if (string.IsNullOrEmpty(value)) { return; }

                string info = "";
                var result = from Match match in Regex.Matches(value, ""([^"]*)"")
                             select match.ToString().Replace(""", "");
                int i = 0;
                if (result != null)
                {
                    foreach (var item in result)
                    {
                        if (i == 0)
                        {
                            info += "My Number: 0" + item.Substring(2, item.Length - 2);
                        }
                        else
                        {
                            info += " | " + item.Trim();
                        }

                        i++;
                    }
                    lbl_myNumber.BeginInvoke(new Action(() =>
                    {
                        lbl_myNumber.Text = info;
                    }));
                }


            }));
        }

        private void btn_send_Click(object sender, EventArgs e)
        {
            Task.Factory.StartNew(new Action(() =>
            {
                try
                {

                    if (objclsSMS.sendMsg(this.port, txt_phone.Text, txt_message.Text, 5000))
                    {

                        lbl_status.BeginInvoke(new Action(() =>
                        {
                            lbl_status.Text = "Tin nhắn đã được gởi thành công!";
                            lbl_status.ForeColor = Color.Blue;
                         
                        }));


                    }
                    else
                    {
                        lbl_status.BeginInvoke(new Action(() =>
                        {
                            lbl_status.Text = "Gởi tin nhắn thất bại!";
                            lbl_status.ForeColor = Color.Red;
                           
                        }));

                    }

                }
                catch (Exception ex)
                {
                    lbl_status.BeginInvoke(new Action(() =>
                    {
                        lbl_status.Text = ex.Message;
                        lbl_status.ForeColor = Color.Red;
                        
                    }));


                    Debug.Write(ex.Message);
                }
            }));
        }

        private void btn_checkmoney_Click(object sender, EventArgs e)
        {
            Task.Factory.StartNew(new Action(() =>
            {
                string receiveData = objclsSMS.CheckMoney(this.port);
                var result = from Match match in Regex.Matches(receiveData, ""([^"]*)"")
                             select match.ToString().Replace(""", "");
                this.BeginInvoke(new Action(new Action(() =>
                {
                    btn_checkmoney.Enabled = true;
                    if (result != null)
                    {
                        foreach (var item in result)
                        {
                            lbl_kiemtrataikhoan.BeginInvoke(new Action(() =>
                            {
                                lbl_kiemtrataikhoan.Text = item;
                            }));
                            
                        }

                    }

                })));

            }));
        }

        private void btn_naptien_Click(object sender, EventArgs e)
        {
            Task.Factory.StartNew(new Action(() =>
            {
                string receiveData = objclsSMS.NapTienVaoSim(this.port, txt_mathecao.Text.Trim());
                var result = from Match match in Regex.Matches(receiveData, ""([^"]*)"")
                             select match.ToString().Replace(""", "");
                this.BeginInvoke(new Action(new Action(() =>
                {
                   
                  
                    if (result != null)
                    {
                        foreach (var item in result)
                        {
                            MessageBox.Show(item, "Thông báo!", MessageBoxButtons.OK, MessageBoxIcon.Information);
                        }

                    }
                })));

            }));
        }
    }
}

Video Demo ứng dụng AT Command C#:

HAVE FUN :)

DOWNLOAD SOURCE

Tags: send sms c#check money phone c#
0