WechatMenuServices.php 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. <?php
  2. // +----------------------------------------------------------------------
  3. // | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
  4. // +----------------------------------------------------------------------
  5. // | Copyright (c) 2016~2020 https://www.crmeb.com All rights reserved.
  6. // +----------------------------------------------------------------------
  7. // | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
  8. // +----------------------------------------------------------------------
  9. // | Author: CRMEB Team <admin@crmeb.com>
  10. // +----------------------------------------------------------------------
  11. namespace app\services\wechat;
  12. use app\dao\wechat\WechatMenuDao;
  13. use app\services\BaseServices;
  14. use crmeb\exceptions\AdminException;
  15. use crmeb\services\WechatService;
  16. use function GuzzleHttp\Psr7\str;
  17. /**
  18. * 微信菜单
  19. * Class WechatMenuServices
  20. * @package app\services\wechat
  21. */
  22. class WechatMenuServices extends BaseServices
  23. {
  24. /**
  25. * 构造方法
  26. * WechatMenuServices constructor.
  27. * @param WechatMenuDao $dao
  28. */
  29. public function __construct(WechatMenuDao $dao)
  30. {
  31. $this->dao = $dao;
  32. }
  33. /**
  34. * 获取微信菜单
  35. * @return array|mixed
  36. */
  37. public function getWechatMenu()
  38. {
  39. $menus = $this->dao->value(['key' => 'wechat_menus'], 'result');
  40. return $menus ? json_decode($menus, true) : [];
  41. }
  42. /**
  43. * 保存微信菜单
  44. * @param array $buttons
  45. * @return bool
  46. */
  47. public function saveMenu(array $buttons)
  48. {
  49. try {
  50. WechatService::menuService()->add($buttons);
  51. if ($this->dao->count(['key' => 'wechat_menus', 'result' => json_encode($buttons)])) {
  52. $this->dao->update('wechat_menus', ['result' => json_encode($buttons), 'add_time' => time()], 'key');
  53. } else {
  54. $this->dao->save(['key' => 'wechat_menus', 'result' => json_encode($buttons), 'add_time' => time()]);
  55. }
  56. return true;
  57. } catch (\Exception $e) {
  58. if (strstr($e->getMessage(), 'Request AccessToken fail. response')) {
  59. $msgData = str_replace('Request AccessToken fail. response: ', '', $e->getMessage());
  60. $msgData = json_decode($msgData, true);
  61. $errcode = $msgData['errcode'] ?? 0;
  62. if ($errcode == 40164) {
  63. throw new AdminException('您得ip不再白名单中,请前往腾讯微信公众平台添加ip白名单');
  64. }
  65. }
  66. if (strstr($e->getMessage(), 'invalid weapp appid')) {
  67. throw new AdminException('您填写得appid无效,请检查');
  68. }
  69. throw new AdminException(WechatService::getMessage($e->getMessage()));
  70. }
  71. }
  72. }