OfficialAccountService.php 31 KB

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