Cập Nhật Số Điện Thoại
API cập nhật số điện thoại cho người dùng đã đăng nhập.
Sử dụng phone token từ Zalo để lấy số điện thoại và cập nhật vào hệ thống.
POST https://api.socdo.vn/mini-app/action/process/update-phone.php
Request Headers
Content-Type: application/json
Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9...
Request Body
{
"phone_token": "phone_token_from_zalo"
}
Tham số
| Tham số |
Loại |
Bắt buộc |
Mô tả |
Authorization |
header |
✓ |
JWT token từ API login (Bearer token) |
phone_token |
string |
✓ |
Token từ Zalo để lấy số điện thoại |
Response thành công (200)
{
"success": true,
"message": "Phone number updated successfully",
"data": {
"user_id": 123,
"mobile": "0123456789",
"seller_id": 23933
}
}
Response lỗi (401 - Token không hợp lệ)
{
"success": false,
"message": "Invalid user token: Invalid token: must be user token from login"
}
Response lỗi (400 - Thiếu phone token)
{
"success": false,
"message": "Phone token is required"
}
Response lỗi (404 - User không tồn tại)
{
"success": false,
"message": "User not found in this shop or no changes made"
}
Ví dụ JavaScript
// Cập nhật số điện thoại
async function updatePhone(phoneToken) {
try {
// Lấy token từ localStorage (đã lưu khi login)
const authToken = localStorage.getItem('auth_token');
if (!authToken) {
throw new Error('Chưa đăng nhập');
}
const response = await fetch('https://api.socdo.vn/mini-app/action/process/update-phone.php', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': `Bearer ${authToken}`
},
body: JSON.stringify({
phone_token: phoneToken
})
});
const result = await response.json();
if (result.success) {
console.log('Cập nhật số điện thoại thành công:', result.data);
return result;
} else {
console.error('Lỗi cập nhật:', result.message);
return result;
}
} catch (error) {
console.error('Lỗi kết nối:', error);
return { success: false, message: 'Lỗi kết nối mạng' };
}
}
// Sử dụng với Zalo Mini App
function requestPhonePermission() {
// Yêu cầu quyền truy cập số điện thoại từ Zalo
zalo.miniApp.getPhoneNumber({
success: function(result) {
// result.phoneNumber chứa phone token từ Zalo
updatePhone(result.phoneNumber).then(response => {
if (response.success) {
alert('Cập nhật số điện thoại thành công!');
// Cập nhật UI hiển thị số điện thoại mới
document.getElementById('phone-display').textContent = response.data.mobile;
} else {
alert('Lỗi: ' + response.message);
}
});
},
fail: function(error) {
console.error('Lỗi lấy số điện thoại:', error);
alert('Không thể lấy số điện thoại từ Zalo');
}
});
}
// Gọi khi người dùng click nút cập nhật số điện thoại
document.getElementById('update-phone-btn').addEventListener('click', requestPhonePermission);
Lưu ý quan trọng
- User Token Required: API yêu cầu user token từ login (không phải seller token)
- Phone Token: Sử dụng phone token từ Zalo để lấy số điện thoại
- Shop Security: Chỉ cập nhật user trong đúng shop (kiểm tra seller_id)
- Token Validation: Token phải có
doitac = 'zalo' để xác thực
- Database Update: Cập nhật trường
mobile trong bảng user_info
- Error Handling: Xử lý các trường hợp lỗi token, thiếu dữ liệu, user không tồn tại
Luồng xử lý cập nhật số điện thoại
- Xác thực Authorization header (Bearer token)
- Decode JWT token và kiểm tra
doitac = 'zalo'
- Lấy
user_id và seller_id từ token
- Kiểm tra phone_token trong request body
- Cập nhật số điện thoại với điều kiện
user_id và shop
- Trả về kết quả thành công hoặc lỗi
Bảo mật
- JWT Verification: Sử dụng Firebase JWT để xác thực token
- Shop Isolation: Mỗi user chỉ có thể cập nhật trong shop của mình
- Token Type Check: Chỉ chấp nhận user token (doitac = 'zalo')
- Database Security: Sử dụng prepared statement để tránh SQL injection
- CORS Headers: Cấu hình CORS để bảo mật cross-origin requests