Browse Source

Merge remote-tracking branch 'origin/master'

zhoulj 6 years ago
parent
commit
757272ba56

+ 177 - 0
app/Console/Commands/YqBook.php

@@ -0,0 +1,177 @@
+<?php
+
+namespace App\Console\Commands;
+
+use App\Modules\Book\Models\Chapter;
+use App\Modules\Book\Models\Book;
+use App\Modules\Book\Models\BookConfig;
+use Illuminate\Console\Command;
+use GuzzleHttp\Client;
+use GuzzleHttp\Psr7\Request;
+use DB;
+use GuzzleHttp\Pool;
+use Log;
+
+class YqBook extends Command
+{
+    /**
+     * The name and signature of the console command.
+     *
+     * @var string
+     */
+    protected $signature = 'yqbook {--bid= : the id of a book} {--force}';
+
+    /**
+     * The console command description.
+     *
+     * @var string
+     */
+    protected $description = 'Command description';
+
+    /**
+     * Create a new command instance.
+     *
+     * @return void
+     */
+    public function __construct()
+    {
+        parent::__construct();
+    }
+
+    /**
+     * Execute the console command.
+     *
+     * @return mixed
+     */
+    public function handle()
+    {
+        $bid = $this->option('bid');
+        if(empty($bid)) return 0;
+        $force = $this->option('force');
+        if(!$force && $this->isHadExists($bid)){
+            echo 'had exist-'.PHP_EOL;
+            return false;
+        }
+
+        $this->start($bid);
+    }
+
+    private function start($bid){
+        $book = $this->bookInfo($bid);
+        if(!$book) return false;
+        $chapter = $book['chapter_count'];
+        $page = ceil($chapter/30);
+        $this->chapterInfo($bid,$page,$book['id']);
+
+        $this->call('book:afs',['bid'=> [$book['id']]] );
+    }
+
+    private function bookInfo($bid){
+        $client = new Client(['timeout'  => 5.0]);
+        $url = sprintf('http://47.90.126.243:8094/api/books/exportbookInfo?bid=%s',$bid);
+        $request = new Request('get', $url);
+        $response = null;
+        try{
+            $response = $client->send($request)->getBody()->getContents();
+        }catch (\Exception $e){
+            return false;
+        }
+
+        $result = json_decode($response,1);
+
+        if(!isset($result['code']) || $result['code'] != 0){
+            return false;
+        }
+
+        if(empty($result['data'])){
+            return false;
+        }
+
+        $book_info = $result['data'];
+        $book = Book::create([
+            'yq_bid'=>$book_info['id'],
+            'name'=>$book_info['book_name'],
+            'author'=>$book_info['author'],
+            'intro'=>$book_info['intro'],
+            'cover'=>$book_info['cover'],
+            'keyword'=>$book_info['keyword'],
+            'chapter_count'=>$book_info['chapter_count'],
+            'size'=>$book_info['size']
+        ]);
+        BookConfig::create([
+            'bid'=>$book->id,
+            'force_subscribe_chapter_seq'=>10,
+            'price'=>8.99,
+            'cover'=>$book_info['book_name'],
+            'promotion_domain'=>'iycdm.com',
+            'charge_type'=>isset($book_info['charge_type'])?$book_info['charge_type']:'CHAPTER',
+            'is_on_shelf'=>10,
+            'cp_source'=>'yunqi',
+        ]);
+
+        DB::table('book_yunqi')->insert([
+            'bid'=>$book->id,
+            'yq_bid'=>$bid,
+            'type'=>'DEFAULT',
+            'created_at'=>date('Y-m-d H:i:s'),
+            'updated_at'=>date('Y-m-d H:i:s')
+        ]);
+        return $book;
+    }
+
+    private function chapterInfo($bid,$page,$zy_bid){
+        $client = new Client(['timeout'  => 10]);
+
+
+        $requests = function ($page,$bid) {
+            for ($i = 0; $i < $page; $i++) {
+                $url = sprintf('http://47.90.126.243:8094/api/books/exportchapterInfo?bid=%s&page=%s',$bid,$i+1);
+                yield new Request('GET', $url);
+            }
+        };
+
+        $pool = new Pool($client, $requests($page,$bid), [
+            'concurrency' => 10,
+            'fulfilled' => function ($response, $index) use ($zy_bid){
+                $result = $response->getBody()->getContents();
+                if(!$result){
+                    return ;
+                }
+                $result = \GuzzleHttp\json_decode($result,1);
+                if(empty($result['data'])){
+                    return ;
+                }
+
+                foreach ($result['data']['data'] as $item){
+                    $chapter = [
+                        'bid'=>$zy_bid,
+                        'content'=>$item['content'],
+                        'name'=>$item['name'],
+                        'prev_cid'=>0,
+                        'next_cid'=>0,
+                        'size'=>$item['size'],
+                        'is_vip'=>$item['is_vip'],
+                        'sequence'=>$item['sequence'],
+                        'recent_update_at'=>date('Y-m-d H:i:s'),
+                        'ly_chapter_id'=>0
+                    ];
+                    Chapter::create($chapter);
+                }
+            },
+            'rejected' => function ($reason, $index) {
+                //Log::info($reason);
+                //Log::info($index);
+            },
+        ]);
+        $promise = $pool->promise();
+        $promise->wait();
+
+    }
+    private function isHadExists($bid){
+        $old = Book::where('yq_bid',$bid)->select('id')->first();
+        if($old){
+            return true;
+        }
+        return false;
+    }
+}

+ 2 - 1
app/Console/Kernel.php

@@ -123,7 +123,8 @@ class Kernel extends ConsoleKernel
 
         Commands\ChannelReaderVisitStats::class,
         Commands\UserPayUpdateTask::class,
-        Commands\CheckZhangDuSiteStatus::class
+        Commands\CheckZhangDuSiteStatus::class,
+        Commands\YqBook::class
     ];
 
     /**

+ 2 - 0
app/Http/Controllers/Wap/Book/BookController.php

@@ -98,6 +98,8 @@ class BookController extends BaseController
         if(!$this->checkUid()){
             return response()->error('WAP_NOT_LOGIN');
         }
+        // 上传的bid bug问题
+        if(strstr($bid,',')) $bid = explode(',',$bid)[0];
 
         if($this->uid == env('SPECIAL_USER_LOG',2)){
             myLog('special')->info('BookController::index bid is'.$bid);

+ 38 - 8
app/Http/Controllers/Wap/Book/ChapterController.php

@@ -304,10 +304,18 @@ class ChapterController extends BaseController
             return response()->error('WAP_NOT_LOGIN');
         }
         $this->en_bid = $bid;
+
         $bid = Hashids::decode($bid)[0];
         //获取图书信息
         $book_info = BookConfigService::getBookById($bid);
 
+        //是否开启全站按章模式
+        $global_charge_by_chapter_channels = explode(',',env('GLOBAL_CHARGE_BY_CHAPTER_CHANNEL'));
+        if(in_array($this->distribution_channel_id,$global_charge_by_chapter_channels))
+        {
+            $book_info->charge_type = 'CHAPTER';
+        }
+
         if (empty($book_info)) return response()->error('WAP_SYS_ERROR');
         $this->book_info = $book_info;
         $this->cid = $cid;
@@ -337,6 +345,14 @@ class ChapterController extends BaseController
         //用户是否强关
         $this->is_had_subscribe = $is_had_subscribe = $inter_not_need_sub ? true : $this->getSubscribe();
 
+        //判断当前是否有强制显示服务号信息的cookie、已经关注 跳转到服务号信息引导页
+        if(Cookie::get('force_show_qrcode') && $is_had_subscribe)
+        {
+            $force_read_url = '/subscribe/getFromUser';//服务号信息引导页
+            $force_read_data = ['src' => $force_read_url];
+            return response()->error('WAP_NOT_SUBSCRIBE', $force_read_data);
+        }
+        
         //获取强关章节数
         $subscribe_seq = $this->getSubscribeChapterNum($book_info);
         //章节是否需要强关 TRUE:不需要,false:需要
@@ -368,6 +384,7 @@ class ChapterController extends BaseController
             $this->getChapter();
             return response()->item(new ChapterTransformer, $this->chapter);
         }
+
         //需要强制关注 不是vip章节 已经关注了
         if (!$force_subscribe && $chapter->is_vip == 0 && $is_had_subscribe) {
             $this->getChapter();
@@ -392,16 +409,17 @@ class ChapterController extends BaseController
             $this->getChapter();
             return response()->item(new ChapterTransformer, $this->chapter);
         }
+        //获取价格
+        $fee = $this->getPrice($book_info, $chapter);
         //广告
-        if($this->isUserInAdSample() && $ad_status && $ad_status == 1){
+        if($this->isUserInAdSample() && $ad_status && $ad_status == 1 && $user_info->balance < $fee){
             $this->getChapter();
             $this->bookOrderOrChapterOrder($book_info, $cid, 0, $chapter->name, 1);
             return response()->item(new ChapterTransformer, $this->chapter);
         }
         //以上都是不用付费的情况******************************************************
         //未付费
-        //获取价格
-        $fee = $this->getPrice($book_info, $chapter);
+
         //返回的价格信息
         $data = [
             'book_id' => $this->en_bid,
@@ -556,6 +574,9 @@ class ChapterController extends BaseController
         if ((int)$this->_user_info['balance'] >= $fee) {
             if ($this->bookOrderOrChapterOrder($book_info, $chapter->id, $fee, $chapter->name, $is_remind)) {
                 $this->chapterOrderStats($fee);
+                if($this->user){
+                    $this->user->balance -= $fee;
+                }
                 return true;
             }
         }
@@ -671,6 +692,11 @@ class ChapterController extends BaseController
         return false;
     }
 
+    private function getOfficialAccountForceReadNotice()
+    {
+
+    }
+
     //强关页面的统计
     private function subscribeStats()
     {
@@ -1000,7 +1026,7 @@ class ChapterController extends BaseController
             //Log::info($price_rate);
             $fee = ceil($chapter->size * $price_rate);
             if($this->isRaisePrice()){
-                $fee = round($chapter->size * 0.0165);
+                $fee = round($chapter->size * 0.018);
             }
         }
         //首个计费章节书币价格以35书币为基准,低于35提升至35,原价高于35书币,维持原价
@@ -1501,11 +1527,13 @@ class ChapterController extends BaseController
     }
     //阅读页面底部是否显示广告
     private function isShowAd(){
+        if(!in_array($this->distribution_channel_id,[2,14,123,211])){
+            return ;
+        }
         //按章付费才显示
         if($this->book_info->charge_type != 'CHAPTER'){
             return ;
         }
-
         //用户是否在广告样本中
         if(!$this->isUserInAdSample()) return ;
         $cid = 0;
@@ -1515,12 +1543,12 @@ class ChapterController extends BaseController
         if(!$cid){
             return ;
         }
-
+        //付费用户没有广告
+        if(OrderService::isPaidUser($this->uid))  return ;
         //如果下一张已经付费,广告不显示
         if($this->getOrderRecord($this->book_info->bid, $cid)){
             return ;
         }
-
         $next_chapter  = ChapterService::getChapterNameById($cid, $this->book_info->bid);
         //下一章事vip的话 才显示广告
         if(!$next_chapter || !$next_chapter->is_vip){
@@ -1529,7 +1557,9 @@ class ChapterController extends BaseController
 
         $price = $this->getPrice($this->book_info,$next_chapter);
 
-        if($price > $this->user->balance){
+        $flag = $price > $this->user->balance;
+
+        if( $flag ){
             $this->chapter->is_show_ad = 1;
             AdVisitStatService::create($this->uid,$this->book_info->bid,$this->cid,'EXPOSURE');
         }

+ 14 - 8
app/Http/Controllers/Wap/Order/OrdersController.php

@@ -191,17 +191,23 @@ class OrdersController extends BaseController
         //}
         \Log::info('order:$template_id:' . $template_id);
         \Log::info('order:$distribution_channel_id:' . ($this->distribution_channel_id));
+
         if ($template_id == 2) { //模板2只有在长篇小说过来的用户才显示
-            if ($bid) {
-                $bid = Hashids::decode($bid)[0];
-                \Log::info('order:$bid:' . $bid);
-                $book = BookService::getBookById($bid);
-                \Log::info('order:$$book:' . json_encode($book));
-                if ($book->size < 200000) {
+            //部分渠道需要2元模板不管哪个入口进来都展示
+            $exclude_channels = explode(',', env('PRICE_TWO_SHOW_ALL_CHANNEL'));
+            if(!in_array($this->distribution_channel_id,$exclude_channels))
+            {
+                if ($bid) {
+                    $bid = Hashids::decode($bid)[0];
+                    \Log::info('order:$bid:' . $bid);
+                    $book = BookService::getBookById($bid);
+                    \Log::info('order:$$book:' . json_encode($book));
+                    if ($book->size < 200000) {
+                        $template_id = 1;
+                    }
+                } else {
                     $template_id = 1;
                 }
-            } else {
-                $template_id = 1;
             }
         }
         if($temp){

+ 4 - 3
app/Http/Controllers/Wap/Pay/OrdersController.php

@@ -144,6 +144,7 @@ class OrdersController extends Controller
         if (empty($openid)) {
             $trade_no = date("YmdHis") . hexdec(uniqid());
             $params = compact('uid', 'product_id', 'distribution_channel_id', 'send_order_id', 'bid', 'trade_no', 'pay_redirect_url', 'fromtype', 'activity_id', 'n','suid');
+
             $redirect_url = env('CREATE_PAY_URL') . '?' . http_build_query($params);
             //$redirect_url  = env('CREATE_PAY_URL').'?uid='.$uid.'&product_id='.$product_id.'&distribution_channel_id='
             // .$distribution_channel_id.'&send_order_id='.$send_order_id.'&bid='.$bid.'&pay_redirect_url='.urlencode($pay_redirect_url)
@@ -314,9 +315,9 @@ class OrdersController extends Controller
         if ($request->has('cid')) {
             $pay_info['pay_redirect_url'] = $pay_info['pay_redirect_url'] . '&cid=' . $request->input('cid');
         }
-        if ($hash_bid) {
-            $pay_info['pay_redirect_url'] = $pay_info['pay_redirect_url'] . '&bid=' . $hash_bid;
-        }
+//        if ($hash_bid) {
+//            $pay_info['pay_redirect_url'] = $pay_info['pay_redirect_url'] . '&bid=' . $hash_bid;
+//        }
 
         if ($suid) {
             $prize_fee = (int)(($product_info->price*100)*0.1);

+ 71 - 0
app/Http/Controllers/Wap/Subscribe/SubscribeController.php

@@ -7,6 +7,7 @@ use GuzzleHttp\Client;
 use App\Http\Controllers\Wap\BaseController;
 use Redis;
 use App\Modules\OfficialAccount\Services\OfficialAccountService;
+use App\Modules\OfficialAccount\Services\ForceSubscribeService;
 use Cookie;
 use Hashids;
 use Log;
@@ -103,4 +104,74 @@ class SubscribeController extends BaseController
 
         return false;
     }
+
+    //只获取用户的强关二维码
+    protected function getSimpleRcodeInfo($appid)
+    {
+        $param_need = [
+            'gzh_app_id' => $appid,
+            'scene_id' => $this->uid,
+            'timestamp' => time(),
+        ];
+        $param_need['sign'] = $this->getSign($param_need);
+        $client = new Client(['timeout' => 3.0,]);
+        try {
+            $qrcode_url_res = $client->request('get', 'https://zsyauth.aizhuishu.com/api/get_qrcode_url?' . http_build_query($param_need))->getBody()->getContents();
+            if ($qrcode_url_res) {
+                $qrcode_url = json_decode($qrcode_url_res, true);
+                if ($qrcode_url['code'] == 1) {
+                    if (isset($qrcode_url['data']) && !empty($qrcode_url['data'])) {
+                        return $qrcode_url['data'];
+                    }
+                }
+            }
+        } catch (\Exception $e) {
+
+        }
+        return false;
+    }
+
+    //获取用户的强关信息
+    function getFromUser()
+    {
+        Cookie::queue('force_show_qrcode', 1, -1);
+        $uid = $this->uid;
+        $user_info = ForceSubscribeService::forceSubscribeUsersByUid(compact('uid'));
+        if(isset($_GET['d']))
+        {
+        dump($user_info);
+            }
+        if($user_info)
+        {
+            $appid = $user_info->appid;
+            $official_account = OfficialAccountService::officialAccountByAppid(compact('appid'));
+            if(isset($_GET['d']))
+            {
+                dump($official_account);
+            }
+            $title = $official_account->nickname;
+            $img = 'https://open.weixin.qq.com/qr/code?username='.$official_account->name;
+            if(isset($_GET['d']))
+            {
+                $qrcode_url = $this->getSimpleRcodeInfo($appid);dump($qrcode_url);
+            }
+            if($qrcode_url = $this->getSimpleRcodeInfo($appid))//用服务号强关二维码
+            {
+                $img = $qrcode_url;
+            }
+        }else{
+            return redirect()->to('/recent');
+        }
+
+        $head_img_pool = [
+            'https://cdn-novel.iycdm.com/h5/subscribe/headimg/1.png',
+            'https://cdn-novel.iycdm.com/h5/subscribe/headimg/2.png',
+            'https://cdn-novel.iycdm.com/h5/subscribe/headimg/3.png'
+        ];
+
+        $head_img = array_random($head_img_pool);
+
+        return view('wap.userSubInfo',compact('head_img','img','title'));
+    }
+
 }

+ 6 - 0
app/Http/Controllers/Wap/Web/RedirectController.php

@@ -109,6 +109,12 @@ class RedirectController extends Controller
                 $uv = Redis::hget('send_order_uv_' . $param, $key);
                 $this->updateSendOrderTime($param, $uv);
             }
+
+            //判断是否强制到服务号阅读
+            if($link->force_show_qrcode)
+            {
+                Cookie::queue('force_show_qrcode', 1, 1);
+            }
             //
             $redirect_path = $request->get('redirect_path');
            if($redirect_path){

+ 19 - 2
app/Http/Controllers/Wap/Web/WelcomeController.php

@@ -86,6 +86,20 @@ class WelcomeController extends BaseController
         $latest_read_rec_books = $this->latest_read_rec_books($channel,$user->sex);
         //广告样本
         $adTargetId = $this->isUserInAdSample();
+        //广告frame
+        $is_show_ad_frame_setting = env('IS_SHOW_AD_FRAME_SETTING','123');
+        $is_show_ad_frame = false;
+        if($is_show_ad_frame_setting && in_array($this->distribution_channel_id,explode(',',$is_show_ad_frame_setting))){
+            $is_show_ad_frame = true;
+        }
+        //标题不显示书名
+        $show_title_in_reader = false;
+        $show_title_in_reader_setting = env('SHOW_TITLE_IN_READER_SETTING');
+        if($show_title_in_reader_setting && in_array($this->distribution_channel_id,explode(',',$show_title_in_reader_setting))){
+            $show_title_in_reader = true;
+        }
+        $hide_chapter_channels = explode(',',env('HIDE_CHAPTER_CONSUME_CHANNEL'));
+        $is_hide_chapter_consume = in_array($this->distribution_channel_id,$hide_chapter_channels) ? 1 : 0;
 
         $options = json_encode([
             'distribution_channel_id' => (int)$this->distribution_channel_id,
@@ -113,7 +127,10 @@ class WelcomeController extends BaseController
             'fission'=>$this->fission(),//裂变
             'channel_activities'=>$channel_activities_flag,
             'adTargetId'=>$adTargetId,
-            'ad_type'=>'1'
+            'ad_type'=>'1',
+            'is_show_ad_frame'=>$is_show_ad_frame,
+            'show_title_in_reader'=>$show_title_in_reader,
+            'is_hide_chapter_consume'=>$is_hide_chapter_consume
         ]);
         if($this->uid == env('SPECIAL_USER_LOG',2)){
             myLog('special')->info('welcome --------------------------');
@@ -661,7 +678,7 @@ class WelcomeController extends BaseController
 
             //活动未开始
             if (time() < strtotime($activity_info->start_time)) {
-                return view('pay.order.longactivitysixtyeight', ['url' => '###', 'code' => -3, 'start_time' => '', 'end_time' => date('Y-m-d', strtotime($activity_info->end_time) - 100)]);
+                return view('pay.order.longactivitynine', ['url' => '###', 'code' => -3, 'start_time' => '', 'end_time' => date('Y-m-d', strtotime($activity_info->end_time) - 100)]);
             }
 
             //活动结束

+ 2 - 1
app/Http/Middleware/EncryptCookies.php

@@ -20,6 +20,7 @@ class EncryptCookies extends BaseEncrypter
         'force_subscribe_name',
         'sub_random_num',
         'reader_share_bid',
-        'reader_share_cid'
+        'reader_share_cid',
+        'force_show_qrcode'
     ];
 }

+ 3 - 0
app/Http/Routes/Wap/WapRoutes.php

@@ -194,6 +194,9 @@ Route::group(['domain'=>env('WAP_DOMAIN'),'namespace'=>'App\Http\Controllers\Wap
         //继续阅读
         Route::get('continue','User\ReadRecordController@latestRead');
 
+        //用户强关信息页
+        Route::any('subscribe/getFromUser','Subscribe\SubscribeController@getFromUser');
+
         Route::any('{slug}','Web\WelcomeController@index')->where('slug', '(.*)?');
 
     });

+ 7 - 1
app/Libs/Helpers.php

@@ -444,7 +444,8 @@ function specialChannelAuthInfo(){
         '4444'=>'wx431a3a692700b63a',
         '4445'=>'wx3c53a641ee53b984',
         '4456'=>'wxc8c1cfb70e568f0c',
-        //'4483'=>'wx4651668ca7f6be51',
+        '976'=>'wx21506dfd22a0dc9c',
+        '928'=>'wx76da3531773c1f39',
     ];
 }
 
@@ -452,5 +453,10 @@ function specialChannelAuthInfo(){
 function specialChannelAuthInfoV2(){
     return [
         '4483'=>'wx4651668ca7f6be51',
+        '4567'=>'wx2285b54ee5e6e752',
+        '4568'=>'wx4cfa12302780e654',
+        '4569'=>'wxa25b19c509ba7db5',
+        '4578'=>'wx3beda81dba0b450b',
+        '4580'=>'wxb4bb620409a96ed7'
     ];
 }

+ 8 - 8
app/Modules/Book/Models/Book.php

@@ -8,7 +8,7 @@ class Book extends Model
 {
     protected  $table = 'books';
     protected  $fillable = ['ly_bid','name','author','intro','cover','category_name','keyword',
-        'category_id','status','chapter_count','first_cid','last_cid','size','last_chapter','sequence'];
+        'category_id','status','chapter_count','first_cid','last_cid','size','last_chapter','sequence','yq_bid'];
 
     /**
      * 获取分类id
@@ -23,12 +23,12 @@ class Book extends Model
          return $data;
     }
     
-    /**
-     * 获取book
-     * @return array
-     */
-    public static function getBook($bid){
-    	$res = self::select('*')->where('id',$bid)->first();
-    	return $res;
+    /**
+     * 获取book
+     * @return array
+     */
+    public static function getBook($bid){
+    	$res = self::select('*')->where('id',$bid)->first();
+    	return $res;
     }
 }

+ 2 - 1
app/Modules/SendOrder/Models/SendOrder.php

@@ -43,7 +43,8 @@ class SendOrder extends Model
         'send_time',
         'charge_type',
         'pre_send_date',
-        'promotion_point'
+        'promotion_point',
+        'force_show_qrcode'
     ];
 
     /**

+ 1 - 1
app/Modules/SendOrder/Services/SendOrderService.php

@@ -274,7 +274,7 @@ class SendOrderService
      */
     static function getRedirectUrlById($id)
     {
-        return SendOrder::where('id', $id)->select('redirect_url', 'book_id', 'send_time', 'distribution_channel_id', 'name','promotion_point')->first();
+        return SendOrder::where('id', $id)->select('redirect_url', 'book_id', 'send_time', 'distribution_channel_id', 'name','promotion_point','force_show_qrcode')->first();
     }
 
     /**

+ 1 - 1
resources/views/pay/order/index.blade.php

@@ -89,7 +89,7 @@
                 "timeStamp":"{{ $pay_info['timeStamp'] }}",         //时间戳,自1970年以来的秒数
                 "nonceStr":"{{ $pay_info['nonceStr'] }}", //随机串
                 "package":"{{ $pay_info['package'] }}",
-                "signType":"MD5",         //微信签名方式:
+                "signType":"{{ $pay_info['signType'] }}",         //微信签名方式:
                 "paySign":"{{ $pay_info['paySign'] }}" //微信签名
             },
             function(res){

+ 8 - 8
resources/views/wap/index.blade.php

@@ -4,12 +4,12 @@
     <meta charset=utf-8>
     <meta name=viewport content="width=device-width,initial-scale=1,maximum-scale=1,user-scalable=no">
     <link rel=icon type=image/png href="data:image/png;base64,iVBORw0KGgo=">
-    <script src=https://cdn-novel.iycdm.com/static/errOptions.js></script>
-    <script src=https://cdn-novel.iycdm.com/static/vue.min.js></script>
-    <script src=https://cdn-novel.iycdm.com/static/vue-router.min.js></script>
-    <script type=text/javascript src=https://cdn-novel.iycdm.com/static/vue-lazyload.js></script>
+    <script src="https://cdn-novel.iycdm.com/static/errOptions.js"></script>
+    <script src="https://cdn-novel.iycdm.com/static/vue.min.js"></script>
+    <script src="https://cdn-novel.iycdm.com/static/vue-router.min.js"></script>
+    <script src="https://cdn-novel.iycdm.com/static/vue-lazyload.js"></script>
     <title>{{$title}}</title>
-    <link href=https://cdn-novel.iycdm.com/static2019-1-8/css/app.a3b714074e23d8370ea51e4723b09abb.css rel=stylesheet>
+    <link href=https://cdn-novel.iycdm.com/static2019-1-15/css/app.5dc8b154836ba1b208cc3f1235ab4202.css rel=stylesheet>
 </head>
 <body>
 <div id=app></div>
@@ -32,9 +32,9 @@
     })();</script>
 <script>window.options = {!! $options!!};</script>
 <script type=text/javascript
-        src=https://cdn-novel.iycdm.com/static2019-1-8/js/manifest.cfe060ef1071583ee6a1.js></script>
-<script type=text/javascript src=https://cdn-novel.iycdm.com/static2019-1-8/js/vendor.ef6f589527f41af98f5c.js></script>
-<script type=text/javascript src=https://cdn-novel.iycdm.com/static2019-1-8/js/app.9817bb73f29c83633a4e.js></script>
+        src=https://cdn-novel.iycdm.com/static2019-1-15/js/manifest.c84eae1a4e83da40997f.js></script>
+<script type=text/javascript src=https://cdn-novel.iycdm.com/static2019-1-15/js/vendor.ef6f589527f41af98f5c.js></script>
+<script type=text/javascript src=https://cdn-novel.iycdm.com/static2019-1-15/js/app.cecb5465118889c276e2.js></script>
 </body>
 <script src=//cdn.ipadview.com/jssdk/combo.bundle.js></script>
 </html>

File diff suppressed because it is too large
+ 484 - 471
resources/views/wap/subscribeV2.blade.php


File diff suppressed because it is too large
+ 450 - 0
resources/views/wap/userSubInfo.blade.php