ShareController.php 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165
  1. <?php
  2. namespace App\Http\Controllers\Wap\Advertises;
  3. use App\Http\Controllers\Wap\BaseController;
  4. use App\Modules\Book\Services\ChapterService;
  5. use App\Modules\Cpa\Services\AdvertiseService;
  6. use App\Modules\Cpa\Services\AdvertiseUsersService;
  7. use App\Modules\Book\Services\BookConfigService;
  8. use App\Modules\Cpa\Services\AdvertiseUserQueueService;
  9. use App\Modules\ShareFree\Services\ShareBringUsersService;
  10. use App\Modules\ShareFree\Services\ShareUsersService;
  11. use App\Modules\User\Services\ReadRecordService;
  12. use Illuminate\Http\Request;
  13. use Redis;
  14. use Hashids;
  15. use DB;
  16. use EasyWeChat\Foundation\Application;
  17. class ShareController extends BaseController
  18. {
  19. public function share(Request $request){
  20. $distribution_channel_id = $request->input('distribution_channel_id',0);
  21. $uid = $request->input('uid','');
  22. $cid = $request->input('cid','');
  23. $bid_encode = $request->input('bid','');
  24. if(empty($distribution_channel_id)||empty($uid)||empty($bid_encode)) {
  25. return response()->error('PARAM_EMPTY');
  26. }
  27. $bid =Hashids::decode($bid_encode)[0];
  28. $book_info = BookConfigService::getBookById($bid);
  29. if(!$book_info){
  30. return response()->error('PARAM_ERROR');
  31. }
  32. $chapter_info = ChapterService::getChapterById($book_info->first_cid);
  33. $book_name = $book_info->name;
  34. //加入用户分享记录
  35. $share_user_info = ShareUsersService::addShareUsers(compact('bid','uid','cid','distribution_channel_id','book_name'));
  36. $js_config = $this->getJSConfig();
  37. $bid = $bid_encode;
  38. $title = $book_info->book_name;
  39. mb_internal_encoding("UTF-8");
  40. $desc = mb_substr(str_replace(["\n","\r\n","\t"],'\\',trim($chapter_info->content)),0,40).'...';
  41. //$link = env('PROTOCOL').'://site'.Hashids::encode($distribution_channel_id)._domain().'/reader?bid='.$bid;
  42. $params =[
  43. 'uid'=>$uid,'bid'=>$bid,'distribution_channel_id'=>$distribution_channel_id,
  44. 'share_user_rec_id'=>$share_user_info->id,'timestamp'=>time(),'cid'=>$cid]
  45. ;
  46. $url_param_str = arr_to_url($params);
  47. $sign = md5($url_param_str);
  48. $share_bring_users = ShareBringUsersService::getShareSuccessUsers($share_user_info->id);
  49. $share_bring_users = json_decode(json_encode($share_bring_users));
  50. $url_format = '%s://site%s.%s.com/';
  51. /*$link = sprintf(
  52. $url_format,
  53. env('PROTOCOL'),
  54. encodeDistributionChannelId($distribution_channel_id),
  55. env('CUSTOM_HOST')
  56. );
  57. $link .= 'share/outjump?'.$url_param_str.'&sign='.$sign;*/
  58. $link = env('PROTOCOL').'://'.env('share_domain').'/share/outjump?'.$url_param_str.'&sign='.$sign;
  59. \Log::info('link:'.$link);
  60. $imgUrl=$book_info->cover;
  61. return view('wap.share',['params'=>compact('bid','book_name','uid','timestamp','my_sign'),'share_bring_users'=>$share_bring_users,'js_config'=>$js_config,'share_config'=>compact('title','desc','link','url','imgUrl')]);
  62. }
  63. private function getJSConfig(){
  64. $options = [
  65. 'debug' => true,
  66. 'app_id' => env('JS_AppId'),
  67. 'secret' => env('JS_AppSecret'),
  68. 'token' => 'easywechat',
  69. 'log' => [
  70. 'level' => 'debug',
  71. 'file' => storage_path('logs/easyWecaht.log'), // XXX: 绝对路径!!!!
  72. ],
  73. //...
  74. ];
  75. $app = new Application($options);
  76. $js = $app->js->config(array('onMenuShareQQ', 'onMenuShareWeibo','onMenuShareTimeline','onMenuShareAppMessage','onMenuShareQZone'), $debug = false, $beta = false, $json = false);
  77. return $js;
  78. }
  79. public function jump(Request $request){
  80. $distribution_channel_id = $request->input('distribution_channel_id',0);
  81. $uid = $request->input('uid','');
  82. $cid = $request->input('cid','');
  83. $bid_encode = $request->input('bid','');
  84. $share_user_rec_id = $request->input('share_user_rec_id','');
  85. $timestamp = $request->input('timestamp','');
  86. $sign = $request->input('sign','');
  87. if(empty($distribution_channel_id)||empty($uid)||empty($cid)||empty($bid_encode)||empty($share_user_rec_id)||empty($sign)) {
  88. return response()->error('PARAM_EMPTY');
  89. }
  90. $bid=$bid_encode;
  91. $sign_str = arr_to_url(compact('distribution_channel_id','uid','cid','bid','share_user_rec_id','timestamp'));
  92. $my_sign = md5($sign_str);
  93. if($sign != $my_sign) {
  94. return response()->error('WAP_SIGN_ERROR');
  95. }
  96. $bid = Hashids::decode($bid_encode)[0];
  97. $buid = $this->uid;
  98. $data = compact('uid','bid','cid','share_user_rec_id','buid');
  99. \Log::info(json_encode($data));
  100. if($uid != $buid){
  101. ShareBringUsersService::addShareUsers($data);
  102. }
  103. $book_configs = BookConfigService::getBookById($bid);
  104. $readRecord = ReadRecordService::getRecordByUidBid($buid,$bid);
  105. if($readRecord) {
  106. $cid = explode('_',$readRecord)[0];
  107. }else {
  108. $cid = $book_configs->last_cid;
  109. }
  110. $url_format = '%s://site%s.%s.com/';
  111. $jump_link = sprintf(
  112. $url_format,
  113. env('PROTOCOL'),
  114. encodeDistributionChannelId($distribution_channel_id),
  115. env('CUSTOM_HOST')
  116. );
  117. //\Log::info('jump_link:'.$jump_link.'reader?bid='.$bid_encode.'&cid='.$cid);
  118. header('location:'.$jump_link.'reader?bid='.$bid_encode.'&cid='.$cid);
  119. }
  120. public function ShareJump(Request $request) {
  121. $arg = $request->all();
  122. $distribution_channel_id = $arg['distribution_channel_id'];
  123. $data = array(
  124. 'distribution_channel_id'=>$arg['distribution_channel_id'],
  125. 'uid'=>$arg['uid'],
  126. 'cid'=>$arg['cid'],
  127. 'bid'=>$arg['bid'],
  128. 'share_user_rec_id'=>$arg['share_user_rec_id'],
  129. 'timestamp'=>$arg['timestamp']
  130. );
  131. $sign_str = arr_to_url($data);
  132. $sign = $arg['sign'];
  133. $my_sign = md5($sign_str);
  134. if($sign != $my_sign) {
  135. return response()->error('WAP_SIGN_ERROR');
  136. }
  137. //$link = env('PROTOCOL').'://'.env('share_domain').'/share/jump?'.$sign_str.'&sign='.$sign;
  138. $url_format = '%s://site%s.%s.com/';
  139. $link = sprintf(
  140. $url_format,
  141. env('PROTOCOL'),
  142. encodeDistributionChannelId($distribution_channel_id),
  143. env('CUSTOM_HOST')
  144. );
  145. $link .= 'share/jump?'.$sign_str.'&sign='.$sign;
  146. header('location:'.$link);
  147. }
  148. }