微信小程序制作
  • 微信公众号开发需要SSL证书吗?

    微信公众号开发需要SSL证书吗...2019-01-18

    微信公众号开发需要SSL证书吗?好多客户只知道微信公众号开发这回事,但是要说起一些技术方面的细节性的东西的时候,他们还真不清楚,现在微信公众平台开发必须要使用SSL证书,只有给域名配备了SSL证书之后才能进行系统的开发工作,那什么是SSL证书了,SSL证书说白了就是域名证书,就是一种域名加密传输的数字数字证书,一般域名前面的的http是不加s的,自从这次浏览器加密传输升级之后,尤其像微信公众号开发这样的就需要通过加密传输了,所以,现在的微信公众号开发的时候,都使用的是SSL域名证书来开发的,不过好多网络公司基本上使用的都是免费的ssl证书,由于一些付费的ssl证书太贵了,动辄好几千的ssl证书不是一些公司或者单位所能承受的起的,ssl证书的收费模式是按照年来收费的,或者是按照需要加密的域名个人来收费的,不同的公司收费模式都不一样的,目前提供ssl证书的公司有三大供应商,反正都不是国内的,所以小编在这里要提醒进行微信公众平台开发的客户了,要想安全的进行微信公众号开发的话,就建议使用ssl证书,提前购买好了。
  • 微信公众号开发对服务器有什么要求

    微信公众号开发对服务器有什么要...2019-01-17

    微信公众号开发对服务器有什么要求,虽然说微信公众号走过了好几个年头了,但是对微信公众平台开发的商家络绎不绝,都希望通过微信公众平台做点什么,毕竟其他的商家都在尝试或者通过微信公众号寻找新的出路和商业模式,所以,好多商家都不甘堕落,有开始通过微信公众平台寻求新的出路,想法是很是的,甚至商家们看到了一些同行通过微信公众号已经实现了盈利,但是不要忘记了,你所需做的,需要一个全盘的计划和实施方案,并不是你把微信公众号开发好了,你的微信公众平台上就有生意了,那你想想的太简单了,作为专业的微信开发公司,今天给大家普及一下,微信公众号开发的时候,对服务器有什么要求呢?

    首先你选择服务器的时候,一定要与你的开发项目相配套,并不是你购买的服务器有多好,就能对你的微信开发的项目有多大的帮助的,你的服务器的选购配置最好预期估计一下项目的对服务器的需求,比如项目开发完成之后,能占到服务器整体性能的多少,然后在更具后期的扩展等等,要满足现在的使用,并且构面服务器的时候,建议购买一线厂家的比较好,像阿里云,百度云,以及腾讯云等等这些服务器都是相对来说比较不错的。但是在价格方面有点贵。

    其次购买服务器的时候不能按照现在项目的大小去购买,需要预留一部分空间出来,给以后的开发的项目性能的提升以及突发访问量来做准备,这就需要在实际的购买数据方面扩大一点即可。

    第三如果条件充足的话,可以购买实体服务器然后托管到专业的服务器机房,要么最为简单的就是购买云服务器,这中服务器的性能不如实体服务器的性能好,但是远比一些其他的主机要强了,并且自助的权限也是比较大的。多项目的后期运维有很大的帮助作用的。

  • 升级后的微信公众号如何运营呢?

    升级后的微信公众号如何运营呢?...2019-01-14

    升级后的微信公众号如何运营呢?关于微信公众号我觉得有必要再分享下,毕竟当下你看微信新版更新出来后,“点赞”也已换成了星型“好看”。以下分享下基础也是公众号运营必备方法心得,欢迎阅读。
    首先,取名的方法
    给公众号取名有以下几种方法。

    西安微信开发公众号运营推广全文详解分享 自媒体 微信 经验心得 第1张

    (1)直呼其名法。对于企业的官方公众号、形象公众号、品牌公众号等,可以直接把企业或品牌的名字作为公众号名字。比如推1把网站的官方公众号,就叫“推1把”。

    (2) 形象比喻法。比喻法的核心是通过比喻的方式,将公众号具象成某个现实中的事物。比如音乐类的公众号可以叫音乐工厂、足球类的可以叫足球公园等。

    (3) 反问强调法。以提问的方式,引起用户兴趣,同时起到强周账号定位的作用。比如,今晚看什么、今天吃点儿什么、怎么多赚钱等。

    (4) 功能作用法。此法的核心是直接将账号的作用或提供的服务作为名字。比如,酒店助手、航班助手等。

    (5) 特色定位法。直接将账号的核心定位或特色作为公众号名字。比如,小道消息、冷笑话精选、地方方言方言笑话等。

    (6) 行业地区法。以行业或是地区作为账号的名字。比如杭州房产、健康百科等。

    二、关于取名的禁忌
    取名字的方法太多了,上面列举的方法只是希望起到一个抛砖引玉的作用,大家在实际取名时,不要拘于一格,越有创意越好。不过在发挥创意时,要注意以下几点。

    (1)符合用户搜索习惯。公众号的名字应尽可能符合用户的搜索习惯,这样可以增加用户主动搜索关注的概率。

    (2)直观体现账号定位。账号的名字,最好能够直接体现账号的内容定位和特色,简单地说,就是让用户一眼能明白你是干什么的,能给用户带来什么。

    (3)不要使用生僻字词。生僻的字词不利于用户理解,用户一时理解不了可能就不会关注,同时更不利于传播。比如義、勰、表这类生僻字,有多少人认识?又有多少人知道它的意思?

    (4) 不要过于天马行空。 取名字要发挥创意,但是也不能天马行空般没边,无论如何创意,一定要能落地,要和账号的定位能联系上。比如取个名字叫“知子谷”,谁能理解这是做什么的呢?除非这已经是知名品牌,否则从营销的角度来说,真的不是一个好名字。

    (5)名字不要过于宽泛。太宽泛的名字,会显得过于普通和没有特色,对用户几乎没有吸引力。比如直接将美食作为账号名称,就不如北京美食、土家私房茶的词汇更加有针对性或特点。

    (6) 注意用户承受能力。有的名字前卫大胆,但是注意不要太出格,要考虑到用户的承受能力,以及一些风俗习惯等。比如账号名字直接叫“性爱交流”,即使用户不举报你,官方可能也会直接封你号;再比如你在回族社区建一个区域性的生鲜微信,账号叫卖猪肉,那这账号好不了,甚至可能整个人都不好了。

    微信公众号运营推广全文详解分享 自媒体 微信 经验心得 第2张

    三、设置技巧和要点
    其实设置微信号也不难,只要把握住两点:第一,微信号越短越好,越短越利于传播;第二,微信号要利于记忆,比如可以直接用账号的拼音,或是常见的拼音、数字。

    公众号介绍设置要点:

    (1)不要太广告或没营养。一些企业公众号的简介,就是单纯的公司业务介绍或经营范围介绍。

    最好是能突出公众号的定位、特点、可以帮助客户解决什么问题等。从人性的角度来说,人都是自私的,只有用户认为这个账号能给自己带来帮助或好处,才愿意主动关注。

    (2)文字越有个性越好。文字越有个性,越容易引发关注,像幽默的文字、犀利的文字,都很容易吸引眼球。例如一个名为“小道消息”的公众账号简个就非常有意思:“只有小道消息才能拯救中国互联网,只有小道消息才能拯救中国创业者。哦,当然这是一句玩笑话。这里为你分享一些我对互联网的思考和观点,别的地方可能没有的东西。”

    关键词自动回复

    关键词自动回复是指当用户输入特定关键词时,将指定内容推送给用户。这个功能的应用最广泛,可以实现的效果也最多,具体如下。

    (1)智能应答机。如果你的公众号是以服务或是为用户解答问题为主,那么可以将一些常 见问题设置成关键词自动回复,这样就能够像智能机器人一样,与用户之间实现自动应答的效果。

    (2)代替导航条。对于非认证的公众号,是无法使用导航栏功能的。此时,可以将栏目以关键词自动回复的形式呈现给用户,比如“回复1查看关于我们,回复2查看产品目录,回复3查看产品介绍”等。

    (3) 补充菜单栏。 即使是认证账号, 可以使用公众号自带的栏目导航功能,但是微信公众号自带的导航,只有3个一级栏目,每个一级栏目下也只有5个二级栏目。而如果将关键词自动回复与栏目导航配合使用的话,可以实现无限分级。

    (4) 历史索引库。 公众号运营久了后,沉淀下来的历史内容会非常多。正常情况下,如果用户想查看历史内容,只能通过点击公众号的“查看历史消息”来实现。但是在内容很多的情况下,并不方便。

    而我们可以通过关键词自动回与中容,将历史内容做-一个梳理和分类,做一个关键词索引, 并将它编成图文消息,便于用户查找和阅读这些历史内容。

    四、做好公众号内容的6大秘籍
    先说说如何生成公众号的内容。

    微信公众号运营推广全文详解分享 自媒体 微信 经验心得 第3张

    纯原创:

    原创的内容,肯定更具备竞争力和优势,但是一提到原创,许多人便头痛,因为大多数人都是比较缺乏文字表达能力的。其实公众内容的原创没部么难,不一定非是长篇大论。下面说说创作公众号原创内容的6个方法。

    (1)文字

    文字类是最基本的内容形式,和传统媒体内容相比,公众号的内容要求要简单得多,主要体现在两个核心层面上:首先是字数不宜过长,因为手机屏幕面积有限,字数控制在1000字以内为宜;其次是内容不宜过于深奥,因为内容控制在1000字以内,想把复杂的问题说清楚并不容易。

    而且用户在阅读手机内容时,基本上都是利用碎片化时间,不能让用户太烧脑。

    (2)访谈

    如果1000字的内容对于你来说也比较困难的话,那可以用1个取巧的方式,就是做访谈。针对公众号的定位和涉及的领域,你可以去访谈相关的专家、名人,访谈相关的企业负责人、高管,访谈行业从业人员,访谈用户,等等。

    这里说的访谈,形式上也很简单,全程通过互联网就能搞定:先寻找访谈对象,然后通过QQ或微信等与之取得联系;如果对方接受访谈,则针对访谈对象的情况和特点,准备至少10个以上的问题;将访谈问题发给对方,如果有问题则修改,没问题则让他们围绕这些问题写出他的观点或想法等。

    (3)图片

    除了文字,我们还可以制作图片类的内容。比如制作一些有意思的图片去传播,比如幽默搞笑类的图片,这个图片可以是静态的,也可以是动态的。现在手机上就有很多制作动态图的APP,非常简单和方便。

    (4)漫画

    如果将图片升级一下,我们还可以将生活、公司、身边的一些人和事。做成速面来传播在传递企业文化品牌理念时,这个方法非常有效。可能有人一听到漫面,就感觉需要有专业的人来绘制,其实不然,黎网络上著名的暴走浸画,从专业绘画角度来说,非常简单粗糙。

    (5)视频

    漫画再升级,就是视频了。随着技术的发展,现在制作视频也越来越容易。比如在手机上,就有很多制作视频的APP,而且制作出来的效果还非常美。

    (6)语音

    微信公众号是可以直接发语音的,所以我们也可以直接制作语音内容。比如著名自媒体公众号“罗辑思维”,主打的就是语音内容。此外我们也可以将网络电台与公众号结合,效果也不错。

    五、公众号的推广
    如何加粉丝,是所有人都头痛的事儿。接下来,就说说这个大家最头痛、最关心的问题。

    1、现有资源导入

    其实每个企业都有很多现成的资源,如果将这些资源有效利用,就能给公众号带来不少粉丝。比如企业员工的名片、企业的各种宣传资料、花钱打广告的广告牌、官方网站、企业员工的邮箱、产品的包装袋、包装盒、产品的说明书、门店资源等。

    当然,也有不少企业用这些资源宣传过公众号,但是效果却不好。在这里笔者提醒大家,宣传公众号,并不是将公众号的二维码或企业微信号印到这些资源、素材上就有人关注了。

    很多企业之所以宣传了但没效果,问题就出在这儿,它们只是单纯地将二维码宣传了出去。

    在宣传资料上,印个二维码并不难,但是如果想让用户关注就难了。如果想让用户关注,关键要和用户讲明白,关注你有什么好处。就像前面的章节说的,人性的特点是先利己,后利他,只有对自己有好处的事情,用户才会关心。

    2、内容推广及排名优化

    对于西安公众号来说,通过内容本身传播是最好的推广方式。如果内容好,用就会转载,其他人看了内容就有可能关注。

    当然,内容好,用户不一定会关注,还要适当引导,比如在每篇文章顶和底部提示用户关注账号,在文章未尾介绍公众号的定位和特色等。

    一些用户会通过微信搜索功能,主动查找感兴趣的公众号进行关注。当用户搜索相关关键词时,我们的公众号能在结果页中排在前面,则会每天自动增加粉丝。如果想达到这种效果,就需要做好以下几个工作。

    (1)公众号名称中,应该包含用户经常搜索的词。

    (2)公众号进行认证,因为认证过的公众号开发,会排在未认证公众号的前面。

    (3)要快速积累粉丝,因为公众号的排名主要是以粉丝量为基础。

    3、个人号辅助

    由于个人号与公众号的差异,导致个人号与公众号的推广方式也有不小的差异,从方法数量上来说,个人号的推广方式更多、更灵活。所以我们也可以将个人号与公众号配合使用,先通过个人号吸引来粉丝,然后再引导这些粉丝关注公众号。

    4、活动推广

    如果预算允许,通过活动推广,是非常简单、快捷和有效的一种方式。如果预算充足,可以送一些实物性礼品,比如面包厂可以送面包、饮料厂可以送饮料,或是采购一些小礼品,甚至直接赠送手机话费;如果条件不允许,可以送一些虚拟性物品,比如积分、电子书、教程等。

    5、公众号互推

    互推也是一一个比较有效的方式,我们可以通过加入同行交流群、同行交流或者抽经活动等方式,多认识一些同行或其他公众号的运营者,互推广对方的账号。不过要注意,推广时不要太过分,因为微信官方是不鼓励这种行为的,如果推广的力度过大,会有被封号的风险。

    6、公众号导航

    互联网上有许多公众号导航网站,其定位与形式和ha0123这样的网址导航站一样。我们可以把公众号提交到这些导航站上面。具体导航站地址,大家可以在百度搜索,有很多。

    7、推广返利

    最后一种方式,是引导用户帮助我们去推广,拉动粉丝。这种方式有点儿门槛,需要技术支持,开发相关的移动端返利系统。虽然门槛有点儿高,但是效果却非常好,尤其是配合微店或是微商城的话,效果更佳。
  • 微信公众号上面的变化你发现了吗?

    微信公众号上面的变化你发现了吗...2019-01-14

    微信公众号上面的变化你发现了吗?最近微信动作不断,在不断的持续更新微信和微信公众平台上的一些功能,这对与用户来说也是一件好事情,可以在一定程度上不断阔大用户使用权限,提升用户体验,让更多的用户感受微信变化带来的乐趣,接下来我们来详细看看,微信和微信公众平台都发生了那些变化呢?

    你们发现了吗?微信出了一个新功能,那就是,在每篇公众号文章的下面,你可以看到你微信好友的留言,即使他的留言并没有被精选出来。
    其实这个功能不是我最先发现的,最先发现的人是美伢。
    我还记得那天我和美伢聊天,她说她看到喜欢她的那个男孩子说的话了,我当时很奇怪,急忙问她是怎么回事。
    她和那个男孩都共同关注了一个公众号,有天百无聊赖,美伢去看那个公众号里的文章,突然间看到了一个熟悉的头像,他留言说:我很想她,但我不知道她想不想我,所以我只好克制住想联系她的冲动。
    而这条留言,并没有被精选出来,但正是因为新出的功能,美伢才能看到他说的话。
    原来这个男孩已经喜欢美伢很久了,但因为美伢受过爱情的伤,所以她虽然对那个男孩也有好感,但也一直保持着一定的安全距离。
    美伢说,“看到那条留言的时候,我有点感动,因为他已经好几天没找我聊天了,原来,在所有不联系的表象下面,还藏着一颗拼命隐忍的心。
    可能是我的原因吧,现在我总是不敢轻易开始一段感情,我觉得很多女孩子也有这种困扰吧,但其实我觉得,她们一直在被爱着,只是她们并没有发觉。”

  • 对微信公众号进行开发需要掌握哪些技术呢

    对微信公众号进行开发需要掌握哪...2019-01-13

    对微信公众号进行开发需要掌握哪些技术呢?微信公众号是每一家互联网公司都无法避开的一个话题,尤其要对一些微信公众平台进行相关功能的,成为现在好多互联网公司的新的焦点和新宠,还有小程序的需求也在进一步的加大,面对这么大的市场需求,让好多互联网公司的老板们有些按耐不住,都想像这些开发行业进军,专门西安做微信公众号西安微信小程序开发了,但是话有说回来,开发的工作毕竟是有限的,并没有我们想象的那么多,作为网络公司的技术要想涉足开发行业,需要掌握哪些技术和基础呢?现如今,微信已经不再只承担着交流沟通、娱乐大众的功能,微信公众号的推出将微信逐渐转变成个人、商家、企业单位用来营销的重要工具。而微信推出的公众号开发功能,为我们码农带来很大的方便,让我们创造出更多的可能性。今天,就结合自己的些许经验,跟大家分享下有关公众号开发的操作。而对于大部分的开发者来说可能已经很熟悉西安微信公众号开发,所以这篇入门篇适用于初始了解和做公众号开发的同学。


    第一章:开始开发(准备阶段)

    1. 接入指南

    接入微信公众平台开发,开发者需要按照如下步骤完成:

    ·填写服务器配置
    说明:URL是开发者用来接收微信消息和事件的接口URL,该接口尽量写成两个请求方式,1:get请求,用于验证如下地址有效性,2:post请求, 用于接收消息和事件,Token 可以随便定义用于验证接口签名有效性, EncodingAESKey是加密的密钥,下面加密方式选兼容模式或者安全模式的时候开发者可根据该密钥对数据进行加解密

    ·验证如上URL服务器地址的有效性

    根据官方文档的说明,微信验证接口会带下面几个参数
    插播福利

    1.我最近把各个互联网领悟的经典技术书和资源整理了一下,涵盖34个领域,143家公司的面试真题,以及常见互联网技术领悟经典书和面试书和知名互联网公司校招薪资汇总表。

    获取方式:关注本公众号,回复“干货”。
    2.技术交流群:在公众号后台回复”入群”。

    服务端接口接收到这些参数后进行签名验证,如下代码:

    exports.check = function (req, res, next) {

    // 在这里验证签名

    var signature = req.query['signature'],

    timestamp = req.query['timestamp'],

    nonce = req.query['nonce'],

    echostr = req.query['echostr'];

    var sha1 = crypto.createHash('sha1'),

    sha1Str = sha1.update([config.weixin.token, timestamp, nonce].sort().join('')).digest('hex');

    res.writeHead(200, {'Content-Type': 'text/plain'});

    res.end((sha1Str === signature) ? echostr : '');

    return res;

    };

    ·依据接口文档实现业务逻辑

    这里就是根据业务需求,进行接口调用的编程了,下面我会一一介绍

    2. 获取access_token

    access_token是公众号的全局唯一接口调用凭据,公众号调用各接口时都需使用access_token。该接口一天只能请求2000次,开发者需要进行妥善保存。access_token的存储至少要保留512个字符空间。access_token的有效期目前为2个小时,需定时刷新,重复获取将导致上次获取的access_token失效。

    如下代码事例:

    exports.get_token = function (fn) {

    redis.get(weixin_token, function (err, token_str) {

    if (token_str) {

    return fn(err, JSON.parse(token_str));

    } else {

    request.get("https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=" + app_id + "&secret=" + app_secret, function (err, response, body) {

    if (JSON.parse(body).errcode == 45009) {

    return fn(err)

    } else {

    redis.set(weixin_token, body, function (err) {

    redis.expire(weixin_token, 7000, function () {

    return fn(err, JSON.parse(body));

    };

    上面的事例代码中,首先我会从redis中获取到access_token,因为我最初获取access_token的时候写入到redis中了,官方给的有效时间是7200秒,我放在redis中的有效时间是7000秒,所以我这里的token不会过期,过期后会重新调用接口获取并写入redis

    第二章:自定义菜单

    实例代码中只写入创建接口的调用,查询和删除就不举例了。

    ·自定义菜单创建接口

    如下代码事例以及说明:

    get_token(function(err, obj){

    var access_token = obj.access_token;

    request.post({

    url: "https://api.weixin.qq.com/cgi-bin/menu/create?access_token=" + access_token,

    json:  {

    "button":[

    {

    "type":"view",

    "name":"工作台",

    "url":"http://worktile.com"

    },

    {

    "name":"解决方案",

    "sub_button": [

    {

    "type":"view",

    "name":"研发",

    "url":"https://pro.worktile.com/solution/dev"

    }

    {

    "type":"view",

    "name":"最佳实践",

    "url":"https://worktile.com/can"

    }

    {

    "name":"更多",

    "sub_button":[

    {

    "type":"view",

    "name":"下载应用",

    "url":"http://a.app.qq.com/o/simple.jsp?pkgname=com.worktile"

    },

    {

    "type":"click",

    "name":"合作",

    "key":"work_together"

    }]



    }, function(err, res, body){

    console.log(body)

    }

    这里get_token方法就是上面第一章中#获取access_token ,而且我这里是作为脚本执行的,这样方便以后随便修改自定义菜单内容

    ·自定义菜单查询接口

    http请求方式:GET

    https://api.weixin.qq.com/cgi-bin/menu/get?access_token=ACCESS_TOKEN

    ·自定义菜单删除接口

    http请求方式:GET

    https://api.weixin.qq.com/cgi-bin/menu/delete?access_token=ACCESS_TOKEN

    第三章:消息管理

    ·接收消息

    接收的消息分为普通消息和事件消息,统一有第一章中接入指南填写的RUL接口来接收处理

    exports.receive = function (req, res, next) {

    // 在这接收消息

    var xml = '';

    req.setEncoding('utf8');

    req.on('data', function (chunk) {

    xml += chunk;

    });

    req.on('end', function () {

    toJSON(xml, res);

    });

    };

    说明:receive方法就是接收用户发给公众号的消息,内容格式是xml,toJSON就是我解析xml为json的方法,如下

    //解析器

    var toJSON = function (xml, res) {

    var msg = {};

    xml2js.parseString(xml, function (err, result) {

    var data = result.xml;

    msg.ToUserName = data.ToUserName[0];

    msg.FromUserName = data.FromUserName[0];

    msg.CreateTime = data.CreateTime[0];

    msg.MsgType = data.MsgType[0];

    switch (msg.MsgType) {

    case 'text' :

    msg.Content = data.Content[0];

    msg.MsgId = data.MsgId[0];

    res.setHeader("Content-Type", "text/plain");

    res.send("");

    return handle_text(msg, res);

    break;

    case 'image' :

    msg.PicUrl = data.PicUrl[0];

    msg.MsgId = data.MsgId[0];

    msg.MediaId = data.MediaId[0];

    res.setHeader("Content-Type", "text/plain");

    res.send("");

    break;

    case 'voice' :

    msg.MediaId = data.MediaId[0];

    msg.Format = data.Format[0];

    msg.MsgId = data.MsgId[0];

    res.setHeader("Content-Type", "text/plain");

    res.send("");

    break;

    case 'video' :

    msg.MediaId = data.MediaId[0];

    msg.ThumbMediaId = data.ThumbMediaId[0];

    msg.MsgId = data.MsgId[0];

    res.setHeader("Content-Type", "text/plain");

    res.send("");

    break;

    case 'location' :

    msg.Location_X = data.Location_X[0];

    msg.Location_Y = data.Location_Y[0];

    msg.Scale = data.Scale[0];

    msg.Label = data.Label[0];

    msg.MsgId = data.MsgId[0];

    res.setHeader("Content-Type", "text/plain");

    res.send("");

    break;

    case 'link' :

    msg.Title = data.Title[0];

    msg.Description = data.Description[0];

    msg.Url = data.Url[0];

    msg.MsgId = data.MsgId[0];

    res.setHeader("Content-Type", "text/plain");

    res.send("");

    break;

    case 'event' :

    msg.Event = data.Event[0];

    if (data.EventKey && _.isArray(data.EventKey) && data.EventKey.length > 0) {

    msg.EventKey = data.EventKey[0];

    return handle_event(msg, res);

    }

    res.setHeader("Content-Type", "text/plain");

    res.send("");

    break;

    }

    });

    };

    说明:这里我用户发过来的消息xml解释称json数据msg, 根据不同的类型做不同的处理,如上文本,图片,音频,视频,链接,事件等消息

    var handle_text = function (msg, res) {

    var text = msg.Content;

    if(text.trim() == "研发"){

    var data = {

    "touser":msg.FromUserName,

    "msgtype":"news",

    "news":{

    "articles": [

    {

    "title":"重磅!Worktile 推出研发管理解决方案",

    "description":"项目进度清晰掌握,快速跟进产品Bug,多维度统计报表,文件文档有序管理",

    "url":"https://pro.worktile.com/solution/dev",

    "picurl":"https://wt-prj.oss.aliyuncs.com/b327e3a5666048279583e8e026ac6b87/4bb6e53c-8516-4466-b278-4f3b596e46db.png"

    sendMessageToUser(data);

    }else if(text.trim() == "电商"){

    var data = {

    "touser":msg.FromUserName,

    "msgtype":"news",

    "news":{

    "articles": [

    {

    "title":"Worktile 『电商解决方案』上线!",

    "description":"降低运营成本,提高团队效率。日常运营、大促筹备、售后跟踪、研发管理……尽在掌握。",

    "url":"https://pro.worktile.com/solution/ecommerce",

    "picurl":"https://cdn.worktile.com/solution/ecommerce.png"

    sendMessageToUser(data);

    说明:这是对文本消息的处理,如上,如果接收到 研发 字样的消息,公众号会给该用户发送一条新闻消息

    var handle_event = function (msg, res) {

    console.log("weixin receive message ===", msg)

    if (msg.Event == 'CLICK' && msg.EventKey == 'work_together') {

    var text = "Hello,谢谢对 Worktile 的关注啦,请访问worktile官方网站了解。。。。。";

    var data = {

    touser : msg.FromUserName,

    msgtype: "text",

    text   : {

    content: text

    sendMessageToUser(data);

    说明:这是对事件消息的处理,如上,如果接收到 msg.Event == 'CLICK' && msg.EventKey == 'work_together' 事件的消息,公众号会给该用户发送一条文本消息,当然事件消息有很多,如:subscribe关注公众号消息,unsubscribe取消关注,扫描带参数二维码事件,还有如上说的自定义菜单事件, 上报地理位置事件等

    var sendMessageToUser = function ( data) {

    get_token(function (err, obj) {

    request.post({

    url    : "https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token=" + obj.access_token,

    headers: {"Content-Type": "application/json"},

    json   : data

    }, function (err, res, body) {

    console.log("sendmessage....", body)

    这个发放就是调用微信接口给用户发送消息,那接下来咱们就看下发送消息

    插播福利

    1.我最近把各个互联网领悟的经典技术书和资源整理了一下,涵盖34个领域,143家公司的面试真题,以及常见互联网技术领悟经典书和面试书和知名互联网公司校招薪资汇总表。

    获取方式:关注本公众号,回复“干货”。
    2.技术交流群:在公众号后台回复”入群”。
    发送消息

    发送消息分为,发送被动消息,发送客服消息,发送模版消息

    1.被动消息如上接收消息后根据消息判断发送给用户的消息即是被动消息

    2.客服消息,是公众号收到用户来的消息客服根据内容回复给用户的消息

    如果用户并没有给公众号发消息,此时客服是无法给用户发送消息的,这是微信做的一个限制

    如下代码:

    wtutil.get_token(function (err, obj) {

    //var text = "你好,这是一条消息,多谢支持...";

    //var data = {

    //    touser : "oy4hbwbd0MOMmn8aUtQWMcNxs8PI",

    //    msgtype: "text",

    //    text   : {

    //        content: text

    //    }

    //};

    var data = {

    touser : "oy4hbwbd0MOMmn8aUtQWMcNxs8PI",

    msgtype: "image",

    "image":

    {

    "media_id":"ZqQGrsR6ivb273zLApNfkEdAP3UI8nHJTJ9ekelfJ8OhKUF6UG-o6YbOBv4uWf4R"

    }

    };

    request.post({

    url    : "https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token=" + obj.access_token,

    headers: {"Content-Type": "application/json"},

    json   : data

    }, function (err, res, body) {

    console.log(body);

    })

    });

    msgtype: 是消息类型,上面注释掉的是文本消息,下面是个图片消息,touser是用户的openid,这里我只是取过来直接使用的,这里跟上面接收消息后处理给用户发消息有写重复,就不多介绍了

    3.模版消息大家肯定很熟悉,比如Worktile的微信公众号接收任务消息通知,这样的消息就是模版消息
    模版消息相对来说复杂一下,首先要从公众号添加或者申请消息模版,如下图

    那么有了消息模版之后就可以拿到模版ID,然后给用户发送模版消息了

    get_token(function (err, obj) {

    var data = {

    "touser"     : "oy4hbwbd0MOMmn8aUtQWMcNxs8PI",

    "template_id": "z6yV_lOIAM-LQbsrG-B3hTQvwt8_4Y3wVU2PH9UW16c",

    "url"        : "https://worktile.com",

    "topcolor"   : "#FF00FF",

    "data"       : {

    "first"   : {

    "value": "测试哈哈哈,颜色可以自定义",

    "color": "#33FF00"

    },

    "one": {

    "value": "one",

    "color": "#173177"

    },

    "two": {

    "value": "two",

    "color": "#FF0033"

    },

    "three": {

    "value": "three",

    "color": "#173177"

    },

    "remark"  : {

    "value": "remark,了解更多详情,关注我。。。。",

    "color": "#33FF00"

    request.post({

    url    : "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=" + obj.access_token,

    headers: {"Content-Type": "application/json"},

    json   : data

    }, function (err, res, body) {

    console.log(body, "----")

    })

    });

    需要说明的是参数中data里面的key(first, one, two,three, remark)是模版中定义的,这里需要根据模版内容来写,还有可以设置每个字段的颜色值等属性

    到此消息管理这部分已经说的差不多了,咱们继续介绍。。。

    第四章:微信网页开发

    这个章节跟前面几章不同,前面几章介绍的是公众号开发的一些东西,这个章节介绍的是网页开发,主要针对h5应用或者是页面的开发,Worktile微信版就是微信网页开发完成的,下面咱们一步步的介绍。

    ·微信网页授权

    微信网页授权采用的是Oauth2.0的授权方式:

    第一步:访问如下链接获取code

    https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect

    redirect_uri是你h5地址,授权成功后会把code加入到地址上,类似于:https://weixin.worktile.com?code=xxx这样

    第二步:通过code换取网页授权access_token

    请求接口(get请求)

    https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code

    返回的结果如下

    { "access_token":"ACCESS_TOKEN",

    "expires_in":7200,

    "refresh_token":"REFRESH_TOKEN",

    "openid":"OPENID",

    "scope":"SCOPE" }

    access_token是用户授权的token,openid是用户对于该公众号的唯一标示,refresh_token:可以调用刷新token的接口获取最新的token

    第三步:获取用户信息(需scope为 snsapi_userinfo)

    请求接口(get请求)

    https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN

    通过以上3个步骤就可以获取用户的信息,进行用户的管理操作了

    ·微信JS-SDK

    网页开发中,有时候我们会自定义分享的内容,图片,音频,视频的上传,下载,地理位置,摇一摇周边,扫码,支付等的功能,这时候就需要js-sdk的开发了,下面简单介绍下js-sdk的使用,读者还可以查看官方开发文档:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140842&token=&lang=zh_CN

    ·绑定域名

    先登录微信公众平台进入“公众号设置”的“功能设置”里填写“JS接口安全域名”。

    ·引入JS文件

    在需要调用JS接口的页面引入如下JS文件,(支持https):http://res.wx.qq.com/open/js/jweixin-1.0.0.js

    如需使用摇一摇周边功能,请引入http://res.wx.qq.com/open/js/jweixin-1.1.0.js

    ·通过config接口注入权限验证配置

    如下代码需要在网页中配置

    wx.config({

    debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。

    appId: '', // 必填,公众号的唯一标识

    timestamp: , // 必填,生成签名的时间戳

    nonceStr: '', // 必填,生成签名的随机串

    signature: '',// 必填,签名,见附录1

    jsApiList: [] // 必填,需要使用的JS接口列表

    });

    `如上代码中的timestamp, nonceStr, signature需要服务端做好签名返回给页面,这里可以使用异步调用的方式,如下为服务端签名代码`

    var sign = function (jsapi_ticket, url) {

    var ret = {

    jsapi_ticket: jsapi_ticket,

    nonceStr: createNonceStr(),

    timestamp: createTimestamp(),

    url: url

    };

    var string = raw(ret);

    jsSHA = require('jssha');

    shaObj = new jsSHA(string, 'TEXT');

    ret.signature = shaObj.getHash('SHA-1', 'HEX');

    return ret;

    };

    ret就是我们需要的签名结果,其中jsapi_ticket是调用ticket接口获取的,官方文档中也有说明https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token= access_token&type=jsapi, rul是获取签名的当前网页地址, nonceStr:随机字符串,timestamp:当前10位时间戳

    var raw = function (args) {

    var keys = Object.keys(args);

    keys = keys.sort()

    var newArgs = {};

    keys.forEach(function (key) {

    newArgs[key.toLowerCase()] = args[key];

    });

    var string = '';

    for (var k in newArgs) {

    string += '&' + k + '=' + newArgs[k];

    }

    string = string.substr(1);

    return string;

    };

    这个方法是对签名对象的一个字符串格式化算法

    ·通过ready接口处理成功验证

    wx.ready(function(){

    // config信息验证后会执行ready方法,所有接口调用都必须在config接口获得结果之后,config是一个客户端的异步操作,所以如果需要在页面加载时就调用相关接口,则须把相关接口放在ready函数中调用来确保正确执行。对于用户触发时才调用的接口,则可以直接调用,不需要放在ready函数中。

    });

    ·调用接口

    根据config里面 jsApiList的配置可以调用js-sdk的接口,如分享朋友圈,分享微信好友等。。。

    wx.onMenuShareTimeline({

    title: '', // 分享标题

    link: '', // 分享链接

    imgUrl: '', // 分享图标

    success: function () {

    // 用户确认分享后执行的回调函数

    },

    cancel: function () {

    // 用户取消分享后执行的回调函数

    }

    });

    这是一个分享到朋友圈的接口,可以自定义标题,自定义链接,自定义图标

    如果想调用更多的js-sdk的接口可以参考官方文档进行开发:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421141115&token=&lang=zh_CN

    ·微信网页开发样式库

    https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1455784134&token=&lang=zh_CN

    ·微信web开发者工具

    https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1455784140&token=&lang=zh_CN

    以上就是微信公众号开发的一些内容,算是入门篇。其实关于微信的开发还有很多可以做的事情,而且随着需求越来越多,技术越来越完善,相信之后关于微信的开发一定还会有更多惊喜!

  • 微信公众号开发调试指南

    微信公众号开发调试指南...2019-01-13

    微信公众号开发调试指南,面对微信公众平台在各行业的广泛使用,当然了需要对微信公众号进行开发的客户数越来越多了,作为专业的网络公司的微信开发技术而言,肯定需要完全掌握微信公众平台开发全套技术规范的,不然怎么给客户讲解和开发呢,接下爱来我们来详细的看看微信公众平台开发需要调用那些接口和开发那些功能呢?

    近日,公众号有很多朋友留言,需要微信公众号开发和微信支付相关的文章。近日来工作较多,但仍然要为大家提供有价值的内容。依照常规,此次为各位奉上尽可能的完整方案。
    关于公众号
    申请公众号的URL为:https://mp.weixin.qq.com
    微信公众号分为如下三类:
    公众号分类本质其实就是权限不同。
    测试号申请
    一些开发人员急于开发,以为需要在真实环境下调试。其实微信提供了测试环境,或者称Sandbox沙箱。
    地址为:https://mp.weixin.qq.com/wiki
    申请菜单如下网页界面:
    微信公众平台接口测试申请页面如下界面:
    通过扫描二维码后,点击手机屏幕上的【确认登录】
    网页自动进入如下界面:
    微信工作流程:
    Access Token
    Access_token是微信公众号的全局唯一票据,公众号调用各接口时都需使用access_token。
    如何获取Access Token,来看如下界面
    我们通过PHP来获取Access Token,使用curl函数库(参见以下代码)
    生成二维码
    第一步我们生成ticket:
    第二步用ticket换取二维码
    接入校验
    找到下载位置进行下载: 
    使用下载的样本文件,修改其中的TOKEN常量,这个校验只是第一次接入微信平台使用。
    以后修改使用该文件中的responseMsg方法就可以完成和微信用户的交互。
    我们的服务器通过微信平台发送的XML文档中的MsgType判断微信用户发送的消息类型。
    制作聊天机器人
    分析聊天网站的数据传送方式如下之界面:
    分析网站的提交数据的格式及返回数据。分析结果体现在方法 _doText中的如下部分:
    'requestText='.$postObj->Content.'&sysNum=4c349791a07b46c1a70b8ac88aa23257&uid=ea24c9b3b0664225af4d21ba94ddbaa0&cid=5347dd7f65b24515b93700ded838d5df';

    $content = $this->_request($curl, false, 'POST', $data);

    $content = json_decode($content);

    $contentStr = $content->answer;

    注:详细见代码。运行结果如下:

    创建菜单
    微信公众号菜单的形式如下:
    如何创建菜单接口。格式与说明:
    创建菜单的格式是我们熟悉的JSON格式:
    代码实现如下:

            

             public function _createMenu($menu){

                        $curl = 'https://api.weixin.qq.com/cgi-bin/menu/create?access_token='.$this->_getAccessToken();

                        $content = json_decode($this->_request($curl,true,'POST',$menu));

                        if($content->errcode == 0)

                                  echo "菜单成功创建";

             }

    界面效果如下图:
    用户点击“休闲”菜单中的“打蛋蛋”就可以进行游戏了:
    发送图文信息到微信用户
    此功能为用户在公众号上写相应文字,自动回复图文消息。消息格式如下:
    主要PHP代码如下
    private function _sendNews($postObj){ //发送图文消息

             //制定图文消息模板

                        $newstpl = '<xml>

    <ToUserName><![CDATA[%s]]></ToUserName>

    <FromUserName><![CDATA[%s]]></FromUserName>

    <CreateTime>%s</CreateTime>

    <MsgType><![CDATA[news]]></MsgType>

    <ArticleCount>%s</ArticleCount>

    <Articles>

    %s;

    </Articles>

    </xml> ';

                        $news_item_tpl = '

    <item>

    <Title><![CDATA[%s]]></Title>

    <Description><![CDATA[%s]]></Description>

    <PicUrl><![CDATA[%s]]></PicUrl>

    <Url><![CDATA[%s]]></Url>

    </item>';

                        $news = array(

                                  array(

                                             'title' =>'俱乐部排名:恒大亚洲第2 中超8队进亚洲前100',

                                             'desc'=>'北京时间9月8日消息,足球数据统计网站“footballdatabase”发布了最新一期世界足球俱乐部排行榜,沙特豪门阿尔希拉尔亚洲排名第1,广州恒大以1606分位居世界第85位,在亚洲俱乐部中排名第2位。',

                                             'picurl'=>'http://k.sinaimg.cn/n/transform/20150908/7Jwd-fxhqhun8508720.jpg/w570557.jpg',

                                             'url'=>'http://sports.sina.com.cn/china/j/2015-09-08/doc-ifxhqhuf8215452.shtml'),

                                  array(

                                             'title' =>'郭艾伦搭上亚锦赛末班车 12人名单提前曝光',

                                             'desc'=>'北京时间9月8日消息,据男篮内部人士透露,近期刚刚回归国家队的郭艾伦已经确定进入亚锦赛12人名单。目前,男篮12人名单已经基本出炉,篮协将在明天(9日)将12人名单正式上报。',

                                             'picurl'=>'http://k.sinaimg.cn/n/transform/20150624/SjZz-fxefurs2835558.jpg/w57028f.jpg',

                                             'url'=>'http://sports.sina.com.cn/cba/2015-09-08/doc-ifxhqtsx3621664.shtml')

                        );

                        $news_list = '';

                        foreach($news as $n){

                                  $news_list.=sprintf($news_item_tpl,$n['title'],$n['desc'],$n['picurl'],$n['url']);

                        }

                        echo sprintf($newstpl,$postObj->FromUserName,$postObj->ToUserName,time(),2,$news_list);

                       

             }

    最终实现结果如下图:
    上传素材


    微信公众平台开发,须按以下格式上传媒体资源:
    上传素材代码如下:



             public function _createMedia($type, $file){

                        $curl='https://api.weixin.qq.com/cgi-bin/media/upload?access_token='.$this->_getAccessToken().'&type='.$type;

                        $data['type'] = $type;

                        $data['media'] = '@'.$file;

                        file_put_contents('./medialib',$this->_request($curl, true, 'POST', $data));

             }


    搜索歌曲

    在这里,我们利用百度的歌曲搜索功能来实现。首先分析百度音乐掌门的URL。



    1.按歌曲名称和歌手的URL

    http://box.zhangmen.baidu.com/x?op=12&count=1&title=歌曲名$$歌手名$$$$

    2.按歌曲名称的URL

     http://box.zhangmen.baidu.com/x?op=12&count=1&title=歌曲名$$

     我们进行搜索结果的拼接。如下图:

    代码实现:
              private function _getMusicUrl($song,$singer){

                         if($singer == ''){

                                   $curl = 'http://box.zhangmen.baidu.com/x?op=12&count=1&title='.$song.'$$';

                         }else{

                                   $curl = 'http://box.zhangmen.baidu.com/x?op=12&count=1&title='.$song.'$$'.$singer.'$$$$';

                         }

                         $content = $this->_request($curl,false);

                         $content = simplexml_load_string($content, 'SimpleXMLElement', LIBXML_NOCDATA);

                         $musicurl = substr($content->url->encode,0,strrpos($content->url->encode,'/')+1).substr($content->url->decode,0,strrpos($content->url->decode,'&'));

                         return $musicurl;     

              }

    回复歌曲消息的格式如下:
    代码实现如下:
        private function _sendMusic($postObj){

                        $postObj->Content = mb_substr($postObj->Content,2, mb_strlen($postObj->Content,'UTF-8')-2,'UTF-8');

                        $songinfo = explode('@',$postObj->Content);

                        $song = trim($songinfo[0]);

                        $singer = '';

                        if(isset($songinfo[1])){

                                  $singer = trim($songinfo[1]);

                        }

                        $musicUrl = $this->_getMusicUrl($song,$singer);

                        $musictpl = '<xml>

    <ToUserName><![CDATA[%s]]></ToUserName>

    <FromUserName><![CDATA[%s]]></FromUserName>

    <CreateTime>%s</CreateTime>

    <MsgType><![CDATA[music]]></MsgType>

    <Music>

    <Title><![CDATA[%s]]></Title>

    <Description><![CDATA[%s]]></Description>

    <MusicUrl><![CDATA[%s]]></MusicUrl>

    <HQMusicUrl><![CDATA[%s]]></HQMusicUrl>

    <ThumbMediaId><![CDATA[PIfRVcpn3q3c8C8-Iw0jn-bEMJRYeTTNDWElJzJfmQxfsODHNyvnEZ7ODBICL_EM]]></ThumbMediaId>

    </Music>

    </xml>';

                        $resultStr = sprintf($musictpl,$postObj->FromUserName,$postObj->ToUserName,time(),$song,$singer,$musicUrl,$musicUrl);

                        echo $resultStr;

                        exit; 

             }

     

029-8929 8792 180 6652 8545 西安嘉瑞德网络科技公司
工作时间:周一到周六 8:30-18:30
邮箱:2528823962@qq.com
QQ:2528823962
地址:陕西省西安市未央区赛高国际A座2803室
  • 微信公众号制作微信二维码
    微信公众号
  • 微信小程序制作微信二维码
    咨询我们
Copyright © 2015 西安嘉瑞德网络科技有限公司 陕ICP备17015187号-1