二维码改变了什么

mikel阅读(983)

若干年后,墓碑上只刻二维码,路过时拿出手机扫一扫,一生的故事就出来了……爱过谁,恨过谁,还牵挂着谁,简称:扫墓。。。

61e44a60gw1eotx9p5p98j20c608t74y

上面的是一则微博的内容,看到真得觉得这世界让二维码改变了的感觉,不知道什么时候生活就这么被植入了那么多的二维码。扫一扫似乎成了习惯,只要看到就想扫扫看里面是什么。

微信对二维码起到了推波助澜的作用,名片、优惠劵、促销、线下支付等等无处不在的微信扫一扫二维码都能搞定,结果再楼里的电梯里很多手机赚钱的应用推广的小广告都出现了二维码,又有多少人扫?是个问题!

从最近支付宝突出红包,再出现了芝麻信用,阿里金融生态圈日渐成熟,希望除了根除假货之外,这算是个亮点了。

 

专注专一 真实最重要

mikel阅读(910)

从前有只田鼠,种了萝卜后,发现别人种白菜长得快,拔了萝卜,种上白菜,又发现别人种得玉米长得快,又拔了白菜,种上玉米,没等玉米长出来,冬天就来了!结果,饿了一冬!

今天一个我的好几年前flash作品得观众,微信上说看了我的作品很感动,我感到很意外,那些做得flash,只是我的想把真实感受表达出来,没想到引起很多人得共鸣,很不可思议,这就是真实的感染力!

时间过得真快,多少年过去了,flash圈里很多人还在,不过大家很多的是讨论其他技术了,曾经那么多工作室和作者都淹没在互联网大潮里了,也算是中国互联网的一个时代吧!

其实,很多时候还是有再做个flash表达心情得冲动,可惜就像那只田鼠,岁末了不知道这次能不能做个出来。

移动互联网被盯上了

mikel阅读(1048)

先上一则A5上的新闻:《903款违规APP被清理下架 网信办:将出APP行业规范》
“百度公司表示,903款违规APP被清理下架。这些应用普遍涉及名称淫秽、图片人物穿着暴露、姿势不雅等低俗内容。

北京市网信办副主任夏日红表示,低俗信息、弹窗广告、内置病毒等违规行为严重影响了用户的使用体验。对移动互联网应用市场的管理,需要法规、技术、行业自律“三管齐下”。法律法规的制定比较复杂,目前尚在研究之中。

夏日红透露,净化移动应用市场环境,是今年市网信办的重要工作。年内将出台一条业内的行业规范,要求APP的生产者在发布前进行实名登记,一旦发现APP违规,可找到生产者追究责任,否则责任由该APP的发布平台承担。”

移动互联网如火如荼得刮起台风的同时,不知道又会出现多少风口上的猪了!行业整顿终于来了,很多走擦边儿路线的应用看来要洗白白了。

2015年从应用到微商还有互联网上的自媒体,将面临着监管的命运,只是程度大小,就看天朝的态度了,还有行业的发展和影响力了。

不出所料,2015年的3.15不出所料,微商和移动互联网应用应该可以上榜了,移动互联网的群雄争霸得局面接近尾声了。

微信已无可争议的先胜一筹,接下来就看百度、阿里得了,没有想象空间估计再和工商局干架,股价还是会受影响。

2015个人开发者在这个移动乱世想要立足,面临的环境要比2014年严峻得多,一方面是巨头的进入,另一方面是加入的开发者前仆后继,更多的是大大小小的公司开始移动互联网开发了。

604e48d0jw1em12evqmbrj20c80c7wex

[转载]微信内置JsAPI之WeixinJSBridge_Alien的笔记

mikel阅读(1254)

[转载]微信内置JsAPI之WeixinJSBridge_Alien的笔记.

在 微信上,通过公众平台推送给用户的文章,是在微信内部直接打开的,用的无外乎就是一个UIWebView控件(IOS上,Android上也差不多)。但 特殊的是,微信官方在这里面加了一个默认的Js API–WeixinJSBridge,通过它,能直接在该页面上做这些操作:

1、将文章分享到微信朋友圈

2、将文章直接发送给微信上的好友

3、将文章分享到腾讯微博

4、关注指定用户

以上这些操作,都是通过WeixinJSBridge.invoke接口来完成的,那么,这个WeixinJSBridge对象还有没有提供一些别的方法可以让我们来使用的?于是,我做了这么个测试,用来提取WeixinJSBridge对象中的其他接口:http://www.baidufe.com/demo/weixinjsapi.html 请用微信打开该网址,怕输入麻烦的话,可以扫描如下二维码:

如果你也是一个技术控,那就把下面这段儿代码拿过去,自己玩儿吧:

/**
 * 检测微信JsAPI
 * @param callback
 */
function detectWeixinApi(callback){
    if(typeof window.WeixinJSBridge == 'undefined' || typeof window.WeixinJSBridge.invoke == 'undefined'){
        setTimeout(function(){
            detectWeixinApi(callback);
        },200);
    }else{
        callback();
    }
}
     
detectWeixinApi(function(){
    var html = [];
    for(var key in window.WeixinJSBridge) {
        var js = 'WeixinJSBridge.' + key + ' = ' + window.WeixinJSBridge[key].toString();
        js = js_beautify(js); // 美化一下,看着舒服些
        html.push('<pre class="brush:js;toolbar:false;">' + js + '</pre>')
    }
     
    document.getElementById('WeixinJsApi').innerHTML = html.join('');
     
    // 代码高亮
    SyntaxHighlighter.highlight();
});

 

内容更新:

—————————–

比较多网友都在咨询这个微信内置API,在这里更新一下文章吧:这个Api大部分接口都被官方限制使用了,具体原因无外乎是为了安全、为了盈利!如果你也还在寻找这个接口的使用方法,估计也没有什么好的办法了。

另外,如果你是在做微信公众平台的话,我还写了另外一篇关于这个WeixinJSBridge API的文章,里面有几个API是官方提供的,稳定可用,链接:http://www.baidufe.com/item/c4bacb3bd66930f2e43e.html  ,希望对你有用。

内容更新:2014

—————————–

Android版本的微信环境中,依然可以通过如下两种方式进行微信(公众)号的推广:

1、<a href=”weixin://contacts/profile/微信号原始ID(如:gh_dd4B2C2ada8b)”>Baidufe</a>

这种方法能直接打开该号的微信资料页,直接关注;但获取原始ID比较麻烦。

2、<a href=”weixin://contacts/profile/微信号(如:www_baidufe_com)”>Baidufe</a>

这种方法会打开“加入到通讯录”的界面,然后再是资料页

[转载]微信内置浏览器的JsAPI(WeixinJSBridge续)_Alien的笔记

mikel阅读(1089)

[转载]微信内置浏览器的JsAPI(WeixinJSBridge续)_Alien的笔记.

之前有写过几篇关 于微信内置浏览器(WebView)中特有的JavaScript API(JavaScript Interface)的文章,不过随着微信官方的调整,部分API已经不能直接使用,比如类似直接分享到朋友 圈 WeixinJSBridge.invoke(‘shareTimeline’,data,callback) 这样的功能,直接调用,会得到一个访问拒绝的response。后来重新调研了下,整理出来了一个WeixinAPI的JavaScript类库,分享出 来,如果你对微信公众平台开发感兴趣,应该对你有用。

/**!
 * 微信内置浏览器的Javascript API,功能包括:
 *
 * 1、分享到微信朋友圈
 * 2、分享给微信好友
 * 3、分享到腾讯微博
 * 4、隐藏/显示右上角的菜单入口
 * 5、隐藏/显示底部浏览器工具栏
 * 6、获取当前的网络状态
 * 7、调起微信客户端的图片播放组件
 *
 * @author zhaoxianlie(http://www.baidufe.com)
 */
var WeixinApi = (function () { 
    /* 这里省略了一堆代码……下面直接看调用接口 */
    return {
        ready           :wxJsBridgeReady,
        shareToTimeline :weixinShareTimeline,
        shareToWeibo    :weixinShareWeibo,
        shareToFriend   :weixinSendAppMessage,
        showOptionMenu  :showOptionMenu,
        hideOptionMenu  :hideOptionMenu,
        showToolbar     :showToolbar,
        hideToolbar     :hideToolbar,
        getNetworkType  :getNetworkType,
        imagePreview    :imagePreview
    };    
});

下面,我们先来看一下这些API都应该怎么使用,先从最简单的入手。

1、假如我希望一打开网页后,就隐藏掉右上角的PopUp菜单入口,并且隐藏掉浏览器下方的工具栏,同时还要获得当前的网络状态,那么,我们的代码可以这样来写:

// 所有功能必须包含在 WeixinApi.ready 中进行
WeixinApi.ready(function(Api){
    // 隐藏右上角popup菜单入口
    Api.hideOptionMenu();
    // 隐藏浏览器下方的工具栏
    Api.hideToolbar();
    // 获取网络状态
    Api.getNetworkType(function(network){
        // 拿到 network 以后,做任何你想做的事
    });
});

如 示例代码中的注释所示,所有的功能执行必须放在 WeixinApi.ready 方法中执行,就好比你用JQuery的时候,通常都需要使用 JQuery(document).ready(function(){ }) 一样。为什么要这样做?相信不用我解释大家都能明白,因为我们必须要保证在执行这些方法的时候,WeixinJsBridge API已经被加入到WebView上了!

2、 再来看一个有关分享的例子,假如用户在阅读我的文章(或在使用我的产品)的过程中,发现它很有意思或有价值,一般都会将其收藏或分享(给好友、朋友圈、微 博等)出去,那现在我就希望能监测到用户的分享行为,比如:自定义用户可分享的内容、甚至是在用户分享之、分享被取消、分享失败、分享成功、以及整个分享 操作过程结束,我们都去做点儿什么。那么,这个代码我们可以这样来写:

// 所有功能必须包含在 WeixinApi.ready 中进行
WeixinApi.ready(function(Api){
    // 微信分享的数据
    var wxData = {
        "imgUrl":'http://www.baidufe.com/fe/blog/static/img/weixin-qrcode-2.jpg',
        "link":'http://www.baidufe.com',
        "desc":'大家好,我是Alien,Web前端&Android客户端码农,喜欢技术上的瞎倒腾!欢迎多交流',
        "title":"大家好,我是赵先烈"
    };
    // 分享的回调
    var wxCallbacks = {
        // 分享操作开始之前
        ready:function () {
            // 你可以在这里对分享的数据进行重组
        },
        // 分享被用户自动取消
        cancel:function (resp) {
            // 你可以在你的页面上给用户一个小Tip,为什么要取消呢?
        },
        // 分享失败了
        fail:function (resp) {
            // 分享失败了,是不是可以告诉用户:不要紧,可能是网络问题,一会儿再试试?
        },
        // 分享成功
        confirm:function (resp) {
            // 分享成功了,我们是不是可以做一些分享统计呢?
        },
        // 整个分享过程结束
        all:function (resp) {
            // 如果你做的是一个鼓励用户进行分享的产品,在这里是不是可以给用户一些反馈了?
        }
    };
    // 用户点开右上角popup菜单后,点击分享给好友,会执行下面这个代码
    Api.shareToFriend(wxData, wxCallbacks);
    // 点击分享到朋友圈,会执行下面这个代码
    Api.shareToTimeline(wxData, wxCallbacks);
    // 点击分享到腾讯微博,会执行下面这个代码
    Api.shareToWeibo(wxData, wxCallbacks);
});

3、当然,如果你的业务需求相当复杂,比如,你的产品就是一个微信网页游戏(类似“2048数字游戏微信版”),你希望用户分享出去的数据是一个网页截屏、或者需要将用户当前的游戏状态回传到服务器动态生成可分享的内容;那么这种情况我们又该怎么做呢?来看下面这个示例代码吧:

// 所有功能必须包含在 WeixinApi.ready 中进行
WeixinApi.ready(function(Api){
    // 分享的回调
    var wxCallbacks = {
        // 分享过程需要异步执行
        async : true,
        // 分享操作开始之前
        ready:function () {
            var self = this;
            // 假设你需要在这里发一个 ajax 请求去获取分享数据
            $.post(yourServerUrl,yourPostData,function(responseData){
                // 可以解析reponseData得到wxData
                var wxData = responseData;
                // 调用dataLoaded方法,会自动触发分享操作
                // 注意,当且仅当 async为true时,wxCallbacks.dataLoaded才会被初始化,并调用
                self.dataLoaded(wxData);
            });
        }
        /* cancel、fail、confirm、all 方法同示例2,此处略掉 */
    };
    // 用户点开右上角popup菜单后,点击分享给好友,会执行下面这个代码
    Api.shareToFriend({}, wxCallbacks);
});

唯一的区别就是在wxCallbacks中,增加了配置项async为true,表示这个分享过程是异步调用的,其实就是指的ready方法异步执行,在这种情况下,我们需要在ready方法中显式地调用wxCallbacks的dataLoaded方 法,以保证分享过程能继续往下执行。也许你会发现,这个wxCallbacks中,根本就没有配置dataLoaded方法啊!是的,当async为 true时,WeixinApi中我会自动对其进行初始化,dataLoaded方法需要一个参数,表示需要分享出去的数据!

4、当然,如果你非要去配置dataLoaded方法,也是没有问题的,你的配置也会被执行,不会被覆盖,执行顺序是:用户配置优先。

上面是直接给出使用方法,也许你现在开始关心每个方法的参数列表是什么样的了?我们以分享到朋友圈的方法为例,来看看参数都有哪些配置项:

/**
 * 分享到微信朋友圈
 * @param       {Object}    data       待分享的信息
 * @p-config    {String}    appId      公众平台的appId(服务号可用)
 * @p-config    {String}    imageUrl   图片地址
 * @p-config    {String}    link       链接地址
 * @p-config    {String}    desc       描述
 * @p-config    {String}    title      分享的标题
 *
 * @param       {Object}    callbacks  相关回调方法
 * @p-config    {Boolean}   async                   ready方法是否需要异步执行,默认false
 * @p-config    {Function}  ready(argv)             就绪状态
 * @p-config    {Function}  dataLoaded(data)        数据加载完成后调用,async为true时有用
 * @p-config    {Function}  cancel(resp)    取消
 * @p-config    {Function}  fail(resp)      失败
 * @p-config    {Function}  confirm(resp)   成功
 * @p-config    {Function}  all(resp)       无论成功失败都会执行的回调
 */
WeixinApi.shareToTimeline(data,callbacks);

分享给微信好友以及分享到腾讯微博的参数列表都一样,这里就不罗列了。

5、如果你的文章中有很多图片,那么,点击图片直接调起微信客户端自带的图片播放组件,那必然是一件好事;对此,你可以这样来做:

// 调起微信客户端的图片播放组件进行播放
WeixinApi.ready(function(Api){
    var srcList = [];
    $.each($('img'),function(i,item){
       if(item.src) {
           srcList.push(item.src);
           $(item).click(function(e){
               // 通过这个API就能直接调起微信客户端的图片播放组件了
               Api.imagePreview(this.src,srcList);
           });
       }
    });
});

就这么一段儿简单的代码,一切都搞定了!不过,需要指出的是,Api.imagePreview的参数是会进行强检测的:

/**
 * 调起微信Native的图片播放组件。
 * 这里必须对参数进行强检测,如果参数不合法,直接会导致微信客户端crash
 *
 * @param {String} curSrc 当前播放的图片地址
 * @param {Array} srcList 图片地址列表
 */
function imagePreview(curSrc,srcList) ;

需要指出的是,微信公众平台对Android、iOS平台支持力度不统一,比较费劲,具体有:

  • iOS平台下,分享出去的数据wxData中,imageUrl可以是DataURI格式的;但在Android平台下,必须是全路径的图片地址

  • iOS平台下,分享的回调callback基本全都可以得到执行;但在Android平台下,分享到微信朋友圈的callback无法得到执行(ready方法除外)

  • iOS 平台下,无法在非mp.weixin.qq.com域下的页面中通过WeixinJSBridge.invoke(‘profile’)的方式打开某微信 号的资料页面;Android平台下则可以通过<a href=”weixin://contacts/profile/微信ID”>的方式打开资料页;WinPhone下,则是通过<a href=”weixin://profile/微信ID”>的方式打开。

期待官方能早日实现各平台API的统一吧!!!

至于API内部是怎么实现的,如果感兴趣,那就看源码吧,使用过程中如遇到什么Bug,请来这里反馈。

为了便于Api的维护与共享,已将其放到Github上了,大家这里走起:https://github.com/zxlie/WeixinApi

[转载]免费ftp服务器FileZilla Server配置_ftp_教程吧

mikel阅读(896)

[转载]免费ftp服务器FileZilla Server配置_ftp_教程吧.

FileZilla Server下载安装完成后,必须启动软件进行设置,由于此软件是英文,本来就是一款陌生的软件,再加上英文,配置难度可想而知,小编从网上找到一篇非常详细的教程进行整理了一番,确保读到这篇教程的同学都能够进行免费ftp服务器FileZilla Server配置。


FileZilla Server启动界面

运行FileZilla Server Interface.exe,得到以上界面,如果是第一次进入,直接点击ok即可。我们可以在「Administrator password:」栏位中输入本服务器Filezilla服务的密码,输入管理端口号(管理端口到底是多少,请参考前文安装过程中填写的具体数字是多 少。),然后勾选「Always connect to this server」再按下〔OK〕。建议选中“总是连接到本服务器”的选项,即表示每次启动管理控制台,都是管理本机的Filezilla服务。

注意:修改端口和密码非常重要,这是确保Filezilla安全的重点,必须修改端口,必须设置密码!密码建议足够复杂!可以在管理界面中进行修改

FileZilla Server主界面
这是程序的主界面,然后开始点击Edit菜单下的Settings.会得到如下界面:
FileZilla Server全局参数设置
首先要进行服务器全局参数设置:

General settings(常规设置):

Listen on Port:监听端口,其实就是FTP服务器的连接端口。(一般都是21)
Max.Number of users:允许最大并发连接客户端的数量。(0为不限制)
Number of Threads:处理线程。也就是CPU优先级别。数值调得越大优先级越高,一般默认即可。
下面的是超时设置,
Connections timeout:连接超时时间;此处默认是120秒。
No Transfer timeout:传输空闲超时;此处默认是600秒。
Login timeout:登入超时。此处是60秒。
一般此处默认即可,无须更改。
FileZilla Server配置欢迎信息
Welcome message页面设置客户端登录成功以后显示的Welcome信息。
小编此处已经改为Welcom to Serv-U FTP Server(另一款非常知名的ftp服务器)!
此处最好要修改!因为随便暴露的话黑客可能会利用漏洞进行攻击。建议和小编输入的一样即可。
FileZilla Server配置绑定ip
IP bindings(IP绑定)页面:把服务器与IP地址绑定,使用*以绑定到所有地址。(一般默认即可)
FileZilla Server配置过滤ip
   IP Filter(IP过滤器)页面:设置IP过滤规则,在上面栏目中的IP是被禁止与FTP服务器连接的,下面的是允许的。
格式:可以是单个IP地址、IP地址段,可以使用通配符、使用IP/subnet语法或正则表达式(以“/”结尾)来过滤主机名。
(一般默认即可,除非有需要的话再来进行设置)


FileZilla Server配置被动传输模式
第2步  Passive mode settings(被动传输模式设置):这个页面要重点关注
先修改Use custom port range:小编此处选择的从10000-10020.此处根据自己需要选择。
下面是被动传输设置:
1)如果服务器本身直接拥有公网IP,可以选软件默认的“Default”。

2)  如果服务器是在局域网里面,在一个网关后面,那么就要选择第二项“Use the follwoing IP”,并且在下面的输入栏填写公网的IP地址;否则,客户端用PASV被动模式可能无法连接FTP服务器。因为服务器是在内网中, 在客户端使用PASV模式连接服务器的时候,服务器收到连接请求之后需要把自身的IP地址告诉客户端,由于服务器在内网中,它侦测到的IP地址是内网的 (如192.168.0.5),它把这个IP地址交给客户端,客户端自然无法连接。在这里设置了指定的IP地址后,服务器就会把这个公网合法的IP地址提 交给客户端,这样才能正常建立连接。

如果服务器是动态IP的,那么可以选择下面的“Retrieve external IP address from”,利用FileZilla官方网站免费提供的IP查询页面获取当时的公网合法IP,然后服务器把这个公网合法IP地址提交给客户端。当然静态 IP也可以用这个,只不过没有必要。

这个设置页面对服务器位于内网的情况非常重要。有些FTP服务器端没有这个设置项目,客户端就只能用Port主动模式连接。当然有些客户端软件针对这个问题有专门的设置,如FlashFXP的站点设置中只要选中“被动模式使用站点IP”就可以了。

对于在局域网中的服务器,如果服务器没有置于DMZ区,那么强烈建议选中下面的“Use custom port range”定义PASV端口范围。由于PASV模式中,是服务器随机打开端口,然后把打开的端口号告诉客户端,让客户端连接打开的端口。但是因为服务器 处于网关后面,如果网关那里没有做对应的端口映射,客户端从外网就无法连接服务器打开的端口,导致PASV模式连接失败。在这里限定服务器打开的端口范 围,然后到连接外网的网关那里,对服务器的这些端口做端口映射(虚拟服务)。这需要服务器和Internet网关设备配合设置,这样外网的客户端才能用 PASV模式连接进来。

FileZilla Server安全设置
第3步  Security settings(安全设置):这里的两个选项关系到能否FXP。软件默认状态“Block incoming server-to-server transfers”和“Block outgoing server-to-server transfers”两项都是选中的,前面那项是禁止连入的服务器对传,后面是禁止传出的服务器对传。也就是说默认状态不允许FXP,如果需要使用 FXP,那么就把这两个项目取消选择。注意FXP传输除了跟这个页面的设置有关,还跟IP过滤器有关。

说明:如果启用,IP过滤器在传输开始时检查远端IP,如果IP不符合控制通道中的远端IP,传输将被取消。

FXP经常被用来传输非法盗版软件,反弹攻击亦可被用来发起对服务器的Dos攻击,因为恶意用户可以发起多个服务器到服务器传输,这将对服务器的带宽和可用性造成很大影响。

如果设置了严格过滤IP,整个IP将与控制通道中的IP进行比较,但此选项可能会对使用了多个IP的代理服务器引发问题。

为了避免此问题,可以禁用严格IP过滤,这样只检查IP地址的前三部分,但这会使对FXP/反弹攻击的安全都降低。因此,你需要在安全和兼容性之间做选择,要想达到最佳效果,你可以阻止所有的FXP传输并且仅对传入的传输启用严格过滤。

FileZilla Server配置杂项
miscellaneous:杂项设置。默认即可。
第4步   Admin Interface setting(管理员界面设定): 这个就是登录配置服务器界面的一些参数。端口号的设置在安装的时候也出现过。下面两栏可以定义允许远程登录配置的网络界面和IP地址,第一个空白可以设置 把管理界面绑定到IP地址,使用*以绑定所有IP地址,127.0.0.1是默认绑定,它一直存在且不可被移除;第二个空白设置允许连接到管理界面的IP 地址,可以使用通配符(例如:123.234.12?.*),127.0.0.1总是被允许连接到管理界面的。在最下面更改管理员口令。

注意:修改端口和密码非常重要,这是确保Filezilla安全的重点,必须修改端口,必须设置密码!密码建议足够复杂!

FileZilla Server配置日志
第5步  Logging(日志):设定是否启用日志记录功能以及日志文件大小和文件名。
FileZilla Server速度限制
第 6步  Speed Limits(速度限制):这个是全局参数,默认状态不限速。可以选中“Constant Speed Limit of”并填写限速数值来实现速度限制,下载(传出)和上传(传入)可以分别设置。还可以根据时段自定义限速规则——“Use Speed Limit Rules”,比如这台服务器或者网络连接除了做FTP服务器之外还有别的用途,需要根据时间调度,不能让FTP传输挤占所有网络带宽影响其它的网络服 务;就可以通过这里设置。
FileZilla Server文件传输压缩设置
第 7步  Filetransfer compression(文件传输压缩设置):MODE Z FTP协议是一种实时压缩的传输协议。在这种模式下,发送方的数据在发出之前先进行压缩,再送到网络链路中传输,接收方将收到数据实时解包,在本地还原重 组成原文件。这种模式可以大幅度减少网络中的数据流量,提升传输效率(速度)。当然对于已经压缩过的文件,就几乎没有效果了。要使用这种传输模式,需要服 务器端和客户端都支持MODE Z协议。

勾选“Enable MODE Z support”就可以启用本服务器的MODE Z支持功能,这样,只要客户端也支持MODE Z就可以获得它带来的性能提升。“Minimum allowed compression level”和“Maximum allowed compression level”分别设置最小压缩率和最大压缩率。最下面可以输入不启用MODE Z功能的目标IP。

FileZilla Server配置ssl/tls
第8步  设置“SSL/TLS settings”。

FileZilla Server配置ssl 

       选中“Enable FTP over SSL/TLS support(FTPS)”

  

FileZilla Server配置1小时之内10次失败尝试
还有一处ushi是否一小时之内允许重复10次失败尝试。

第9步  加固权限,找到Filezilla的配置文件,格式是xml格式,鼠标右键点击之,并选择属性。

加入Guest组禁止读写的权限,设置为拒绝。

FileZilla Server配置设置文件属性  

       点击确定后,系统会弹出提示,询问拒绝权限优先级高于允许权限,是否要继续,点击是通过即可。

FileZilla Server禁用guests访问权限 


       匿名FTP配置:

       首先打开管理控制台,点击左起第四个图标 进入系统设置。

打开ftp用户管理界面,点击右侧的 add按钮,添加新用户。

在新增用户的对话框中,输入“anonymous”这个名字,即FTP的匿名用户。

点击确认,添加用户完成,返回用户管理界面。

点击左侧的“Shared folders”菜单。点击Add按钮,添加一个目录。

打开浏览文件夹的选项,选择要设置FTP的目录。

点击确定,添加用户完成。

现在用户FTP客户端连接到FileZilla Server上,可以看到匿名FTP已经配置完成。 

标准FTP用户配置:

设定流程:开新帐户→ 设定密码→ 选定资料夹→ 设定完成。

第1步  进行的是用户组(Group Settings)设置。在主界面点击第五个按钮或者由“Edit”——“Groups”菜单进入。

组设置是为了便于用户归类管理,相同权限的用户归属到同一个组里面,这样就不用重复多次设置每个用户的权限等参数,简化配置和管理工作。点击右边的“Add”按钮创建新组。

FileZilla Server配置组用户

组创建完成以后,点“Shared folders”进入目录权限设置页面。点击中间区域的“Add”按钮添加目录。默认状态添加的第一个目录即为该组用户登录之后看到的主目录(Home Directory),主目录前面有个粗体的“H”标识。目录列表右侧分别是对该目录的操作权限设置,上面是文件权限设置,下面是目录权限设置。如果要改 变主目录,只要在列表中选中需要设置为主目录的那个,然后点击“Set as home dir”按钮即可。

FileZilla Server增加用户配置目录

设置好主目录之后,再点击“Add”按钮把其余的目录依次设置进来就可以了。不过这里得注意,如果仅仅把别的目录添加进去,那么你用客户端连接之后,会发 现除了主目录和它的子目录之外,别的目录都看不见。这是怎么回事?这里要说明一个概念——虚拟路径。所谓虚拟路径,就是在客户端看到的目录结构。由于一个 用户只能有一个主目录,别的目录如果不映射成虚拟目录的话,客户端将看不到它。所以只有把除了主目录之外的其它目录,虚拟成主目录的子目录,这样在客户端 才能看到。

比如本例,主目录是D:\Downloads,如果不做虚拟路径设置,那么客户端登录进来只能看到主目录里面的内容,还有一个E:\FTPRoot目录下 面的东西看不到。如何设置虚拟路径?鼠标右键点击列表中的“E:\FTPRoot”目录,在弹出的菜单里面选“Edit aliases”编辑别名;现在要把E:\FTPRoot目录作为客户端主目录下的FTPRoot目录,那么就在弹出的窗口里面输入“D: \Downloads\FTPRoot”并点击“OK”按钮确定。注意拼写规则,路径的前面部分必须是主目录的绝对路径。这样设置之后,在客户端就可以看 到一个“FTPRoot”目录,这个目录其实就是E:\FTPRoot目录。

组设置中的“Speed Limits”和“IP Filter”跟全局设置里面的速度限制和IP过滤器设置方法是一样的,请参照前面的内容。只不过这个是仅仅针对这个组的用户生效。而全局设置是对所有的 用户都生效。设置完毕之后点击“OK”按钮回到主界面。

权限说明:

文件:
Files → Read:可下载档桉。
Files → Write:可上传档桉。
Files → Delete:可删除档桉。
Files → Append:即把文件下载到本地副本并打开编辑,在关闭时再上传到服务器。(问题:不知道是不是在服务器端进行执行编辑。)

目录:
Directories → Creat:可新增子资料夹。
Directories → Delete:可删除子资料夹。
Directories → List:可列出资料夹中的档桉。
Directories → +subdirs:列出文件夹中的子文件夹。

注意:在FileZilla Server里设置的对文件、目录的权限,需要依赖Windows操作系统中SYSTEM帐号对文件、目录的权限设置。

第2步  设置用户(Users)。点击主界面第四个按钮或者由“Edit”——“Users”菜单进入。

       点击右边的“Add”按钮创建用户,输入用户名test 。

       选中Password前边的多选框,然后输入密码123456。

FileZilla Server设置用户  

       然后从“Group membership”栏选择该用户所属的组(Group),这样该用户将继承该组的所有属性/权限,不用再单独一一设置这些参数了。这也是设置组体现的 方便性,在用户比较多的时候使用组来分类会使得管理工作更加方便、高效。当然,也可以设置一个不属于任何组的用户,这样的话,就得单独定制该用户的权限。 对于少量特殊用户,可以用这种方式设置。
返回到用户管理界面,点击设置文件夹目录,点击Add添加目录。 

       添加完成,再右侧选中test用户对这个目录的权限,然后点击左侧的OK按钮,配置完成。

现在可以使用客户端来测试登录了。

FileZilla Server配置文件记录日志

打开FTP客户端软件,输入test用户名和密码123456,登录到服务器。

FileZilla Server用ftp进行登陆测试

登录成功后,可以看到刚才制定的FTP目录下的文件,并具有相应的上传、下载权限。

FileZilla Server用ftp客户端登陆测试成功

至此,FileZilla Server的基本设置就完成并可以运行了。

启用SFTP设置如下:

打开“Users”对话框:添加用户;输入密码;选中“Force SSL for user login”,目的是强制使用 SSL,当然如果不选的话,要不要使用 SSL,就由客户端自己选择了。

FileZilla Server强制使用ssl

在“Shared folders”中添加 FTP 文件夹,并设置相应权限。

       用 FileZilla Client 连接 FTP 服务器。和普通的连接相同,只是注意选择 Servertype,如下图:

FileZilla Server用ftp客户端设置连接ssl模式 


这篇教程也算入门级的教程,其他的ftp服务器软件也是大同小异。还是根据自己的需要自行设置。
本文原地址,小编只做了稍微修改,因为这篇教程已经很详细了。谢谢原作者。

 

 

[转载]微信公众平台开发生成带参数二维码 83 _IT技术门户_LAMP_LNMP_搜集网 www.sosge.com

mikel阅读(884)

[转载]微信公众平台开发生成带参数二维码 83 _IT技术门户_LAMP_LNMP_搜集网 www.sosge.com.

本文介绍在微信公众平台上如何使用高级接口开发生成带参数二维码的功能。

 

一、场景二维码

为了满足用户渠道推广分析的需要,公众平台提供了生成带参数二维码的接口。使用该接口可以获得多个带不同场景值的二维码,用户扫描后,公众号可以接收到事件推送。

目前有2种类型的二维码,分别是临时二维码和永久二维码,前者有过期时间,最大为1800秒,但能够生成较多数量,后者无过期时间,数量较少(目前参数只支持1–100000)。两种二维码分别适用于帐号绑定、用户来源统计等场景。

用户扫描带场景值二维码时,可能推送以下两种事件:

如果用户还未关注公众号,则用户可以关注公众号,关注后微信会将带场景值关注事件推送给开发者。

如果用户已经关注公众号,在用户扫描后会自动进入会话,微信也会将带场景值扫描事件推送给开发者。

获取带参数的二维码的过程包括两步,首先创建二维码ticket,然后凭借ticket到指定URL换取二维码。

 

二、创建二维码ticket

每次创建二维码ticket需要提供一个开发者自行设定的参数(scene_id),分别介绍临时二维码和永久二维码的创建二维码ticket过程。

临时二维码请求说明

http请求URL

 

POST数据格式

1 {
2     "expire_seconds": 1800,
3     "action_name": "QR_SCENE",
4     "action_info": {
5         "scene": {
6             "scene_id": 100000
7         }
8     }
9 }

返回格式:

{
    "ticket": "gQFK8DoAAAAAAAAAASxodHRwOi8vd2VpeGluLnFxLmNvbS9xL3kweXE0T3JscWY3UTltc3ZPMklvAAIEG9jUUgMECAcAAA==",
    "expire_seconds": 1800
}

永久二维码请求说明

http请求URL

 

POST数据格式

{
    "action_name": "QR_LIMIT_SCENE",
    "action_info": {
        "scene": {
            "scene_id": 1000
        }
    }
}

返回格式

{
    "ticket": "gQHi8DoAAAAAAAAAASxodHRwOi8vd2VpeGluLnFxLmNvbS9xL0UweTNxNi1sdlA3RklyRnNKbUFvAAIELdnUUgMEAAAAAA=="
}

提交数据参数说明:

 

返回结果参数说明

程序实现

 1 $access_token = " xDx0pD_ZvXkHM3oeu5oGjDt1_9HxlA-9g0vtR6MZ-v4r7MpvZYC4ee4OxN97Lr4irkPKE94tzBUhpZG_OvqAC3D3XaWJIGIn0eeIZnfaofO1C3LNzGphd_rEv3pIimsW9lO-4FOw6D44T3sNsQ5yXQ";
 2  
 3 //临时
 4 $qrcode = '{"expire_seconds": 1800, "action_name": "QR_SCENE", "action_info": {"scene": {"scene_id": 10000}}}';
 5 //永久
 6 $qrcode = '{"action_name": "QR_LIMIT_SCENE", "action_info": {"scene": {"scene_id": 1000}}}';
 7  
 8 $url = ""color: #800080;">$access_token";
 9 $result = https_post($url,$qrcode);
10 $jsoninfo = json_decode($result, true);
11 $ticket = $jsoninfo["ticket"];
12  
13 function https_post($url, $data = null){
14     $curl = curl_init();
15     curl_setopt($curl, CURLOPT_URL, $url);
16     curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
17     curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);
18     if (!empty($data)){
19         curl_setopt($curl, CURLOPT_POST, 1);
20         curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
21     }
22     curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
23     $output = curl_exec($curl);
24     curl_close($curl);
25     return $output;
26 }

 

三、通过ticket换取二维码

获取二维码ticket后,开发者可用ticket换取二维码图片。无须登录态即可调用。

HTTPS GET请求说明(TICKET必需UrlEncode)

 

ticket正确情况下,http 返回码是200,是一张图片,可以直接展示或者下载。

HTTP头示例如下:

 1 {
 2     "url": "",
 3     "content_type": "image/jpg",
 4     "http_code": 200,
 5     "header_size": 162,
 6     "request_size": 181,
 7     "filetime": -1,
 8     "ssl_verify_result": 20,
 9     "redirect_count": 0,
10     "total_time": 0.509,
11     "namelookup_time": 0,
12     "connect_time": 0.058,
13     "pretransfer_time": 0.343,
14     "size_upload": 0,
15     "size_download": 28497,
16     "speed_download": 55986,
17     "speed_upload": 0,
18     "download_content_length": 28497,
19     "upload_content_length": 0,
20     "starttransfer_time": 0.481,
21     "redirect_time": 0
22 }

下面是二种场景二维码的URL及生成的图片

 

 

 

四、下载二维码

二维码生成以后,可以在浏览器中右键另存为本地图片,但如果有很多二维码的时候,用程序来下载就比较方便。

我们使用CURL获取图片的所有信息,并将图片数据保存为一个文件。一个完整的下载代码如下:

$ticket = "gQHi8DoAAAAAAAAAASxodHRwOi8vd2VpeGluLnFxLmNvbS9xL0UweTNxNi1sdlA3RklyRnNKbUFvAAIELdnUUgMEAAAAAA==";
 
$url = "".urlencode($ticket);
$imageInfo = downloadImageFromWeiXin($url);
 
$filename = "";
$local_file = fopen($filename, 'w');
if (false !== $local_file){
    if (false !== fwrite($local_file, $imageInfo["body"])) {
        fclose($local_file);
    }
}
 
function downloadImageFromWeiXin($url)
{
    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_HEADER, 0);    
    curl_setopt($ch, CURLOPT_NOBODY, 0);    //只取body头
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    $package = curl_exec($ch);
    $httpinfo = curl_getinfo($ch);
    curl_close($ch);
    return array_merge(array('body' => $package), array('header' => $httpinfo)); 
}

这样,在程序当前目录就会生成一个包含二维码的图片文件。

 

五、扫描带参数二维码事件

用户扫描带场景值二维码时,可能推送以下两种事件:

如果用户还未关注公众号,则用户可以关注公众号,关注后微信会将带场景值关注事件推送给开发者。

如果用户已经关注公众号,则微信会将带场景值扫描事件推送给开发者。

1. 用户未关注时,进行关注后的事件推送

<xml>
<ToUserName><![CDATA[gh_45072270791c]]></ToUserName>
<FromUserName><![CDATA[o7Lp5t6n59DeX3U0C7Kric9qEx-Q]]></FromUserName>
<CreateTime>1389684286</CreateTime>
<MsgType><![CDATA[event]]></MsgType>
<Event><![CDATA[subscribe]]></Event>
<EventKey><![CDATA[qrscene_1000]]></EventKey>
<Ticket><![CDATA[gQHi8DoAAAAAAAAAASxodHRwOi8vd2VpeGluLnFxLmNvbS9xL0UweTNxNi1sdlA3RklyRnNKbUFvAAIELdnUUgMEAAAAAA==]]></Ticket>
</xml>

参数说明

 

2. 用户已关注时的事件推送

<xml>
<ToUserName><![CDATA[gh_45072270791c]]></ToUserName>
<FromUserName><![CDATA[o7Lp5t6n59DeX3U0C7Kric9qEx-Q]]></FromUserName>
<CreateTime>1389684184</CreateTime>
<MsgType><![CDATA[event]]></MsgType>
<Event><![CDATA[SCAN]]></Event>
<EventKey><![CDATA[1000]]></EventKey>
<Ticket><![CDATA[gQHi8DoAAAAAAAAAASxodHRwOi8vd2VpeGluLnFxLmNvbS9xL0UweTNxNi1sdlA3RklyRnNKbUFvAAIELdnUUgMEAAAAAA==]]></Ticket>
</xml>

参数说明

 

事件代码:

以下代码判定了扫描带参数二维码的两种情形

private function receiveEvent($object)
{
    $contentStr = "";
    switch ($object->Event)
    {
        case "subscribe":
            $contentStr = "欢迎关注 ";
            if (isset($object->EventKey)){
                $contentStr = "关注二维码场景 ".$object->EventKey;
            }
            break;
        case "SCAN":
            $contentStr = "扫描 ".$object->EventKey;
            break;
        default:
            break;      
 
    }
    $resultStr = $this->transmitText($object, $contentStr);
    return $resultStr;
}

 

 

====================================================================

方倍工作室微信公众平台账号关注方法:
1. 微信通讯录-添加朋友-查找公众号-搜索“方倍工作室”
2. 微信通讯录-添加朋友-搜号码-输入“pondbaystudio”
3. 使用微信扫描下面的二维码

瞎忙了一天

mikel阅读(989)

不知不觉一天就这么忙过去了,微信就是坑爹的货儿,人多、嘴杂、事儿不少,很多人都奔着免费去得,真正转化率就可想而知了,不知道是不是各种营销的最终结果都是这样,反正赚了眼球就行了。

说道微信最近微博似乎消停了不少,从增加打赏功能后,就没见有什么大动作,倒是支付宝默默的再岁末年初得时候更新了新版本,加了发红包的功能,可见红包得力量从去年让微信支付火了一把,今年支付宝也终于耐不住寂寞,悄悄改版,看来今年过年不收礼,只收打赏和红包了。

支付在血拼得同时,P2P行业得混乱依然让人触目惊心,从倒闭得网站数量就可以看出这个行业有多乱,不说半天儿跑路的破纪录了,就说那些年收益率就吓死人,一个比一个高,热钱涌入,来得快去得也快,整顿是迟早的事儿了,互联网金融未来想象空间很大,监管力度也会更大。

u=2277709199,469362917&fm=11&gp=0

[转载]微信诡异的 40029 不合法的oauth_code - nickel - 博客园

mikel阅读(1365)

[转载]微信诡异的 40029 不合法的oauth_code – nickel – 博客园.

最近几天在做微信公共平台开发,之前一切正常运行着,发布一套程序出去之后,发现时不时的报错!

小总结下问题出现原因:微信oauth2.0 接口说明

第一步:用户同意授权,获取code

在确保微信公众账号拥有授权作用域(scope参数)的权限的前提下(服务号获得高级接口后,默认带有scope参数中的snsapi_base和snsapi_userinfo),引导关注者打开如下页面

 

https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect
若提示“该链接无法访问”,请检查参数是否填写错误,是否拥有scope参数对应的授权作用域权限。

用户同意授权后

如果用户同意授权,页面将跳转至 redirect_uri/?code=CODE&state=STATE。若用户禁止授权,则重定向后不会带上code参数,仅会带上state参数redirect_uri?state=STATE

code说明 :
code作为换取access_token的票据,每次用户授权带上的code将不一样,code只能使用一次,5分钟未被使用自动过期。
问题出现在redirect_uri=REDIRECT_URI引导用户点击链接该地址的时候,微信会发出两次转向至redirect_uri的相同请求,前面一次被线程强制终止,生效的为第二次,而第一次已经发出与微信获取code的请求
导致微信发出的第二次请求code过期,
ps:为啥第一次回被强制终止?

微信第三方平台乱象

mikel阅读(1068)

乱象丛生,表现如下:

1.平台太多,大大小小比比皆是,

2.提供的功能同质化严重,微官网,刮刮卡,微活动等等,互相抄袭,没有创新

3.收费混乱,根本没有一个统一标准,互相压价,小得平台见钱就卖,毫无节操,小得咬死大得,大得咬牙力挺价格虚高,就是不降

4.服务质量惨不忍睹,不管是系统的界面还是功能,都是惨不忍睹,更谈不上服务了

从以上乱象可以看出,微信第三方平台必将迎来洗牌格局,就像团购网一样,活下来得没有多少,想生存只能增强自身的服务质量和功能,差异化才能生存。

目前看来,洗牌还需要一段时间,微信官方对于第三方平台的态度是不温不火,估计又在走螳螂捕蝉黄雀在后的策略,最后直接收购一统江湖。

未来微信第三方平台从电商到本地服务,还有很多的方面有想象空间,看来热钱涌入得时期也没有退去,加一把火儿,还是泼一桶水,就看这些第三方平台火拼的实力如何了,有头脑的就练内功,走服务,没头脑得就杀价,赔本赚吆喝。

20141110080510ce3ae