Wechat.php 4.0 KB
<?php

namespace app\index\controller;

use addons\wechat\model\WechatAutoreply;
use addons\wechat\model\WechatCaptcha;
use addons\wechat\model\WechatContext;
use addons\wechat\model\WechatResponse;
use addons\wechat\model\WechatConfig;

use EasyWeChat\Foundation\Application;
use addons\wechat\library\Wechat as WechatService;
use addons\wechat\library\Config as ConfigService;
use think\Log;
use app\api\model\UserHouse;
use app\api\model\House;

/**
 * 微信接口
 */
class Wechat extends \think\addons\Controller
{

    public $app = null;

    public function _initialize()
    {
        parent::_initialize();
        $this->app = new Application(ConfigService::load());
    }

    /**
     * 微信API对接接口
     */
    public function api()
    {
        $this->app->server->setMessageHandler(function ($message) {

            $wechatService = new WechatService;

            $matches = null;
            $openid = $message->FromUserName;
            $to_openid = $message->ToUserName;
            $event = $message->Event;
            $eventkey = $message->EventKey ? $message->EventKey : $message->Event;

            switch ($message->MsgType) {
                case 'event': //事件消息
                    // //验证码消息
                    // if (in_array($event, ['subscribe', 'SCAN'])) {
                    //     return $eventkey;
                    // }
                    switch ($event) {
                        case 'subscribe'://添加关注
                            $key = explode('_', $eventkey);
                            $this->joinHouse($key[1],$openid);
                        case 'unsubscribe'://取消关注
                            return '';
                        case 'LOCATION'://获取地理位置
                            return '';
                        case 'VIEW': //跳转链接,eventkey为链接
                            return '';
                        case 'SCAN': //扫码
                            $this->joinHouse($key[1],$openid);
                        default:
                            break;
                    }
                    return "";
                case 'text': //文字消息
                case 'image': //图片消息
                case 'voice': //语音消息
                case 'video': //视频消息
                case 'location': //坐标消息
                case 'link': //链接消息
                default: //其它消息
                    return "";
            }
            return ""; //SUCCESS
        });
        $response = $this->app->server->serve();
        // 将响应输出
        $response->send();
    }

    /**
     * 加入小区
     */
    private function joinHouse($house_id,$openid){
        $user = WechatService::getUserByOpenid($openid);
        if($user){
            $info = UserHouse::get(['user_id'=>$user['id'],'house_id'=>$house_id]);
            $house = House::get($house_id);
            if(!empty($info) && $info['status'] == 2){
                return "您已加入【$house['name']】社区";
            }
            if(empty($info)){
                // 直接绑定成功
                $data = UserHouse::create([
                    'user_id' => $user['id'],
                    'house_id' => $house_id,
                    'name' => $user['nickname'],
                    'status' => 2,
                    'phone' => $user['mobile'],
                    'createtime' => time(),
                    'updatetime' => time()
                ]);
            }else{
                // 申请中改为已绑定
                $info->status = 2;
                $info->save();
            }
            // 添加当前社区
            if(empty($user['house_id'])){
                $user->house_id = $house_id;
                $user->save();
            }
            // 社区人数加1
            House::where('id',$house_id)->setInc('bindnum');
            return "您已成功加入【$house['name']】社区";
        }
        return "请先登录社区公众号";
    }

}