PHP実装:ファイルフロー処理を圧縮し、解凍する
3340 ワード
需要:アップルが支払った注文記録を処理し、ローカルデータベースと照合します.
アップルの請求書を要求して、圧縮ファイルを返して、解凍してからxlsファイルになります.
構想:要求されたファイルストリームをzipファイルに配置し、このファイルを解凍した後、ファイル内容を配列処理に変換します.
実装コード(例を以下に示し、データ処理も添付する):
アップルの請求書apiアドレス:https://developer.apple.com/documentation/appstoreconnectapiここで注意すべき点は、要求されたデータが属するタイムゾーン:太平洋標準時間(PST)を採用することを報告することです.1日は12:00 AMから11:59 PM(PST)までの間で発生した取引を含む.だから北京時間にお願いして、昨日のデータは取れないかもしれません.
アップルの請求書を要求して、圧縮ファイルを返して、解凍してからxlsファイルになります.
構想:要求されたファイルストリームをzipファイルに配置し、このファイルを解凍した後、ファイル内容を配列処理に変換します.
実装コード(例を以下に示し、データ処理も添付する):
アップルの請求書apiアドレス:https://developer.apple.com/documentation/appstoreconnectapiここで注意すべき点は、要求されたデータが属するタイムゾーン:太平洋標準時間(PST)を採用することを報告することです.1日は12:00 AMから11:59 PM(PST)までの間で発生した取引を含む.だから北京時間にお願いして、昨日のデータは取れないかもしれません.
$dir=dirname(__FILE__);
$url = "http://1.1.1.1/onlinepay/iap/salesreport/download?refersource=ttt&frequency=DAILY&reportDate=2019-08-01&reportSubType=SUMMARY&reportType=SALES&version=1_0";
// ( )
//$report_date = date("Y-m-d",strtotime("-2 days"));
$post_arr = "... "
$result = req_post($url,$post_arr);
$res = make_bill_file($dir,$result);
if($res){
//
$arr = array("SKU","Title","Product Type Identifier","Developer Proceeds","End Date","Customer Price");
$data = get_apple_bill_data($dir,$arr);
//$data
if(empty($data)){ return false;}
// Product Type Identifier = IA9
$data_a = array();
foreach($data as $k => $v) {
if($v['Product Type Identifier'] == 'IA9'){
$data_a[] = $v;
}else{
continue;
}
}
unset($data);
unlink($dir."/apple_bill");
unlink($dir."/apple_bill.gz");
}
//
function get_apple_bill_data($dir,$arr){
$path = $dir."/apple_bill";
$file = fopen($path, 'r');
// ( )
$row = fgets($file);
$row = explode("\t", $row);
$title = array();
foreach($row as $k => $v) {
$title[$k] = str_replace("
", '', $v);
}
//
$data = array();
$count = 0;
while(!feof($file)) {
$row = fgets($file);
$row = explode("\t", $row);
if(!$row[0]) continue;//
foreach($title as $k => $v) {
if(in_array($v, $arr)){
$data[$count][$v] = str_replace("
", '', $row[$k]);
}else{
continue;
}
}
$count ++;
}
fclose($file);
return $data;
}
// , $dir: $result
function make_bill_file($dir,$result){
$myfile = fopen($dir."/apple_bill.gz", "wb") or die("Unable to open file!");
fwrite($myfile, $result);
$buffer_size = 4096; // read 4kb at a time
$file = gzopen($dir."/apple_bill.gz", 'rb');
$out_file = fopen($dir."/apple_bill", 'wb');
$str='';
while(!gzeof($file)) {
fwrite($out_file, gzread($file, $buffer_size));
}
$res_close = fclose($out_file);
$res_gzclose = gzclose($file);
if($res_close && $res_gzclose){
return true;
}else{
return false;
}
}
function req_post($url, $post_data = '', $timeout = 10){
$ch = curl_init();
curl_setopt ($ch, CURLOPT_URL, $url);
curl_setopt ($ch, CURLOPT_POST, 1);
if($post_data != ''){
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
}
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
curl_setopt($ch, CURLOPT_HEADER, false);
$file_contents = curl_exec($ch);
curl_close($ch);
return $file_contents;
}