5月学习总结微信小程序客服回复开发

接收的方法

    public function event($data)
    {
        $redis = $this->redis = new \Redis;
        $redis->connect('127.0.0.1', 6379);
        $config = new Wchat();
        $MsgType = @$data['MsgType'];
        $message = array();
        $lastcontent = array();
        switch ($MsgType) {
            case 'event':
                unset($data['id']);
                $eventdata = $data;
                $event = new Event;
                $event->save($eventdata);
                $response = $event->save();
                $WxUser = (new WxUser());
                $openid = $data['openid'];
                if(!empty($data['SessionFrom'])){
                    \cache('kf_session_from'.$data['openid'],$data['SessionFrom'],3600);
                }
                $UserExit = $WxUser::where(['openid' => $openid])->find();
                if (!$UserExit) {
                    $wxData = array();
                    $wxData['openid'] = $data['openid'];
                    $wxData['create_time'] = date('Y-m-d H:i:s');
                    $wxData['from_app'] = $data['ToUserName'];
                    $getwxagain = (new Wchat())->getWxUserByOpenIdAndFromApp($wxData['openid'],$wxData['from_app']);
                    if(!empty($getwxagain['unionid'])){
                        $wxData['unionid'] = $getwxagain['unionid'];
                    }
                    $user_id = $WxUser::insertGetId($wxData);
                } else {
                    $user_id = $UserExit->user_id;
                }
                //@通知socket
                $messageMsg = array();
                $messageMsg['type'] = 'login';
                $messageMsg['user_id'] = $user_id;
                $messageMsg['time'] = date('Y-m-d H:i:s');
                $message['message'] = $messageMsg;
                (new Contab())->message($message);

                break;
            case 'text':
                (new Wchat())->Intelligence_reply($data);
                unset($data['id']);
                $lastcontent['msgtype'] = 'text';
                $lastcontent['content'] = $data['Content'];
                $lastcontent['time'] = $data['timestamp'];
                $messagedata = $data;
                $message = new Message;
                $message->save($messagedata);
                $response = $message->save();
                break;
            case 'image':
                unset($data['id']);
                $lastcontent['msgtype'] = 'image';
                $lastcontent['content'] =$data['PicUrl'];
//                    array(
//                    'PicUrl'=>$data['Title'],
////                    'PagePath'=>$data['PagePath'],
////                    'ThumbUrl'=>$data['ThumbUrl'],
////                    'ThumbMediaId'=>$data['ThumbMediaId'],
//                );
                $lastcontent['time'] = $data['timestamp'];
                $messagedata = $data;
                $message = new Message;
                $message->save($messagedata);
                $response = $message->save();
                break;
            case 'miniprogrampage':
                unset($data['id']);
                $messagedata = $data;
                $lastcontent['msgtype'] = 'miniprogrampage';
                $WechatModel  = new \app\api\model\Wechat();
                $orderid = '';
                $orderid = $WechatModel->getOrderIdByMiniPage($data['PagePath']);
                $lastcontent['content'] = array(
                    'Title'=>$data['Title'],
                    'PagePath'=>$data['PagePath'],
                    'ThumbUrl'=>$data['ThumbUrl'],
                    'ThumbMediaId'=>$data['ThumbMediaId'],
                    'orderId'=>$orderid,
                );
                $lastcontent['time'] = $data['timestamp'];
                $message = new Message;
                $message->save($messagedata);
                $response = $message->save();
                break;
            default:
                # code...

                break;
        }

        //@先判断是否有talk
        if ($MsgType != 'event') {
            $talk = (new Talk());
            $WxUser = (new WxUser());
            $talkContent = (new TalkContent());
            $openid = $data['openid'];

            $user_id = $WxUser::where(['openid' => $openid])->find();
            if(empty($user_id)){
                $wxData = array();
                $wxData['openid'] = $data['openid'];
                $wxData['create_time'] = date('Y-m-d H:i:s');
                $wxData['from_app'] = $data['ToUserName'];
                $user_id = $WxUser::insertGetId($wxData);
            }else{
                $user_id = $user_id->user_id;
            }
            $talkList = $talk::where('user_id', $user_id)->find();
            if (count($talkList) < 1) {
                //@第一次进入
                $talkdata['user_id'] = $user_id;
                $talkdata['last_time'] = date('Y-m-d H:i:s');
                $talkdata['create_time'] = date('Y-m-d H:i:s');
                $talkdata['event'] = '';
                $talkdata['customer_ids'] = 0;
                $talkdata['last_customer_id'] = 0;
                $talkdata['is_transfer'] = 0;
                $talkdata['session_from'] = '';
                $talkdata['last_content'] = json_encode($lastcontent);
                $talk_id = $talk::insertGetId($talkdata);
                //@分配客服
                (new Contab())->index('todo');
            } else {
                //@查找上一次会话的负责人并更新时间信息
                $talk_id = $talkList->talk_id;
                $talkdata['last_customer_id'] = $talkList->last_customer_id;
                $talkdata['last_time'] = date('Y-m-d H:i:s');
                $talkdata['last_content'] = json_encode($lastcontent);
                $talkdata['see'] =0;
                $talkdata['is_customer'] =0;
                $talk::where(['talk_id' => $talk_id])->update($talkdata);
            }
            $talkContentData = array();
            $talkContentData['talk_id'] = $talk_id;
            $talkContentData['content'] = json_encode($lastcontent);
            $talkContentData['create_time'] = date('Y-m-d H:i:s');
            $talkContentData['is_customer'] = 0;
            $talkContentData['customer_id'] = 0;
            $talkContent::insert($talkContentData);
            //@通知socket
            $messageMsg = array();
            $messageMsg['type'] = 'message';
            $messageMsg['talk_id'] = $talk_id;
            $messageMsg['user_id'] = $user_id;
            $messageMsg['customer_id'] = $talkdata['last_customer_id'];
            $messageMsg['content'] = $lastcontent;
            $messageMsg['time'] = date('Y-m-d H:i:s');
            $message['message'] = $messageMsg;
            (new Contab())->message($message);
        }
    }

回复的方法

      public function reply($input ='')
    {
        $config = new Wchat();
        if(!$input){
            $input = input();
        }
        $message = isset($input['message']) ? $input['message'] : 0;
        $ReplyWxData = array();
        $message = json_decode($message, true);
        $content = $message['content'];
        $type = $content['msgtype'];
        $user_id = $message['user_id'];
        //缓存from_app
         $cache_from_app_by_user_id = $config->get_from_app_by_userid($user_id);
        if ($cache_from_app_by_user_id == null) {
            $data['error'] = 1;
            $data['msg'] = '找不到相应公众号,请确认配置路径无误';
            //写入日志
            file_put_contents("log.txt", $data['msg'], FILE_APPEND);
            return $this->success(200, $data);
        }
        $wechatInfo = $config->getConfig($cache_from_app_by_user_id);
        if (!$wechatInfo) {
            return $this->success(200, 'token获取失败');
        }
        $access_token = $wechatInfo->access_token;
        $token = $wechatInfo->token;
        $WxUser = (new WxUser());
        $UserExit = $WxUser::where(['user_id' => $user_id])->find();
        $openid = $UserExit->openid;
        if (empty($openid)) {
            return $this->success(200, 'openid为空');
        }
        switch ($type) {
            //@文字
            case 'text':
                $ReplyWxData['content'] = $data['text'] = $content['content'];
                break;
            //@图片
            case 'image':
                $file_path = $content['content'];
                $ReplyWxData['thumb_url'] = 'http://c.haoxiaec.com/' . $file_path;
                $media = new Media();
                $mediaRescult = $media->mediaUpload($file_path, 'image', $access_token);
                $media_id = $mediaRescult->media_id;
                if(!empty($content['intelligence'])){
                    unlink($content['content']);
                }
                $ReplyWxData['media_id'] = $data['media_id'] = $media_id;
                break;
            //@图文链接
            case 'link':
                $ReplyWxData['description'] = $data['description'] = $content['description'];
                $ReplyWxData['title'] = $data['title'] = $content['title'];
                $ReplyWxData['url'] = $data['curl'] = $content['url'];
                $file_path =$content['thumb_url'];
                $ReplyWxData['thumb_url'] = $data['thumb_url'] = $file_path;
                break;

            //@小程序卡片
            case 'miniprogrampage':
                $ReplyWxData['title'] = $data['title'] = $content['title'];
                $ReplyWxData['pagepath'] = $data['pagepath'] = $content['pagepath'];
                $file_path = $content['thumb_url'];
                $ReplyWxData['thumb_url'] =$file_path;
                $media = new Media();
                $mediaRescult = $media->mediaUpload($file_path, 'image', $access_token);
                $media_id = $mediaRescult->media_id;
                $ReplyWxData['thumb_media_id'] = $data['thumb_media_id'] = $media_id;
            default:
                break;
        }
        $ReplyWxData['touser'] = $data['openid'] = $openid;
        $ReplyWxData['msgtype'] = $data['type'] = $type;
        $result = $config->reply($access_token, $data);
        $ResultSatus = json_decode($result, true);
        $ReplyWxData['errcode'] = $ResultSatus['errcode'];
        $ReplyWxData['create_at'] = time();
        $ReplyWx = new ReplyWx();
        $ReplyWx->save($ReplyWxData);

        //@保存客服消息
//        $talk_content = array(
//            'talk_id' => $message['talk_id'],
//            'content' => json_encode($content),
//            'create_time' => date('Y-m-d H:i:s'),
//            'customer_id' => $message['customer_id'],
//            'is_customer' => '1',
//        );
        $model = new \app\api\model\Wechat();
//        $talk = array(
//            'talk_id'=>$message['talk_id'],
//            'is_customer'=>1,
//            'last_content'=>json_encode($content),
//            'last_time'=>date('Y-m-d H:i:s')
//        );
//        if(!empty($message['check_out'])){
//            unset($talk['last_time']);
//        }
        //客服发送的数据在swoole 异步保存了。
//        $model->save_talk($talk);
//        $model->save_talk_content($talk_content);
//        $response =$ReplyWx->save();
        return $this->success(200, $result);

    }

回复reply

    public function reply($access_token,$data=array()){
        $baseUrl ='https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token=';
        $url =$baseUrl.$access_token;
        $openid = $data['openid'];
        $type = $data['type'];
        switch ($type){
            //@回复文本
            //@文本内容....<a href="http://www.qq.com" data-miniprogram-appid="appid" data-miniprogram-path="pages/index/index">点击跳小程序</a>
            case 'text':
                $text = $data['text'];
                $content = '{
                    "touser":"' . $openid . '",
                    "msgtype":"text",
                    "text":
                    {
                         "content":"' . $text . '"
                    }
                }';
                break;
            //@回复图文
            case 'image':
                $media_id = $data['media_id'];
                $content = '{
                    "touser":"'.$openid.'",
                    "msgtype":"image",
                    "image":
                    {
                      "media_id":"'.$media_id.'"
                    }
                }';
                break;
            //@回复图文链接
            case 'link':
                $title = $data['title'];
                $description = $data['description'];
                $curl = $data['curl'];
                $thumb_url = $data['thumb_url'];
                $content = '{
                    "touser": "'.$openid.'",
                    "msgtype": "link",
                    "link": {
                          "title": "'.$title.'",
                          "description": "'.$description.'",
                          "url": "'.$curl.'",
                          "thumb_url": "'.$thumb_url.'"
                    }
                }';
                break;
            //@回复小程序卡片
            case 'miniprogrampage':
                $title = $data['title'];
                $pagepath = $data['pagepath'];
                $thumb_media_id = $data['thumb_media_id'];
                $content = '{
                    "touser":"'.$openid.'",
                    "msgtype":"miniprogrampage",
                    "miniprogrampage":{
                        "title":"'.$title.'",
                        "pagepath":"'.$pagepath.'",
                        "thumb_media_id":"'.$thumb_media_id.'"
                    }
                }';

                break;
        }
        return $this->request_by_curl($url,$content);
    }

上传图片类, 获取medie_id

<?php

/* 
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
namespace app\api\model;
use app\api\model\WechatBase;
class Media extends WechatBase{
    public $tempUrl     ='https://api.weixin.qq.com/cgi-bin/media/';
    /*上传临时素材,有消息3天,适合客服消息用
     * type文件类型,图片(image)、语音(voice)、视频(video)和缩略图(thumb)
     * access_token微信临时token
     */
    public  function mediaUpload($file_path,$type,$access_token) {
       $url =$this->tempUrl.'upload?access_token='.$access_token.'&type='.$type;
       $data = $this->post_file($url, $file_path);
        return  json_decode($data);
    }

}

post 发送方法

    //post发送类
    public function request_by_curl($remote_server, $post_string) {
        $ch = curl_init($remote_server);
        curl_setopt($ch, CURLOPT_HEADER, 0);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_POST, 1);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $post_string);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
        $data = curl_exec($ch);
        return $data;
    }

回复的方法

    /*
     * 回复微信二维码
     */
    function wx_qrcode_reply($data){
        //@生成二维码
        //@模拟发送图片给该用户
        //@读取缓存中进入带的参数的值   如果没有参数, 则返回重试
        $sessionfrom = \cache('kf_session_from'.$data['openid']);
        if(empty($sessionfrom)){$sessionfrom =0;}
        $path= (new WxQrcode())->getEwm($sessionfrom,2);
        $postdata['content']['msgtype'] = 'image';
        $postdata['content']['content'] = $path;
        $postdata['content']['intelligence'] = 'youzhi';
        $postdata['msgtype'] = 'text';
        $postdata['user_id'] = (new Wechat())->getUserIdByOpenId($data['openid']);
        $result['message'] = json_encode($postdata);
        (new ControllerWechat())->reply($result);
        return false;
    }

    /**
     * 发送小程序图片
     * @param $data
     */
    function miniprogrampage_reply($data){
        $postdata['content']['msgtype'] = 'miniprogrampage';
        $postdata['content']['title'] =$data['content']['title'];
        $postdata['content']['pagepath'] =$data['content']['pagepath'];
        $postdata['content']['thumb_url'] = 'thumb/home.jpg';
        $postdata['user_id'] = (new Wechat())->getUserIdByOpenId($data['openid']);
        $result['message'] = json_encode($postdata);
        (new ControllerWechat())->reply($result);
    }
    /*
     * 回复图文类
     */
        function link_reply($data){
            $postdata['content']['msgtype'] = 'link';
            $postdata['content']['title'] =$data['content']['title'];
            $postdata['content']['description'] =$data['content']['description'];
            $postdata['content']['thumb_url'] = $data['content']['thumb_url'];
            $postdata['content']['url'] = $data['content']['url'];
            $postdata['user_id'] = (new Wechat())->getUserIdByOpenId($data['openid']);
            $result['message'] = json_encode($postdata);
            (new ControllerWechat())->reply($result);
        }
        function image_reply($data){
            $postdata['content']['msgtype'] = 'image';
            $postdata['content']['content'] = $data['content']['thumb_url'];
            $postdata['content']['intelligence'] = '';
            $postdata['user_id'] = (new Wechat())->getUserIdByOpenId($data['openid']);
            $result['message'] = json_encode($postdata);
            (new ControllerWechat())->reply($result);
        }

猜你喜欢

转载自blog.csdn.net/qq_22823581/article/details/80271624