3.2.4.2 Biểu đồ Use case
Hình 3-9: Lược đồ use case của phần thực thi tựđộng
Trong trường hợp lý tưởng, người quản trị gần như không phải can thiệp gì mà hệ thống sẽ tự chạy tự động. Tuy nhiên trong trường hợp phát sinh lỗi, có thể do website cập nhật giao diện thì người quản trị có thể tạm dừng tiến trình chạy tự động, chỉnh sửa hành động mẫu nếu cần sau đó cho chương trình tiếp tục chạy.
3.2.4.3 Thiết kế cơ sở dữ liệu
a) Phân tích
Dựa vào yêu cầu chức năng của hệ thống, cơ sở dữ liệu cần lưu trữ thông tin của lượt đăng mới các hành động mới được nhân bản từ hành động mẫu kèm thông tin sản phẩm mới. Các thực thể này có các thuộc tính như sau:
Thực thể lượt đăng: chứa thơng tin về người đăng (end user), website, phiên bản, trạng thái lượt đăng.
Thực thể hành động mới: chứa thông tin về lượt đăng, website, phiên bản, hành động mẫu, các bước hành động mới.
Quan hệ giữa các thực thể
Hình 3-10: Lược đồ thực thể quan hệ của phần tạo thực thi hành động
Hình vẽ trên biểu thị mối quan hệ giữa các thực thể. Mỗi lượt đăng có thể có nhiều hành động mới. Mỗi hành động mới có một bộ nhiều bước hành động mới.
b) Thiết kế
Từ các phân tích về các thực thể và các liên kết thực thể nêu trên, có thể mơ tả qua các lược đồ quan hệ sau:
Lược đồ quan hệ SyncTime
SyncTime (sync_id, sync_name, website_id, version_id,username, status):
trong đó sync _id là khóa chính, sync_name là tên lượt đăng để gợi nhớ cho người quản trị, website_id là khóa ngồi xác định website trực thuộc, version_id là khóa ngồi xác định phiên bản hiện tại, username là tên username tạo website, status là trạng thái của phiên bản (actived, deactived).
Lược đồ quan hệ NewAction
NewAction (act_id, act _name, username, a_index, version_id, note, steps,
status): trong đó act_id là khóa chính, act_name là tên hành động, username là tên người dùng yêu cầu đồng bộ, a_idx là thứ tự hành động, version_id là khóa ngồi xác định phiên bản trực thuộc, steps là thông tin chi tiết các bước hành động mới, status là trạng thái của hành động (actived, deactived).
3.2.4.4 Thiết kế các API
Bảng dưới đây mô tả các chức năng của các API đã được xây dựng cho mô đun thực thi hành động tự động:
URI Phương
thức Tham số Trả về Ghi chú
api/v1/sync_
requests GET - requests_list
Trả về danh sách các yêu cầu đồng bộ mới
api/v1/new_a
ctions GET request_id
new_actions_ list Trả về danh sách hành động mới api/v1/issue_ report POST request_id, action_id, step_index
Thông báo việc thực thi hành động có lỗi tới server để sau này có thể kiểm tra lại
Bảng 3-5: Danh sách các API module thực thi hành động.
3.2.5.1. Kiến trúc hệ thống
Hệ thống được xây dựng với kiến trúc 3 tầng như sau
Tầng client:
Là nơi hiển thị các giao diện với người dùng,
Tầng ứng dụng
Đây là nơi server sẽ thực hiện các bước xửlý thông tin như xử lý dữ liệu thơ, cài đặt các hàm mã hóa, giải mã, băm mật khẩu để đảm bảo tính bảo mật của dữ liệu. Tầng ứng dụng được cài đặt bằng ngôn ngữ PHP sử dụng framwork codeigniter, triển khai trên máy chủ Apache.
Tầng dữ liệu
Đây là nơi lưu trữ và thao tác truy vấn, quản lý cơ sở dữ liệu, tầng này được cài đặt dựa trên DB_Buider có sẵn của Codeigniter giúp cho việc triển khai các câu truy vấn được rành mạch, linh động.
3.2.5.2 Biểu đồ Use case
Hình 3-12: Biểu đồ Usecase của người dùng cuối
Để người dùng đăng đồng thời sản phẩm lên các sàn thì cần thực hiện theo quy trình sau:
Hình 3-13: Quy trình đăng sản phẩm đồng bộ
Xác thực và quản lý profile
Các kịch bản tương tựnhư thực hiện với các trang yêu cầu tài khoản, cũng có các usecase cơ bản như đăng ký, đăng nhập, thay đổi thông tin và đăng xuất.
Cài đặt tài khoản
Đây là việc đầu tiên người dùng phải làm khi muốn đồng bộ sản phẩm, tài khoản này là tài khoản bình thường người dùng vẫn hay đăng nhập vào các sàn TMĐT như Tiki, Sendo, shopee… Với nhiều người dùng thì họ ln để tài khoản ở các sàn là giống nhau cả về tên đăng nhập và mật khẩu. Tuy nhiên vẫn có một số người để các tên đăng nhập khác nhau vì tên tài khoản khi đăng ký đã có người khác sử dụng hoặc sử dụng mật khẩu khác nhau vì muốn nâng cao bảo mật (tránh trường hợp lộ tài khoản một sàn thì mất ln tài khoản ở các sàn cịn lại). Vì vậy hệ thống để mặc định là mỗi trang có một form để quản lý tài khoản. Ngồi ra thơng tin tài khoản của người dùng được mã hóa trước khi gửi lên server và được mã hóa 2 chiều thêm một lần nữa trước khi lưu vào cơ sở dữ liệu.
Có một khó khăn rất lớn khi đồng bộ các sản phẩm là việc khác nhau trong vấn đề xử lý form, đặc biệt mỗi sàn lại phân chia danh mục theo cấu trúc cha con khác nhau. Vì vậy để sản phẩm được đăng thành cơng thì người dùng sẽ được cung cấp một giao diện đễ ghép cặp các danh mục của các sàn. Và việc này cũng phải được cấu hình trước khi đồng bộ sản phẩm.
Nhập sản phẩm mẫu
Có 2 cách nhập chính cho người dùng:
- Nếu sản phẩm chưa đăng lên sàn nào thì người dùng sẽ phải nhập các trường như khi đăng lên từng sàn. Do số lượng các trường của các sàn là khác nhau nên một số sàn có những trường mà các sàn khác lại khơng có. Hệ thống sẽ đưa ra phần nhập liệu của tất các trường và sẽ yêu cầu bắt buộc nhập với những trường cần thiết mà nếu thiếu trường đó sản phẩm khơng thể đăng thành cơng được.
- Nếu sản phẩm đã có trên sàn nào đó rồi thì hệ thống cung cấp trình tiện ích mở rộng (cho trình duyệt chrome) để người dùng chỉ cần ấn 1 nút là sản phẩm sẽ được gửi thông tin về cho hệ thống. Chức năng này rất hữu ích khi người dùng đã bán hàng lâu năm trên một sàn nào đó mà có sốlượng sản phẩm đang bán lớn. Hỗ trợ giảm thao tác nhập liệu cho người dùng.
Chọn sàn cần đồng bộ
Mỗi sàn lại có chính sách với người bán khác nhau, chính sách chiết khấu khác nhau tại mỗi thời điểm nên có những thời điểm người bán hàng chỉ muốn tập trung bán hàng trên một vài sàn nào đó mà khơng phải là tất cả. Việc chọn này sẽ giúp tối ưu lợi nhuận cho người bán hàng.
Nhấn nút đồng bộ
Tại mỗi sản phẩm sẽ có một nút đồng bộ riêng hoặc người dùng có thể chọn một danh sách các sản phẩm rồi đồng bộ hàng loạt
Xem kết quả cập nhật
Sau khi đồng bộ thành cơng hệ thống có cập nhật trạng thái của sản phẩm tại mỗi sàn, người dùng có thể ấn vào link mới để xem thông tin hiển thị trên sàn
3.2.5.3 Thiết kế cơ sở dữ liệu
a) Phân tích
Dựa vào các chức năng của bộ tạo/sửa hành động, cơ sở dữ liệu cần lưu trữ các thông tin về người dùng cuối, tài khoản của người dùng ở các sàn, website, danh mục sản phẩm, thông tin sản phẩm, cài đặt đặc biệt tương ứng là các thực thể của hệ thống. Các thực thể có các thuộc tính như sau:
Người dùng: lưu trữ thơng tin gồm username, mật khẩu, tình trạng hoạt động.
Website: lưu trữ tên của website, người tạo, tình trạng hoạt động.
Tài khoản ở các sàn: lưu trữ tên người tạo, website, tên người dùng, mật khẩu đã mã hóa, bản trực thuộc, tình trạng hoạt động.
Sản phẩm: lưu trữ tên sản phẩm, mã sản phẩm, đường dẫn ảnh, giá gốc, giá giảm, ngày giảm giá, danh mục, loại sản phẩm, đơn vị, mầu sắc, họa tiết, cỡ, khối lượng, lượng tồn kho, mã sku, mô tả sản phẩm, chi tiết sản phẩm, các sàn đã đăng, thời gian đăng, tình trạng hoạt động.
Cài đặt: lưu trữ thông tin người dùng, thuộc tính cài đặt, giá trị cài đặt Quan hệ giữa các thực thể
Hình vẽ trên biểu thị mối quan hệ giữa các thực thể. Mỗi người dùng có thể có nhiều nhiều sản phẩm. Mỗi người dùng có một tài khoản trên mỗi sàn. Có thể đăng nhiều sản phẩm trên nhiều sàn. Mỗi sản phẩm chỉ có duy nhất một danh mục đích cuối.
b) Thiết kế
Từ các phân tích về các thực thể và các liên kết thực thể nêu trên, có thể mô tả qua các lược đồ quan hệ sau:
Lược đồ quan hệUser: đã mô tả ở phần 3.2.3.4
Lược đồ quan hệ Website: đã mô tả ở phần 3.2.3.4
Lược đồ quan hệ Account
Account (acc_id, user_name, upassword, website_id, status): trong đó u_id
là khóa chính, user_name là tên đăng nhập, upassword là mật khẩu đã được mã hóa, website_id là khóa ngồi xác định website muốn đồng bộ, status là trạng thái của website (actived, deactived)
Lược đồ quan hệ Category
Category (cate_id, user_name, website1_id, website1_cate, website2_id,
website2_cate, status): trong đó cate_id là khóa chính, user_name là người dùng, website1_id và website2_id là khóa định danh của các sàn, website1_cate và website2_cate là chi tiết các, status là trạng thái của website (actived, deactived)
Lược đồ quan hệ Product
Product (p_id, p_name, p_code, base_price, discount_price, category,
p_type, don_vi, color, key_words, hoa_tiet, co_mu, ton_kho, sku, description, attributes, upload_time, status): trong đó p_id là khóa chính, p_name là tên sản phẩm, p_code là mã sản phẩm, base_price là giá gốc, discount_price là giá khuyến mại, category là danh mục sản phẩm, p_type là loại sản phẩm, don_vi là đơn vị tính, color là màu sắc sản phẩm, key_words là từkhóa để seo sản phẩm, hoa_tiet là họa tiết nếu có, co_mu là có mũ, ton_kho là lượng tồn kho, sku là mã SKU, description mô tả sản phẩm, attributes là thuộc tính sản phẩm, upload_time là thời gian người dùng tạo sản phẩm, status là trạng thái của website (actived, deactived)
Lược đồ quan hệ Setting
Setting (set_id, user_name, setting_key, setting_value): trong đó set_id là
khóa chính, user_name là người dùng, setting_key là key cài đặt, setting_value là giá trị cài đặt.
3.2.5.4 Thiết kế các API
Bảng dưới đây mô tả các chức năng của các API đã được xây dựng cho mô đun trang quản lý
URI Phương
thức Tham số Trả về Ghi chú
api/v1/oauth/login POST username password access_token token_type refresh_token expires_in user_name Đăng nhập
api/v1/oauth/logout POST access_token status Đăng xuất
api/v1/websites GET access_token websites_list
Trả về danh sách website của người dùng
api/v1/categories GET access_token, categories_list
Trả về danh sách các cấu hình danh mục của người dùng api/v1/category_edit PUT access_token, website1_id, website1_name, website2_id, website2_name status Sửa thơng tin cấu hình danh mục
api/v1/accounts GET access_token accounts_list
Trả về danh sách tài khoản người dùng ở các website api/v1/account_edit PUT access_token, website_id, user_name, password status Sửa thông tin tài khoản của user tại sàn
api/v1/settings GET access_token settings_list
Trả về danh sách các cấu hình của người dùng api/v1/setting_edit PUT access_token, setting_key, setting_value status Sửa cấu hình cài đặt của người dùng
api/v1/products GET access_token, products_list Trả về danh sách sản phẩm của người dùng api/v1/product_add POST access_token, p_name, p_code, base_price, discount_price, category, p_type, don_vi, color, key_words, hoa_tiet, co_mu, ton_kho, sku, description, attributes product_id Tạo sản phẩm mới api/v1/product_edit PUT access_token, product_id, p_name, p_code, base_price, discount_price, category, p_type, don_vi, color, key_words, hoa_tiet, co_mu, ton_kho, sku, description, attributes
status Sửa thông tin sản phẩm
api/v1/product_delete POST access_token,
product_id status Xóa sản phẩm api/v1/product_sync POST access_token, product_id, website_id status Đồng bộ sản phẩm
Bảng 3-6: Danh sách các API module web quản trị
3.2.5.5 Một vài thuật tốn
Mã hóa một chiều mật khẩu với salt
Khi lưu trữ password vào CSDL thường sẽ sử dụng các hàm băm khác nhau được hỗ trợ bởi hệ CSDL hoặc ngơn ngữ lập trình (như MD5) để tạo dữ liệu mã hóa, dữ liệu mã hóa đó được lưu vào CSDL. Ví dụ:
$crypt = md5($raw_password); //e99a18c428cb38d5f260853678922e03
Bởi vì hàm băm tạo ra các giá trị khơng thể dịch ngược chỉ duy nhất một cách là thử. Nếu sử dụng các mật khẩu yếu, nó có thể bị dò ra dựa trên giá trị băm của các mật khẩu phổ biến biết trước. Như trường hợp trên khi thấy e99a18c428cb38d5f260853678922e03 thì đốn được password là abc123. Để khắc phục điều này có thể sử dụng đến salt.
Sử dụng Salt tăng cường an toàn cho mật khẩu.
Để phức tạp hóa mật khẩu lưu trữ, thì các mật khẩu gốc trước khi mã hóa được nối thêm các chuỗi, các chuỗi thêm này gọi là salt.
$crypt = md5($raw_password.$salt);
Giờ mật khẩu lưu trữ ở trên phức tạp hơn rất nhiều. Biết được $crypt đoán ra $raw_password là rất khó, kể cả khi là password yếu. Khó mà xây dựng được một từ điển chứa các mã hóa tương ứng với password.
Mã hóa hai chiều mật khẩu với mã hóa Cesar
Với mật khẩu của người dùng tại các trang TMĐT, nếu hệ thống chỉlưu ở dạng chuỗi nguyên bản sẽ rất rủi ro về bảo mật. Khó ai có thểđưa mật khẩu để hệthơng lưu trữ mà khơng có hàm mã hóa nào cả. Tác giả xây dựng hàm mã hóa dựa trên thuật tốn mã hóa Cesar như sau:
function encrypt($string) {
$loop = rand(1, 10); // lấy ngẫu nhiên 1 số từ 1 đến 10 $res = "";
for ($i = 0; $i < $loop; $i++) { //lặp n lần
$num = rand(1, 26); // tìm ngẫu nhiên số từ 1 đến 26 $numa = $num+96;
$first = chr($numa); //tìm kí tựtương đương trong ASCII
$res .= $first.$this->Encipher($string, $num); // mã hóa cesar chuỗi đầu với số ngẫu nhiên, nối kí tựvào đầu
}
$loop_char = chr($loop+96);
return $loop_char.$res; // Nối kí tựtương đương loop vào đầu }
Về độ an tồn thì thuật tốn khơng an tồn tuyệt đối nhưng cũng tránh hiển thị mật khẩu tại các giao diện.
3.3. Xây dựng các giao diện
Giao diện trang thống kê
Giao diện này để giúp cho người sử dụng nắm bắt được các thông tin - Số lượng sản phẩm đã đăng lên các sàn
- Thống kê được lượt đăng sản phẩm theo tháng, quý, năm - Thống kê sản phẩm theo danh mục
Hình 3-15: Giao diện trang thống kê
Giao diện trang danh sách sản phẩm
Đây là giao diện quản trị rất phổ biến bao gồm: - Hiển thị danh sách các sản phẩm
- Có 1 đường dẫn (Nút chọn) để tạo sản phẩm mới
- Mỗi sản phẩm lại có thêm đường dẫn để sửa hoặc xóa sản phẩm
- Mỗi sản phẩm có 1 danh sách các sàn mà người dùng đang bán hàng, khi bấm vào tên mỗi sàn thì sẽ bật hoặc tắt chức năng đồng bộ sản phẩm lên sàn đó
Hình 3-16: Giao diện trang danh sách sản phẩm
Giao diện thêm sản phẩm
Tại đây người dùng có thể nhập các thơng tin về sản phẩm
Giao diện quản lý tài khoản
Tại đây người dùng sẽ nhập tên đăng nhập và tài khoản cho các sàn thương mại điện tử, trong trường hợp người dùng không muốn bán hàng trên 1 sàn nào đó thì có thể chọn tắt tài khoản trên sàn đó đi.
Hình 3-18: Giao diện trang quản lý tài khoản
Mật khẩu của người dùng được mã hóa và lưu trữ trên server. Hàm mã hóa là hàm được cài đặt theo thuật tốn mã hóa Cesar.
Giao diện quản lý danh mục
Danh mục có các chức năng cơ bản như thêm, sửa xóa danh mục. Một danh mục bao gồm một định danh chính (khơng trùng lặp) và các giá trị danh mục tại mỗi sàn. Ví dụ một danh mục chung cho 3 sàn Tiki, Sendo, Shopee là Áo nam thì định danh trên các sàn cụ thể như sau:
- Tiki: Thời Trang > Thời trang nam > Trang phục nam > Áo khoác nam - Shopee: Thời Trang Nam > Áo khoác & Áo vest > Áo khoác phao
- Sendo: Thời trang nam > Áo khoác nam > Áo khoác phao nam
Nếu 1 sản phẩm chưa có giá trị danh mục trên sàn nào thì sản phẩm đó cũng