function reply_channel_subscribe($xml) { $from = $xml->FromUserName; $to = $xml->ToUserName; $type = $xml->MsgType; $event = strtolower($xml->Event); $event_key = $xml->EventKey; $ticket = $xml->Ticket; $in_event = array(WxReplyKeyword::EVENT_TYPE_SCAN, WxReplyKeyword::EVENT_TYPE_SUBSCRIBE); if ($type == WxReplyKeyword::KEYWORD_TYPE_EVENT && in_array($event, $in_event)) { $channel_info = WxReplyKeyword::check_wechat_subscribe_scene_id($event_key); if (!$channel_info) { return false; } $channel_id = $channel_info->id; $wx_channel_info = WxChannelInfo::get($channel_id); if (!$wx_channel_info || $wx_channel_info->status != WxChannelInfo::STATUS_YES || $wx_channel_info->qrcode_ticket != $ticket) { return false; } $keyword = WxReplyKeyword::CHANNEL_SUBSCRIBE_PREFIE . $channel_id; $where = "type = '{$type}' and keyword = '{$keyword}'"; $kw = WxReplyKeyword::findOne($where, 'id desc'); if ($kw) { $item = WxReplyItem::get($kw->item_id); if ($item) { $wrap = $item->type == 'news' ? true : false; $str = $item->content; $reply_list = @json_decode($str, true); if ($reply_list) { $this->send_reply_list($to, $from, $reply_list, $wrap); } Logger::info("扫描渠道关注二维码, 粉丝关注事件, 自动回复成功, 微信openid : {$from} ,服务号微信id {$to} 渠道ID {$channel_info->id}"); return true; } } } return false; }
function save($ctx) { _render('form'); $id = intval($_POST['id']); $m = WxReplyItem::get($id); if ($id && !$m) { _redirect($this->_list_url()); return; } $type = $_POST['type']; $title = $_POST['title']; $desc = $_POST['desc']; $img_url = $_POST['img_url']; $link = $_POST['link']; $content = $_POST['content']; if (!$type) { $ctx->errmsg = "空内容1."; return; } $reply_list = array(); foreach ($type as $index => $mt) { if ($mt == 'text') { $c = $content[$index]; if (!strlen($c)) { continue; } $reply_list[] = array('type' => $mt, 'content' => $c); } else { if ($mt == 'news') { $t = $title[$index]; $d = $desc[$index]; $i = $img_url[$index]; $l = $link[$index]; if (!strlen($t) || !strlen($i) || !strlen($l)) { continue; } $channel_info = WxReplyKeyword::check_channel_subscribe_keyword($_POST['keywords']); if ($channel_info) { // 所有链接带上pcode $arr_query = parse_url($l); parse_str($arr_query['query'], $output); $output['pcode'] = $channel_info->promotion_code; $str_query = http_build_query($output); $l = $arr_query['scheme'] . '://' . $arr_query['host'] . $arr_query['path'] . '?' . $str_query; } $reply_list[] = array('type' => $mt, 'title' => $t, 'desc' => $d, 'img_url' => $i, 'link' => $l); } else { $ctx->errmsg = "异常错误!"; return; } } } if (!$reply_list) { $ctx->errmsg = "空内容2."; return; } $content = Text::json_encode($reply_list); if (!$m) { $m = WxReplyItem::save(array('status' => 0, 'type' => 'mixed', 'content' => $content)); } else { $m->update(array('content' => $content)); $m = WxReplyItem::get($id); } $keyword_type = $_POST['keyword_type']; $m->reset_keywords($_POST['keywords'], $keyword_type); _redirect($this->_list_url()); return; }