Hướng dẫn Login SHOPEE bằng CURL PHP

Hôm nay mình lục lại trong máy thấy đoạn code ngắn đã viết cách đây hơn 1 năm login Shopee bằng CURL PHP mục đích là mình làm giúp ông anh mình Tool check nick Shopee hàng loạt xem còn sống hay chết và lấy mã Voucher miễn phí Ship nhằm mục đích đăng các đơn lên Shopee để được miễn phí vận chuyển. Giờ chắc có lẽ trò này đã không còn sử dụng được do Shopee quét những nick mới rất kĩ và phí vận chuyển tăng lên cao hơn xưa rất nhiều.

Sau một hồi nghiên cứu trên mạng và check các request body và các request headers mà Shopee gửi lên server lúc đăng nhập thì ta nhận thấy Shopee trước khi đăng nhập Shopee sẽ gửi 1 request tới API đích : https://shopee.vn/api/v0/buyer/login/login_post/ với giá trị quan trọng trong Headers:

x-csrftoken: HsoRbPm22afqKoke4bzgwMLLc331AtGJ

Request Payload là 1 chuỗi JSON được gửi lên server với định dạng :

{“phone”:”84327273133″,”password”:”362b791e3770ba773beab0adb0382bdf18fd60c7392892838546e197b73432fc”,”support_whats_app”:true}

Còn 1 điều quan trọng nữa là, trong cookie sẽ phải chứa csrftoken, Click vào 2 ảnh phía dưới để xem các thông số: ????

Như vậy có 2 giá trị ta cần tìm hiểu xem cách nó được tạo ra như thế nào, sau 1 time mày mò thì mình biết được cách thức tạo ra 2 tham số này như sau:

password = _GetSHA256(_GetMD5($password))

x-csrftoken = 1 chuỗi random 32 kí tự nằm trong tập a – Z và 1- 9

Sau khi đã thu thập được đầy đủ các điều kiện ta bắt đầu tạo CURL PHP để login.

Bước 1: gửi 1 request GET tới địa chỉ:

https://shopee.vn/api/v0/buyer/login/

Mục đích là để lấy Cookie và sau đó sẽ đưa CSRF token vào Cookie này, sau khi đăng nhập thành công thì bạn chỉ cần sử dụng Cookie này để có thể truy cập vào tài nguyên của Shopee

Bước 2: Gửi Request login tới 1 trong 2 địa chỉ dưới đây, địa chỉ bên trên là ở version cũ, version mới là địa chỉ bên dưới khi đăng nhập thành công thì sẽ trả về JSON thông tin login bao gồm token, nếu đăng nhập thành công thì bạn chỉ cần dùng cookie đó để xác thực cho những lần tiếp theo:

https://shopee.vn/api/v0/buyer/login/login_post

https://shopee.vn/api/v2/authentication/login

Bước 3: Gửi 1 request lấy Vouchers trong tài khoản hiện tại:

https://shopee.vn/api/v2/voucher_wallet/get_vouchers?type=0&offset=0&limit=12

Nếu xác thực thành công thì Shopee sẽ trả về chuỗi JSON bao gồm các voucher có trong tài khoản này. Code mẫu ở phía bên dưới cho bạn nào muốn nghịch ngợm. Yêu cầu tắt OTP đăng nhập của nick shopee nhé.


<?php //Tạo chuỗi kí tự random function rand_string( $length ) { $chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; return substr(str_shuffle($chars),0,$length); } // Allow CORS để API có thể hoạt động được từ một miền khác if (isset($_SERVER['HTTP_ORIGIN'])) { header("Access-Control-Allow-Origin: {$_SERVER['HTTP_ORIGIN']}"); header('Access-Control-Allow-Credentials: true'); header('Access-Control-Max-Age: 86400'); // cache for 1 day } if ($_SERVER['REQUEST_METHOD'] == 'OPTIONS') { if (isset($_SERVER['HTTP_ACCESS_CONTROL_REQUEST_METHOD'])) header("Access-Control-Allow-Methods: GET, POST, OPTIONS"); if (isset($_SERVER['HTTP_ACCESS_CONTROL_REQUEST_HEADERS'])) header("Access-Control-Allow-Headers: {$_SERVER['HTTP_ACCESS_CONTROL_REQUEST_HEADERS']}"); exit(0); } if(isset($_GET['SHOP_PHONE']) && isset($_GET['SHOP_PASS'])) { $phone = $_GET['SHOP_PHONE']; $phone = ('84'). $phone; $pass = $_GET['SHOP_PASS']; //Request GET truy cập để lưu Cookie $c = curl_init(); curl_setopt($c, CURLOPT_URL, "https://shopee.vn/api/v0/buyer/login/"); curl_setopt($c, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:56.0) Gecko/20100101 Firefox/56.0"); curl_setopt($c, CURLOPT_HEADER, 1); curl_setopt($c, CURLOPT_RETURNTRANSFER, 1); curl_setopt($c, CURLOPT_FOLLOWLOCATION, 1); curl_setopt($c, CURLOPT_SSL_VERIFYPEER, 0); $content = curl_exec($c); $cookies = array(); preg_match_all('/Set-Cookie:(?<cookie>\s{0,}.*)$/im', $content, $cookies); $data = $cookies['cookie']; $cookie = ""; foreach ($data as $cok) { $cok = explode('; ', $cok)[0]; $cookie .= $cok."; "; } // CURL Login $csrf = rand_string(32); $user = $phone; $passwordHash = hash('sha256', md5($pass)); $curl = curl_init(); curl_setopt_array($curl, array( CURLOPT_URL => "https://shopee.vn/api/v0/buyer/login/login_post/", CURLOPT_RETURNTRANSFER => true, // CURLOPT_HEADER => true, CURLOPT_COOKIEJAR => dirname(__FILE__) . "/cookie/$phone.txt", CURLOPT_ENCODING => "", CURLOPT_MAXREDIRS => 10, CURLOPT_TIMEOUT => 30, CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, CURLOPT_CUSTOMREQUEST => "POST", CURLOPT_POSTFIELDS => "------WebKitFormBoundary7MA4YWxkTrZu0gW\r\nContent-Disposition: form-data; name=\"login_key\"\r\n\r\n$user\r\n------WebKitFormBoundary7MA4YWxkTrZu0gW\r\nContent-Disposition: form-data; name=\"login_type\"\r\n\r\nphone\r\n------WebKitFormBoundary7MA4YWxkTrZu0gW\r\nContent-Disposition: form-data; name=\"password_hash\"\r\n\r\n$passwordHash\r\n------WebKitFormBoundary7MA4YWxkTrZu0gW\r\nContent-Disposition: form-data; name=\"captcha\"\r\n\r\n\r\n------WebKitFormBoundary7MA4YWxkTrZu0gW\r\nContent-Disposition: form-data; name=\"remember_me\"\r\n\r\nfalse\r\n------WebKitFormBoundary7MA4YWxkTrZu0gW--", CURLOPT_HTTPHEADER => array( "Content-Type: application/x-www-form-urlencoded", "Postman-Token: e497829c-e531-46b4-b48d-8b942410b349", "accept: */*", "accept-encoding: gzip, deflate, br", "accept-language: en-US,en;q=0.9,vi-VN;q=0.8,vi;q=0.7", "authority: shopee.vn", "cache-control: no-cache", "content-type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW", "cookie: _gcl_au=1.1.980110088.1567079476; csrftoken=".$csrf."; _fbp=fb.1.1567079476668.692301882; _hjid=2be41738-f9b7-4838-b0dc-226ffb695725; ".$cookie." AMP_TOKEN=^%^24NOT_FOUND; _ga=GA1.2.1734820971.1567079479; _gid=GA1.2.625706896.1567079479", "origin: https://shopee.vn", "referer: https://shopee.vn/", "sec-fetch-mode: cors", "sec-fetch-site: same-origin", "user-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36", "x-api-source: pc", "x-csrftoken: $csrf", "x-requested-with: XMLHttpRequest" ), )); $response = curl_exec($curl); $err = curl_error($curl); curl_close($curl); if ($err) { echo "cURL Error #:" . $err; } else { // echo $response; $resultA = json_decode($response,true); } //CURL lấy Vouchers $curl = curl_init(); curl_setopt_array($curl, array( CURLOPT_URL => "https://shopee.vn/api/v2/voucher_wallet/get_vouchers?type=0&offset=0&limit=12", CURLOPT_RETURNTRANSFER => true, CURLOPT_ENCODING => "", CURLOPT_MAXREDIRS => 10, CURLOPT_TIMEOUT => 30, CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, CURLOPT_CUSTOMREQUEST => "GET", CURLOPT_COOKIEFILE => dirname(__FILE__) . "/cookie/$phone.txt", CURLOPT_HTTPHEADER => array( "Postman-Token: 7a37837f-b3aa-4ea6-85b9-6eb396238cf1", "accept: */*", "accept-encoding: gzip, deflate, br", "accept-language: en-US,en;q=0.9,vi-VN;q=0.8,vi;q=0.7", "authority: shopee.vn", "cache-control: no-cache", "if-none-match: 5e4b575a405e87601445b50891ddaafe", "if-none-match-: 55b03-ceb9b31554f36b4e12f8679b13f0ae80", "referer: https://shopee.vn/user/voucher-wallet/?type=0", "sec-fetch-mode: cors", "sec-fetch-site: same-origin", "user-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36", "x-api-source: pc", "x-requested-with: XMLHttpRequest" ), )); $response = curl_exec($curl); $err = curl_error($curl); curl_close($curl); if ($err) { echo "cURL Error #:" . $err; } else { $resultB = json_decode($response, true); $result = array_merge($resultA,$resultB); echo json_encode($result); } } ?>

Bình luận - Hỏi đáp

wave

Ấn ESC để thoát