“小智绘”公众号开发记录

背景:早早之前在实验室做了一个微信端的图片加工项目。功能就是把用户的图片加工成名家画作的艺术风格。当初做出了最最最最基本的功能,界面也很戳,然后就扔着实习去了。这阵子趁着国庆,重新整了一下上线,趁着手热记录一下~
流程图.jpg
小智绘操作流程图.jpg

架构

=>实验室服务器+阿里云+坚果云

用户上传图片后,通过公众号接口拉取图片到阿里云服务器,坚果云将图片同步到实验室服务器,实验室服务器将新增图片队列一一加工输出。

=>数据库mysql

谁,传了哪张图片,选了哪种风格,是默认风格还是自定义风格,输出成哪张图片,这些固然需要一个唯一标签做索引。openid是个不错的选择,但是它无法区分同个用户的不同图片。于是我们使用了时间戳。数据库保存用户openid、图片media_id风格id、时间戳等。输出图片的命名采用“12位时间戳+media_id”。

输出图片.png
=>access_token与js_api_ticket

整个微信api的调用过程中,access_token与js_api_ticket的使用极其频繁。在多数教程中都推荐保存在缓存memcached中。其实保存于数据库更为直观,将所有的token逻辑写在token.php中分离开来,需要的时候require_once "token.php";即可,同时后期一些需要明文token【在线配置自定义按钮】直接在数据库找到。

token_sql.png
=>推送

服务器跑php循环脚本,每次触发python脚本扫描输出文件夹,检测到新增图片则做相应推送,并将图片切移到其他文件夹,这样每次只需考虑新增图片,避免每次比较新旧文件差异得出新增图片而需要的大量性能消耗。

=>页面设计

除了“我的图集”与“小智图集”,整个流程的跳转都通过js控制隐藏出现的单页面,不存在url的跳转。这样在牺牲一些首页加载时间来保证整个过程的操作是流畅的。
“我的图集”与“小智图集”页面初次只加载9张已下的图片,通过“加载更多”按钮控制加载。

图集.jpg

微信接口

=>网页授权

很明显我们的页面需要用户的openid,一开始的方法是让用户在公众号回复特定文字返回以get方式携带用户openid的目标链接。

www.domain.com/target.php?uder_id=012346789

然而让用户回复文字再点击这个操作的体验是很不愉快。通过网页授权接口,将下图配置好的链接设置为按钮链接即可。在目标页面使用$_GET["code"]获取code,用token+code通过curl获得openid。


页面跳转.png

坑与填坑

=>网页授权的刷新问题

在iOS中,由于滑动返回页面无法像一开始点击菜单一样get参数“code”,于是需要用session

session_start();
require_once "jssdk.php";
$jssdk = new JSSDK("000", "000");
$signPackage = $jssdk->GetSignPackage();
//判断是否已经保存openid字节。
if (!isset($_SESSION['openid'])) {
    $user_code = $_GET["code"];
    $appid="000";
    $secret="000";
    $user_code_url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid={$appid}&secret={$secret}&code={$user_code}&grant_type=authorization_code";
    $josn_user_code_result=json_decode(httpGet($user_code_url));
    $specile_access_token=$josn_user_code_result->access_token;
    $specile_openid=$josn_user_code_result->openid;
    $_SESSION['openid'] = $specile_openid;
} else {
    $specile_openid = $_SESSION['openid'];
}
//curl
function httpGet($url) {
    $curl = curl_init();
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($curl, CURLOPT_TIMEOUT, 500);
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
    curl_setopt($curl, CURLOPT_URL, $url);
    $res = curl_exec($curl);
    curl_close($curl);
    return $res;
}
=>click与touchstart

移动页面中,click存在300毫秒延迟的问题,而touchstart似乎能敏捷反应。于是一般使用touchstart事件。
但是,如点击图片放大效果中,每次滑动页面都会误触touchstart而自动弹出大图。所以这种场景还是使用click事件。
然而切勿同一页面click与touchstart混用。一次点触事件的触发顺序为:touchstart => mouseover => mousemove => mousedown => mouseup => click => touchend;响应了touchstart事件后会触发其他地方的click事件。

Paste_Image.png
=>“加载更多”的时机

在“我的图集”中,由于瀑布流的样式,加载完图片后需要调整图片的位置。然而,每次点击新增图片的同时调整布局,由于图片尚未加载完成导致无法获取图片的尺寸,新加载的图片无法正常瀑布流显示。需要监听图片加载完成。

document.getElementById("pic_container").innerHTML += creatDOM(str_pic);
var get_img = pic_liu.getChildElement(document.getElementById("pic_container"),"pic_box");
var last_img = get_img[get_img.length - 1].children[0].children[0];
last_img.onload = function() {
    pic_liu.imgLocation("pic_container","pic_box");
};//监听最后一张图片加载完成

然而,最后一张图片加载完成≠所以图片加载完成。而检查每张图片加载完成有些繁琐,于是使用了不怎么靠谱的setTimeout

setTimeout(function() {
    pic_liu.imgLocation("pic_container","pic_box");
}, 1000);
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,732评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,496评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,264评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,807评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,806评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,675评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,029评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,683评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,704评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,666评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,773评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,413评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,016评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,978评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,204评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,083评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,503评论 2 343

推荐阅读更多精彩内容