<?php error_reporting(0);//抑制所有錯誤 /** * 小米運動刷步 * Daen QQ1330166565 * 2021年12月23日22:28:30 */
echo shuabu($_GET['user'],$_GET['pass'],$_GET['count']); function shuabu($user,$pass,$count){ if($count>99999){ $json=array("status"=>0,"msg"=>'步數最大限制為99999',); return json_encode($json); } if($user==''){ $json=array("status"=>0,"msg"=>'小米運動賬號不能為空',); return json_encode($json); } if($pass==''){ $json=array("status"=>0,"msg"=>'小米運動密碼不能為空',); return json_encode($json); } if($count==''){ $json=array("status"=>0,"msg"=>'小米運動步數不能為空',); return json_encode($json); } $access=login($user,$pass); if($access==''){ $json=array( "status"=>0,
"msg"=>'小米運動賬號或者密碼錯誤', ); return json_encode($json); } $user_json=get_user($access); $user_id=get_user_id($user_json); $app_token=get_app_token($user_json); $return=json_decode(load($user_id,$app_token,$count),true); if($return['code']=='1'){ $json=array( "status"=>1,
"msg"=>'提交步數成功' ); }else{ $json=array( "status"=>0,
"msg"=>$json['message'] ); } return json_encode($json); } function login($user,$pass){//登錄,成功返回access,失敗返回空
$data_url='https://api-user.huami.com/registrations/+86'.$user.'/tokens'; $post_data=array( "client_id"=>"HuaMi",
"country_code"=>"CN",
"password"=>$pass,
"redirect_uri"=>"https%3A//s3-us-west-2.amazonaws.com/hm-registration/successsignin.html",
"state"=>"REDIRECTION",
"token"=>"access" ); $return=curl_sport($data_url,$post_data,1); if(strexists($return,'access')){ return GetBetween($return,'access=','&'); }else{ return ''; } } function get_user($access){//獲取用戶信息,json類型
$data_url='https://account.huami.com/v2/client/login'; $post_data="allow_registration=false&app_name=com.xiaomi.hm.health&app_version=4.1.0&code=".$access."&country_code=CN&device_id=device_id_type=uuid&device_model=phone&dn=api-user.huami.com%2Capi-mifit.huami.com%2Capp-analytics.huami.com&grant_type=access_token&lang=zh_CN&os_version=1.5.0&source=com.xiaomi.hm.health&third_name=huami_phone"; $return=curl_sport($data_url,$post_data,0); return $return; } function load($user_id,$app_token,$count){//提交步數
$data_url='https://api-mifit-cn.huami.com/v1/data/band_data.json'; //$last_deviceid = 'FC30D8FFFE3E028A';
$last_deviceid='DA932FFFFE8816E7'; $data='data_json=[{"summary":"{\"stp\":{\"runCal\":7,\"cal\":111,\"conAct\":0,\"stage\":[],\"ttl\":【步數】,\"dis\":3102,\"rn\":2,\"wk\":43,\"runDist\":146,\"ncal\":0},\"v\":5,\"goal\":2000}","data":[{"stop":1439,"value":"","did":"【last_deviceid】","tz":32,"src":24,"start":0}],"data_hr":"","summary_hr":"{\"ct\":0,\"id\":[]}","date":"【今日日期】"}]&device_type=0&enableMultiDevice=1&last_deviceid=【last_deviceid】&last_source=24&last_sync_data_time=【10位時間戳】&userid=【用戶ID】&uuid='; $post_data=str_replace('【步數】',$count,$data); $post_data=str_replace('【last_deviceid】',$last_deviceid,$post_data); $post_data=str_replace('【用戶ID】',$user_id,$post_data); $post_data=str_replace('【今日日期】',date("Y-m-d",time()),$post_data); $post_data=str_replace('【10位時間戳】',time(),$post_data); $post_data=str_replace('【初始10位時間戳】',strtotime(date("Y-m-d",time())),$post_data); $return=curl_sport($data_url,$post_data,0,$app_token); return $return; } function get_user_id($user_json){//解析user_json,獲取user_id
$json=json_decode($user_json,true); return $json['token_info']['user_id']; } function get_app_token($user_json){//解析user_json,獲取app_token
$json=json_decode($user_json,true); return $json['token_info']['app_token']; } //取出文本中間文本
function GetBetween($content,$start,$end){ $r=explode($start,$content); if(isset($r[1])){ $r=explode($end,$r[1]); return $r[0]; } return ''; } //此應用專用curl,返回response_header
function curl_sport($url,$post=0,$type=0,$request=''){//GET\POST網絡請求
$ch=curl_init(); curl_setopt($ch,CURLOPT_URL,$url); curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,false); curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,false); curl_setopt($ch,CURLOPT_HTTPHEADER,$httpheader); curl_setopt($ch,CURLOPT_TIMEOUT,10); if($post){ curl_setopt($ch,CURLOPT_POST,1); curl_setopt($ch,CURLOPT_POSTFIELDS,$post); } if($request!=''){ $httpheader[]="apptoken:".$request; curl_setopt($ch,CURLOPT_HTTPHEADER,$httpheader); } //返回 response_header, 該選項非常重要,如果不為 true, 只會獲得響應的正文
curl_setopt($ch,CURLOPT_HEADER,$type); curl_setopt($ch,CURLINFO_HEADER_OUT,true); curl_setopt($ch,CURLOPT_AUTOREFERER,false); curl_setopt($ch,CURLOPT_RETURNTRANSFER,1); $ret=curl_exec($ch); curl_close($ch); return $ret; } function strexists($string,$find){//取字符串中是否包含指定字符串
return !(strpos($string,$find)===FALSE); }
原文地址:https://www.cnblogs.com/daen/p/15796998.html