123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246 |
- <?php
- /**
- * 亿成推送队列任务
- * Created by PhpStorm.
- * User: phperstar
- * Date: 2018/6/10
- * Time: 下午3:38
- */
- namespace Jobs\Model\MTopic\Push;
- use Jobs\Model\Middleware;
- use Jobs\Dao\DMessageTemplate;
- use Jobs\Dao\DTmsMessageTemplate;
- use Jobs\Dao\DUserMessage;
- class MPush
- {
- private $objDMessageTemplate;
- public function __construct()
- {
- }
- /**
- * 推送消息
- * @param array $params 推送任务参数
- * @param string $callback_params 回调参数
- */
- public function push($params)
- {
- self::initDao($params['push_source']);
- // 1.读取推送任务模板
- $template_id = intval($params['push_template_id']);
- if(!$template_id){
- echo '未指定推送模板id'.PHP_EOL;
- return false;
- }
- $template_data = self::getMessageTemplateById($template_id);
- if(empty($template_data)){
- echo '指定的推送消息不存在'.PHP_EOL.$this->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;
- }
- }
|