- [SQLSERVER] Loại bỏ Restricted User trên database MSSQL
- [C#] Hướng dẫn tạo mã QRcode Style trên winform
- [C#] Hướng dẫn sử dụng temp mail service api trên winform
- [C#] Hướng dẫn tạo mã thanh toán VietQR Pay không sử dụng API trên winform
- [C#] Hướng Dẫn Tạo Windows Service Đơn Giản Bằng Topshelf
- [C#] Chia sẻ source code đọc dữ liệu từ Google Sheet trên winform
- [C#] Chia sẻ source code tạo mã QR MOMO đa năng Winform
- [C#] Chia sẻ source code phần mềm lên lịch tự động chạy ứng dụng Scheduler Task Winform
- [Phần mềm] Tải và cài đặt phần mềm Sublime Text 4180 full version
- [C#] Hướng dẫn download file từ Minio Server Winform
- [C#] Hướng dẫn đăng nhập zalo login sử dụng API v4 trên winform
- [SOFTWARE] Phần mềm gởi tin nhắn Zalo Marketing Pro giá rẻ mềm nhất thị trường
- [C#] Việt hóa Text Button trên MessageBox Dialog Winform
- [DEVEXPRESS] Chia sẻ code các tạo report in nhiều hóa đơn trên XtraReport C#
- [POWER AUTOMATE] Hướng dẫn gởi tin nhắn zalo từ file Excel - No code
- [C#] Chia sẻ code lock và unlock user trong domain Window
- [DEVEXPRESS] Vẽ Biểu Đồ Stock Chứng Khoán - Công Cụ Thiết Yếu Cho Nhà Đầu Tư trên Winform
- [C#] Hướng dẫn bảo mật ứng dụng 2FA (Multi-factor Authentication) trên Winform
- [C#] Hướng dẫn convert HTML code sang PDF File trên NetCore 7 Winform
- [C#] Hướng dẫn viết ứng dụng chat với Gemini AI Google Winform
[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#.
[C#] HƯỚNG DẪN GỞI TIN NHẮN, LẤY SỐ ĐIỆN THOẠI, TÊN NHÀ MẠNG, KIỂM TRA SỐ DƯ VÀ NẠP TIỀN VÀO TÀI KHOẢN
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:
- 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 đó.
- Lấy số điện thoại của SIM đang sử dụng
- Lấy tên mạng đang sử dụng (Mobifone, Viettel, Vinaphone...)
- Kiểm tra số dư tài khoản
- 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:
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 :)