小说推广数据系统

ZZYService.php 2.4KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. <?php
  2. namespace App\Services;
  3. use App\Log;
  4. use App\RedisModel;
  5. class ZZYService
  6. {
  7. const API_KEY = '108198c9419';
  8. const API_SECRET = 'eb5fafdc146e3cd2327ebc517b638336';
  9. const API_BASE_URL = 'https://openapi.818tu.com/';
  10. const CHANNEL_LIST = 'partners/channel/channels';
  11. const ORDER_LIST = 'partners/channel/orders';
  12. const ACCESS_TOKEN_GET = 'partners/channel/mp/access_token';
  13. const MEMBER_LIST_GET = 'partners/channel/members/list';
  14. const ACCESS_TOKEN_RDS_KEY = 'NOVEL:ZzyAccessToken_';
  15. const PLATFORM_ID = 1;
  16. /**
  17. * 计算签名
  18. * @param $params array url参数
  19. * @return string 签名
  20. * */
  21. public static function sign($params)
  22. {
  23. ksort($params);
  24. $segments = [];
  25. foreach ($params as $key => $val) {
  26. $segments[] = "$key=$val";
  27. }
  28. return md5(self::API_SECRET . implode('&', $segments));
  29. }
  30. /*
  31. * 获取AccessToken
  32. * */
  33. public static function getAccessToken($channelId)
  34. {
  35. # 先从Redis获取,为空则调用掌中云接口
  36. $accessToken = RedisModel::get(self::ACCESS_TOKEN_RDS_KEY . $channelId);
  37. if(empty($accessToken)) {
  38. $param = [
  39. 'channel_id' => $channelId,
  40. 'key' => ZZYService::API_KEY,
  41. ];
  42. # 获取签名
  43. $param['sign'] = self::sign($param);
  44. $requestUri = self::API_BASE_URL . self::ACCESS_TOKEN_GET . '?' . http_build_query($param);
  45. $response = HttpService::httpGet($requestUri);
  46. if($response === false)
  47. Log::logError('掌中云公众账号密钥获取失败' . $requestUri, $param, 'AccessTokenZZY');
  48. $responseData = json_decode($response, true);
  49. if(isset($responseData['data']['token'])) {
  50. # 存入redis
  51. $accessToken = $responseData['data']['token'];
  52. RedisModel::set(self::ACCESS_TOKEN_RDS_KEY . $channelId, $accessToken);
  53. RedisModel::expire(self::ACCESS_TOKEN_RDS_KEY . $channelId, ($responseData['data']['expires_in']-10) >0 ? $responseData['data']['expires_in']-10 : $responseData['data']['expires_in']);
  54. } else {
  55. Log::logError('AccessToken请求响应异常,渠道编号:'.$channelId, $responseData, 'AccessTokenZZY');
  56. }
  57. }
  58. return $accessToken;
  59. }
  60. }