OfficialAccountController.php 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  1. <?php
  2. /**
  3. * @Name
  4. * @Description
  5. * @Author 刘学玺
  6. * @Date 2024/1/23 15:55
  7. */
  8. namespace App\Http\Controllers\Admin\Wechat;
  9. use App\Http\Services\Admin\Wechat\OfficialAccountService;
  10. use Illuminate\Http\Request;
  11. use Illuminate\Support\Facades\Log;
  12. use Overtrue\LaravelWeChat\EasyWeChat;
  13. class OfficialAccountController
  14. {
  15. public function serve(Request $request)
  16. {
  17. Log::info('request arrived.'); # 注意:Log 为 Laravel 组件,所以它记的日志去 Laravel 日志看,而不是 EasyWeChat 日志
  18. $wechat = EasyWeChat::officialAccount();
  19. $server = $wechat->getServer();
  20. try {
  21. $server->addEventListener('subscribe', function ($message, \Closure $next) {
  22. Log::info('subscribe.' . $message['ToUserName']);
  23. // return [
  24. // 'MsgType' => 'text',
  25. // 'ToUserName' => $message['FromUserName'],
  26. // 'FromUserName' => $message['ToUserName'],
  27. // 'Content' => 'nihao',
  28. // 'CreateTime' => time(),
  29. // ];
  30. return '感谢您关注 EasyWeChat!';
  31. });
  32. } catch (\Throwable $e) {
  33. Log::info('subscribe error.');
  34. }
  35. $server->addEventListener('unsubscribe', function ($message, \Closure $next) {
  36. Log::info('unsubscribe.' . $message);
  37. $next($message);
  38. });
  39. try {
  40. $server->addMessageListener('text', function ($message) {
  41. Log::info('text.' . $message);
  42. // return 'text!';
  43. return [
  44. 'touser' => $message['FromUserName'],
  45. 'template_id' => 'PBaedliMneE_syJZDD1bhpEKlsKwk0WlUqSHZ8uG1c8',
  46. 'url' => 'https://easywechat.com',
  47. 'data' => [
  48. 'key1' => 'VALUE',
  49. 'key2' => 'VALUE2',
  50. 'key3' => 'VALUE3',
  51. 'key4' => 'VALUE4',
  52. 'key5' => 'VALUE5',
  53. ],
  54. ];
  55. });
  56. } catch (\Throwable $e) {
  57. Log::info('error.');
  58. }
  59. //
  60. // $server->setMessageHandler(function($message) use ($app){
  61. // if ($message->MsgType=='event') {
  62. // $user_openid = $message->FromUserName;
  63. // if ($message->Event=='subscribe') {
  64. //         //下面是你点击关注时,进行的操作
  65. // $user_info['unionid'] = $message->ToUserName;
  66. // $user_info['openid'] = $user_openid;
  67. // $userService = $app->user;
  68. // $user = $userService->get($user_info['openid']);
  69. // $user_info['subscribe_time'] = $user['subscribe_time'];
  70. // $user_info['nickname'] = $user['nickname'];
  71. // $user_info['avatar'] = $user['headimgurl'];
  72. // $user_info['sex'] = $user['sex'];
  73. // $user_info['province'] = $user['province'];
  74. // $user_info['city'] = $user['city'];
  75. // $user_info['country'] = $user['country'];
  76. // $user_info['is_subscribe'] = 1;
  77. //          //下面有些是WxStudent相关的方法,就是一些数据库的操作,由于数据库不同,要执行的操作也不一样,所以就只写了一个方法名
  78. // if (WxStudent::weixin_attention($user_info)) {
  79. // return '欢迎关注';
  80. // }else{
  81. // return '您的信息由于某种原因没有保存,请重新关注';
  82. // }
  83. // }else if ($message->Event=='unsubscribe') {
  84. //         //取消关注时执行的操作,(注意下面返回的信息用户不会收到,因为你已经取消关注,但别的操作还是会执行的<如:取消关注的时候,要把记录该用户从记录微信用户信息的表中删掉>)
  85. // if (WxStudent::weixin_cancel_attention($user_openid)) {
  86. // return '已取消关注';
  87. // }
  88. // }
  89. // }
  90. //
  91. // });
  92. $response = $server->serve();
  93. Log::info('request arrived.');
  94. return response($response->getBody());
  95. }
  96. public function oauth(Request $request)
  97. {
  98. return (new OfficialAccountService())->oauth($request->only(['redirect_url','scopes']));
  99. }
  100. public function oauth_callback(Request $request)
  101. {
  102. return (new OfficialAccountService())->oauth_callback($request->only(['code']));
  103. }
  104. public function signature()
  105. {
  106. return (new OfficialAccountService())->signature();
  107. }
  108. }