MAC os 安装 wine
方式一:下载 pkg 安装
https://www.winehq.org/
安装成功后显示图标
方式二:命令行用brew
brew search wine
brew cask install wine-stable
安装成功,安装过程中会提示输入密码。
接下来就可以直接在终端中使用 wine xxx.exe 。
感受科技之美
IOS技术
方式一:下载 pkg 安装
https://www.winehq.org/
安装成功后显示图标
方式二:命令行用brew
brew search wine
brew cask install wine-stable
安装成功,安装过程中会提示输入密码。
接下来就可以直接在终端中使用 wine xxx.exe 。
说明一下,这里针对的是没有源码和非越狱设备的几种方法。下面简单介绍下几款软件的用法。
1. Apple Configurator 2
在App Store搜索“Apple Configurator 2”下载安装(*低适配macOS 10.14)
准备工作: Apple ID账号密码, Apple设备。
步骤:
1.1 连接设备到Mac, 菜单 -> 账户 -> 登录
1.2 添加 -> 应用, 这里会显示你的已购记录,选中应用后添加。这个过程和网速有关,需要等待应用在手机上安装完成。
如果你已经安装了应用,不要点击任何操作!
1.3 command+shift+G 进入文件夹~/Library/Group Containers/K36BKF7T3D.group.com.apple.configurator/Library/Caches/Assets/TemporaryItems/MobileApps/
2. 爱思助手(强烈推荐,简直不要太好用了!!!)
准备工作: 无。
不写步骤了,太简单了。连接设备到电脑后下载爱思上的应用到电脑,完成后打开文件夹位置IPA 也就拿到了。
3.iMazing
可以把目前手机上自己安装的所有app都导出到电脑上,唯一的缺点就是导出来的格式是imazingapp格式,不是IPA。当然,这种格式也只能用iMazing安装大手机上。
准备工作: Apple设备。
步骤:连接设备后选择应用程序 -> 选中应用 -> 拷贝至MAC -> 保存
4. iTunes
因为iTunes12.6以上版本去掉了应用程序相关功能,所以只能在12.6以下版本的iTunes上进行导出IPA了。具体方法百度一大堆,就不详细说了。如果你很幸运的升级了mac OS ,那么恭喜你中*了,因为想在10.14上装个12.6版本的iTunes我弄了半天都没装好,我太难了,所以有成功的巨佬麻烦告诉一声哈。
下面是iTunes降级安装的相关一些博客帖子,供有兴趣的朋友参考。
https://blog.csdn.net/testcs_dn/article/details/73741822
https://www.jianshu.com/p/225745cae8de
https://blog.csdn.net/SysProgram/article/details/89294694
https://www.v2ex.com/t/393905
https://www.jianshu.com/p/e3457b388829
https://juejin.im/post/5c3c62176fb9a049c965ec01
ps: 以前自己写博客图片都是放在github,今天忽然发现好像不能识别,提示转换失败。这才发现可以直接将本地图片拖拽到编辑器内上传。。。
方法一
懒省事使用爱思助手即可(需要签名)
方法二
1.下载cydiaimpactor(无需签名)
官方地址
百度云下载:https://pan.baidu.com/s/1rYIG4go-fOEHarSjziA1eg
提取码:3b48
2.连上苹果手机,启动cydiaimpactor,导入安装包
如若导入失败,可以勾起SSL
3.输入苹果账号密码(密码为App 专用密码)
专用密码生成地址:https://appleid.apple.com/account/manage
4.等30秒后装好后去
设置-》通用-》描述文件与设备管理-》信任该应用即可打开
1,新安装的苹果CMS在采集时会遇到采集报错的情况,如下图所示!
一般报错基本是语言(vod_lang)和地域(vod_area)两个字段采集的数据超过了数据表字段的类型长度限制
2,解决方法:根据保存提示选择执行下面给出的2种对应SQL语句执行。SQL分别在下图所示地方单独执行
alter table {pre}vod modify column vod_lang varchar(255)
alter table {pre}vod modify column vod_area varchar(255)
为了提高网站seo优化,网站搭建正常运转后我们需要对网站的视频,资讯,文章等内容数据能够及时的提交给百度搜索,缩短蜘蛛爬取收录时间加快收录。我们需要对苹果cms系统自带的百度主动URL推送进行设置使用。
百度URL推送链接提交工具是网站主动向百度搜索推送数据的快捷工具,本快捷提交工具可缩短爬虫发现网站链接时间,网站时效性内容建议使用链接提交工具,能够及时实时向搜索推送数据。本工具可加快爬虫抓取速度,无法解决网站内容是否收录问题。
下面我们就来说下具体的操作步骤:
1,我们首先访问百度搜索资源平台:
(https://ziyuan.baidu.com/dashboard/index/)点击链接提交
2,点击>>自动提交>>主动推送>>复制 (token= )红框内的内容
简单说下主动推送和自动推送的区别
①主动推送:*为快速的提交方式,推荐您将站点当天新产出链接立即通过此方式推送给百度,以保证新链接可以及时被百度收录。(主动推送:推送的是新的文章链接)
②自动推送:*为便捷的提交方式,请将自动推送的JS代码部署在站点的每一个页面源代码中,部署代码的页面在每次被浏览时,链接会被自动推送给百度。可以与主动推送配合使用。(自动推送:推送的是被点击浏览你的文章)
3,复制token后来到苹果cmsv10系统后台>>应用>>URL推送>>把复制的内容粘贴到>>推送tokne的框里保存即可。
温馨提示
提示:全部数据将以历史数据新增,建议首次使用完整的提交1次。当天数据将以实时数据新增,不包括更新数据,只包含当天新增加的数据。断点会记录在缓存中,更新缓存后断点将消失。
百度搜索资源平台为站长提供链接自动提交通道,您可以利用快捷工具自动提交想被百度收录的链接,百度搜索引擎会按照标准处理,但不保证一定能够收录您提交的链接请知悉。
黑衣人查看:https://www.9499.tv/index.php/voddetail/111.html
准备工作
1,安装的宝塔面板(和苹果cms在不在一个服务器上都可以)
2,安装好的苹果CMS v10
3,采集需要先绑定好分类,生成需要下配置好url模式
用宝塔来触发定时任务,效率高,稳定性好,不受限于页面访问触发,推荐使用~~~ 当然如果没有条件可以使用页面触发
4,添加定时任务,参数可在程序包的说明文档内找到。
有些人还不会获取参数,建议使用谷歌浏览器或 360*速浏览器,在 采集当日或其他链接上 右键, 复制链接。
例如添加一个采集今日的任务,首先获取链接。
https://www.abc.com/admin.php/admin/collect/api.html?ac=cj&cjflag=0cf3a9d9fc61488a2ad80031abd63003&cjurl=http%3A%2F%2Fwww.abc.com%2Finc%2F2088m3u8.php&h=24&t=&ids=&wd=&type=1&mid=1¶m=
把?号前面的都删除掉。
得到的参数就是 ac=cj&cjflag=0cf3a9d9fc61488a2ad80031abd63003&cjurl=http%3A%2F%2Fwww.abc.com%2Finc%2F2088m3u8.php&h=24&t=&ids=&wd=&type=1&mid=1¶m=
放到定时任务里就可以了。(注意 一定要点击启用) 执行周期 全选 执行时间 全选
点击测试,获取访问url,复制下来,稍后会改为弹出新窗体,那样比较好复制。
https://www.abc.com/api.php/timming/index.html?name=aa
5,进入宝塔,计划任务,添加一个任务。
选择访问URL
执行周期自己定义根据需要。
url地址填写刚才复制的地址。
点一下执行,看看日志。 看到了吧, 这样不管网站有没有人访问,都可以执行的。
第二个是我以前直接写好的,我看很多人都不会设置,就在此讲解下 无视我刚刚看的那个(第二个)
还有这个生成首页 跟设置定时采集一样,也是这样操作, 大家要学会 举一反三
在有非常笨的人直接私聊我 帮你远程操作吧, 这教程说明的很详细了,你说你在不会真的说不过去了
直接在讲解下 如何在自己电影站上面 添加百度推送代码
https://ziyuan.baidu.com/linksubmit/index
添加自己的网站 个人建议 全站https 模式 这个看个人爱好 自己看着操作就可以了
添加完毕 我们点击 链接提交
找到 自动推送
然后我们登录自己的服务器 找到自己模版目录 然后在找到 你模版的底部文件 底部文件一般都是foot.html
然后我们编辑 foot.html 文件
在回到 百度推送这里 复制代码 粘贴到你 这个文件的*底部 就OK了 不用在手动去推送了, 这样全自动推送
省时省力
有的人说为什么放到 底部文件 或者也可以放到头部文件,但是强力建议放到底部文件 因为不管你打开你网站什么位置都会显示你底部
知道为什么了吧
所以不管你们加不加推送代码 是你们自己的事 我只是友情提示叫你们加上 只有好处没坏处
模板目录
系统模板系统放在/template/目录下。在后台站点设置中,可以选择当前使用的模板
│─template/1/ 模板1
│ ├─ads 广告文件目录
│ ├─js js文件
│ ├─css css文件
│ ├─images 图片文件
│ └─html 模板文件目录
│ └─art 文章模块模板目录
│ └─comment 评论模块模板目录
│ └─gbook 留言本模块模板目录
│ └─index 首页模块模板目录
│ └─label 自定义页面模块模板目录
│ └─map 地图页模块模板目录
│ └─public 公共页面模板目录
│ └─rss RSS和sitemap模板目录
│ └─topic 专题模块模板目录
│ └─user 用户中心模块模板目录
│ └─vod 视频模块模板目录
│─tempalte/2/ 模板2
│─…
│─template/n/ 模板N
1 | 模板文件 |
2 | 系统规定默认模板文件名, 其中 分类、内容、播放等页面的模板是可以自定义的。 |
3 | |
4 | code |
5 | 全站公共样式文件,建议定义如何名称存放在模板的public目录下: |
6 | public/include.html 全站公共引入文件 引入js、css样式,还有系统JS变量 |
7 | public/head.html 全站头部 |
8 | public/foot.html 全站尾部 |
9 | public/jump.html 跳转提示页模板 |
10 | public/msg.html 错误提示页模板 |
11 | public/paging.html 分页样式模板 |
12 | public/digg.html 顶踩样式模板 |
13 | public/score.html 普通评分样式模板 |
14 | public/star.html 星星评分样式模板 |
15 | │ |
16 | comment/index.html 评论页 |
17 | comment/ajax.html 评论页 |
18 | gbook/index.html 留言本 |
19 | gbook/report.html 报错页面 |
20 | │ |
21 | index/index.html 首页 |
22 | │ |
23 | map/rss.html rss |
24 | map/baidu.html 百度sitemap |
25 | map/google.html 谷歌sitemap |
26 | │ |
27 | topic/index.html 专题首页 |
28 | topic/detail.html 专题详情页 |
29 | │ |
30 | art/detail.html 文章内容页 |
31 | art/rss.html 文章内容rss |
32 | art/search.html 文章搜索页 |
33 | art/type.html 文章分类页 |
34 | art/show.html 文章分类筛选页 |
35 | │ |
36 | vod/confirm.html 确认支付积分页面 |
37 | vod/detail.html 视频内容页 |
38 | vod/rss.html 视频内容rss |
39 | vod/play.html 视频播放页 |
40 | vod/player.html 试看页面播放页 |
41 | vod/down.html 视频下载页 |
42 | vod/search.html 视频搜索页面 |
43 | vod/type.html 视频分类页面 |
44 | vod/show.html 视频分类筛选页 |
45 | │ |
46 | user/ajax_info.html 用户弹出层登录详情 |
47 | user/ajax_login.html 用户弹出层登录界面 |
48 | user/buy.html 用户中心-在线充值 |
49 | user/cards.html 用户中心-充值卡记录 |
50 | user/downs.html 用户中心-下载记录 |
51 | user/favs.html 用户中心-收藏记录 |
52 | user/findpass.html 用户中心-找回密码 |
53 | user/foot.html 用户中心-公共底部 |
54 | user/head.html 用户中心-公共头部 |
55 | user/include.html 用户中心-公共引入文件 |
56 | user/index.html 用户中心-首页 |
57 | user/info.html 用户中心-个人详情 |
58 | user/login.html 用户中心-登录页 |
59 | user/orders.html 用户中心-在线充值记录 |
60 | user/pay.html 用户中心-支付页 |
61 | user/plays.html 用户中心-点播记录 |
62 | user/popedom.html 用户中心-权限列表 |
63 | user/reg.html 用户中心-注册 |
64 | user/upgrade.html 用户中心-会员升级 |
65 | 系统内置JS、CSS说明 |
66 | code |
67 | 文件:home.js |
68 | MAC.Url当前网页地址 |
69 | MAC.Title当前网页标题 |
70 | MAC.UserAgent获取浏览器类型 |
71 | MAC.Copy(s)复制内容到剪切板 |
72 | MAC.Home(obj,url)设置网址为浏览器主页 |
73 | MAC.Fav(url,name)加入网址到收藏夹 |
74 | MAC.Open(w,h,u)弹出网址 |
75 | MAC.Cookie.Set(name,val,day)设置cookie |
76 | MAC.Cookie.Get(name)获取cookie |
77 | MAC.Cookie.Del(name)删除cookie |
78 | MAC.GoBack()返回上个页面 |
79 | MAC.Qrcode() 重写class=”mac_qrcode” 的图片地址为一个二维码 |
80 | MAC.Image.Lazyload.Show()异步载入图片 |
81 | MAC.Image.Lazyload.Box(id)载入指定id内部的图片 |
82 | MAC.Verify.Init() 把class=”mac_verify” 的input框后边插入图片验证码class=”mac_verify_img” |
83 | MAC.PageGo()把class=”mac_page_go”的按钮绑定事件切换分页 |
84 | MAC.Hits()把class=”mac_hits”的元素载入点击量 |
85 | MAC.Score().Init()在class=”mac_score”的内部初始化普通评分插件,class=”score_btn”提交评分 |
86 | MAC.Star().Init()在class=”mac_star”的元素初始化星星评分插件 |
87 | MAC.Digg.Init()在class=”digg_link”的元素上绑定 点击事件 |
88 | MAC.Gbook().Init()在class=”gbook_content”,class=”gbook_submit”绑定事件留言本使用 |
89 | MAC.Search().Init()在class=”mac_search”的按钮上绑定事件,跳转到搜索页面 |
90 | MAC.Suggest().Init()在class=”mac_wd”的文本框内部加入搜索联想结果功能 |
91 | MAC.History().Init()在class=”mac_history”的元素上加入鼠标移入移除事件展示浏览日志 |
92 | MAC.Ulog().Init()在class=”mac_ulog”的元素上初始化用户日志相关操作,包含1浏览2收藏3想看4点播5下载 |
93 | MAC.User().Init()在class=”mac_user”的元素上初始化用户无刷新登录、用户详情 |
94 | MAC.Pop().Show()弹出层插件 |
95 | MAC.AdsWrap()输出占位符 |
96 | MAC.Css()加载css文件 |
97 | MAC.Desktop()跳转到保存到桌面 |
98 | MAC.Comment()评论相关功能 |
99 | 全局标签 |
100 | code |
101 | {$maccms.site_name} 网站名称 |
102 | {$maccms.site_url} 网站url |
103 | {$maccms.site_keywords} 网站关键字 |
104 | {$maccms.site_description} 网站描述 |
105 | {$maccms.site_icp} 备案号 |
106 | {$maccms.site_qq} 站长qq |
107 | {$maccms.site_email} 站长email |
108 | {$maccms.site_tj} 统计代码 |
109 | {$maccms.site_status} 网站状态1开启0关闭 |
110 | {$maccms.site_close_tip} 网站关闭提示信息 |
111 | {$maccms.path} 网站目录 |
112 | {$maccms.path_tpl} 当前模板目录 |
113 | {$maccms.search_hot} 热门搜索词 |
114 | {$maccms.mid}模块id,1视频2文章3专题 |
115 | {$maccms.aid}当前系统页面id |
116 | 首页1 |
117 | 地图2 |
118 | rss3 |
119 | 留言本4 |
120 | 评论5 |
121 | 用户中心6 |
122 | 自定义页面7 |
123 | 视频首页10 |
124 | 文章首页20 |
125 | 专题首页30 |
126 | 视频分类页11 |
127 | 视频分类筛选12 |
128 | 视频搜索13 |
129 | 视频详情14 |
130 | 视频播放15 |
131 | 视频下载16 |
132 | 文章分类21 |
133 | 文章分类筛选22 |
134 | 文章搜索23 |
135 | 文章详情24 |
136 | 专题详情31 |
137 | 引入模板文件 |
138 | code |
139 | {include file=”public/head”} |
140 | 条件判断if标签 |
141 | code |
142 | 由于if标签的condition属性里面基本上使用的是php语法,尽可能使用判断标签和Switch标签会更加简洁: |
143 | {if condition=”($name == 1) OR ($name > 100) “} value1 |
144 | {elseif condition=”$name eq 2″/}value2 |
145 | {else /} value3 |
146 | {/if} |
147 | empty标签用于判断某个变量是否为空,用法: |
148 | {empty name=”name”} |
149 | name为空值 |
150 | {/empty} |
151 | 如果判断没有赋值,可以使用: |
152 | {notempty name=”name”} |
153 | name不为空 |
154 | {/notempty} |
155 | 友情链接标签 |
156 | code |
157 | 参数: |
158 | type:友情链接类型 font表示文字,pic表示图片 |
159 | num: 获取数据条数 |
160 | 例: |
161 | {maccms:link num=”2″ type=”pic”} |
162 | {$key}序号 |
163 | {$vo.link_name}名称 |
164 | {$vo.link_url}地址 |
165 | {$vo.link_pic}图片 |
166 | {/maccms:link} |
167 | 留言本标签 |
168 | code |
169 | 参数: |
170 | num:数据条数 默认值10 |
171 | paging:是否开启分页yes |
172 | by:数据排序依据 id,time |
173 | 例: |
174 | {maccms:gbook num=”10″ paging=”no” order=”desc” by=”time”} |
175 | {$key}序号 |
176 | {$vo.gbook_id} 编号id |
177 | {$vo.gbook_name} 留言昵称 |
178 | {$vo.gbook_content} 留言内容 |
179 | {$vo.gbook_reply} 回复内容 |
180 | {$vo.gbook_ip} 留言者IP |
181 | {$vo.gbook_time} 留言时间 |
182 | {$vo.gbook_replytime} 回复时间 |
183 | {/maccms:gbook} |
184 | 评论标签 |
185 | code |
186 | 参数: |
187 | num:数据条数 默认值10 |
188 | paging:是否开启分页yes |
189 | by:数据排序依据 id,time |
190 | 例: |
191 | {maccms:comment num=”10″ paging=”no” order=”desc” by=”time”} |
192 | {$key} 排序位 |
193 | {$vo.comment_id} 编号id |
194 | {$vo.comment_name} 评论昵称 |
195 | {$vo.comment_content} 评论内容 |
196 | {$vo.comment_ip} 评论者IP |
197 | {$vo.comment_time} 评论时间 |
198 | {$vo.childs} 回复评论项 |
199 | {/maccms:comment} |
200 | 分类标签(视频,文章通用) |
201 | code |
202 | 参数: |
203 | order排列顺序desc倒序,asc正序 |
204 | by排序依据 |
205 | start从第几条开始 |
206 | num获取条数 |
207 | ids指定分类parent获取一级分诶;child获取子分类;1,2,3一组指定ID; |
208 | flag视频=vod文章=art |
209 | {maccms:type num=”10″ order=”asc” by=”sort” ids=”all”} |
210 | 内部同下方,{$obj.改为{$vo.开头即可 |
211 | {/maccms:type} |
212 | =======分类页独有标签======= |
213 | {$obj.parent} 如果当前访问的是二级分类,这个是一级分类对象,也同样包含以下属性,如{$obj.parent.type_id}一级分类id |
214 | {$obj.type_id}分类id |
215 | {$obj.type_name}名称 |
216 | {$obj.type_enname}别名 |
217 | {$obj.type_sort}排序号 |
218 | {$obj.type_mid}所属模块 |
219 | {$obj.type_pid}上级id |
220 | {$obj.type_status}状态1开启0关闭 |
221 | {$obj.type_tpl}分类页模板 |
222 | {$obj.type_tpl_list}筛选页模板 |
223 | {$obj.type_tpl_detail}详情页模板 |
224 | {$obj.type_tpl_play}播放页模板 |
225 | {$obj.type_tpl_down}下载页模板 |
226 | {$obj.type_key}关键字 |
227 | {$obj.type_des}描述信息 |
228 | {$obj.type_title}标题 |
229 | {$obj.type_extend}扩展配置json |
230 | {:mac_url_type($obj)} 分类链接 |
231 | 专题列表标签 |
232 | code |
233 | 参数: |
234 | order排列顺序desc倒序,asc正序 |
235 | by排序依据 |
236 | start从第几条开始 |
237 | num获取条数 |
238 | ids指定1,2,3一组指定ID; |
239 | timeadd添加时间 一天前 -1 day,一周前-1 week,一月前-1 month,一小时前-1 hour |
240 | timehits点击时间 一天前 -1 day,一周前-1 week,一月前-1 month,一小时前-1 hour |
241 | time更新时间 一天前 -1 day,一周前-1 week,一月前-1 month,一小时前-1 hour |
242 | hitsmonth月点击量 大于一千 gt 1000, 小于一千 lt 1000,区间一千二千之间 between 1000,2000 |
243 | hitsweek周点击量 大于一千 gt 1000, 小于一千 lt 1000,区间一千二千之间 between 1000,2000 |
244 | hitsday日点击量 大于一千 gt 1000, 小于一千 lt 1000,区间一千二千之间 between 1000,2000 |
245 | hits总点击量 大于一千 gt 1000, 小于一千 lt 1000,区间一千二千之间 between 1000,2000 |
246 | paging是否分页yes |
247 | {maccms:topic num=”10″ paging=”no” order=”asc” by=”sort” ids=”all”} |
248 | 内部同下方,{$obj.改为{$vo.开头即可 |
249 | {/maccms:topic} |
250 | =======专题页独有标签======= |
251 | {$obj.topic_id}专题id |
252 | {$obj.topic_name}名称 |
253 | {$obj.topic_en}别名 |
254 | {$obj.topic_sub}副标 |
255 | {$obj.topic_status}状态 |
256 | {$obj.topic_sort}排序号 |
257 | {$obj.topic_letter}首字母 |
258 | {$obj.topic_color}高亮颜色 |
259 | {$obj.topic_tpl}模板文件 |
260 | {$obj.topic_type}扩展分类 |
261 | {$obj.topic_pic}图片 |
262 | {$obj.topic_pic_thumb}缩略图 |
263 | {$obj.topic_pic_slide}幻灯图 |
264 | {$obj.topic_key}seo关键字 |
265 | {$obj.topic_des}seo描述 |
266 | {$obj.topic_title}seo标题 |
267 | {$obj.topic_blurb}简介 |
268 | {$obj.topic_remarks}备注 |
269 | {$obj.topic_level}推荐值 |
270 | {$obj.topic_up}顶数 |
271 | {$obj.topic_down}踩数 |
272 | {$obj.topic_score}平均分 |
273 | {$obj.topic_score_all}总评分 |
274 | {$obj.topic_score_num}总评次 |
275 | {$obj.topic_hits}总点击 |
276 | {$obj.topic_hits_day}日点击 |
277 | {$obj.topic_hits_week}周点击 |
278 | {$obj.topic_hits_month}月点击 |
279 | {$obj.topic_time}更新时间 |
280 | {$obj.topic_time_add}添加时间 |
281 | {$obj.topic_content}详细介绍 |
282 | {$obj.topic_extend}扩展配置json |
283 | {:mac_url_topic_detail($obj)} 专题详情页链接 |
284 | {:mac_url_topic_index()} 专题首页链接 |
285 | 剧情分类、地区、语言、年代、版本、资源标签 |
286 | code |
287 | 剧情分类标签参数: |
288 | order: 排序desc倒序,asc正序 |
289 | num:显示条数 |
290 | {maccms:class num=”10″ order=”desc”} |
291 | {$key} 序号 |
292 | {$vo.class_name} 分类名称 |
293 | {$vo.class_link} 链接 |
294 | {/maccms:class} |
295 | 地区标签参数: |
296 | order: 排序desc倒序,asc正序 |
297 | num:显示条数 |
298 | {maccms:area num=”5″ order=”desc”} |
299 | {$key} 排序位 |
300 | {$vo.area_name} 地区名称 |
301 | {$vo.area_link} 链接地址 |
302 | {/maccms:area} |
303 | 语言标签参数: |
304 | order:排序desc倒序,asc正序 |
305 | num:显示条数 |
306 | {maccms:lang num=”5″ order=”desc”} |
307 | {$key} 排序位 |
308 | {$vo.lang_name} 语言名称 |
309 | {$vo.lang_link} 链接地址 |
310 | {/maccms:lang} |
311 | 年代标签参数: |
312 | order:排序desc倒序,asc正序 |
313 | num:显示条数 |
314 | {maccms:year num=”5″ order=”desc”} |
315 | {$key} 排序位 |
316 | {$vo.year_name} 语言名称 |
317 | {$vo.year_link} 链接地址 |
318 | {/maccms:year} |
319 | 版本标签参数: |
320 | order:排序desc倒序,asc正序 |
321 | num:显示条数 |
322 | {maccms:version num=”5″ order=”desc”} |
323 | {$key} 排序位 |
324 | {$vo.version_name} 版本名称,如高清版,剧场版 |
325 | {$vo.version_link} 链接地址 |
326 | {/maccms:version} |
327 | 资源标签参数: |
328 | order:排序desc倒序,asc正序 |
329 | num:显示条数 |
330 | {maccms:state num=”5″ order=”desc”} |
331 | {$key} 排序位 |
332 | {$vo.state_name} 状态名称,如正片,预告片 |
333 | {$vo.state_link} 链接地址 |
334 | {/maccms:state} |
335 | 分页标签详解 |
336 | code |
337 | 分页标签可用在,首页、分类页、筛选页、专题首页、搜索页、文章内容页、留言本、评论 |
338 | 其中包含隐藏参数pageurl=””,视频默认是vod/type,文章分页默认是art/type,分页时必须加入此参数以免分页出错!!! |
339 | 例如:{maccms:vod num=”10″ paging=”yes” pageurl=”vod/type” half=”3″} {/maccms:vod} |
340 | 视频分类页是pageurl=”vod/type” |
341 | 视频筛选页是pageurl=”vod/show” |
342 | 视频搜索页是pageurl=”vod/search” |
343 | 首页是pageurl=”index/index” |
344 | 文章分类页是pageurl=”art/type” |
345 | 文章筛选页是pageurl=”art/show” |
346 | 文章搜索页是pageurl=”art/search” |
347 | 其中half参数是设置显示分页数字页码的个数,不设置默认为5。 |
348 | 参数详解: |
349 | 系统提供了$__PAGING__分页变量,可以来进行diy定制。 |
350 | 例子: |
351 | <div class=”mac_pages”> |
352 | <div class=”page_tip”>共{$__PAGING__.record_total}条数据,当前{$__PAGING__.page_current}/{$__PAGING__.page_total}页</div> |
353 | <div class=”page_info”> |
354 | <a class=”page_link” href=”{$__PAGING__.page_url|str_replace=’%7Bpg%7D’,1,###}” title=”首页”>首页</a> |
355 | <a class=”page_link” href=”{$__PAGING__.page_url|str_replace=’%7Bpg%7D’,$__PAGING__.page_prev,###}” title=”上一页”>上一页</a> |
356 | {maccms:foreach name=”$__PAGING__.page_num” id=”num”} |
357 | {if condition=”$__PAGING__[‘page_current’] eq $num”} |
358 | <a class=”page_link page_current” href=”javascript:;” title=”第{$num}页”>{$num}</a> |
359 | {else} |
360 | <a class=”page_link” href=”{$__PAGING__.page_url|str_replace=’%7Bpg%7D’,$num,###}” title=”第{$num}页”>{$num}</a> |
361 | {/if} |
362 | {/maccms:foreach} |
363 | <a class=”page_link” href=”{$__PAGING__.page_url|str_replace=’%7Bpg%7D’,$__PAGING__.page_next,###}” title=”下一页”>下一页</a> |
364 | <a class=”page_link” href=”{$__PAGING__.page_url|str_replace=’%7Bpg%7D’,$__PAGING__.page_total,###}” title=”尾页”>尾页</a> |
365 | <input class=”page_input” type=”text” placeholder=”页码” id=”page” autocomplete=”off” style=”width:40px”> |
366 | <button class=”page_btn” type=”button” onclick=”pagego(‘{$__PAGING__.page_url}’,'{$__PAGING__.page_total}’)”>GO</button> |
367 | </div> |
368 | </div> |
369 | 视频搜索页参数和标签详解 |
370 | code |
371 | 参数详解: |
372 | wd:名称或主演 |
373 | ids:数据id支持多个逗号分割 1,2,3 |
374 | letter:首字母 |
375 | enname:别名 |
376 | actor:主演 |
377 | director:导演 |
378 | area:地区 |
379 | lang:语言 |
380 | year:上映年代 |
381 | version:版本 |
382 | state:资源类型 |
383 | level:推荐等级 |
384 | tid:分类id |
385 | order:排序 desc(倒序) asc (正序) |
386 | by:排序字段 |
387 | 独有标签: |
388 | {$param.page}当前页码 |
389 | {$param.wd}关键字 |
390 | {$param.area}地区 |
391 | {$param.lang}语言 |
392 | {$param.year}年代 |
393 | {$param.actor}演员 |
394 | {$param.director}导演 |
395 | {$param.class}扩展分类 |
396 | 视频列表标签 |
397 | code |
398 | 参数 |
399 | order排列顺序desc倒序,asc正序 |
400 | by排序依据 |
401 | start从第几条开始 |
402 | num获取条数 |
403 | ids指定1,2,3一组ID; |
404 | type指定获取分类数据 all所有;1,2,3指定; |
405 | class指定某扩展分类 支持多个 动作,喜剧 |
406 | tag指定tag 支持多个 aaa,xxx |
407 | level指定推荐值 支持多个 1,2 |
408 | area指定地区 支持多个 大陆,香港 |
409 | lang指定语言 支持多个 国语,粤语 |
410 | year指定年代 支持多个 2002,2003 |
411 | state资源类别 支持多个 高清版,剧场版,抢先版 |
412 | version资源版本 支持多个 正片,预告片 |
413 | weekday更新周期 支持多个 一,二,三 |
414 | rel指定关联数据 1,2,3 或 变形金刚 |
415 | timeadd添加时间 一天前 -1 day,一周前-1 week,一月前-1 month,一小时前-1 hour |
416 | timehits点击时间 一天前 -1 day,一周前-1 week,一月前-1 month,一小时前-1 hour |
417 | time更新时间 一天前 -1 day,一周前-1 week,一月前-1 month,一小时前-1 hour |
418 | hitsmonth月点击量 大于一千 gt 1000, 小于一千 lt 1000,区间一千二千之间 between 1000,2000 |
419 | hitsweek周点击量 大于一千 gt 1000, 小于一千 lt 1000,区间一千二千之间 between 1000,2000 |
420 | hitsday日点击量 大于一千 gt 1000, 小于一千 lt 1000,区间一千二千之间 between 1000,2000 |
421 | hits总点击量 大于一千 gt 1000, 小于一千 lt 1000,区间一千二千之间 between 1000,2000 |
422 | paging是否分页yes |
423 | pageurl分页地址 |
424 | {maccms:vod num=”10″ paging=”no” type=”all” order=”asc” by=”sort”} |
425 | 内部同下方,{$obj.改为{$vo.开头即可 |
426 | {/maccms:vod} |
427 | =======视频内容页独有标签======= |
428 | {$obj.vod_id} 视频id |
429 | {$obj.type_id} 分类id |
430 | {$obj.type_id_1} 一级分类id |
431 | {$obj.type} 视频分类对象,二级属性可参考分类 |
432 | {$obj.type_1} 一级分类对象,二级属性可参考分类 |
433 | {$obj.group_id} 用户组id |
434 | {$obj.vod_name} 视频名 |
435 | {$obj.vod_sub} 副标题 |
436 | {$obj.vod_en} 别名 |
437 | {$obj.vod_status} 状态0未审1已审 |
438 | {$obj.vod_letter} 首字母 |
439 | {$obj.vod_color} 颜色 |
440 | {$obj.vod_tag} tags |
441 | {$obj.vod_class} 扩展分类 |
442 | {$obj.vod_pic} 图片 |
443 | {$obj.vod_pic_thumb} 缩略图 |
444 | {$obj.vod_pic_slide} 幻灯图 |
445 | {$obj.vod_actor} 主演 |
446 | {$obj.vod_director} 导演 |
447 | {$obj.vod_writer}编剧 |
448 | {$obj.vod_blurb} 简介 |
449 | {$obj.vod_remarks} 备注 |
450 | {$obj.vod_pubdate}上映日期 |
451 | {$obj.vod_total} 总集数 |
452 | {$obj.vod_serial} 连载数 |
453 | {$obj.vod_tv} 上映电视台 |
454 | {$obj.vod_weekday} 节目周期 |
455 | {$obj.vod_area} 地区 |
456 | {$obj.vod_lang} 语言 |
457 | {$obj.vod_year} 年代 |
458 | {$obj.vod_version} 版本-dvd,hd,720p |
459 | {$obj.vod_state} 资源类别-正片,预告片,花絮 |
460 | {$obj.vod_author} 编辑人员 |
461 | {$obj.vod_jumpurl} 跳转url |
462 | {$obj.vod_tpl} 独立模板 |
463 | {$obj.vod_tpl_play} 独立播放页模板 |
464 | {$obj.vod_tpl_down} 独立下载页模板 |
465 | {$obj.vod_isend} 是否完结 |
466 | {$obj.vod_lock} 锁定1 |
467 | {$obj.vod_level} 推荐级别 |
468 | {$obj.vod_points_play} 点播付费 |
469 | {$obj.vod_points_down} 下载付费 |
470 | {$obj.vod_hits} 总点击量 |
471 | {$obj.vod_hits_day} 日点击量 |
472 | {$obj.vod_hits_week} 周点击量 |
473 | {$obj.vod_hits_month} 月点击量 |
474 | {$obj.vod_duration} 时长 |
475 | {$obj.vod_up} 顶数 |
476 | {$obj.vod_down} 踩数 |
477 | {$obj.vod_score} 平均分 |
478 | {$obj.vod_score_all} 总评分 |
479 | {$obj.vod_score_num} 评分次数 |
480 | {$obj.vod_time} 更新时间 |
481 | {$obj.vod_time_add} 添加时间 |
482 | {$obj.vod_time_hits} 点击时间 |
483 | {$obj.vod_time_make} 生成时间 |
484 | {$obj.vod_trysee} 试看时长分 |
485 | {$obj.vod_reurl} 来源地址 |
486 | {$obj.vod_rel_vod} 关联视频ids |
487 | {$obj.vod_rel_art} 关联文章ids |
488 | {$obj.vod_content} 详细介绍 |
489 | {$obj.vod_play_from} 播放组 |
490 | {$obj.vod_play_server} 播放服务器组 |
491 | {$obj.vod_play_note} 播放备注 |
492 | {$obj.vod_play_url} 播放地址 |
493 | {$obj.vod_down_from} 下载租 |
494 | {$obj.vod_down_server} 下载服务器组 |
495 | {$obj.vod_down_note} 下载备注 |
496 | {$obj.vod_down_url} 下载地址 |
497 | {:mac_url_vod_detail($obj)} 视频详情页链接 |
498 | {:mac_url_vod_play($obj,[‘sid’=>1,’nid’=>1])} 视频播放页链接 |
499 | {:mac_url_vod_down($obj,[‘sid’=>1,’nid’=>1])} 视频下载页链接 |
500 | 视频内容页、播放页标签 |
501 | code |
502 | 列出播放地址 |
503 | {maccms:foreach name=”obj.vod_play_list” id=”vo”} |
504 | <div class=”ui-box marg” id=”playlist_{$key}”> |
505 | <div class=”down-title”> |
506 | <h2>{$vo.from}-在线播放</h2><span>[{$vo.player_info.tip}]</span> |
507 | </div> |
508 | <div class=”video_list fn-clear”> |
509 | {maccms:foreach name=”vo.urls” id=”vo2″} |
510 | <a href=”{:mac_url_vod_play($obj,[‘sid’=>$vo.sid,’nid’=>$vo2.nid])}”>{$vo2.title}</a> |
511 | {/maccms:foreach} |
512 | </div> |
513 | </div> |
514 | {/maccms:foreach} |
515 | 列出下载地址 |
516 | {maccms:foreach name=”obj.vod_down_list” id=”vo”} |
517 | <div class=”ui-box marg” id=”downlist_{$key}”> |
518 | <div class=”down-title”> |
519 | <h2>{$vo.from}-下载</h2><span>[{$vo.player_info.tip}]</span> |
520 | </div> |
521 | <div class=”video_list fn-clear”> |
522 | {maccms:foreach name=”vo.urls” id=”vo2″} |
523 | <a href=”{:mac_url_vod_down($obj,[‘sid’=>$vo.sid,’nid’=>$vo2.nid])}”>{$vo2.title}</a> |
524 | {/maccms:foreach} |
525 | </div> |
526 | </div> |
527 | {/maccms:foreach} |
528 | 上边循环过程中,其中获取播放器详细信息的方法是 |
529 | {$vo.player_info.from} 编码 |
530 | {$vo.player_info.show} 名称 |
531 | {$vo.player_info.des} 备注 |
532 | {$vo.player_info.tip} 提示 |
533 | {$vo.player_info.sort} 排序 |
534 | {$vo.player_info.parse} 解析接口 |
535 | =======视频播放页独有标签======= |
536 | {$param.sid} 当前播放组序号 |
537 | {$param.nid} 当前集数序号 |
538 | {$obj.player_info.link_next} 下一页地址,*后一页时此链接将当前页链接 |
539 | {$obj.player_info.link_pre} 上一页地址,*页时此链接将当前页链接 |
540 | {$obj[‘vod_play_list’][$param[‘sid’]]} 获取当前播放组数据 |
541 | {$obj[‘vod_play_list’][$param[‘sid’]][‘player_info’]} 播放器信息 |
542 | {$obj[‘vod_play_list’][$param[‘sid’]][‘server_info’]} 服务器组信息 |
543 | {$obj[‘vod_play_list’][$param[‘sid’]][‘url_count’]} 总集数 |
544 | {$obj[‘vod_play_list’][$param[‘sid’]][‘urls’]} 集数信息 |
545 | {$obj[‘vod_play_list’][$param[‘sid’]][‘urls’][$param[‘nid’]]} 当前集数信息 |
546 | {$obj[‘vod_play_list’][$param[‘sid’]][‘urls’][$param[‘nid’]][‘name’]} 当前集数名称 |
547 | {$obj[‘vod_play_list’][$param[‘sid’]][‘urls’][$param[‘nid’]][‘url’]} 当前集数url |
548 | 下载页获取以上信息,请把vod_play_list改为vod_down_list,其他参数不变 |
549 | {$player_data} 播放数据 |
550 | {$player_js} 加载播放器 |
551 | =======获取与当前视频相关联视频和关联文章数据====== |
552 | <h2>与<strong>“{$obj.vod_name}”</strong>关联的视频</h2> |
553 | <ul class=”img-list dis”> |
554 | {maccms:vod num=”6″ rel=”‘.$obj[‘vod_rel_vod’].'” order=”desc” by=”time”} |
555 | <li><a href=”{:mac_url_vod_detail($vo)}” title=”{$vo.vod_name}”><img src=”{:mac_url_img($vo.vod_pic)}” alt=”{$vo.vod_name}”><h2>{$vo.vod_name}</h2><p></p><i>{$vo.vod_version}</i><em></em></a></li> |
556 | {/maccms:vod} |
557 | </ul> |
558 | <h2>与<strong>“{$obj.vod_name}”</strong>关联的文章</h2> |
559 | <ul class=”img-list dis”> |
560 | {maccms:art num=”6″ rel=”‘.$obj[‘vod_rel_art’].'” order=”desc” by=”time”} |
561 | <li><a href=”{:mac_url_art_detail($vo)}” title=”{$vo.art_name}”><img src=”{:mac_url_img($vo.art_pic)}” alt=”{$vo.art_name}”><h2>{$vo.art_name}</h2><p></p><i>{$vo.vod_from}</i><em></em></a></li> |
562 | {/maccms:art} |
563 | </ul> |
564 | 文章列表标签 |
565 | code |
566 | 参数: |
567 | order排列顺序desc倒序,asc正序 |
568 | by排序依据 |
569 | start从第几条开始 |
570 | num获取条数 |
571 | ids指定1,2,3一组ID; |
572 | type指定获取分类数据 all所有;1,2,3指定; |
573 | class指定某扩展分类 支持多个 |
574 | tag指定tag 支持多个 aaa,xxx |
575 | level指定推荐值 支持多个 |
576 | rel指定关联数据 1,2,3 或 变形金刚 |
577 | timeadd添加时间 一天前 -1 day,一周前-1 week,一月前-1 month,一小时前-1 hour |
578 | timehits点击时间 一天前 -1 day,一周前-1 week,一月前-1 month,一小时前-1 hour |
579 | time更新时间 一天前 -1 day,一周前-1 week,一月前-1 month,一小时前-1 hour |
580 | hitsmonth月点击量 大于一千 gt 1000, 小于一千 lt 1000,区间一千二千之间 between 1000,2000 |
581 | hitsweek周点击量 大于一千 gt 1000, 小于一千 lt 1000,区间一千二千之间 between 1000,2000 |
582 | hitsday日点击量 大于一千 gt 1000, 小于一千 lt 1000,区间一千二千之间 between 1000,2000 |
583 | hits总点击量 大于一千 gt 1000, 小于一千 lt 1000,区间一千二千之间 between 1000,2000 |
584 | paging是否分页yes |
585 | pageurl分页地址 |
586 | {maccms:art num=”10″ paging=”no” type=”all” order=”asc” by=”sort”} |
587 | 内部同下方,{$obj.改为{$vo.开头即可 |
588 | {/maccms:art} |
589 | =======文章内容页独有标签======= |
590 | {$obj.art_id} 文章id |
591 | {$obj.type_id} 分类id |
592 | {$obj.type_id_1} 一级分类id |
593 | {$obj.type} 视频分类对象,二级属性可参考分类 |
594 | {$obj.type_1} 一级分类对象,二级属性可参考分类 |
595 | {$obj.group_id} 用户组id |
596 | {$obj.art_name} 标题 |
597 | {$obj.art_sub} 副标题 |
598 | {$obj.art_en} 别名 |
599 | {$obj.art_status} 状态0未审1已审 |
600 | {$obj.art_letter} 首字母 |
601 | {$obj.art_color} 颜色 |
602 | {$obj.art_from} 来源 |
603 | {$obj.art_author} 作者 |
604 | {$obj.art_tag} tags |
605 | {$obj.art_class} 扩展分类 |
606 | {$obj.art_pic} 主图 |
607 | {$obj.art_pic_thumb} 缩略图 |
608 | {$obj.art_pic_slide} 幻灯图 |
609 | {$obj.art_blurb} 简介 |
610 | {$obj.art_remarks} 备注 |
611 | {$obj.art_jumpurl} 跳转url |
612 | {$obj.art_tpl} 独立模板 |
613 | {$obj.art_level} 推荐等级 |
614 | {$obj.art_lock} 锁定 |
615 | {$obj.art_up} 顶数 |
616 | {$obj.art_down} 踩数 |
617 | {$obj.art_hits} 总点击量 |
618 | {$obj.art_hits_day} 日点击量 |
619 | {$obj.art_hits_week} 周点击量 |
620 | {$obj.art_hits_month} 月点击量 |
621 | {$obj.art_time} 更新时间 |
622 | {$obj.art_time_add} 添加时间 |
623 | {$obj.art_time_hits} 点击时间 |
624 | {$obj.art_time_make} 生成时间 |
625 | {$obj.art_score} 平均分 |
626 | {$obj.art_score_all} 总评分 |
627 | {$obj.art_score_num} 评分次数 |
628 | {$obj.art_rel_art} 关联文章 |
629 | {$obj.art_rel_vod} 关联视频 |
630 | {$obj.art_title} 页标题 |
631 | {$obj.art_note} 页备注 |
632 | {$obj.art_content} 页详细介绍 |
633 | {:mac_url_art_detail($obj)} 文章详情页链接 |
634 | =======获取与当前文章相关联视频和关联文章数据====== |
635 | <h2>与<strong>“{$obj.art_name}”</strong>关联的视频</h2> |
636 | <ul class=”img-list dis”> |
637 | {maccms:vod num=”6″ ids=”‘.$obj[‘art_rel_vod’].'” order=”desc” by=”time”} |
638 | <li><a href=”{:mac_url_vod_detail($vo)}” title=”{$vo.vod_name}”><img src=”{:mac_url_img($vo.vod_pic)}” alt=”{$vo.vod_name}”><h2>{$vo.vod_name}</h2><p></p><i>{$vo.vod_version}</i><em></em></a></li> |
639 | {/maccms:vod} |
640 | </ul> |
641 | <h2>与<strong>“{$obj.art_name}”</strong>关联的文章</h2> |
642 | <ul class=”img-list dis”> |
643 | {maccms:art num=”6″ ids=”‘.$obj[‘art_rel_art’].'” order=”desc” by=”time”} |
644 | <li><a href=”{:mac_url_art_detail($vo)}” title=”{$vo.art_name}”><img src=”{:mac_url_img($vo.art_pic)}” alt=”{$vo.art_name}”><h2>{$vo.art_name}</h2><p></p><i>{$vo.vod_from}</i><em></em></a></li> |
645 | {/maccms:art} |
646 | </ul> |
647 | 分页内容标签 |
648 | code |
649 | 分页代码可用在分类页、筛选页、搜索页、文章内容页、留言本、评论、专题首页等页面,使用前提是页面有包含paging=’yes’获取分页数据的标签。 |
650 | 其中包含隐藏参数pageurl=””,视频默认是vod/type,文章分页默认是art/type,分页时必须加入此参数以免分页出错!!! |
651 | 例如:{maccms:vod num=”10″ paging=”yes” pageurl=”vod/type”} {/maccms:vod} |
652 | 视频分类页是pageurl=”vod/type” |
653 | 视频筛选页是pageurl=”vod/show” |
654 | 视频搜索页是pageurl=”vod/search” |
655 | 首页是pageurl=”index/index” |
656 | 文章分类页是pageurl=”art/type” |
657 | 文章筛选页是pageurl=”art/show” |
658 | 文章搜索页是pageurl=”art/search” |
659 | <div class=”mac_pages”> |
660 | <div class=”page_tip”>共{$__PAGING__.record_total}条数据,当前{$__PAGING__.page_current}/{$__PAGING__.page_total}页</div> |
661 | <div class=”page_info”> |
662 | <a class=”page_link” href=”{$__PAGING__.page_url|mac_url_page=1}” title=”首页”>首页</a> |
663 | <a class=”page_link” href=”{$__PAGING__.page_url|mac_url_page=$__PAGING__.page_prev}” title=”上一页”>上一页</a> |
664 | {maccms:foreach name=”$__PAGING__.page_num” id=”num”} |
665 | {if condition=”$__PAGING__[‘page_current’] eq $num”} |
666 | <a class=”page_link page_current” href=”javascript:;” title=”第{$num}页”>{$num}</a> |
667 | {else} |
668 | <a class=”page_link” href=”{$__PAGING__.page_url|mac_url_page=$num}” title=”第{$num}页”>{$num}</a> |
669 | {/if} |
670 | {/maccms:foreach} |
671 | <a class=”page_link” href=”{$__PAGING__.page_url|mac_url_page=$__PAGING__.page_next}” title=”下一页”>下一页</a> |
672 | <a class=”page_link” href=”{$__PAGING__.page_url|mac_url_page=$__PAGING__.page_total}” title=”尾页”>尾页</a> |
673 | <input class=”page_input” type=”text” placeholder=”页码” id=”page” autocomplete=”off” style=”width:40px”> |
674 | <button class=”page_btn mac_page_go” type=”button” data-url=”{$__PAGING__.page_url}” data-total=”{$__PAGING__.page_total}” data-sp=”{$__PAGING__.page_sp}”>GO</button> |
675 | </div> |
676 | </div> |
677 | 常用处理函数 |
678 | code |
679 | 允许使用多个函数,都使用|分隔开 |
680 | {:mac_data_count(0,’all’,’vod’)} 获取视频总数量 |
681 | {:mac_data_count(0,’today’,’vod’)} 获取今日更新视频总数量 |
682 | {:mac_data_count(0,’all’,’art’)} 获取文章总数量 |
683 | {:mac_data_count(0,’today’,’art’)} 获取今日更新文章总数量 |
684 | {:mac_data_count(1,’all’)} 获取某个分类下的数据总量,支持视频和文章,传入分类ID |
685 | {:mac_data_count(1,’today’)} 获取某个分类下的今日更新数据总量,支持视频和文章,传入分类ID |
686 | {:mac_url(‘map/index’)} 获取站内链接,参数代表 模块/页面 |
687 | {$vo.vod_pic|mac_url_img} 自动转换图片地址 |
688 | {$vo.vod_content|mac_substring=100}返回截取字符串100个字 |
689 | {$vo.vod_content|mac_filter_html}返回没有html代码的内容 |
690 | {$vo.actor|mac_url_create=’actor’,’vod’,’search’}把,号相连的一串字符生成N个搜索链接,后2个参数可以不填写默认是生成vod模块搜索链接。 例子是创建演员搜索链接。支持演员、导演、tag、扩展分类等字段 |
691 | {$vo.vod_time|mac_day} 自动返回日期 |
692 | {$vo.vod_time|mac_friend_date} 友好时间提醒 几秒前,几分前,几小时前,几天前。。。 |
693 | {$vo.vod_year|mac_default=’未知’}如果字符串为空,则返回默认字符串 |
694 | {$user.user_login_ip|mac_long2ip}返回格式化ip地址 |
695 | 常用JS处理函数=======一般用元素的class自动绑定处理事件 |
696 | code |
697 | 会员-收藏视频内容 |
698 | <a href=”javascript:;” class=”mac_ulog” data-type=”2″ data-mid=”{$maccms.mid}” data-id=”{$obj.vod_id}”>我要收藏</a> |
699 | 会员-收藏文章内容页 |
700 | <a href=”javascript:;” class=”mac_ulog” data-type=”2″ data-mid=”{$maccms.mid}” data-id=”{$obj.art_id}”>我要收藏</a> |
701 | 会员-收藏专题内容页 |
702 | <a href=”javascript:;” class=”mac_ulog” data-type=”2″ data-mid=”{$maccms.mid}” data-id=”{$obj.topic_id}”>我要收藏</a> |
703 | 以下内容一般放到body结尾之前,不用于显示,只用户记录信息。 |
704 | 会员-文章浏览记录 |
705 | <span style=”display:none” class=”mac_ulog_set” alt=”设置文章内容页浏览记录” data-type=”1″ data-mid=”{$maccms.mid}” data-id=”{$obj.art_id}” data-sid=”{$param.sid}” data-nid=”{$param.nid}”></span> |
706 | 会员-专题浏览记录 |
707 | <span style=”display:none” class=”mac_ulog_set” alt=”设置专题内容页浏览记录” data-type=”1″ data-mid=”{$maccms.mid}” data-id=”{$obj.topic_id}” data-sid=”{$param.sid}” data-nid=”{$param.nid}”></span> |
708 | 会员-视频浏览记录 |
709 | <span style=”display:none” class=”mac_ulog_set” alt=”设置内容页浏览记录” data-type=”1″ data-mid=”{$maccms.mid}” data-id=”{$obj.vod_id}” data-sid=”{$param.sid}” data-nid=”{$param.nid}”></span> |
710 | 会员-视频播放记录 |
711 | <span style=”display:none” class=”mac_ulog_set” alt=”设置视频播放记录” data-type=”4″ data-mid=”{$maccms.mid}” data-id=”{$obj.vod_id}” data-sid=”{$param.sid}” data-nid=”{$param.nid}”></span> |
712 | 会员-视频下载记录 |
713 | <span style=”display:none” class=”mac_ulog_set” alt=”设置视频播放记录” data-type=”5″ data-mid=”{$maccms.mid}” data-id=”{$obj.vod_id}” data-sid=”{$param.sid}” data-nid=”{$param.nid}”></span> |
714 | 视频、文章、专题 顶和踩 通用 |
715 | <a class=”digg_link” data-id=”{$obj.vod_id}{$obj.art_id}{$obj.topic_id}” data-mid=”{$maccms.mid}” data-type=”up” href=”javascript:;”> |
716 | 顶<em class=”digg_num”>{$obj.vod_up}{$obj.art_up}{$obj.topic_up}</em> |
717 | </a> |
718 | <a class=”digg_link” data-id=”{$vod_id}{$art_id}{$topic_id}” data-mid=”{$maccms.mid}” data-type=”down” href=”javascript:;”> |
719 | 踩<em class=”digg_num”>{$obj.vod_down}{$obj.art_down}{$obj.topic_down}</em> |
720 | </a> |
721 | 视频、文章、专题点击量显示 通用 |
722 | 总点击量:<span class=”mac_hits hits” data-mid=”{$maccms.mid}” data-id=”{$obj.vod_id}{$obj.art_id}{$obj.topic_id}” “=”” data-type=”hits”></span> |
723 | 日点击量:<span class=”mac_hits hits_day” data-mid=”{$maccms.mid}” data-id=”{$obj.vod_id}{$obj.art_id}{$obj.topic_id}” “=”” data-type=”hits_day”></span> |
724 | 周点击量:<span class=”mac_hits hits_week” data-mid=”{$maccms.mid}” data-id=”{$obj.vod_id}{$obj.art_id}{$obj.topic_id}” “=”” data-type=”hits_week”></span> |
725 | 月点击量:<span class=”mac_hits hits_month” data-mid=”{$maccms.mid}” data-id=”{$obj.vod_id}{$obj.art_id}{$obj.topic_id}” “=”” data-type=”hits_month”></span> |
726 | 前台浏览历史记录调用 |
727 | <a href=”javascript:;” class=”mac_history”>历史记录</a> |
728 | 在视频、文章、专题详情页面写入浏览历史记录 |
729 | <span style=”display:none” class=”mac_history_set” alt=”设置视频历史记录” data-name=”[{$obj.type.type_name}]{$obj.vod_name}” data-pic=”{$obj.vod_pic|mac_url_img}”></span> |
730 | <span style=”display:none” class=”mac_history_set” alt=”设置文章历史记录” data-name=”[{$obj.type.type_name}]{$obj.art_name}” data-pic=”{$obj.art_pic|mac_url_img}”></span> |
731 | <span style=”display:none” class=”mac_history_set” alt=”设置专题历史记录” data-name=”{$obj.topic_name}” data-pic=”{$obj.topic_pic|mac_url_img}”></span> |
732 | 预留ajax数据接口,方便瀑布流加载 |
733 | code |
734 | 参数 |
735 | mid:模块1视频2文章3专题 |
736 | limit:每页条数,支持10,20,30 |
737 | page:页码,*多不超过20页,防止非法采集 |
738 | 接口地址是index.php/ajax/data.html?mid=1&page=1&limit=10 |
739 | 常用标签技巧 |
740 | code |
741 | 1,在循环中获取每个分类的数据量 |
742 | {maccms:type ids=”1,2,3,4″ order=”asc” by=”sort” id=”vo1″ key=”key1″} |
743 | 分成:{$vo1.type_name};总数量: {$vo1.type_id|mac_data_count=all};今日数量:{$vo1.type_id|mac_data_count=today}。 |
744 | {/maccms:type} |
745 | 2,嵌套循环外层分类内部视频或文章,重点在于外部和内部标签各自设置 id 和 key,系统默认都是vo不适合会导致数据冲掉。 |
746 | {maccms:type ids=”1,2,3,4″ order=”asc” by=”sort” id=”vo1″ key=”key1″} |
747 | {maccms:vod num=”10″ type=”‘.$vo1[‘type_id’].'” order=”desc” by=”time” id=”vo2″ key=”key2″} |
748 | {$vo1.type_name}:{$vo2.vod_name}; |
749 | {/maccms:vod} |
750 | {/maccms:type} |
ApplePay在中国上线后,就有许多线上app前后脚加入了对其的接入支持,个人比较喜欢的ENJOY也抢在首批接入了ApplePay应用内支付。本文将分享作者的接入经验。
ApplePay是苹果公司推出的一种线上/线下的便捷支付方式,根据TouchId来验证支付卡持卡人身份,ApplePay并不参与资金流动,*终还是让银行完成扣款处理,目前据Apple介绍只配备在iphone6以上和新款的ipad Air2和ipad mini3上,中国地区*低系统要求为IOS9.2,对于一种新支付体验,这门槛的确有点高了。苹果开发文档对ApplePay工作方式的介绍.
线下支付使用NFC POST机只需要与银联联系签约租用即可,我们来介绍线上支付的流程和app应用内接入的方法。
目前的接入方式有两种,一是使用第三方提供商的SDK接入,另一种是让PassKit Framework直接与银联的接口对接,当然网络上还有一些自己使用PassKit PaymentRequest自己生成订单组织信息,直接与Apple对接的Demo,因为我们不可能每家银行跑去签约,大陆的银行也不会给我们开放特许,因此这种方式仅仅能用于测试ApplePay的功能和API尝鲜,并不适用于生产中。
ApplePay官网上有列出中国目前支持并提供SDK的第三方提供商
使用第三方SDK接入的优点是开发成本比较低,并且各自都应该有高度定制的Payment Sheet(因订单信息完整度的不同),可供定制更详细的商品信息展示,缺点就是要钱。
若我们选择后者,相对开发成本会高,移动端不仅需要对支持性进行验证,协商银联接口数据对Payment Sheet的展示关闭进行控制,对各种异常进行捕抓和处理,同时后台需要自己实现对银联接口的认证交互,对交易数据的标准封装,订单状态的处理,支付信息的解密等。
我们选择使用银联SDK接入这种折中的方式,免费,工作量可以接受。
使用银联SDK接入的实现方式如图所示,主要工作是商户后台利用现成的API与银联的交互:
向苹果申请我们独有的商户ID,详细步骤,真的很详细易懂。
获得MerchantId后,更新你的证书,并且于项目->targets->Capabilities中打开ApplePay权限,选择正确的MerchantID,让三个steps成为tick状态完全权限的配置。
ok开始与银联碰头,于银联商家技术服务中心找到ApplePay入口,然后在”技术文档”选项卡中可以找到相应的SDK和后台文档。
这里我使用PHP后台,在下载的SDK压缩包里找到了PHP Version SDK,忽略掉这个外壳,我们需要将子文件夹upacp_demo_app部署到我们的服务器中。
这里我将upacp_demo_app部署到我mac的PHP环境中,打开upacp_demo_app/demo/api_05_app可以看见各种对订单处理的接口。
订单的创建,取消,查询,退款等,现在我们测试下创建订单接口
下图是创建订单的请求参数,目前银联创建ApplePay订单仅支持图中所示的参数字段,基本满足使用但可定制性比较低,*基本的订单参数merId商户号,orderId订单号,txnTime订单发送时间,txnAmt订单金额,目前测试阶段我们可以通过直接调用此接口post传参,也可以直接写死在php文件中
了解到这里后还没有具备生成订单的条件,然后我们需要配置配置签名证书和验签证书的路径,这些证书在SDK下载包里面已经有附带,我们只需要在upacp_demo_app/sdk/SDKConfig.php文件中配置好他们的路径即可
这里需要配置主机的*对路径,不能使用项目相对路径,完成SDK_SIGN_CERT_PATH,SDK_ENCRYPT_CERT_PATH,SDK_VERIFY_CERT_DIR路径的配置
我们请求下Form_6_2_AppConsume.php接口,即可创建订单,并且返回对应的Trade Name
,在App端我们就是拿这个Trade Name来对相应的订单进行付款。
拿到订单tn后,我们已经可以使用银联SDK调起支付,在这之前还要做的就是对设备和平台的支持性检测,通过,present出Payment Sheet即可。
1.添加SDK包:
将下载SDK解压包中找到applePaySDK文件夹,加入到需要接入ApplePay的项目中。
**这里注意,项目内如果同时支持银联普通支付的话,因为两个库引用重复,*好的办法就是升级银联SDK至*新版本(3.3.3),当然可以使用添加Linker Flags的方式解决,或者可以自己剥离掉重复部分,我是懒人,我选择升级哈哈。
2.为工程引入必须的framework:
3.银联SDK使用http请求,在ios9以后需在工程plist文件中添加NSAppTransportSecurity来支持Http继续使用。
—注意—
4.*后可以开始写代码了,在需要调起ApplePay支付控件的文件中引入头文件UPAPayPlugin.h(记得文件名后缀需要改成.mm),PassKit/PassKit.h
如果需要对借记卡/信用卡作限制,在检查卡片支持性的步骤可以这样写:
*后是银联ApplePay的支付回调:
返回的UPPayResult对象中有各种支付状态,同时我们还应该检查他的otherInfo属性,里面包含银联的优惠活动信息,如果有则应该在支付成功页中告知客户。
otherInfo中包含优惠信息的格式为:
!!!目前不支持商户自定义优惠活动!!!
博主自己研究了php API很久后无果,咨询银联客服,然后彻底死心。。
以下左图是通过银联SDK接入,因为可定制参数比较少,Payment Sheet比较简短,右图是使用苹果API直接生成的订单。
相信美团的ApplePay也是跟银联对接的,心血来潮买了个流量顺便作下对比
csr文件
若需要在生产环境中使用银联SDK接入ApplePay,首先需向银联申请开通ApplePay服务(联系下签约服务),并从银联商户服务平台生成ApplePay专用的CSR文件,重新去苹果开发者网站签署证书。
公钥,私钥
公钥在SDK下载包里面有,私钥在cfca入网通知邮件里面附带也可以自行下载,一个商户号唯一一份私钥和授权码,跟银联普通支付私钥是同一份。
配置
修改生产环境配置文件中的签名证书,密码,后台url地址
更换正式环境商户号(也可以是同一个)
app前端startPay方法的mode参数改为”00″
支付流程
前端支付完,付款成功
苹果会返回一个receipt-data,大概长这个样子{“receipt-data” : “MIIaYAYJKoZIhvcNAQcC……”}
将这个值返回给自己服务器,服务器开始验证账单
开始撸服务端代码 (部分代码来自网络)
大致原理也就是拿着receipt-data请求苹果服务器,苹果会返回给我们详细的账单信息,根据该信息判断账单是否正确
沙箱环境:https://sandbox.itunes.apple.com/verifyReceipt
正式环境:https://buy.itunes.apple.com/verifyReceipt
请求参数:receipt-data
请求方法:POST
使用HttpsURLConnection(推荐使用)
`
public static JSONObject verify(String url, String receipt) {
try {
HttpsURLConnection connection = (HttpsURLConnection) new URL(url).openConnection();
connection.setRequestMethod(“POST”);
connection.setDoOutput(true);
connection.setAllowUserInteraction(false);
PrintStream ps = new PrintStream(connection.getOutputStream());
ps.print(“{\”receipt-data\”: \”” + receipt + “\”}”);
ps.close();
BufferedReader br = new BufferedReader(new InputStreamReader(connection.getInputStream()));
String str;
StringBuffer sb = new StringBuffer();
while ((str = br.readLine()) != null) {
sb.append(str);
}
br.close();
String resultStr = sb.toString();
JSONObject result = JSONObject.parseObject(resultStr);
if (result != null && result.getInteger(“status”) == 21007) { //递归,以防漏单
return verify(“https://sandbox.itunes.apple.com/verifyReceipt”, receipt);
}
return result;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
使用HttpClient
`
public static JSONObject verify(String url, String receipt) {
HttpClient httpClient = new DefaultHttpClient();
HttpPost httpPost = new HttpPost(url);
try {
JSONObject data = new JSONObject();
data.put(“receipt-data”, receipt);
StringEntity entity = new StringEntity(data.toJSONString());
entity.setContentEncoding(“utf-8”);
entity.setContentType(“application/json”);
httpPost.setEntity(entity);
HttpResponse response = httpClient.execute(httpPost);
HttpEntity httpEntity = response.getEntity();
String resultStr = EntityUtils.toString(httpEntity);
JSONObject result = JSONObject.parseObject(resultStr);
httpPost.releaseConnection();
if (result.getInteger(“status”) == 21007) {
return verify(“https://sandbox.itunes.apple.com/verifyReceipt”, receipt);
}
return result;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
返回值
`
{
“status”: 0,
“environment”: “Sandbox”,
“receipt”: {
“receipt_type”: “ProductionSandbox”,
“adam_id”: 0,
“app_item_id”: 0,
“bundle_id”: “com.platomix.MicroBusinessManage”,
“application_version”: “2.0.0”,
“download_id”: 0,
“version_external_identifier”: 0,
“receipt_creation_date”: “2017-06-06 06:35:27 Etc/GMT”,
“receipt_creation_date_ms”: “1496730927000”,
“receipt_creation_date_pst”: “2017-06-05 23:35:27 America/Los_Angeles”,
“request_date”: “2017-06-06 07:13:26 Etc/GMT”,
“request_date_ms”: “1496733206549”,
“request_date_pst”: “2017-06-06 00:13:26 America/Los_Angeles”,
“original_purchase_date”: “2013-08-01 07:00:00 Etc/GMT”,
“original_purchase_date_ms”: “1375340400000”,
“original_purchase_date_pst”: “2013-08-01 00:00:00 America/Los_Angeles”,
“original_application_version”: “1.0”,
“in_app”: []
}
}
后台通过判断返回的JSON传中status的值来判断支付成功
status状态:
0 支付成功
21000 App Store不能读取你提供的JSON对象
21002 receipt-data域的数据有问题
21003 receipt无法通过验证
21004 提供的shared secret不匹配你账号中的shared secret
21005 receipt服务器当前不可用
21006 receipt合法,但是订阅已过期。服务器接收到这个状态码时,receipt数据仍然会解码并一起发送
21007 receipt是Sandbox receipt,但却发送至生产系统的验证服务
21008 receipt是生产receipt,但却发送至Sandbox环境的验证服务
苹果支付
苹果支付
前端从苹果拿到的数据大概是这样的
后台生成订单
回调
工具类
苹果支付
注:苹果支付和微信支付、支付宝支付流程不同,微信支付、支付宝支付需调用各自统一下单接口,再将得到的参数值返回给前端。苹果支付只是在后台生成订单(订单信息需包含订单编号,金额等),将订单返回给IOS客户端,客户端直接支付,再由客户端调后台接口处理支付完的业务逻辑,并不是由苹果公司来回调
前端从苹果拿到的数据大概是这样的
1 | { |
2 | “status”: 0, |
3 | “environment”: “Production”, |
4 | “receipt”: { |
5 | “receipt_type”: “Production”, |
6 | “adam_id”: 2341443613, |
7 | “app_item_id”: 2234443613, |
8 | “bundle_id”: “com.xxxxx.xxxxx”, |
9 | “application_version”: “1”, |
10 | “download_id”: 23456572706673, |
11 | “version_external_ident ifier”: 821223402, |
12 | “receipt_creation_date”: “2017-01-25 00:52:37 Etc/GMT”, |
13 | “receipt_creation_date_ms”: “3333897657000”, |
14 | “receipt_creation_date_pst”: “2017-01-25 17:57:37 America/Los_Angeles”, |
15 | “request_date”: “2017-01-26 00:57:38 Etc/GMT”, |
16 | “request_date_ms”: “1445897657000”, |
17 | “request_date_pst”: “2017-05-29 17:57:38 America/Los_Angeles”, |
18 | “original_purchase_date”: “2016-01-25 15:37:18 Etc/GMT”, |
19 | “original_purchase_ date_ms”: “145234568000”, |
20 | “original_purchase_date_pst”: “2016-01-25 07:37:18 America/Los_Angeles”, |
21 | “original_application_version”: “12”, |
22 | “in_app”: [ |
23 | { |
24 | “quantity”: “1”, |
25 | “product_id”: “xxxxxxxxx”, |
26 | “transaction_id”: “110000290198443”, |
27 | “original_transaction_id”: “110000290198443”, |
28 | “purchase_date”: “2017-01-26 00:23:36 Etc/GMT”, |
29 | “purchase_date_ms”: “1496105856000”, |
30 | “purchase_date_pst”: “2017-01-26 00:35:30 America/Los_Angeles”, |
31 | “original_purchase_date”: “2017-01-26 00:57:36 Etc/GMT”, |
32 | “original_purchase_date_ms”: “14347896000”, |
33 | “original_purchase_date_pst”: “2017-01-25 17:57:36 America/Los_Angeles”, |
34 | “is_trial_period”: “false” |
35 | } |
36 | ] |
37 | } |
38 | } |
此处不贴代码,每个人的订单不一样
/**
* 苹果支付回调(APP调用,不是苹果官方回调)
* @param transactionId
* @param payload
* @return
* @throws Exception
*/
@RequestMapping(value=”/applepay/order/notifyCallBack”)
@ResponseBody
public AppResponse<Object> applepayOrderNotifyCallBack(String transactionId, String payload) {
AppResponse<Object> appResponse = new AppResponse<>();
Map<String, Object> map = new HashMap<>();
logger.info(“苹果支付客户端传过来的值1:” + transactionId + “,客户端传过来的值2:” + payload);
try {
String verifyResult = IosVerifyUtil.buyAppVerify(payload, 1); //1.先线上测试 发送平台验证
if (verifyResult == null) { // 苹果服务器没有返回验证结果
logger.info(“无订单信息!”);
map.put(“result”, 2);
map.put(“message”, “无订单信息”);
appResponse.setData(map);
appResponse.setMsg(“无订单信息”);
appResponse.setStatus(AppResponseCode.SUCCESS);
} else { // 苹果验证有返回结果
logger.info(“线上,苹果平台返回JSON:” + verifyResult);
JSONObject job = JSONObject.parseObject(verifyResult);
String states = job.getString(“status”);
//0 正常
//21000 App Store不能读取你提供的JSON对象
//21002 receipt-data域的数据有问题
//21003 receipt无法通过验证
//21004 提供的shared secret不匹配你账号中的shared secret
//21005 receipt服务器当前不可用
//21006 receipt合法,但是订阅已过期。服务器接收到这个状态码时,receipt数据仍然会解码并一起发送
//21007 receipt是Sandbox receipt,但却发送至生产系统的验证服务
//21008 receipt是生产receipt,但却发送至Sandbox环境的验证服务
if(“21007”.equals(states)){ //是沙盒环境,应沙盒测试,否则执行下面
verifyResult = IosVerifyUtil.buyAppVerify(payload, 0); //2.再沙盒测试 发送平台验证
logger.info(“沙盒环境,苹果平台返回JSON:” + verifyResult);
job = JSONObject.parseObject(verifyResult);
states = job.getString(“status”);
}
logger.info(“苹果平台返回值:job” + job);
if (states.equals(“0”)){ // 前端所提供的收据是有效的 验证成功
String r_receipt = job.getString(“receipt”);
JSONObject returnJson = JSONObject.parseObject(r_receipt);
String in_app = returnJson.getString(“in_app”);
JSONObject in_appJson = JSONObject.parseObject(in_app.substring(1, in_app.length() – 1));
String product_id = in_appJson.getString(“product_id”);
String transaction_id = in_appJson.getString(“transaction_id”); // 订单号
/************************************************+自己的业务逻辑开始+**********************************************************/
//如果单号一致 则开始处理逻辑
if(transactionId.equals(transaction_id)){
String[] moneys = product_id.split(“\\.”);//实际支付金额
//此处开始业务逻辑
}
/************************************************+自己的业务逻辑结束+**********************************************************/
map.put(“result”, 1);
map.put(“message”, “操作成功!”);
} else {
map.put(“message”, “receipt数据有问题”);
map.put(“result”, 0);
}
appResponse.setData(map);
appResponse.setStatus(AppResponseCode.SUCCESS);
}
} catch (Exception e) {}
return appResponse;
}
package com.fengdi.lianmeng.util;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.URL;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
import java.util.Locale;
import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSession;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;
public class IosVerifyUtil {
private static class TrustAnyTrustManager implements X509TrustManager {
public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {
}
public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {
}
public X509Certificate[] getAcceptedIssuers() {
return new X509Certificate[] {};
}
}
private static class TrustAnyHostnameVerifier implements HostnameVerifier {
public boolean verify(String hostname, SSLSession session) {
return true;
}
}
private static final String url_sandbox = “https://sandbox.itunes.apple.com/verifyReceipt”;
private static final String url_verify = “https://buy.itunes.apple.com/verifyReceipt”;
/**
* 苹果服务器验证
*
* @param receipt
* 账单
* @url 要验证的地址
* @return null 或返回结果 沙盒 https://sandbox.itunes.apple.com/verifyReceipt
*
*/
public static String buyAppVerify(String receipt, int type) {
//环境判断 线上/开发环境用不同的请求链接
String url = “”;
if (type == 0) {
url = url_sandbox; //沙盒测试
} else {
url = url_verify; //线上测试
}
//String url = EnvUtils.isOnline() ?url_verify : url_sandbox;
try {
SSLContext sc = SSLContext.getInstance(“SSL”);
sc.init(null, new TrustManager[] { new TrustAnyTrustManager() }, new java.security.SecureRandom());
URL console = new URL(url);
HttpsURLConnection conn = (HttpsURLConnection) console.openConnection();
conn.setSSLSocketFactory(sc.getSocketFactory());
conn.setHostnameVerifier(new TrustAnyHostnameVerifier());
conn.setRequestMethod(“POST”);
conn.setRequestProperty(“content-type”, “text/json”);
conn.setRequestProperty(“Proxy-Connection”, “Keep-Alive”);
conn.setDoInput(true);
conn.setDoOutput(true);
BufferedOutputStream hurlBufOus = new BufferedOutputStream(conn.getOutputStream());
String str = String.format(Locale.CHINA, “{\”receipt-data\”:\”” + receipt + “\”}”);//拼成固定的格式传给平台
hurlBufOus.write(str.getBytes());
hurlBufOus.flush();
InputStream is = conn.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(is));
String line = null;
StringBuffer sb = new StringBuffer();
while ((line = reader.readLine()) != null) {
sb.append(line);
}
return sb.toString();
} catch (Exception ex) {
System.out.println(“苹果服务器异常”);
ex.printStackTrace();
}
return null;
}
/**
* 用BASE64加密
* @param str
* @return
*/
public static String getBASE64(String str) {
byte[] b = str.getBytes();
String s = null;
if (b != null) {
s = new sun.misc.BASE64Encoder().encode(b);
}
return s;
友情链接: SITEMAP | 旋风加速器官网 | 旋风软件中心 | textarea | 黑洞加速器 | jiaohess | 老王加速器 | 烧饼哥加速器 | 小蓝鸟 | tiktok加速器 | 旋风加速度器 | 旋风加速 | quickq加速器 | 飞驰加速器 | 飞鸟加速器 | 狗急加速器 | hammer加速器 | trafficace | 原子加速器 | 葫芦加速器 | 麦旋风 | 油管加速器 | anycastly | INS加速器 | INS加速器免费版 | 免费vqn加速外网 | 旋风加速器 | 快橙加速器 | 啊哈加速器 | 迷雾通 | 优途加速器 | 海外播 | 坚果加速器 | 海外vqn加速 | 蘑菇加速器 | 毛豆加速器 | 接码平台 | 接码S | 西柚加速器 | 快柠檬加速器 | 黑洞加速 | falemon | 快橙加速器 | anycast加速器 | ibaidu | moneytreeblog | 坚果加速器 | 派币加速器 | 飞鸟加速器 | 毛豆APP | PIKPAK | 安卓vqn免费 | 一元机场加速器 | 一元机场 | 老王加速器 | 黑洞加速器 | 白石山 | 小牛加速器 | 黑洞加速 | 迷雾通官网 | 迷雾通 | 迷雾通加速器 | 十大免费加速神器 | 猎豹加速器 | 蚂蚁加速器 | 坚果加速器 | 黑洞加速 | 银河加速器 | 猎豹加速器 | 海鸥加速器 | 芒果加速器 | 小牛加速器 | 极光加速器 | 黑洞加速 | movabletype中文网 | 猎豹加速器官网 | 烧饼哥加速器官网 | 旋风加速器度器 | 哔咔漫画 | PicACG | 雷霆加速 |