TikTokUser.php 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. <?php
  2. namespace App\Jobs;
  3. use App\Consts\SysConsts;
  4. use App\Modules\OfficialAccount\Models\ForceSubscribeUsers;
  5. use App\Modules\OfficialAccount\Models\OfficialAccount;
  6. use App\Modules\Trade\Models\Order;
  7. use App\Modules\User\Models\User;
  8. use App\Modules\User\Models\UserEnv;
  9. use GuzzleHttp\Client;
  10. use GuzzleHttp\Exception\ConnectException;
  11. use Illuminate\Bus\Queueable;
  12. use Illuminate\Queue\SerializesModels;
  13. use Illuminate\Queue\InteractsWithQueue;
  14. use Illuminate\Contracts\Queue\ShouldQueue;
  15. use Illuminate\Foundation\Bus\Dispatchable;
  16. use Illuminate\Support\Facades\Log;
  17. /**
  18. * 抖音用户推送数据
  19. */
  20. class TikTokUser implements ShouldQueue
  21. {
  22. use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
  23. /**
  24. * 类型:充值
  25. */
  26. const charge = 'charge';
  27. /**
  28. * 类型:注册
  29. */
  30. const register = 'register';
  31. private $uid;
  32. private $type;
  33. /**
  34. * Create a new job instance.
  35. * @param int $uid
  36. * @param string $type 类型
  37. * @return void
  38. */
  39. public function __construct(int $uid, string $type)
  40. {
  41. $this->uid = $uid;
  42. $this->type = $type;
  43. }
  44. /**
  45. * Execute the job.
  46. *
  47. * @return void
  48. */
  49. public function handle()
  50. {
  51. $user = User::find($this->uid);
  52. $user_env = UserEnv::where('uid', $this->uid)->first();
  53. if ($user && $user_env) {
  54. if ($this->type == self::charge) {
  55. $order = Order::where('uid', $this->uid)->where('status', 'PAID')->orderBy('id', 'desc')->first();
  56. $current_day_register = date('Y-m-d', strtotime($order->created_at)) == date('Y-m-d', strtotime($user->created_at));
  57. if ($order && $current_day_register && $order->price >= 30) {
  58. $time = (string) $order->created_at;
  59. $ip = $order->create_ip;
  60. $count = Order::where('uid', $this->uid)->where('status', 'PAID')->where('price', '>=', '30')->count();
  61. if ($count == 1) {
  62. $amount = $order->price;
  63. } else {
  64. return;
  65. }
  66. } else {
  67. return;
  68. }
  69. } else {
  70. $time = (string) $user->created_at;
  71. $ip = $user->register_ip;
  72. }
  73. $wechat = OfficialAccount::where('distribution_channel_id', $user->distribution_channel_id)->orderBy('id', 'desc')->first();
  74. if ($wechat) {
  75. $params = [
  76. 'ip' => trim($ip),
  77. 'ua' => trim($user_env->ua),
  78. 'open_id' => trim($user->openid),
  79. 'account_id' => trim($wechat->alias),
  80. 'app_id' => trim($wechat->appid),
  81. 'source' => 'wdy',
  82. 'amount' => isset($amount) ? $amount : '',
  83. 'type' => $this->type,
  84. 'time' => $time,
  85. ];
  86. $params['sign'] = _sign($params, SysConsts::TIKTOK_KEY);
  87. $client = new Client(['timeout' => 4]);
  88. $url = 'https://newtrackapi.zhuishuyun.com/api/tiktokPushInfo';
  89. try {
  90. $response = $client->post($url, ['form_params' => $params]);
  91. $code = $response->getStatusCode();
  92. $res = $code == 200 ? 'success' : 'fail';
  93. Log::info('TikTokUser .' . $this->type . '. result : ' . $res . ' request params :' . json_encode($params) . ' http code: ' . $response->getStatusCode() . ' return content:' . $response->getBody()->getContents());
  94. } catch (ConnectException $e) {
  95. Log::error($e->getMessage());
  96. }
  97. }
  98. }
  99. }
  100. }