From cfdc9d26ccb6dedecff69fcaa6bc4a454606cfaf Mon Sep 17 00:00:00 2001 From: devil_gong Date: Mon, 29 Oct 2018 18:23:11 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B6=88=E6=81=AF=E5=8F=91=E9=80=81=EF=BC=8C?= =?UTF-8?q?=E6=94=AF=E6=8C=81=E5=A4=9A=E9=80=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../AlipayLifeMessageController.class.php | 205 ++++++++++++--- .../Admin/Lang/zh-cn/alipaylifemessage.php | 11 +- .../AlipayLifeMessage/ContentIndex.html | 127 +++++++++ .../AlipayLifeMessage/ContentSaveInfo.html | 63 +++++ .../View/Default/AlipayLifeMessage/Index.html | 86 ++---- .../View/Default/AlipayLifeMessage/Nav.html | 6 +- .../Default/AlipayLifeMessage/SaveInfo.html | 133 +++++----- .../AlipayLifeMessage/SaveInfoContent.html | 101 ------- .../View/Default/AlipayLifeUser/Index.html | 2 +- .../Application/Common/Common/function.php | 10 +- .../Application/Library/AlipayLife.class.php | 164 ++++++------ .../Temp/8cde93cbd070139d84f31d26f8ea8f4d.php | 2 +- .../Temp/a58f8070835be94249ea77f3601c6647.php | 2 +- .../Service/AlipayLifeService.class.php | 246 +++++++++++++----- .../Admin/Default/Css/AlipayLifeMessage.css | 74 ++++++ .../Admin/Default/Js/AlipayLifeMessage.js | 80 +++++- .../2018/10/29/2018102918192237114.png | Bin 0 -> 21102 bytes .../2018/10/29/2018102918193238310.png | Bin 0 -> 5618 bytes .../2018/10/29/2018102918194343693.png | Bin 0 -> 1829 bytes .../2018/10/29/2018102918195581164.png | Bin 0 -> 1975 bytes 20 files changed, 895 insertions(+), 417 deletions(-) create mode 100644 service/Application/Admin/View/Default/AlipayLifeMessage/ContentIndex.html create mode 100644 service/Application/Admin/View/Default/AlipayLifeMessage/ContentSaveInfo.html delete mode 100644 service/Application/Admin/View/Default/AlipayLifeMessage/SaveInfoContent.html create mode 100644 service/Public/Upload/alipay_life_message/2018/10/29/2018102918192237114.png create mode 100644 service/Public/Upload/alipay_life_message/2018/10/29/2018102918193238310.png create mode 100644 service/Public/Upload/alipay_life_message/2018/10/29/2018102918194343693.png create mode 100644 service/Public/Upload/alipay_life_message/2018/10/29/2018102918195581164.png diff --git a/service/Application/Admin/Controller/AlipayLifeMessageController.class.php b/service/Application/Admin/Controller/AlipayLifeMessageController.class.php index 5d08649d8..ed7195ce5 100644 --- a/service/Application/Admin/Controller/AlipayLifeMessageController.class.php +++ b/service/Application/Admin/Controller/AlipayLifeMessageController.class.php @@ -42,7 +42,7 @@ class AlipayLifeMessageController extends CommonController public function Index() { // 参数 - $param = array_merge($_POST, $_GET); + $params = array_merge($_POST, $_GET); // 模型对象 $m = M('AlipayLifeMessage'); @@ -55,7 +55,7 @@ class AlipayLifeMessageController extends CommonController $page_param = array( 'number' => $number, 'total' => $m->where($where)->count(), - 'where' => $param, + 'where' => $params, 'url' => U('Admin/AlipayLifeMessage/Index'), ); $page = new \Library\Page($page_param); @@ -65,7 +65,7 @@ class AlipayLifeMessageController extends CommonController $list = $this->SetDataHandle($list); // 参数 - $this->assign('param', $param); + $this->assign('params', $params); // 分页 $this->assign('page_html', $page->GetPageHtml()); @@ -74,7 +74,7 @@ class AlipayLifeMessageController extends CommonController $this->assign('common_send_status_list', L('common_send_status_list')); // 消息类型 - $this->assign('alipay_life_message_type_list', L('alipay_life_message_type_list')); + $this->assign('alipay_life_message_msg_type_list', L('alipay_life_message_msg_type_list')); // 发送类型 $this->assign('alipay_life_message_send_type_list', L('alipay_life_message_send_type_list')); @@ -98,7 +98,7 @@ class AlipayLifeMessageController extends CommonController if(!empty($data)) { $common_send_status_list = L('common_send_status_list'); - $alipay_life_message_type_list = L('alipay_life_message_type_list'); + $alipay_life_message_msg_type_list = L('alipay_life_message_msg_type_list'); $alipay_life_message_send_type_list = L('alipay_life_message_send_type_list'); foreach($data as &$v) { @@ -106,23 +106,16 @@ class AlipayLifeMessageController extends CommonController $v['status_name'] = $common_send_status_list[$v['status']]['name']; // 消息类型 - $v['type_name'] = $alipay_life_message_type_list[$v['type']]['name']; + $v['type_name'] = $alipay_life_message_msg_type_list[$v['msg_type']]['name']; // 发送状态 $v['send_type_name'] = $alipay_life_message_send_type_list[$v['send_type']]['name']; - // 分类名称 - $category_all = M('AlipayLifeMessageCategoryJoin')->where(['alipay_life_id'=>$v['id']])->getField('alipay_life_category_id', true); - $v['alipay_life_category_text'] = M('AlipayLifeMessageCategory')->where(['id'=>['in', $category_all]])->getField('name', true); - - // image_url - $v['image_url'] = empty($v['image_url']) ? '' : C('IMAGE_HOST').$v['image_url']; - - // 生活号分类 - $v['category_all'] = empty($v['alipay_life_category_id']) ? '' : M('AlipayLifeCategory')->where(['id'=>['in', json_decode($v['alipay_life_category_id'], true)]])->getField('name', true); - // 生活号 - $v['alipay_life_name'] = empty($v['alipay_life_id']) ? '' : M('AlipayLife')->where(['id'=>$v['alipay_life_id']])->getField('name'); + $v['alipay_life_all'] = empty($v['alipay_life_ids']) ? '' : M('AlipayLife')->where(['id'=>['in', json_decode($v['alipay_life_ids'], true)]])->getField('name', true); + + // 用户 + $v['alipay_openid'] = empty($v['user_id']) ? '' : M('User')->where(['id'=>$v['user_id']])->getField('alipay_openid'); // 时间 $v['send_startup_time'] = empty($v['send_startup_time']) ? '' : date('Y-m-d H:i:s', $v['send_startup_time']); @@ -160,7 +153,7 @@ class AlipayLifeMessageController extends CommonController } if(I('type', -1) > -1) { - $where['type'] = intval(I('type', 0)); + $where['msg_type'] = intval(I('type', 0)); } if(I('send_type', -1) > -1) { @@ -189,31 +182,56 @@ class AlipayLifeMessageController extends CommonController */ public function SaveInfo() { - // 轮播图片信息 + // 数据 $data = empty($_REQUEST['id']) ? array() : M('AlipayLifeMessage')->find(I('id')); $this->assign('data', $data); - // 发送状态 - $this->assign('common_send_status_list', L('common_send_status_list')); - // 消息类型 - $this->assign('alipay_life_message_type_list', L('alipay_life_message_type_list')); + $this->assign('alipay_life_message_msg_type_list', L('alipay_life_message_msg_type_list')); // 单用户发消息用户信息 - $alipay_openid = empty($_GET['user_id']) ? '' : M('User')->where(['id'=>intval(I('user_id'))])->getField('alipay_openid'); + $alipay_openid = ''; + $user_id = 0; + $alipay_life_user_id = 0; + if(!empty($_GET['user_id'])) + { + $user_id = intval(I('user_id')); + $alipay_life_user_id = intval(I('alipay_life_user_id')); + } + if(!empty($data)) + { + $user_id = $data['user_id']; + $alipay_life_user_id = $data['alipay_life_user_id']; + } + if(!empty($user_id)) + { + $alipay_openid = M('User')->where(['id'=>$user_id])->getField('alipay_openid'); + } + $this->assign('user_id', $user_id); + $this->assign('alipay_life_user_id', $alipay_life_user_id); $this->assign('alipay_openid', $alipay_openid); // 消息发送类型 $this->assign('alipay_life_message_send_type_list', L('alipay_life_message_send_type_list')); - $this->assign('send_type', empty($alipay_openid) ? 1 : 0); + $send_type = (isset($data['send_type']) && $data['send_type'] == 0) ? $data['send_type'] : (empty($alipay_openid) ? 1 : 0); + $this->assign('send_type', $send_type); // 生活号 + $alipay_life_list = []; + $alipay_life_ids_all = []; if(!empty($_GET['alipay_life_id'])) { - $alipay_life_list = M('AlipayLife')->field('id,name')->where(['id'=>intval(I('alipay_life_id'))])->select(); - } else { - $alipay_life_list = []; + $alipay_life_ids_all = [intval(I('alipay_life_id'))]; } + if(!empty($data['alipay_life_ids'])) + { + $alipay_life_ids_all = json_decode($data['alipay_life_ids'], true); + } + if(!empty($alipay_life_ids_all)) + { + $alipay_life_list = M('AlipayLife')->field('id,name')->where(['id'=>['in', $alipay_life_ids_all]])->select(); + } + $this->assign('alipay_life_ids_all', $alipay_life_ids_all); $this->assign('alipay_life_list', $alipay_life_list); // 生活号分类 @@ -227,10 +245,100 @@ class AlipayLifeMessageController extends CommonController // 参数 $this->assign('params', array_merge($_POST, $_GET)); - $this->assign('nav_type', I('nav_type', 0)); + $this->assign('msg_type', I('msg_type', 0)); $this->display('SaveInfo'); } + + /** + * [Index 消息内容列表] + * @author Devil + * @blog http://gong.gg/ + * @version 0.0.1 + * @datetime 2016-12-06T21:31:53+0800 + */ + public function ContentIndex() + { + // 参数 + $params = array_merge($_POST, $_GET); + + // 条件 + $where = ['alipay_life_message_id' => intval($params['message_id'])]; + + // 获取列表 + $list = M('AlipayLifeMessageContent')->where($where)->order('id desc')->select(); + $list = $this->SetDataHandleContent($list); + + // 消息主数据 + $data = empty($_REQUEST['message_id']) ? array() : M('AlipayLifeMessage')->find(I('message_id')); + $this->assign('data', $data); + $this->assign('msg_type', $data['msg_type']); + + // 参数 + $this->assign('params', $params); + + // 数据列表 + $this->assign('list', $list); + $this->assign('list_count', count($list)); + $this->display('ContentIndex'); + } + + /** + * 消息内容处理 + * @author Devil + * @blog http://gong.gg/ + * @version 1.0.0 + * @date 2018-10-29 + * @desc description + * @param [array] $data [轮播图片数据] + * @return [array] [处理好的数据] + */ + private function SetDataHandleContent($data) + { + if(!empty($data)) + { + $common_send_status_list = L('common_send_status_list'); + $alipay_life_message_msg_type_list = L('alipay_life_message_msg_type_list'); + $alipay_life_message_send_type_list = L('alipay_life_message_send_type_list'); + foreach($data as &$v) + { + // image_url + $v['image_url'] = empty($v['image_url']) ? '' : C('IMAGE_HOST').$v['image_url']; + + // 时间 + $v['add_time'] = date('Y-m-d H:i:s', $v['add_time']); + $v['upd_time'] = empty($v['upd_time']) ? '' : date('Y-m-d H:i:s', $v['upd_time']); + } + } + return $data; + } + + /** + * 内容添加/编辑页面 + * @author Devil + * @blog http://gong.gg/ + * @version 1.0.0 + * @date 2018-10-29 + * @desc description + */ + public function ContentSaveInfo() + { + // 主数据 + $message = empty($_REQUEST['message_id']) ? array() : M('AlipayLifeMessage')->find(I('message_id')); + + // 数据 + $data = empty($_REQUEST['id']) ? array() : M('AlipayLifeMessageContent')->find(I('id')); + $this->assign('data', $data); + + // 消息类型 + $this->assign('alipay_life_message_msg_type_list', L('alipay_life_message_msg_type_list')); + $this->assign('msg_type', $message['msg_type']); + + // 参数 + $this->assign('params', array_merge($_POST, $_GET)); + $this->display('ContentSaveInfo'); + } + /** * [Save 生活号消息保存] * @author Devil @@ -250,6 +358,25 @@ class AlipayLifeMessageController extends CommonController $this->ajaxReturn($ret['msg'], $ret['code'], $ret['data']); } + /** + * [ContentSave 生活号消息内容保存] + * @author Devil + * @blog http://gong.gg/ + * @version 0.0.1 + * @datetime 2016-12-25T22:36:12+0800 + */ + public function ContentSave() + { + // 是否ajax请求 + if(!IS_AJAX) + { + $this->error(L('common_unauthorized_access')); + } + + $ret = AlipayLifeService::MessageContentAdd($_POST); + $this->ajaxReturn($ret['msg'], $ret['code'], $ret['data']); + } + /** * [Delete 生活号消息删除] * @author Devil @@ -293,5 +420,25 @@ class AlipayLifeMessageController extends CommonController $ret = AlipayLifeService::MessageSubmit($_POST); $this->ajaxReturn($ret['msg'], $ret['code'], $ret['data']); } + + /** + * 生活号搜索 + * @author Devil + * @blog http://gong.gg/ + * @version 1.0.0 + * @date 2018-10-29 + * @desc description + */ + public function Search() + { + // 是否ajax请求 + if(!IS_AJAX) + { + $this->error(L('common_unauthorized_access')); + } + + $ret = AlipayLifeService::AlipayLifeSearch($_POST); + $this->ajaxReturn($ret['msg'], $ret['code'], $ret['data']); + } } ?> \ No newline at end of file diff --git a/service/Application/Admin/Lang/zh-cn/alipaylifemessage.php b/service/Application/Admin/Lang/zh-cn/alipaylifemessage.php index 3e988d5a4..ceb441433 100755 --- a/service/Application/Admin/Lang/zh-cn/alipaylifemessage.php +++ b/service/Application/Admin/Lang/zh-cn/alipaylifemessage.php @@ -10,6 +10,7 @@ return array( // 添加/编辑 'alipay_life_message_add_name' => '生活号消息创建', + 'alipay_life_message_content_title' => '生活号消息内容', 'alipay_life_message_life_text' => '生活号', 'alipay_life_message_life_format' => '请选择生活号', @@ -34,8 +35,9 @@ return array( 'alipay_life_message_keywords_text' => '标题', - 'alipay_life_message_type_text' => '消息类型', - 'alipay_life_message_type_list' => array( + 'alipay_life_message_msg_type_text' => '消息类型', + 'alipay_life_message_msg_type_format' => '请选择消息类型', + 'alipay_life_message_msg_type_list' => array( 0 => array('value' => 0, 'name' => '文本'), 1 => array('value' => 1, 'name' => '图文'), ), @@ -50,5 +52,10 @@ return array( 'alipay_life_message_user_text' => '给用户发送消息', 'alipay_life_message_startup_time_text' => '发送启动时间', 'alipay_life_message_success_time_text' => '发送完成时间', + + 'alipay_life_message_optional_text' => '可选', + 'alipay_life_message_selected_text' => '已选', + 'alipay_life_message_selected_all_text' => '全选', + 'alipay_life_message_content_text' => '内容', ); ?> \ No newline at end of file diff --git a/service/Application/Admin/View/Default/AlipayLifeMessage/ContentIndex.html b/service/Application/Admin/View/Default/AlipayLifeMessage/ContentIndex.html new file mode 100644 index 000000000..f3246030f --- /dev/null +++ b/service/Application/Admin/View/Default/AlipayLifeMessage/ContentIndex.html @@ -0,0 +1,127 @@ + + + +
+
+ + {{:L('alipay_life_message_content_title')}} + {{:L('common_operation_back')}} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
{{:L('alipay_life_message_title_text')}}{{:L('alipay_life_message_content_text')}}{{:L('alipay_life_message_image_url_text')}}{{:L('alipay_life_message_url_text')}}{{:L('alipay_life_message_action_name_text')}}{{:L('common_more_name')}}{{:L('common_operation_name')}}
+ {{:L('common_on_fill_in_the_text')}}{{$v.title}} + + {{:L('common_on_fill_in_the_text')}}{{$v.content}} + + + + + + + {{:L('common_on_fill_in_images')}} + + + {{:L('common_on_fill_in_the_text')}}{{$v.url}} + + {{:L('common_on_fill_in_the_text')}}{{$v.action_name}} + + {{:L('common_see_more_name')}} +
+
+
+

{{:L('common_detail_content')}}

+ × +
+
+
+
{{:L('alipay_life_message_title_text')}}
+
{{:L('common_on_fill_in_the_text')}}{{$v.title}}
+ +
{{:L('alipay_life_message_content_text')}}
+
{{:L('common_on_fill_in_the_text')}}{{$v.content}}
+ +
{{:L('alipay_life_message_image_url_text')}}
+
+ + + + {{:L('common_on_fill_in_images')}} + +
+ +
{{:L('alipay_life_message_url_text')}}
+
{{:L('common_not_set_text')}}{{$v.url}}
+ +
{{:L('alipay_life_message_action_name_text')}}
+
{{:L('common_on_fill_in_the_text')}}{{$v.action_name}}
+ +
{{:L('common_create_time_name')}}
+
{{$v.add_time}}
+ +
{{:L('common_upd_time_name')}}
+
{{$v.upd_time}}
+
+
+
+
+
+ + + + + + + +
{{:L('common_not_data_tips')}}
+ + + + + {{$page_html}} + + +
+
+ + + + + \ No newline at end of file diff --git a/service/Application/Admin/View/Default/AlipayLifeMessage/ContentSaveInfo.html b/service/Application/Admin/View/Default/AlipayLifeMessage/ContentSaveInfo.html new file mode 100644 index 000000000..1147886d4 --- /dev/null +++ b/service/Application/Admin/View/Default/AlipayLifeMessage/ContentSaveInfo.html @@ -0,0 +1,63 @@ + + + +
+
+ +
+ + + {{:L('alipay_life_message_add_name')}} + {{:L('common_operation_back')}} + + +
+ + {{$data.title}}" required /> +
+ +
+ + +
+ + +
+ + + {{$data.image_url}}" required /> + +
+ + + + + + +
+ +
+ + {{$data.url}}" required /> +
+ +
+ + {{$data.action_name}}" /> +
+
+
+ + + +
+
+ +
+
+ + + + + \ No newline at end of file diff --git a/service/Application/Admin/View/Default/AlipayLifeMessage/Index.html b/service/Application/Admin/View/Default/AlipayLifeMessage/Index.html index 8800c1757..94167b923 100755 --- a/service/Application/Admin/View/Default/AlipayLifeMessage/Index.html +++ b/service/Application/Admin/View/Default/AlipayLifeMessage/Index.html @@ -6,37 +6,37 @@
- value="{{$param.keyword}}" /> + value="{{$params.keyword}}" /> -
none"> +
none">
- value="{{$param.time_start}}"/> + value="{{$params.time_start}}"/> ~ - value="{{$param.time_end}}"/> + value="{{$params.time_end}}"/>
@@ -53,13 +53,8 @@ - + - - - - - @@ -71,27 +66,6 @@ - - - - - diff --git a/service/Application/Admin/View/Default/AlipayLifeMessage/Nav.html b/service/Application/Admin/View/Default/AlipayLifeMessage/Nav.html index feaf91458..b13a72aa1 100644 --- a/service/Application/Admin/View/Default/AlipayLifeMessage/Nav.html +++ b/service/Application/Admin/View/Default/AlipayLifeMessage/Nav.html @@ -1,7 +1,7 @@
    - -
  • class="am-active" data-type="{{$v.value}}"> - {{$v.name}} + +
  • class="am-active" data-type="{{$v.value}}"> + {{$v.name}}
\ No newline at end of file diff --git a/service/Application/Admin/View/Default/AlipayLifeMessage/SaveInfo.html b/service/Application/Admin/View/Default/AlipayLifeMessage/SaveInfo.html index abad3fcbc..d104b3bcd 100755 --- a/service/Application/Admin/View/Default/AlipayLifeMessage/SaveInfo.html +++ b/service/Application/Admin/View/Default/AlipayLifeMessage/SaveInfo.html @@ -11,83 +11,86 @@ {{:L('common_operation_back')}} - - - +
+ + +
- - -
- - -
- - -
-
+ + + + + + +
+ + +
- -
- - -
-
-
- - + +
-
- - -
- -
- - -
- - -
- - - - -
- -
- -
- - -
- -
- - + + +
+ +
+ + + +
+
+ {{:implode(',', json_decode($data['alipay_life_ids'], true))}}" data-validation-message="{{:L('alipay_life_message_life_format')}}" required /> +
+
{{:L('alipay_life_message_optional_text')}}
+
    +
    {{:L('common_not_data_tips')}}
    +
+
+ +
+
{{:L('alipay_life_message_selected_text')}}
+
    +
    none">{{:L('common_not_data_tips')}}
    + +
  • + {{$v.name}} + +
  • +
    +
+
+
+
- + {{$params.id}}" />
diff --git a/service/Application/Admin/View/Default/AlipayLifeMessage/SaveInfoContent.html b/service/Application/Admin/View/Default/AlipayLifeMessage/SaveInfoContent.html deleted file mode 100644 index 7245ac9e1..000000000 --- a/service/Application/Admin/View/Default/AlipayLifeMessage/SaveInfoContent.html +++ /dev/null @@ -1,101 +0,0 @@ - - - -
-
- -
- - - {{:L('alipay_life_message_add_name')}} - {{:L('common_operation_back')}} - - - - - - -
- - -
- - -
- - -
-
- - -
- - -
-
- -
- - - - -
-
- -
- - -
- -
- - -
- - -
- - - - -
- -
- -
- - -
- -
- - -
-
-
- - -
- - -
-
- - - - - \ No newline at end of file diff --git a/service/Application/Admin/View/Default/AlipayLifeUser/Index.html b/service/Application/Admin/View/Default/AlipayLifeUser/Index.html index c01945c3c..bf02ad4bf 100755 --- a/service/Application/Admin/View/Default/AlipayLifeUser/Index.html +++ b/service/Application/Admin/View/Default/AlipayLifeUser/Index.html @@ -142,7 +142,7 @@
diff --git a/service/Application/Common/Common/function.php b/service/Application/Common/Common/function.php index eb2e0de64..48918cfc0 100755 --- a/service/Application/Common/Common/function.php +++ b/service/Application/Common/Common/function.php @@ -17,17 +17,17 @@ * @desc 异步运行url地址方法 * @param [string] $url [url地址 支持get参数] */ -function SyncJob($url) +function SyncJob($url, $port = 80, $time = 30) { $url_str = str_replace(array('http://', 'https://'), '', $url); $location = strpos($url_str, '/'); $host = substr($url_str, 0, $location); - header("Content-Type: text/html; charset=utf-8"); - $fp = fsockopen($host, 80, $errno, $errstr, 3); + $fp = fsockopen($host, $port, $errno, $errstr, $time); if($fp) { - $out = "GET $url HTTP/1.1\r\n"; - $out .= "Host: $host\r\n"; + $out = "GET ".str_replace($host, '', $url_str)." HTTP/1.1\r\n"; + $out .= "Host: ".$host."\r\n"; + $out .= "Content-type: application/x-www-form-urlencoded\r\n"; $out .= "Connection: Close\r\n\r\n"; fputs($fp, $out); fclose($fp); diff --git a/service/Application/Library/AlipayLife.class.php b/service/Application/Library/AlipayLife.class.php index 2b2d1d820..0fab1bf23 100644 --- a/service/Application/Library/AlipayLife.class.php +++ b/service/Application/Library/AlipayLife.class.php @@ -349,6 +349,84 @@ class AlipayLife ]; } + /** + * 消息发送 + * @author Devil + * @blog http://gong.gg/ + * @version 1.0.0 + * @date 2018-10-24 + * @desc description + * @param [array] $data [输入参数] + */ + public function MessageSend($params = []) + { + // 参数处理 + $p = $this->RequestCommonParams(); + $p['method'] = $params['method']; + $biz_content = [ + 'msg_type' => ($params['msg_type'] == 0) ? 'text' : 'image-text', + 'chat' => isset($params['chat']) ? intval($params['chat']) : 0, + ]; + + // 消息内容 + if(empty($params['content']) || !is_array($params['content'])) + { + return ['status'=>-1, 'msg'=>'消息内容有误']; + } + + // 发送类型 单条 + if($params['send_type'] == 0) + { + if(empty($params['alipay_openid'])) + { + return ['status'=>-1, 'msg'=>'指定用户openid不能为空']; + } + $biz_content['to_user_id'] = $params['alipay_openid']; + } + + // 消息类型 + if($params['msg_type'] == 1) + { + $biz_content['articles'] = []; + foreach($params['content'] as $k=>$v) + { + if($k < 10) + { + $biz_content['articles'][] = [ + 'title' => $v['title'], + 'desc' => $v['content'], + 'image_url' => $v['out_image_url'], + 'url' => $v['url'], + 'action_name' => $v['action_name'], + ]; + } + } + } else { + $biz_content['text'] = ['content'=>$params['content'][0]['content']]; + } + $p['biz_content'] = json_encode($biz_content, JSON_UNESCAPED_UNICODE); + + // 生成签名 + $p['sign'] = $this->MyRsaSign($this->ArrayToUrlString($p)); + + // 请求接口 + $result = $this->HttpRequest('https://openapi.alipay.com/gateway.do', $p); + $key = str_replace('.', '_', $p['method']).'_response'; + + // 验证签名 + if(!$this->SyncRsaVerify($result, $key)) + { + return ['status'=>-1, 'msg'=>'签名验证错误']; + } + + // 状态 + if(isset($result[$key]['code']) && $result[$key]['code'] == 10000) + { + return ['status'=>0, 'msg'=>'发送成功']; + } + return ['status'=>-100, 'msg'=>$result[$key]['sub_msg'].'['.$result[$key]['code'].']']; + } + /** * 单条消息发送 * @author Devil @@ -360,46 +438,8 @@ class AlipayLife */ public function CustomSend($params = []) { - // 参数处理 - $p = $this->RequestCommonParams(); - $p['method'] = 'alipay.open.public.message.custom.send'; - $biz_content = [ - 'to_user_id' => $params['alipay_openid'], - 'msg_type' => ($params['msg_type'] == 0) ? 'text' : 'image-text', - 'chat' => 0, - ]; - if($params['msg_type'] == 1) - { - $biz_content['articles'][] = [ - 'title' => isset($params['title']) ? $params['title'] : '', - 'desc' => $params['content'], - 'image_url' => $params['out_image_url'], - 'url' => $params['url'], - 'action_name' => isset($params['action_name']) ? $params['action_name'] : '', - ]; - } else { - $biz_content['text'] = ['content'=>$params['content']]; - } - $p['biz_content'] = json_encode($biz_content, JSON_UNESCAPED_UNICODE); - - // 生成签名 - $p['sign'] = $this->MyRsaSign($this->ArrayToUrlString($p)); - - // 请求接口 - $result = $this->HttpRequest('https://openapi.alipay.com/gateway.do', $p); - - // 验证签名 - if(!$this->SyncRsaVerify($result, 'alipay_open_public_message_custom_send_response')) - { - return ['status'=>-1, 'msg'=>'签名验证错误']; - } - - // 状态 - if(isset($result['alipay_open_public_message_custom_send_response']['code']) && $result['alipay_open_public_message_custom_send_response']['code'] == 10000) - { - return ['status'=>0, 'msg'=>'发送成功']; - } - return ['status'=>-100, 'msg'=>$result['alipay_open_public_message_custom_send_response']['sub_msg'].'['.$result['alipay_open_public_message_custom_send_response']['code'].']']; + $params['method'] = 'alipay.open.public.message.custom.send'; + return $this->MessageSend($params); } /** @@ -413,48 +453,8 @@ class AlipayLife */ public function GroupSend($params = []) { - // 参数处理 - $p = $this->RequestCommonParams(); - $p['method'] = 'alipay.open.public.message.total.send'; - $biz_content = [ - 'msg_type' => ($params['msg_type'] == 0) ? 'text' : 'image-text', - 'chat' => 0, - ]; - if($params['msg_type'] == 1) - { - $biz_content['articles'][] = [ - 'title' => $params['title'], - 'desc' => $params['content'], - 'image_url' => $params['out_image_url'], - 'url' => $params['url'], - 'action_name' => isset($params['action_name']) ? $params['action_name'] : '', - ]; - } else { - $biz_content['text'] = [ - 'content' => $params['content'], - 'title' => $params['title'], - ]; - } - $p['biz_content'] = json_encode($biz_content, JSON_UNESCAPED_UNICODE); - - // 生成签名 - $p['sign'] = $this->MyRsaSign($this->ArrayToUrlString($p)); - - // 请求接口 - $result = $this->HttpRequest('https://openapi.alipay.com/gateway.do', $p); - - // 验证签名 - if(!$this->SyncRsaVerify($result, 'alipay_open_public_message_total_send_response')) - { - return ['status'=>-1, 'msg'=>'签名验证错误']; - } - - // 状态 - if(isset($result['alipay_open_public_message_total_send_response']['code']) && $result['alipay_open_public_message_total_send_response']['code'] == 10000) - { - return ['status'=>0, 'msg'=>'发送成功']; - } - return ['status'=>-100, 'msg'=>$result['alipay_open_public_message_total_send_response']['sub_msg'].'['.$result['alipay_open_public_message_total_send_response']['code'].']']; + $params['method'] = 'alipay.open.public.message.total.send'; + return $this->MessageSend($params); } /** diff --git a/service/Application/Runtime/Temp/8cde93cbd070139d84f31d26f8ea8f4d.php b/service/Application/Runtime/Temp/8cde93cbd070139d84f31d26f8ea8f4d.php index a908931fa..b6f7ecd91 100644 --- a/service/Application/Runtime/Temp/8cde93cbd070139d84f31d26f8ea8f4d.php +++ b/service/Application/Runtime/Temp/8cde93cbd070139d84f31d26f8ea8f4d.php @@ -1,3 +1,3 @@ \ No newline at end of file diff --git a/service/Application/Runtime/Temp/a58f8070835be94249ea77f3601c6647.php b/service/Application/Runtime/Temp/a58f8070835be94249ea77f3601c6647.php index 863cdab25..754b0f684 100644 --- a/service/Application/Runtime/Temp/a58f8070835be94249ea77f3601c6647.php +++ b/service/Application/Runtime/Temp/a58f8070835be94249ea77f3601c6647.php @@ -1,3 +1,3 @@ \ No newline at end of file diff --git a/service/Application/Service/AlipayLifeService.class.php b/service/Application/Service/AlipayLifeService.class.php index f15bd6eb5..bdf6da61f 100644 --- a/service/Application/Service/AlipayLifeService.class.php +++ b/service/Application/Service/AlipayLifeService.class.php @@ -29,15 +29,64 @@ class AlipayLifeService return $ret; } - // 开始处理业务 + // 数据项 $data = [ 'user_id' => isset($params['user_id']) ? intval($params['user_id']) : 0, 'alipay_life_user_id' => isset($params['alipay_life_user_id']) ? intval($params['alipay_life_user_id']) : 0, - 'alipay_life_id' => empty($params['alipay_life_id']) ? 0 : intval($params['alipay_life_id']), - 'alipay_life_category_id' => empty($params['alipay_life_category_id']) ? '' : json_encode(explode(',', $params['alipay_life_category_id'])), - 'type' => intval($params['type']), + 'alipay_life_ids' => empty($params['alipay_life_ids']) ? 0 : json_encode(explode(',', $params['alipay_life_ids'])), + 'msg_type' => intval($params['msg_type']), 'send_type' => intval($params['send_type']), 'status' => 0, + ]; + + // 开始处理业务 + $status = false; + $m = M('AlipayLifeMessage'); + if(empty($params['id'])) + { + $data['add_time'] = time(); + if($m->add($data)) + { + $status = true; + $msg = L('common_operation_add_success'); + } else { + $msg = L('common_operation_add_error'); + } + } else { + $data['upd_time'] = time(); + if($m->where(array('id'=>intval(I('id'))))->save($data)) + { + $status = true; + $msg = L('common_operation_edit_success'); + } else { + $msg = L('common_operation_edit_error'); + } + } + + return DataReturn($msg, $status ? 0 : -100); + } + + /** + * 消息添加 + * @author Devil + * @blog http://gong.gg/ + * @version 1.0.0 + * @date 2018-10-24 + * @desc description + * @param [array] $params [输入参数] + */ + public static function MessageContentAdd($params = []) + { + // 参数校验 + $ret = self::MessageContentAddCheck($params); + if($ret['code'] != 0) + { + return $ret; + } + + // 开始处理业务 + $data = [ + 'alipay_life_message_id' => intval($params['message_id']), 'title' => I('title', '', null, $params), 'content' => I('content', '', null, $params), 'url' => I('url', '', null, $params), @@ -57,14 +106,15 @@ class AlipayLifeService $data['image_url'] = $ret['data']['url']; // 图片上传至支付宝 - $alipay_life_id = $data['alipay_life_id']; - if(empty($alipay_life_id)) + $alipay_life_message = M('AlipayLifeMessage')->find($data['alipay_life_message_id']); + if(!empty($alipay_life_message)) { - if($data['send_type'] == 1 && !empty($data['alipay_life_category_id'])) + if($alipay_life_message['send_type'] == 1 && !empty($alipay_life_message['alipay_life_ids'])) { - $alipay_life_id = M('AlipayLifeCategoryJoin')->where(['alipay_life_category_id'=>json_decode($data['alipay_life_category_id'], true)[0]])->getField('alipay_life_id'); + $alipay_life_ids = json_decode($alipay_life_message['alipay_life_ids'], true); + $$alipay_life_id = isset($alipay_life_ids[0]) ? $alipay_life_ids[0] : ''; } else { - $alipay_life_id = M('AlipayLifeUser')->where(['id'=>$data['alipay_life_user_id']])->getField('alipay_life_id'); + $alipay_life_id = M('AlipayLifeUser')->where(['id'=>$alipay_life_message['alipay_life_user_id']])->getField('alipay_life_id'); } } if(!empty($alipay_life_id)) @@ -76,11 +126,31 @@ class AlipayLifeService } } - if(M('AlipayLifeMessage')->add($data)) + // 开始处理业务 + $status = false; + $m = M('AlipayLifeMessageContent'); + if(empty($params['id'])) { - return DataReturn(L('common_operation_add_success'), 0); + $data['add_time'] = time(); + if($m->add($data)) + { + $status = true; + $msg = L('common_operation_add_success'); + } else { + $msg = L('common_operation_add_error'); + } + } else { + $data['upd_time'] = time(); + if($m->where(array('id'=>intval(I('id'))))->save($data)) + { + $status = true; + $msg = L('common_operation_edit_success'); + } else { + $msg = L('common_operation_edit_error'); + } } - return DataReturn(L('common_operation_add_error'), -100); + + return DataReturn($msg, $status ? 0 : -100); } /** @@ -98,7 +168,7 @@ class AlipayLifeService $p = [ [ 'checked_type' => 'in', - 'key_name' => 'type', + 'key_name' => 'msg_type', 'checked_data' => [0,1], 'error_msg' => '消息类型有误', ], @@ -108,6 +178,65 @@ class AlipayLifeService 'checked_data' => [0,1], 'error_msg' => '发送类型有误', ], + ]; + $ret = params_checked($params, $p); + if($ret !== true) + { + return DataReturn($ret, -1); + } + + // 发送类型 + $p = []; + if($params['send_type'] == 0) + { + $p[] = [ + 'checked_type' => 'empty', + 'key_name' => 'user_id', + 'error_msg' => '指定用户id有误', + ]; + $p[] = [ + 'checked_type' => 'empty', + 'key_name' => 'alipay_life_user_id', + 'error_msg' => '指定用户生活号关联id有误', + ]; + $p[] = [ + 'checked_type' => 'empty', + 'key_name' => 'alipay_life_ids', + 'error_msg' => '指定用户生活号id有误', + ]; + } + + // 验证 + if(!empty($p)) + { + $ret = params_checked($params, $p); + if($ret !== true) + { + return DataReturn($ret, -1); + } + } + + return DataReturn('验证成功', 0); + } + + /** + * 消息内容添加参数校验 + * @author Devil + * @blog http://gong.gg/ + * @version 1.0.0 + * @date 2018-10-24 + * @desc description + * @param [array] $params [输入参数] + */ + public static function MessageContentAddCheck($params = []) + { + // 基础参数 + $p = [ + [ + 'checked_type' => 'empty', + 'key_name' => 'message_id', + 'error_msg' => '消息id有误', + ], [ 'checked_type' => 'empty', 'key_name' => 'title', @@ -125,35 +254,8 @@ class AlipayLifeService return DataReturn($ret, -1); } - // 发送类型 - $p = []; - switch($params['send_type']) - { - // 单条 - case 0 : - $p[] = [ - 'checked_type' => 'empty', - 'key_name' => 'user_id', - 'error_msg' => '指定用户id有误', - ]; - $p[] = [ - 'checked_type' => 'empty', - 'key_name' => 'alipay_life_user_id', - 'error_msg' => '指定生活号用户id有误', - ]; - break; - - // 批量 - case 1 : - if(empty($params['alipay_life_category_id']) && empty($params['alipay_life_id'])) - { - return DataReturn('批量id有误', -1); - } - break; - - } - // 图文 + $p = []; if($params['type'] == 1) { // 图片 @@ -317,13 +419,7 @@ class AlipayLifeService $data = []; if($message['send_type'] == 1) { - if(!empty($message['alipay_life_category_id'])) - { - $category_all = json_decode($message['alipay_life_category_id'], true); - $alipay_life_all = M('AlipayLifeCategoryJoin')->where(['alipay_life_category_id'=>['in', $category_all]])->group('alipay_life_id')->getField('alipay_life_id', true); - } else { - $alipay_life_all = [$message['alipay_life_id']]; - } + $alipay_life_all = json_decode($message['alipay_life_ids'], true); foreach($alipay_life_all as $alipay_life_id) { $data[] = [ @@ -352,8 +448,8 @@ class AlipayLifeService { if($m->where(['id'=>$message['id']])->save(['status'=>1, 'send_startup_time'=>time(), 'upd_time'=>time()]) !== false) { - self::SyncJobSend($message['id']); $m->commit(); + self::SyncJobSend($message['id']); return DataReturn(L('common_submit_success'), 0); } } @@ -410,19 +506,17 @@ class AlipayLifeService // 发送消息类型 if($message['send_type'] == 1) { - if(!empty($message['alipay_life_category_id'])) - { - $category_all = json_decode($message['alipay_life_category_id'], true); - $alipay_life_all = M('AlipayLifeCategoryJoin')->where(['alipay_life_category_id'=>['in', $category_all]])->group('alipay_life_id')->getField('alipay_life_id', true); - } else { - $alipay_life_all = [$message['alipay_life_id']]; - } + $alipay_life_all = json_decode($message['alipay_life_ids'], true); } else { $alipay_life_all = [M('AlipayLifeUser')->where(['id'=>$message['alipay_life_user_id']])->getField('alipay_life_id')]; } - // 消息类型 - $message['msg_type'] = $message['type']; + // 消息内容 + $message['content'] = M('AlipayLifeMessageContent')->field('id,title,content,out_image_url,url,action_name')->where(['alipay_life_message_id'=>$message['id']])->select(); + if(empty($message['content'])) + { + die('[time:'.date('Y-m-d H:i:s')."][msg:{$message['id']}消息内容为空]\n\n"); + } // 生活号循环处理 $detail_m = M('AlipayLifeMessageDetail'); @@ -475,5 +569,41 @@ class AlipayLifeService // end die('[end_time:'.date('Y-m-d H:i:s')."][msg:处理结束]\n\n"); } + + /** + * 生活号搜索 + * @author Devil + * @blog http://gong.gg/ + * @version 1.0.0 + * @date 2018-10-29 + * @desc description + * @param array $params [description] + */ + public static function AlipayLifeSearch($params = []) + { + $where = ['l.is_shelves'=>1]; + + // 分类 + if(!empty($params['category_id'])) + { + $where['lc.alipay_life_category_id'] = intval($params['category_id']); + } + + // 关键字 + if(!empty($params['keywords'])) + { + $where['l.name'] = ['like', '%'.I('keywords', '', '', $params).'%']; + } + + // 查询数据 + $data = M('AlipayLife')->alias('l')->join(' INNER JOIN __ALIPAY_LIFE_CATEGORY_JOIN__ AS lc ON l.id=lc.alipay_life_id')->field('l.id,l.name')->group('l.id')->where($where)->select(); + + if(empty($data)) + { + return DataReturn(L('common_not_data_tips'), -100); + } else { + return DataReturn(L('common_operation_success'), 0, $data); + } + } } ?> \ No newline at end of file diff --git a/service/Public/Admin/Default/Css/AlipayLifeMessage.css b/service/Public/Admin/Default/Css/AlipayLifeMessage.css index 150222433..27a346e6e 100755 --- a/service/Public/Admin/Default/Css/AlipayLifeMessage.css +++ b/service/Public/Admin/Default/Css/AlipayLifeMessage.css @@ -15,4 +15,78 @@ } @media only screen and (max-width: 321px) { .view-operation button { margin: 2px 0px; } +} + +/** + * 详情 + */ +.life-container .life-form-category, .life-container .chosen-container, .life-container .life-form-keywords { + width: 30% !important; +} +.life-container .chosen-container, .life-container .life-form-keywords { + display: -webkit-inline-box !important; +} +.life-container .chosen-single { + width: 100%; +} +.life-container .life-form { + margin-bottom: 2px; +} +.life-list { + overflow: hidden; + margin-bottom: 20px; + position: relative; +} +.life-list .life-items { + width: calc(50% - 50px); + height: 300px; +} +.life-list .life-items .title { + text-align: center; +} +.life-list .life-items .life-content { + border: 1px solid #eee; + height: calc(100% - 25px); + overflow-y: scroll; + overflow-x: hidden; + border-radius: 2px; +} +.life-list .life-items .life-content li { + padding: 5px; + border-style: dotted; + border-color: #eaeaea; + border-width: 1px 0; +} +.life-list .life-items .life-content li:nth-child(2) { + border-top: 0; +} +.life-list .life-items .life-content li i { + cursor: pointer; + padding: 0 10px 0 5px; +} +.life-list .selected-all { + position: absolute; + top: 50%; + left: calc(50% - 30px); +} +.life-container input[name="alipay_life_ids"] { + position: absolute; + left: -1000000px; + top: -1000000px; +} +.life-list i { + color: #888 !important; +} +.am-form-error .life-items .life-content { + border-color: #dd514c; +} +@media only screen and (max-width: 641px) { + .life-container .life-form-category, .life-container .life-form-keywords + { + width: calc(55% - 60px) !important; + display: -webkit-inline-box !important; + } + .life-container .chosen-container { + display: none !important; + } } \ No newline at end of file diff --git a/service/Public/Admin/Default/Js/AlipayLifeMessage.js b/service/Public/Admin/Default/Js/AlipayLifeMessage.js index b13ff9b87..5bdf77088 100644 --- a/service/Public/Admin/Default/Js/AlipayLifeMessage.js +++ b/service/Public/Admin/Default/Js/AlipayLifeMessage.js @@ -5,18 +5,47 @@ $(function() { if($('ul.ul-right').find('.items-li-'+value).length == 0) { - var html = '
  • '+name+'
  • '; + var html = '
  • '+name+'
  • '; $('ul.ul-right').append(html); } + + // 右侧数据同步 + RightElementAlipayLife(); + + // 左侧是否还有内容 + if($('ul.ul-left li').length == 0) + { + $('ul.ul-left .table-no').removeClass('none'); + } else { + $('ul.ul-left .table-no').addClass('none'); + } + } + + // 批量-生活号id同步 + function RightElementAlipayLife() + { + var value_all = []; + $('ul.ul-right li').each(function(k, v) + { + value_all[k] = $(this).find('span.name').data('value'); + }); + $('.life-container input[name="alipay_life_ids"]').val(value_all.join(',')).blur(); + + // 右侧是否还有数据 + if($('ul.ul-right li').length == 0) + { + $('ul.ul-right .table-no').removeClass('none'); + } else { + $('ul.ul-right .table-no').addClass('none'); + } } // 左侧点击到右侧 - $('ul.ul-left i.am-icon-angle-right').on('click', function() + $('ul.ul-left').on('click', 'i.am-icon-angle-right', function() { var value = $(this).prev().data('value'); var name = $(this).prev().text(); - RightElementAdd(value, name); $(this).parent().remove(); - return false; + RightElementAdd(value, name); }); // 左侧全部移动到右侧 @@ -26,16 +55,53 @@ $(function() { var value = $(this).find('span.name').data('value'); var name = $(this).find('span.name').text(); - RightElementAdd(value, name); $(this).remove(); + RightElementAdd(value, name); }); }); // 右侧删除 - $('ul.ul-right i.am-icon-trash-o').on('click', function() + $('ul.ul-right').on('click', 'i.am-icon-trash-o', function() { $(this).parent().remove(); - return false; + RightElementAlipayLife(); + }); + + // 生活号搜索 + $('.life-form .search-submit').on('click', function() + { + var category_id = $('.life-form .life-form-category').val(); + var keywords = $('.life-form .life-form-keywords').val(); + console.log(category_id, keywords) + + // ajax请求 + $.ajax({ + url:$('.life-form').data('search-url'), + type:'POST', + dataType:"json", + timeout:10000, + data:{"category_id": category_id, "keywords": keywords}, + success:function(result) + { + if(result.code == 0) + { + var html = ''; + for(var i in result.data) + { + html += '
  • '+result['data'][i]['name']+'
  • '; + } + $('ul.ul-left .table-no').addClass('none'); + $('ul.ul-left li').remove(); + $('ul.ul-left').append(html); + } else { + Prompt(result.msg); + } + }, + error:function() + { + Prompt('网络异常错误'); + } + }); }); }); \ No newline at end of file diff --git a/service/Public/Upload/alipay_life_message/2018/10/29/2018102918192237114.png b/service/Public/Upload/alipay_life_message/2018/10/29/2018102918192237114.png new file mode 100644 index 0000000000000000000000000000000000000000..41127360ea973f472792d31d2130031093cc4d15 GIT binary patch literal 21102 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 TT&bP$00000NkvXXu0mjfxjk9* literal 0 HcmV?d00001 diff --git a/service/Public/Upload/alipay_life_message/2018/10/29/2018102918195581164.png b/service/Public/Upload/alipay_life_message/2018/10/29/2018102918195581164.png new file mode 100644 index 0000000000000000000000000000000000000000..f62967f1719b79b90ace6f7d9c459d5c79679113 GIT binary patch literal 1975 zcmV;o2T1sdP)#{u#~$QOlwN8RjD>56`E*kBeXRB)2h@; zQflm{q_$G}Vb!+W%$*V?A`O(8J!EzdsX`*DB|=mzg*%VC+j*L~yWO4L+q?a^rrCs< z|K{H3dEV#w&GSC*^ZwpF;sSqofya+=00^L@;>I@sxfW^pzS`533WC(zX2dn5!iD}pfVlBW~lh{j&Cx0B0lMl7^^bD0d?>GS5xPCvuO&J3Uu<&Zzbp7|# zq8sLjcs>AQ_{eWm$GR;5zzzUk%DhJ+L+@?g|Lo~ZYVYeNKwBgD-a zpG)bD10bmxn?Za#8-#c*%}&=L|NXGmF*i-+jcokD<1yR(a^~ID^xu=bDf8Z#=4JDH zI^QbgMB#X%wY9z>GIs~SRh8PJ+d}H7ed;kht1>65FMI69O#zUM8_xn*o~yC)jOth&1fS04HVLnu|0Jw4E6oJb}929s|lzGtuJ5QApY%!UCwA?W7 zd|moD$@)=~vNvX1OKK8;RBQVc5{Vqkty%1j+2*opgU{$CHDe!$PmTdFjDev`3yWb* zEP?#?8=zoQ)G;?t8Gv}lgMi|<=c9=wxIX5X&j;<+1OTpP+(jaHu=3I!YNES)ssNqoT+z*Z7>>0L$9it60Jv?&7pUM*xy-`4 z!m~k*)Bt@Q$)5%Q_?qfiznn4v1+_&ytcoSfCu=YR@>5lS?J?V2GgSbRn*KD%&u24W zSgwj5w2ssq0J3yxU8-;TIgpKGd-e&{wmw9_s}_V23T>uxisU6@o8UXDZH;4;#xp{i zkzbKT7DpXxpKqizA!6(#u`=UyJ>H$Yz<&Pia)NL*y*tPO(DT+r6J6WO(JdyE)QsCf z{3@`leycjxt%b7VYd~Dz2=E8lv=~N({B{=sq9Vwyf!QH zcJl}K?|-*a5Cp3tDXsq{kkOnySrW6Yy(IxiY5FZfW|0@cwwPnCEtLUo+lu*Q7|2_K@Bdfzp{vQ9PwU zP6@fbU;;O4n=R$8|Df(m3qNj!($@2!6Ui zXWzwd_AUG9@fQXv0>Bq8Boxa1k|O9AdMyj>u2;*|DU@^lW!Tv8B8d6pY{tN~#W40nNW8_XS*!#*Hvgu+fRY=w(4t(A0_mCA-^ zf$%UCo(A*o5yRtf$OnXkNXQ6iPfMD8SVUyzNn^>xpXZ_<9usFqO$_QTKue;J=kfYK+4BJSYGF002ov JPDHLkV1me`#?k-) literal 0 HcmV?d00001
    {{:L('alipay_life_message_type_text')}}{{:L('alipay_life_message_msg_type_text')}} {{:L('alipay_life_message_send_type_text')}}{{:L('alipay_life_message_title_text')}}{{:L('alipay_life_message_content_text')}}{{:L('alipay_life_message_image_url_text')}}{{:L('alipay_life_message_url_text')}}{{:L('alipay_life_message_action_name_text')}} {{:L('common_view_status_title')}} {{:L('common_more_name')}} {{:L('common_operation_name')}}
    {{$v.type_name}} {{$v.send_type_name}} - {{:L('common_on_fill_in_the_text')}}{{$v.title}} - - {{:L('common_on_fill_in_the_text')}}{{$v.content}} - - - - - - - {{:L('common_on_fill_in_images')}} - - - {{:L('common_on_fill_in_the_text')}}{{$v.url}} - - {{:L('common_on_fill_in_the_text')}}{{$v.action_name}} - {{$v.status_name}} {{:L('common_see_more_name')}} @@ -103,38 +77,17 @@
    -
    {{:L('alipay_life_message_type_text')}}
    +
    {{:L('alipay_life_message_msg_type_text')}}
    {{:L('common_on_fill_in_the_text')}}{{$v.type_name}}
    {{:L('alipay_life_message_send_type_text')}}
    {{:L('common_on_fill_in_the_text')}}{{$v.send_type_name}}
    -
    {{:L('alipay_life_message_title_text')}}
    -
    {{:L('common_on_fill_in_the_text')}}{{$v.title}}
    - -
    {{:L('alipay_life_message_content_text')}}
    -
    {{:L('common_on_fill_in_the_text')}}{{$v.content}}
    - -
    {{:L('alipay_life_message_category_text')}}
    -
    {{:L('common_on_fill_in_the_text')}}{{:implode(',', $v['category_all'])}}
    -
    {{:L('alipay_life_message_life_text')}}
    -
    {{:L('common_on_fill_in_the_text')}}{{$v.alipay_life_name}}
    +
    {{:L('common_on_fill_in_the_text')}}{{:implode(',', $v['alipay_life_all'])}}
    -
    {{:L('alipay_life_message_image_url_text')}}
    -
    - - - - {{:L('common_on_fill_in_images')}} - -
    - -
    {{:L('alipay_life_message_url_text')}}
    -
    {{:L('common_not_set_text')}}{{$v.url}}
    - -
    {{:L('alipay_life_message_action_name_text')}}
    -
    {{:L('common_on_fill_in_the_text')}}{{$v.action_name}}
    +
    {{:L('alipay_life_message_user_text')}}
    +
    {{:L('common_on_fill_in_the_text')}}{{$v.alipay_openid}}
    {{:L('common_view_status_title')}}
    {{:L('common_on_fill_in_the_text')}}{{$v.status_name}}
    @@ -158,6 +111,15 @@
    + + + + + + + + + - +