OfficialAccountService.php 30 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699
  1. <?php
  2. /**
  3. * Created by sublime.
  4. * User: wosinC
  5. * Date: 2017/12/2
  6. * Time: 上午11:39
  7. */
  8. namespace App\Modules\OfficialAccount\Services;
  9. use App\Libs\SMS;
  10. use App\Libs\AliSMS;
  11. use App\Modules\OfficialAccount\Models\OfficialAccount;
  12. use App\Modules\OfficialAccount\Models\OfficialAuthUrl;
  13. use App\Modules\User\Services\UserService;
  14. use App\Modules\Channel\Models\Channel;
  15. use DB;
  16. use GuzzleHttp\Client;
  17. use Redis;
  18. class OfficialAccountService
  19. {
  20. public $secret_key ;
  21. public function __construct()
  22. {
  23. $this->secret_key = env('SECRET_KEY');
  24. }
  25. //-----------公众号---------------
  26. /**
  27. * 根据appid获取公众号
  28. */
  29. static function officialAccountByAppid($officialAccountPrams)
  30. {
  31. try {
  32. \Log::info('==========================通过appid获取公众号' . $officialAccountPrams['appid']);
  33. $officialMsg = Redis::hget('official_account_info:app_id:' . $officialAccountPrams['appid'], 'official_account_info');
  34. if (!$officialMsg) {
  35. $official_accounts = OfficialAccount::officialAccountByAppid($officialAccountPrams['appid']);
  36. if (!empty($official_accounts)) {
  37. $officialAccountArray = $official_accounts->toArray();
  38. Redis::hset('official_account_info:app_id:' . $official_accounts['appid'], 'official_account_info', json_encode($officialAccountArray));
  39. }
  40. $official_accounts['todayForceSubscribeUsers'] = 0;
  41. $official_accounts['allForceSubscribeUsers'] = 0;
  42. return $official_accounts;
  43. } else {
  44. $official_object = json_decode($officialMsg);
  45. return $official_object;
  46. }
  47. } catch (\Exception $e) {
  48. \Log::info('==========================通过appid获取公众号报错');
  49. \Log::info($e->getMessage());
  50. }
  51. }
  52. /**
  53. * 根据id获取公众号
  54. */
  55. static function officialAccountById($officialAccountPrams)
  56. {
  57. $official_accounts = OfficialAccount::officialAccountById($officialAccountPrams['id']);
  58. return $official_accounts;
  59. }
  60. /**
  61. * 获取全部公众号
  62. */
  63. static function officialAuthAccounts($auth, $is_enabled)
  64. {
  65. $official_accounts = OfficialAccount::officialAuthAccounts($auth, $is_enabled);
  66. return $official_accounts;
  67. }
  68. /**
  69. * 获取1个公众号
  70. */
  71. static function getOneOfficialAuthAccounts($distribution_channel_id,$auth, $is_enabled)
  72. {
  73. $official_accounts = OfficialAccount::getOneOfficialAuthAccounts($distribution_channel_id,$auth, $is_enabled);
  74. return $official_accounts;
  75. }
  76. /**
  77. * 获取全部公众号
  78. */
  79. static function officialAuthSubscribeAccounts($auth, $is_enabled)
  80. {
  81. $official_accounts = OfficialAccount::officialAuthSubscribeAccounts($auth, $is_enabled);
  82. return $official_accounts;
  83. }
  84. /**
  85. * 根据distribution_channel_id获取一个可用的公众号
  86. */
  87. static function canUseOfficialAccountByChannelId($officialAccountPrams)
  88. {
  89. $is_auth = 1;
  90. $is_enabled = 1;
  91. $official_accounts = OfficialAccount::officialAuthAccountBydistributionChannelId($officialAccountPrams['distribution_channel_id'], $is_auth, $is_enabled);
  92. // if(isset($official_accounts[0])) {
  93. // return $official_accounts[0];
  94. // }
  95. // return null;
  96. //\Log::info('wechat_log_info:canUseOfficialAccountByChannelId-----'.$official_accounts);
  97. \Log::info('wechat_log_info:canUseOfficialAccountByChannelId-----official_accounts');
  98. for ($i = 0; $i < count($official_accounts); $i++) {
  99. # code...
  100. //公众号强关用户总数
  101. $total_fans_add_nums = (int)Redis::hget('day_appid_fans_nums_appid:add:' . $official_accounts[$i]['appid'], 'total');
  102. $total_fans_cancel_nums = (int)Redis::hget('day_appid_fans_nums_appid:cancel:' . $official_accounts[$i]['appid'], 'total');
  103. $allForceSubscribeUsers = $total_fans_add_nums - $total_fans_cancel_nums;
  104. // $allForceSubscribeUsers = ForceSubscribeUsers::allForceSubscribeUsers($official_accounts[$i]['appid']);
  105. \Log::info('wechat_log_info:canUseOfficialAccountByChannelId-----allForceSubscribeUsers' . $allForceSubscribeUsers);
  106. //公众号当日强关用户数
  107. $day_fans_add_nums = (int)Redis::hget('day_appid_fans_nums_appid:add:' . $official_accounts[$i]['appid'], date("Y-m-d"));
  108. // $day_fans_cancel_nums = (int)Redis::hget('day_appid_fans_nums_appid:cancel:'.$official_accounts[$i]['appid'],date("Y-m-d"));
  109. $todayForceSubscribeUsers = $day_fans_add_nums;
  110. // $todayForceSubscribeUsers = ForceSubscribeUsers::todayForceSubscribeUsers($official_accounts[$i]['appid']);
  111. \Log::info('wechat_log_info:canUseOfficialAccountByChannelId-----todayForceSubscribeUsers' . $todayForceSubscribeUsers);
  112. if (($allForceSubscribeUsers >= $official_accounts[$i]['subscribe_top_num']) || ($todayForceSubscribeUsers >= $official_accounts[$i]['subscribe_day_maximum'])) {
  113. # code...
  114. continue;
  115. } else {
  116. $official_accounts[$i]['todayForceSubscribeUsers'] = $todayForceSubscribeUsers;
  117. $official_accounts[$i]['allForceSubscribeUsers'] = $allForceSubscribeUsers;
  118. return $official_accounts[$i];
  119. }
  120. }
  121. }
  122. /**
  123. * 根据distribution_channel_id获取已授权可用的所有公众号
  124. */
  125. static function officialAuthAccountBydistributionChannelId($officialAccountPrams)
  126. {
  127. $is_auth = 1;
  128. $is_enabled = 1;
  129. $official_accounts = OfficialAccount::officialAuthAccountBydistributionChannelId($officialAccountPrams['distribution_channel_id'], $is_auth, $is_enabled);
  130. // dd($official_accounts);
  131. for ($i = 0; $i < count($official_accounts); $i++) {
  132. # code...
  133. $official_accounts[$i]['todayForceSubscribeUsers'] = 0;
  134. $official_accounts[$i]['allForceSubscribeUsers'] = 0;
  135. }
  136. return $official_accounts;
  137. }
  138. /**
  139. * 根据distribution_channel_id获取可用的所有公众号
  140. */
  141. static function allOfficialAccountBydistributionChannelId($officialAccountPrams)
  142. {
  143. $is_enabled = 1;
  144. //$official_accounts = OfficialAccount::allOfficialAccountBydistributionChannelId($officialAccountPrams['distribution_channel_id'],$is_enabled);
  145. $official_accounts = OfficialAccount::allOfficialAccountBydistributionChannelIdAndGetForceType($officialAccountPrams['distribution_channel_id'], $is_enabled);
  146. //return $official_accounts;
  147. for ($i = 0; $i < count($official_accounts); $i++) {
  148. # code...
  149. $day_fans_add_nums = (int)Redis::hget('day_appid_fans_nums_appid:add:' . $official_accounts[$i]['appid'], date("Y-m-d"));
  150. // $day_fans_cancel_nums = (int)Redis::hget('day_appid_fans_nums_appid:cancel:'.$official_accounts[$i]['appid'],date("Y-m-d"));
  151. $todayForceSubscribeUsers = $day_fans_add_nums;
  152. $official_accounts[$i]['todayForceSubscribeUsers'] = $todayForceSubscribeUsers;
  153. // $official_accounts[$i]['todayForceSubscribeUsers'] = ForceSubscribeUsers::todayForceSubscribeUsers($official_accounts[$i]['appid']);
  154. $total_fans_add_nums = (int)Redis::hget('day_appid_fans_nums_appid:add:' . $official_accounts[$i]['appid'], 'total');
  155. $total_fans_cancel_nums = (int)Redis::hget('day_appid_fans_nums_appid:cancel:' . $official_accounts[$i]['appid'], 'total');
  156. $allForceSubscribeUsers = $total_fans_add_nums - $total_fans_cancel_nums;
  157. $official_accounts[$i]['allForceSubscribeUsers'] = $allForceSubscribeUsers;
  158. // $official_accounts[$i]['allForceSubscribeUsers'] = ForceSubscribeUsers::allForceSubscribeUsers($official_accounts[$i]['appid']);
  159. }
  160. return $official_accounts;
  161. }
  162. /**
  163. * 根据distribution_channel_id获取公众号数量
  164. */
  165. static function officialAccountCountByChannelId($officialAccountPrams)
  166. {
  167. $official_accounts = OfficialAccount::officialAccountCountByChannelId($officialAccountPrams['distribution_channel_id']);
  168. return $official_accounts;
  169. }
  170. /**
  171. * 授权公众号信息
  172. */
  173. static function authOfficialAccount($officialAccountPrams)
  174. {
  175. try {
  176. $official_accounts = OfficialAccount::officialAccountByAppid($officialAccountPrams['appid']);
  177. if (empty($official_accounts)) {
  178. $officialAccount = OfficialAccount::create($officialAccountPrams);
  179. $officialAccountArray = $officialAccount->toArray();
  180. // Redis::hset('official_account_info:app_id:'.$officialAccountPrams['appid'], 'official_account_info', '[{appid:'.$officialAccountPrams['appid'].'},{distribution_channel_id:'.$officialAccountPrams['distribution_channel_id'].'},{appsecret:'.$officialAccountPrams['appsecret'].'},{alias:'.$officialAccountPrams['alias'].'},{name:'.$officialAccountPrams['name'].'},{nickname:'.$officialAccountPrams['nickname'].'},{head_img:'.$officialAccountPrams['head_img'].'},{qrcode_url:'.$officialAccountPrams['qrcode_url'].'},{principal_name:'.$officialAccountPrams['principal_name'].'},{service_type_info:'.$officialAccountPrams['service_type_info'].'},{func_info:'.$officialAccountPrams['func_info'].'},{authorizer_refresh_token:'.$officialAccountPrams['authorizer_refresh_token'].'},{is_auth:'.$officialAccountPrams['is_auth'].'},{official_account_type:'.$officialAccountPrams['official_account_type'].'},{is_enabled:'.$officialAccountPrams['is_enabled'].'},{verify_txt:'.$officialAccountPrams['verify_txt'].'}]');
  181. Redis::hset('official_account_info:app_id:' . $officialAccountPrams['appid'], 'official_account_info', json_encode($officialAccountArray));
  182. return 1;
  183. } else {
  184. if (!empty($officialAccountPrams['distribution_channel_id'])) {
  185. $official_accounts['distribution_channel_id'] = $officialAccountPrams['distribution_channel_id'];
  186. }
  187. if (!empty($officialAccountPrams['appsecret'])) {
  188. $official_accounts['appsecret'] = $officialAccountPrams['appsecret'];
  189. }
  190. if (!empty($officialAccountPrams['alias'])) {
  191. $official_accounts['alias'] = $officialAccountPrams['alias'];
  192. }
  193. if (!empty($officialAccountPrams['name'])) {
  194. $official_accounts['name'] = $officialAccountPrams['name'];
  195. }
  196. if (!empty($officialAccountPrams['nickname'])) {
  197. $official_accounts['nickname'] = $officialAccountPrams['nickname'];
  198. }
  199. if (!empty($officialAccountPrams['head_img'])) {
  200. $official_accounts['head_img'] = $officialAccountPrams['head_img'];
  201. }
  202. if (!empty($officialAccountPrams['qrcode_url'])) {
  203. $official_accounts['qrcode_url'] = $officialAccountPrams['qrcode_url'];
  204. }
  205. if (!empty($officialAccountPrams['principal_name'])) {
  206. $official_accounts['principal_name'] = $officialAccountPrams['principal_name'];
  207. }
  208. if (!empty($officialAccountPrams['service_type_info'])) {
  209. $official_accounts['service_type_info'] = $officialAccountPrams['service_type_info'];
  210. }
  211. if (!empty($officialAccountPrams['func_info'])) {
  212. $official_accounts['func_info'] = $officialAccountPrams['func_info'];
  213. }
  214. if (!empty($officialAccountPrams['authorizer_refresh_token'])) {
  215. $official_accounts['authorizer_refresh_token'] = $officialAccountPrams['authorizer_refresh_token'];
  216. }
  217. if (!empty($officialAccountPrams['official_account_type'])) {
  218. $official_accounts['official_account_type'] = $officialAccountPrams['official_account_type'];
  219. }
  220. if (!empty($officialAccountPrams['verify_txt'])) {
  221. $official_accounts['verify_txt'] = $officialAccountPrams['verify_txt'];
  222. }
  223. $official_accounts['is_auth'] = 1;
  224. $official_accounts->save();
  225. $officialAccountArray = $official_accounts->toArray();
  226. Redis::hset('official_account_info:app_id:' . $official_accounts['appid'], 'official_account_info', json_encode($officialAccountArray));
  227. // Redis::hset('official_account_info:app_id:'.$official_accounts['appid'], 'official_account_info', '[{appid:'.$official_accounts['appid'].'},{distribution_channel_id:'.$official_accounts['distribution_channel_id'].'},{appsecret:'.$official_accounts['appsecret'].'},{alias:'.$official_accounts['alias'].'},{name:'.$official_accounts['name'].'},{nickname:'.$official_accounts['nickname'].'},{head_img:'.$official_accounts['head_img'].'},{qrcode_url:'.$official_accounts['qrcode_url'].'},{principal_name:'.$official_accounts['principal_name'].'},{service_type_info:'.$official_accounts['service_type_info'].'},{func_info:'.$official_accounts['func_info'].'},{authorizer_refresh_token:'.$official_accounts['authorizer_refresh_token'].'},{is_auth:'.$official_accounts['is_auth'].'},{official_account_type:'.$official_accounts['official_account_type'].'},{is_enabled:'.$official_accounts['is_enabled'].'},{verify_txt:'.$official_accounts['verify_txt'].'}]');
  228. return 1;
  229. }
  230. } catch (\Exception $e) {
  231. // \Log("授权公众号日志:".$e);
  232. return 0;
  233. }
  234. }
  235. /**
  236. * 更新公众号信息
  237. */
  238. static function updateOfficialAccount($officialAccountPrams)
  239. {
  240. try {
  241. $official_accounts = OfficialAccount::officialAccountByAppidAndChannelId($officialAccountPrams['appid'], $officialAccountPrams['distribution_channel_id']);
  242. // dd($official_accounts);
  243. if (empty($official_accounts)) {
  244. return 2;
  245. } else {
  246. $official_accounts['appsecret'] = $officialAccountPrams['appsecret'];
  247. $official_accounts['subscribe_top_num'] = $officialAccountPrams['subscribe_top_num'];
  248. $official_accounts['subscribe_day_maximum'] = $officialAccountPrams['subscribe_day_maximum'];
  249. $official_accounts->save();
  250. $officialAccountArray = $official_accounts->toArray();
  251. Redis::hset('official_account_info:app_id:' . $official_accounts['appid'], 'official_account_info', json_encode($officialAccountArray));
  252. // Redis::hset('official_account_info:app_id:'.$official_accounts['appid'], 'official_account_info', '[{appid:'.$official_accounts['appid'].'},{distribution_channel_id:'.$official_accounts['distribution_channel_id'].'},{appsecret:'.$official_accounts['appsecret'].'},{alias:'.$official_accounts['alias'].'},{name:'.$official_accounts['name'].'},{nickname:'.$official_accounts['nickname'].'},{head_img:'.$official_accounts['head_img'].'},{qrcode_url:'.$official_accounts['qrcode_url'].'},{principal_name:'.$official_accounts['principal_name'].'},{service_type_info:'.$official_accounts['service_type_info'].'},{func_info:'.$official_accounts['func_info'].'},{authorizer_refresh_token:'.$official_accounts['authorizer_refresh_token'].'},{is_auth:'.$official_accounts['is_auth'].'},{official_account_type:'.$official_accounts['official_account_type'].'},{is_enabled:'.$official_accounts['is_enabled'].'},{verify_txt:'.$official_accounts['verify_txt'].'}]');
  253. return 1;
  254. }
  255. } catch (\Exception $e) {
  256. // \Log("更新公众号日志:".$e);
  257. return 0;
  258. }
  259. }
  260. /**
  261. * 更新公众号信息
  262. */
  263. static function updateOfficialAccountTopNum($officialAccountPrams)
  264. {
  265. try {
  266. $official_accounts = OfficialAccount::officialAccountById($officialAccountPrams['id']);
  267. // dd($official_accounts);
  268. if (empty($official_accounts)) {
  269. return 2;
  270. } else {
  271. //$official_accounts['appsecret'] = $officialAccountPrams['appsecret'];
  272. $official_accounts['subscribe_top_num'] = $officialAccountPrams['subscribe_top_num'];
  273. $official_accounts['subscribe_day_maximum'] = $officialAccountPrams['subscribe_day_maximum'];
  274. $official_accounts['sort_no'] = $officialAccountPrams['sort_no'];
  275. $official_accounts->save();
  276. $officialAccountArray = $official_accounts->toArray();
  277. Redis::hset('official_account_info:app_id:' . $official_accounts['appid'], 'official_account_info', json_encode($officialAccountArray));
  278. // Redis::hset('official_account_info:app_id:'.$official_accounts['appid'], 'official_account_info', '[{appid:'.$official_accounts['appid'].'},{distribution_channel_id:'.$official_accounts['distribution_channel_id'].'},{appsecret:'.$official_accounts['appsecret'].'},{alias:'.$official_accounts['alias'].'},{name:'.$official_accounts['name'].'},{nickname:'.$official_accounts['nickname'].'},{head_img:'.$official_accounts['head_img'].'},{qrcode_url:'.$official_accounts['qrcode_url'].'},{principal_name:'.$official_accounts['principal_name'].'},{service_type_info:'.$official_accounts['service_type_info'].'},{func_info:'.$official_accounts['func_info'].'},{authorizer_refresh_token:'.$official_accounts['authorizer_refresh_token'].'},{is_auth:'.$official_accounts['is_auth'].'},{official_account_type:'.$official_accounts['official_account_type'].'},{is_enabled:'.$official_accounts['is_enabled'].'},{verify_txt:'.$official_accounts['verify_txt'].'}]');
  279. return 1;
  280. }
  281. } catch (\Exception $e) {
  282. \Log("updateOfficialAccountTopNum_ept:" . $e->getMessage());
  283. return 0;
  284. }
  285. }
  286. /**
  287. * 取消公众号授权
  288. */
  289. static function cancelAuthOfficialAccount($officialAccountPrams)
  290. {
  291. try {
  292. // $official_accounts = OfficialAccount::officialAccountByAppidAndChannelId($officialAccountPrams['appid'],$officialAccountPrams['distribution_channel_id']);
  293. $official_accounts = OfficialAccount::officialAccountByAppid($officialAccountPrams['appid']);
  294. if (empty($official_accounts)) {
  295. return 2;
  296. } else {
  297. $official_accounts['is_auth'] = 0;
  298. $official_accounts['cancel_auth_time'] = date("Y-m-d H:i:s");
  299. $official_accounts->save();
  300. $officialAccountArray = $official_accounts->toArray();
  301. Redis::hset('official_account_info:app_id:' . $official_accounts['appid'], 'official_account_info', json_encode($officialAccountArray));
  302. // Redis::hset('official_account_info:app_id:'.$official_accounts['appid'], 'official_account_info', '[{appid:'.$official_accounts['appid'].'},{distribution_channel_id:'.$official_accounts['distribution_channel_id'].'},{appsecret:'.$official_accounts['appsecret'].'},{alias:'.$official_accounts['alias'].'},{name:'.$official_accounts['name'].'},{nickname:'.$official_accounts['nickname'].'},{head_img:'.$official_accounts['head_img'].'},{qrcode_url:'.$official_accounts['qrcode_url'].'},{principal_name:'.$official_accounts['principal_name'].'},{service_type_info:'.$official_accounts['service_type_info'].'},{func_info:'.$official_accounts['func_info'].'},{authorizer_refresh_token:'.$official_accounts['authorizer_refresh_token'].'},{is_auth:'.$official_accounts['is_auth'].'},{official_account_type:'.$official_accounts['official_account_type'].'},{is_enabled:'.$official_accounts['is_enabled'].'},{verify_txt:'.$official_accounts['verify_txt'].'}]');
  303. return 1;
  304. }
  305. } catch (\Exception $e) {
  306. // \Log("取关公众号日志:".$e);
  307. return 0;
  308. }
  309. }
  310. /**
  311. * 获取服务号授权URL
  312. */
  313. static function officialAccountAuthUrl($officialAccountPrams)
  314. {
  315. try {
  316. $officialAuthUrl = OfficialAuthUrl::officialAuthUrl();
  317. $base_url = $officialAuthUrl['base_url'];
  318. $official_account_type = $officialAuthUrl['official_account_type'];
  319. $group_nick = $officialAuthUrl['group_nick'];
  320. $redirect_url = $officialAuthUrl['redirect_url'];
  321. $timestamp = time();
  322. $distribution_channel_id = $officialAccountPrams['distribution_channel_id'];
  323. $params = compact('official_account_type', 'group_nick', 'redirect_url', 'timestamp', 'distribution_channel_id');
  324. $params['sign'] = get_sign($params);
  325. return $base_url . http_build_query($params);
  326. } catch (\Exception $e) {
  327. // \Log("获取公众号授权URL日志:".$e);
  328. }
  329. }
  330. //-----------用户---------------
  331. /**
  332. * 添加用户
  333. */
  334. static function saveOfficialWechatUser($officialWechatUserPrams)
  335. {
  336. try {
  337. UserService::addUser($officialWechatUserPrams);
  338. return 1;
  339. } catch (\Exception $e) {
  340. // \Log("增加用户日志:".$e);
  341. return 0;
  342. }
  343. }
  344. /**
  345. * 获取用户
  346. */
  347. static function getOfficialWechatUser($officialWechatUserPrams)
  348. {
  349. return UserService::getById($officialWechatUserPrams['id']);
  350. }
  351. /**
  352. * 获取托管公众号列表
  353. */
  354. static function getTrusteeshipOfficialAccounts()
  355. {
  356. return OfficialAccount::getTrusteeshipOfficialAccounts();
  357. }
  358. /**
  359. * @apiVersion 1.0.0
  360. * @api {GET} OfficialAccount/check_gzh_ban 检查公众号是否被封
  361. * @apiGroup OfficialAccount
  362. * @apiName check_gzh_ban
  363. */
  364. static function check_gzh_ban()
  365. {
  366. \Log::info('check_gzh_ban_start');
  367. $officail_accounts = OfficialAccountService::officialAuthAccounts(1, 1);
  368. //\Log::info($officail_accounts);
  369. foreach ($officail_accounts as $key=>$officail_account) {
  370. try {
  371. // if($officail_account->appid != 'wxdbc486f1b4f6a8c3') {
  372. // \Log::info('not_in:'.$officail_account->appid);
  373. // continue;
  374. // }
  375. $timestamp = time();
  376. $params = array('gzh_app_id' => $officail_account->appid, "timestamp" => $timestamp);
  377. $sign = get_sign($params);
  378. \Log::info('check_gzh_ban_start,appid:' . $officail_account->appid);
  379. //\Log::info('check_gzh_ban_end,appid:'.$officail_account->appid);
  380. //\Log::info($resJson);
  381. $phone_arr = [
  382. '15858178353',// 君平
  383. '15868100210',// 栋波
  384. '18668029091',// 赵娃
  385. '18668420256' // 灵杰
  386. ];
  387. $test = false;
  388. $resJson = [];
  389. if($test){
  390. \Log::info('test_phone_send:'.$key);
  391. $phone_arr = ['18668420256'];
  392. $resJson = ['code'=>1,'data'=>0];
  393. if($key == 1){
  394. \Log::info('test_phone_send_end:'.$key);
  395. break;
  396. }
  397. }else{
  398. $resJson = self::getUserClient()->request("GET", "check_gzh_ban",
  399. ['query' => ['gzh_app_id' => $officail_account->appid, 'timestamp' => $timestamp, 'sign' => $sign], 'connect_timeout' => 10]
  400. )->getBody()->getContents();
  401. $resJson = object_to_array(json_decode($resJson));
  402. }
  403. $redis_key = 'check_gzh_ban_altert:appid:' . $officail_account->appid;
  404. //\Log::info('check_gzh_ban_redis_key:'.$redis_key);
  405. // TODO发送短信
  406. if ($resJson['code'] == 1 && $resJson['data'] == 0) {
  407. $redis_val = Redis::get($redis_key);
  408. \Log::info('check_gzh_ban_fail:' . $officail_account->appid . ' redis_val:' . $redis_val);
  409. if ($redis_val) {
  410. \Log::info('check_gzh_ban_already_notice_continue:' . $officail_account->appid . ' redis_val:' . $redis_val);
  411. continue;
  412. }
  413. // 获取公司和商务信息,短信限制20个字符的变量
  414. $distribution_channel_id = $officail_account->distribution_channel_id;
  415. $distribution_channel_info = Channel::get_distribution_channel_info($distribution_channel_id);
  416. $company_name = isset($distribution_channel_info->company_name)?$distribution_channel_info->company_name:'';
  417. $business_name = isset($distribution_channel_info->person_in_charge_name)?$distribution_channel_info->person_in_charge_name:'';
  418. \Log::info('check_gzh_ban_distribution_channel_id:'.$distribution_channel_id.' business_name:'.$business_name.' company_name:'.$company_name);
  419. foreach ($phone_arr as $phone) {
  420. // $res = SMS::send($phone, $content);
  421. $param = array('official_account_name'=> $officail_account->nickname,'business_name'=>$business_name,'company_name'=>$company_name);
  422. $res = AliSMS::send($phone,'forbidden_remind',$param);
  423. Redis::set($redis_key, date('Y-m-d H:i:s'));
  424. \Log::info('send_phone:' . $phone . ' appid:' . $officail_account->appid . ' res:' . json_encode($res));
  425. }
  426. // 日上限设置为0
  427. DB::table('official_accounts')->where(['appid' => $officail_account->appid])->update(['subscribe_day_maximum' => 0, 'updated_at' => date('Y-m-d H:i:s')]);
  428. } else {
  429. \Log::info('check_gzh_ban_suc:' . $officail_account->appid);
  430. // 解封了就删掉
  431. Redis::del($redis_key);
  432. }
  433. } catch (\Exception $e) {
  434. \Log::info($e);
  435. }
  436. }
  437. \Log::info('check_gzh_ban_end');
  438. return 1;
  439. //return response()->success(['status'=>'1']);
  440. }
  441. /**
  442. * @apiVersion 1.0.0
  443. * @api {GET} OfficialAccount/get_short_url 获取短连接
  444. * @apiGroup OfficialAccount
  445. * @apiName get_short_url
  446. */
  447. static function get_short_url($distribution_channel_id,$url)
  448. {
  449. $result = ['code'=>0,'url'=>'','msg'=>''];
  450. $officail_account = OfficialAccountService::getOneOfficialAuthAccounts($distribution_channel_id,1, 1);
  451. $gzh_app_id = isset($officail_account->appid)?$officail_account->appid:env('WECHAT_AUTH_APPID');
  452. \Log::info('get_short_url_start:'.$distribution_channel_id.' $gzh_app_id:'.$gzh_app_id.' url:'.$url);
  453. $short_url = '';
  454. try {
  455. $url = urlencode($url);
  456. $timestamp = time();
  457. $params = array('gzh_app_id' => $gzh_app_id,'url'=>$url, "timestamp" => $timestamp);
  458. $sign = get_sign($params);
  459. $resJson = self::getUserClient()->request("GET", "get_short_url",
  460. ['query' => ['gzh_app_id' => $gzh_app_id,'url'=>$url, 'timestamp' => $timestamp, 'sign' => $sign], 'connect_timeout' => 10]
  461. )->getBody()->getContents();
  462. $resJson = object_to_array(json_decode($resJson));
  463. \Log::info('get_short_url_end,appid:'.$gzh_app_id);
  464. \Log::info($resJson);
  465. $short_url = isset($resJson['data'])?$resJson['data']:'';
  466. $msg = isset($resJson['msg'])?$resJson['msg']:'';
  467. if(!empty($short_url)){
  468. $result['code'] = 1;
  469. $result['url'] = $short_url;
  470. }else{
  471. $result['msg'] = $msg;
  472. }
  473. } catch (\Exception $e) {
  474. \Log::info($e->getMessage());
  475. $result['msg'] = '短链接转化异常,请稍后再试!';
  476. }
  477. \Log::info('get_short_url_end:'.json_encode($result));
  478. return $result;
  479. }
  480. static public function getUserClient()
  481. {
  482. return new Client(['base_uri' => env('MEDIA_API_BASE_URI')]);
  483. }
  484. static public function getAuthClient(){
  485. return new Client(['base_uri' => env('AUTH_API_BASE_URI')]);
  486. }
  487. static public function get_account_appids($account){
  488. return OfficialAccount::get_account_appids($account);
  489. }
  490. static public function update_official_account_menu($appid){
  491. try {
  492. $timestamp = time();
  493. $params = array("set_type"=>"menu","authorizer_appid"=>$appid,"timestamp"=>$timestamp);
  494. $sign = get_sign($params);
  495. \Log::info('update_encrypt_menus_start,appid:'.$appid);
  496. $dataJson = self::getAuthClient()->request("GET","auto_set_menu_and_template_test",
  497. ['query'=>["set_type"=>"menu",'authorizer_appid'=>$appid,'timestamp'=>$timestamp,'sign'=>$sign],'connect_timeout' => 10]
  498. )->getBody()->getContents();
  499. //\Log::info($dataJson);
  500. \Log::info('update_official_account_menu_end,appid:'.$appid.' res:'.json_encode($dataJson));
  501. }
  502. catch( \Exception $e){
  503. \Log::info('update_official_account_menu_ept:'.$appid.' msg:'.$e->getMessage());
  504. }
  505. }
  506. /**
  507. * 获取渠道粉丝阈值信息
  508. */
  509. static public function getBusinessChannelData($channels, $distribution_channel_name = '', $official_account_name='',$isAll = false)
  510. {
  511. return OfficialAccount::getBusinessChannelData($channels, $distribution_channel_name, $official_account_name,$isAll);
  512. }
  513. /**
  514. * 获取置顶地址
  515. */
  516. static function getTopUrl($service_type_info = 2)
  517. {
  518. if($service_type_info == 1)
  519. {
  520. return 'https://help.'. env('WECHAT_CUSTOM_HOST') .'.com/top2.html';
  521. }else{
  522. return 'https://help.'. env('WECHAT_CUSTOM_HOST') .'.com/top.html';
  523. }
  524. }
  525. }