objDMessageTemplate->error(); return false; } if($template_data['status'] != 1){ echo '指定的推送消息未启用'.PHP_EOL; return false; } // 2.获取推送的内容 $message_content = self::paseTemplateContent($template_data['template_content'], $params['push_template_params']); if($message_content){ // 3.开启推送 self::pushMessage($message_content, $template_data, $params); } } /* * 初始化库 */ public function initDao($push_source) { switch ($push_source){ case 'wuliu': $this->objDMessageTemplate = new DTmsMessageTemplate('wuliu'); break; case 'pifabbc': $this->objDMessageTemplate = new DMessageTemplate('newcloud'); break; default: $this->objDMessageTemplate = new DMessageTemplate('cloud'); break; } } /** * 获取推送模板数据 * @param int $template_id 模板id */ public function getMessageTemplateById($template_id) { return $this->objDMessageTemplate->get($template_id); } /** * 渲染模板消息中的参数 * @param string $template_content 模板内容 * @param array $template_params 模板参数 * @return string */ public function paseTemplateContent($template_content, $template_params) { // 比对模板参数数量和传输过来的替换的参数数量是否一致 preg_match_all('/<{(.*?)}>/', $template_content, $matchs); if(count($matchs[0]) != count($template_params)){ var_dump($matchs); echo '要替换的模板参数数量和实际模板参数数量不一致'.PHP_EOL; return false; } foreach ($template_params as $key => $value){ if(empty($value) && $value != ''){ echo '模板变量'.$key.'的值为空'.PHP_EOL; return false; } if(!in_array($key,$matchs[1])){ echo '传输过来的模板变量'.$key.'不在模板中'.PHP_EOL; return false; } } return str_replace($matchs[0], $template_params, $template_content); } /** * 开启推送 * @param string $message_content 推送内容 * @param int $push_to_userId 推送给的用户 * @param array $message_template_data 推送任务模板数据 */ public function pushMessage($message_content, $message_template_data, $params) { if(empty($message_content)){ echo '推送内容为空'.PHP_EOL; return false; } $message_template_data['send_type'] = json_decode($message_template_data['send_type'],true); $appPushData = [ 'push_source' => $params['push_source'], 'pushPlatForm' => $params['pushPlatForm'], 'pushType' => $params['pushType'], 'alias' => $params['alias'], 'content' => $message_content, 'apns_production' => $params['apns_production'], 'extras' => isset($params['extras']) ? $params['extras'] : [], ]; foreach ($message_template_data['send_type'] as $key => $value){ switch($value){ case 1: // app 推送消息 self::appPush($appPushData); break; case 2: // 站内消息 self::siteMessagePush($message_content, $params['push_to_userId'], $params['push_source'], $message_template_data, $params['order_id']); break; } } echo '推送完成'.PHP_EOL; return true; } /** * 极光app推送方式 */ public function appPush($appPushData) { /* 老版请求云端 $i = 1; do{ $url = 'http://devcloud.91youxian.net/v2/baseinfo/aurora/jpush?message='.$message_content.'&user_id='.$push_to_userId; $result = request($url, null, 5); if($result['httpcode'] != 200){ file_put_contents('/tmp/jipush.log',date('Y-m-d H:i:s').var_export($result,true).PHP_EOL,FILE_APPEND); echo '请求极光推送失败'.PHP_EOL; } $i ++; sleep(1); }while($result['httpcode'] != 200 && $i <= 3);*/ $i = 1; do{ switch ($appPushData['pushType']){ case 'all': $swResult = Middleware::getInstance('ThirdPartyService')->sendSwoole('Jpush', 'broadcastPush', $appPushData); break; case 'alias': $swResult = Middleware::getInstance('ThirdPartyService')->sendSwoole('Jpush', 'aliasPush', $appPushData); break; } if( !$swResult['state'] ){ file_put_contents('/tmp/jipush.log',date('Y-m-d H:i:s').var_export($swResult['data'],true).PHP_EOL,FILE_APPEND); echo '请求极光推送失败'.PHP_EOL; }else{ $jpushResult = $swResult['data']; } $i ++; sleep(1); }while( !$swResult['state'] && $i <= 3); echo '请求极光推送完成'.json_encode($jpushResult).PHP_EOL; return true; } /** * 站内信推送方式 */ public function siteMessagePush($message_content, $push_to_userId, $push_source, $message_template_data, $order_id) { if($push_source == 'pifabbc'){ $objDUserMessage = new DUserMessage('pifabbc'); }else{ $objDUserMessage = new DUserMessage('bbc'); } if($message_template_data['type'] == 1){ $order_id = 0; } $data = [ 'message_name' => $message_template_data['template_name'], 'message_content' => $message_content, 'message_from' => 1, 'message_to' => $push_to_userId, 'type' => $message_template_data['type'], 'create_time' => time(), 'order_id' => $order_id, ]; $result = $objDUserMessage->insert($data); if(!$result){ echo '操作数据库失败'.PHP_EOL; return false; } echo '站内消息推送完成'.PHP_EOL; return true; } }