package com.example;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Base64;
import java.util.Date;
import org.json.JSONObject;
public class Main {
// Lớp WebsiteCanXuLy
public class WebsiteCanXuLy {
private String lienKetWebsite; // Domain website
private String maKhachHang; // API key WooCommerce
private String matKhauKhachHang; // API secret WooCommerce
private String[] kiTuThanhToan; // Mảng kí tự thanh toán
private String linkLuuData; // Link file lưu data
// Constructor
public WebsiteCanXuLy(String lienKetWebsite, String maKhachHang, String matKhauKhachHang, String[] kiTuThanhToan, String linkLuuData) {
this.lienKetWebsite = lienKetWebsite;
this.maKhachHang = maKhachHang;
this.matKhauKhachHang = matKhauKhachHang;
this.kiTuThanhToan = kiTuThanhToan;
this.linkLuuData = linkLuuData;
}
// Hàm ghi lịch sử kích hoạt đơn hàng vào file
public void ghiLichSu(int maDonHang, int soTienDonHang, int soTienThanhToan, boolean daKichHoat) {
File file = new File(linkLuuData);
boolean fileExists = file.exists();
try (BufferedWriter writer = new BufferedWriter(new FileWriter(linkLuuData, true))) {
// Nếu file chưa tồn tại, ghi tiêu đề cột
if (!fileExists) {
writer.write(“Tinh_Trang_Kich_Hoat,Ma_Don_Hang,So_Tien_Thanh_Toan,So_Tien_Don_Hang,Ngay_Xu_Ly,Domain”);
writer.newLine(); // Thêm dòng mới
}
// Lấy ngày xử lý
String dateFormat = “yyyy-MM-dd HH:mm:ss”;
SimpleDateFormat sdf = new SimpleDateFormat(dateFormat);
String ngayXuLy = sdf.format(new Date());
// Ghi dòng dữ liệu vào file
String trangThai = daKichHoat ? “yes” : “no”; // Cập nhật trạng thái thành “yes” hoặc “no”
writer.write(trangThai + “,” + maDonHang + “,” + soTienThanhToan + “,” + soTienDonHang + “,” + ngayXuLy + “,” + lienKetWebsite);
writer.newLine(); // Thêm dòng mới
} catch (Exception e) {
System.err.println(“Lỗi khi ghi vào file: ” + e.getMessage());
}
}
// Hàm lấy giá đơn hàng
public int layGiaDonHang(int maDonHang) {
try {
String duongDanAPI = lienKetWebsite + “/wp-json/wc/v3/orders/” + maDonHang;
URL url = new URL(duongDanAPI);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod(“GET”);
String auth = maKhachHang + “:” + matKhauKhachHang;
String encodedAuth = Base64.getEncoder().encodeToString(auth.getBytes());
connection.setRequestProperty(“Authorization”, “Basic ” + encodedAuth);
connection.setRequestProperty(“Content-Type”, “application/json; utf-8”);
BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
StringBuilder response = new StringBuilder();
String inputLine;
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
JSONObject donHang = new JSONObject(response.toString());
return donHang.getInt(“total”); // Lấy giá trị tổng đơn hàng
} catch (Exception e) {
System.err.println(“Lỗi khi lấy giá đơn hàng: ” + e.getMessage());
return 0; // Trả về 0 nếu có lỗi
}
}
// Hàm kích hoạt đơn hàng với kiểm tra số tiền thanh toán
public ArrayList<String> kichHoatDonHang(int maDonHang, int soTienThanhToan) {
ArrayList<String> tienTrinh = new ArrayList<>();
try {
// Lấy giá trị đơn hàng qua hàm lấy giá
int tongTienDonHang = layGiaDonHang(maDonHang);
tienTrinh.add(“Giá trị đơn hàng: ” + tongTienDonHang + ” VNĐ”);
// Kiểm tra số tiền thanh toán
if (soTienThanhToan == tongTienDonHang || (soTienThanhToan > tongTienDonHang && soTienThanhToan <= tongTienDonHang + 10000)) {
tienTrinh.add(“Số tiền thanh toán hợp lệ, tiến hành kích hoạt đơn hàng…”);
// Kích hoạt đơn hàng (đổi trạng thái thành “completed”)
String duongDanAPI = lienKetWebsite + “/wp-json/wc/v3/orders/” + maDonHang;
HttpURLConnection connectionPut = (HttpURLConnection) new URL(duongDanAPI).openConnection();
connectionPut.setRequestMethod(“PUT”);
String auth = maKhachHang + “:” + matKhauKhachHang;
String encodedAuth = Base64.getEncoder().encodeToString(auth.getBytes());
connectionPut.setRequestProperty(“Authorization”, “Basic ” + encodedAuth);
connectionPut.setRequestProperty(“Content-Type”, “application/json; utf-8”);
connectionPut.setDoOutput(true);
String jsonInputString = “{\”status\”:\”completed\”}”;
try (OutputStream os = connectionPut.getOutputStream()) {
byte[] input = jsonInputString.getBytes(“utf-8”);
os.write(input, 0, input.length);
}
int responseCodePut = connectionPut.getResponseCode();
if (responseCodePut == HttpURLConnection.HTTP_OK) {
tienTrinh.add(“Kết nối API thành công.”);
tienTrinh.add(“Kích hoạt đơn hàng thành công với mã đơn: ” + maDonHang);
ghiLichSu(maDonHang, tongTienDonHang, soTienThanhToan, true);
} else {
tienTrinh.add(“Lỗi: Không thể kích hoạt đơn hàng. Mã lỗi HTTP: ” + responseCodePut);
ghiLichSu(maDonHang, tongTienDonHang, soTienThanhToan, false);
}
} else {
tienTrinh.add(“Lỗi: Tiền thanh toán chưa đủ. Không thực hiện thay đổi trạng thái đơn hàng.”);
// Chỉ ghi vào lịch sử mà không thay đổi trạng thái đơn hàng
ghiLichSu(maDonHang, tongTienDonHang, soTienThanhToan, false);
}
} catch (Exception e) {
tienTrinh.add(“Lỗi ngoại lệ: ” + e.getMessage());
ghiLichSu(maDonHang, layGiaDonHang(maDonHang), soTienThanhToan, false); // Ghi lại lịch sử với trạng thái “no”
}
return tienTrinh;
}
// Hàm lưu thông tin đối tượng ra file CSV
public void luuThongTin(String linkFileCSV) {
File file = new File(linkFileCSV);
boolean fileExists = file.exists();
try (BufferedWriter writer = new BufferedWriter(new FileWriter(linkFileCSV, true))) {
// Nếu file chưa tồn tại, ghi tiêu đề cột
if (!fileExists) {
writer.write(“Lien_Ket_Website,Ma_Khach_Hang,Mat_Khau_Khach_Hang,Ki_Tu_Thanh_Toan”);
writer.newLine(); // Thêm dòng mới
}
// Ghi thông tin đối tượng vào file
writer.write(lienKetWebsite + “,” + maKhachHang + “,” + matKhauKhachHang + “,” + String.join(“|”, kiTuThanhToan));
writer.newLine(); // Thêm dòng mới
} catch (Exception e) {
System.err.println(“Lỗi khi ghi vào file CSV: ” + e.getMessage());
}
}
// Phương thức kiểm tra mã và tách các ký tự sau mã
public String kiemTraMa(String tinNhan, String[] ma) {
for (String code : ma) {
// Chuyển đổi cả chuỗi và mã sang chữ thường để kiểm tra không phân biệt hoa thường
String lowerCaseTinNhan = tinNhan.toLowerCase();
String lowerCaseCode = code.toLowerCase();
// Tìm vị trí của mã trong chuỗi
int index = lowerCaseTinNhan.indexOf(lowerCaseCode);
if (index != -1) {
// Tìm ký tự đầu tiên ngay sau mã
int startIndex = index + code.length();
// Kiểm tra xem có ký tự nào sau mã không
if (startIndex < tinNhan.length()) {
// Tìm vị trí của ký tự cách (space)
int endIndex = tinNhan.indexOf(‘ ‘, startIndex);
// Nếu không tìm thấy ký tự cách, lấy đến cuối chuỗi
if (endIndex == -1) {
endIndex = tinNhan.length();
}
// Trả về chuỗi ký tự từ vị trí ngay sau mã cho đến ký tự cách hoặc cuối chuỗi
return tinNhan.substring(startIndex, endIndex).trim(); // Sử dụng trim để loại bỏ khoảng trắng
}
}
}
// Trả về 0 nếu không tìm thấy mã
return “0”;
}
}
public static void main(String[] args) {
Main main = new Main();
// Tạo một đối tượng WebsiteCanXuLy với mảng kí tự thanh toán
String[] kiTuThanhToan = {“KH”, “CT”, “TK”, “thịnh”, “NKT”}; // Ví dụ nhiều kí tự thanh toán
WebsiteCanXuLy website = main.new WebsiteCanXuLy(
“https://nguoikhongten.com”, // Đường dẫn website
“ck_9a39ab80223be0c2300f90551e1272104e1213db”, // Mã khách hàng (API key)
“cs_7cd7151af17517f2ade014e784b8ec605bf59fbf”, // Mật khẩu khách hàng (API key secret)
kiTuThanhToan, // Mảng kí tự thanh toán
“lichsu.csv” // Link file lưu lịch sử
);
website.luuThongTin(“thong_tin_website.csv”); // Thay đổi link file nếu cần
// Kích hoạt đơn hàng với mã đơn 12345 và số tiền thanh toán 500000
ArrayList<String> tienTrinh = website.kichHoatDonHang(180, 30);
for (String progress : tienTrinh) {
System.out.println(progress);
}
System.out.println( website.kiemTraMa(“nkt3823 là mà thanh toán của bạn, đây là mã cần dùng để kích hoạt”, kiTuThanhToan));
}
}