sign的生成算法还是比较简单的,话不多说直接上成品。

耽美app的sign加密算法解析

<?php

header("content:application/json;charset=uft-8");



$res=new miandan();
$type= $_GET@['type'];
$page=$_GET@['page'];
$cartoonId=$_GET@['cartoonId'];
$chapterId=$_GET@['chapterId'];
$sortName=$_GET@['sortName'];
if($type==1){
   echo  $res->getList($page,$sortName);
}elseif ($type==2){

    echo $res->getChapterList($cartoonId);

}elseif ($type==3){
    echo $res->getChapterInfo($cartoonId,$chapterId);
}




class miandan{

   private array $header;
   private string $token;
   private string $sign;
   private string $timestamp;
   private string $device;
   public  $POST;

   function __construct()
   {
       $this->receive_json_to_array();
       $this->setHeader();
   }
   private function receive_json_to_array()
   {
        $json = file_get_contents('php://input');
        //加true转换为数组,不加转换为对象
       $this->POST =  json_decode($json, true);
   }


   private function setHeader(){
       $this->token="12350842137b9dc6dd107cf6b9ee25a549fade8df4012a340657c850bdcfd660c46ccc6ae0394a4d58b97d9367a8c087d3b6b1f2eb26e87904cd3482358509f5209e5d61f5d4caf5";
       $this->device="9B51FC6326CCB48B1A106F770428C65F5848AEF8";
       $this->header = array(
           'Content-Type: application/json;charset=utf-8',
           'auth_token: '.$this->token,
           'deviceUnique: '.$this->device,
           'deviceType: 1',
           'phoneType: OnePlusA5010',
           'clientVersion: 2.9.2',
           'marketName: other',
           'spreadId: 0',
           'phoneSystemVersion: 5.1.1',
           'shareId: 0',
           'shareType: 0',
           'imei: 852637142262151',
           'androidid: 96c1d98e32c54f58',
           'Host: app.xx.cn',
           'Connection: Keep-Alive',
           'User-Agent: okhttp/3.11.0'
       );

   }

    /**
     * @param $type 1 列表算法 2 章节详情算法
     * @param int $cartoonId 漫画id
     * @param int $chapterId 章节id
     * @return string 返回sign
     */
   public function getSign($type, int $cartoonId=0, int $chapterId=0): string
    {


        $ch = curl_init();

        curl_setopt($ch, CURLOPT_URL, "https://app. 域名. cn/api/lifan-cartoon/chapter/get/timestamp");
        curl_setopt($ch, CURLOPT_HEADER, 0);
        curl_setopt($ch, CURLOPT_HTTPHEADER, $this->header);
        //  curl_setopt($ch, CURLOPT_POSTFIELDS, $urls);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 0);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
        $data = curl_exec($ch);
        curl_close($ch);
        $json= json_decode($data,true);

        if($type==1){
            $sign=md5("mark=miandan888&timestamp=".$json['data']."&token=$this->token");
        }elseif ($type==2){
            $sign=md5("cartoonId=$cartoonId&chapterId=$chapterId&mark=fanLi888&timestamp=".$json['data']."&token=$this->token");

        }

        $this->timestamp=$json['data'];
        $this->sign=$sign;
        $res=array('sign'=>$sign,'timestamp'=>$json['data']);
        return json_encode($res);
    }

   private function postUrl($url,$data){
        $data  = json_encode($data);
        $headerArray =$this->header;
        $curl = curl_init();
        curl_setopt($curl, CURLOPT_URL, $url);
        curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
        curl_setopt($curl, CURLOPT_SSL_VERIFYHOST,FALSE);
        curl_setopt($curl, CURLOPT_POST, 1);
        curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
        curl_setopt($curl,CURLOPT_HTTPHEADER,$headerArray);
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
        $output = curl_exec($curl);
        curl_close($curl);
        return json_decode($output,true);
    }

    /**获取漫画列表
     * @param int $page 漫画列表页数
     * @param string $sortName 排序名称 默认 hot人气
     * @return false|string 返回json
     */
   public function getList(int $page=1,$sortName='hot'){
       $this->getSign(1);
       $data=array(
           'pageSize'=>10,
           'pageNum'=>$page,
           'themeId'=>'',
           'area'=>'',
           'fullflag'=>'',
           'gender'=>'',
           'category'=>'',
           'isfree'=>'',
           'sortName'=>'hot',
           'content'=>'',
           'sign'=>$this->sign,
           'timestamp'=>$this->timestamp,
           'labelId'=>null
           );
       $res=$this->postUrl('https://app. 域名. cn/api/lifan-cartoon/cartoon/find/page2',$data);
    return   json_encode($res);

   }

    /**获取漫画章节
     * @param $cartoonId  @漫画id
     * @return false|string 返回json
     */
   public function getChapterList($cartoonId){
       $data=array(
           "pageSize"=>"",
           "pageNum"=>"",
          "cartoonId"=>$cartoonId
       );
       $res=$this->postUrl("https://app. 域名. cn/api/lifan-cartoon/chapter/find/page",$data);
       return json_encode($res);

   }

    /**获取漫画章节详情
     * @param int $cartoonId 漫画id
     * @param int $chapterId 章节id
     * @return false|string
     */
   public function getChapterInfo(int $cartoonId, int $chapterId){

       $this->getSign(2,$cartoonId,$chapterId);
       $data=array(
           "chapterId"=>$chapterId,
       "headerUrl"=>"http://ossmh.xx.cn/customer/prod/headerUrl/5533836.png?update=2021-12-30T17:30:04",
       "customerName"=>"用户",
       "deviceUnique"=>$this->device,
       "sign"=>$this->sign,
       "cartoonId"=>$cartoonId,
       "timestamp"=>$this->timestamp
       );
       $res=$this->postUrl("https://app. 域名. cn/api/lifan-cartoon/chapter/find/chapter/detail/anti-reptile",$data);
       return json_encode($res);

   }}


相关文章