作者文章

fwq

FWQ
小程序
微信开发带参数二维码的实例详解
  最近做微信pc端网页微信相关功能的开发,从一个新手的角度来说,微信公众号的文档还是不好理解的,网上找的帖子大都也都基本上是复制微信公众平台上给的文档,开发微信带参数二维码过程中还是遇到不少坑的,在此把我的开发过程比较详细的记录下,希望对大家有所帮助。   我本次开发使用的是认证服务号。 1 接入   首先进入微信公众号 -> 基本配置    下面是基本配置的页面,在URL中填写服务器地址,这个地址就是接受微信推送事件的一个接口,我是使用thinkPHP框架开发的程序,在其中一个Module(Decoration)的Action目录下新建一个类,比如叫:  WechatAction.class.php  ,在该Action中新建一个public方法,比如叫:  URLRedirect()  ,那么在这个URL中填写的就是  http://[IP]:[port]/index.php/Decoration/Wechat/UrlRedirect  ,然后填写Token,Token随意填,EncodingAESKey要不要都行,然后点击确认,微信会往这个URL上发送一个get请求,里面包含很多参数,其中大部分都是让我们自己核对这次访问是不是微信服务器请求的,我自己没有验证,他的要求是如果我们核对成功,即原样返回get请求中的一个参数echostr,这里的返回不是return,也不是ajaxReturn,而使用echo,如果用thinkPHP开发的话,直接使用  echo I(‘echostr’);  即可。然后接口即验证成功了。   2 带参数二维码的作用   微信的带参数二维码有两种,一种是临时二维码,一种是永久二维码,但是永久二维码的生成是有个数限制的,我这次要实现的功能是用户未登录的情况下在网站上使用产品,比如获得某商品的详细报价,但是又不想注册,然而又想保存这个报价单,这个时候网页可以生成一张二维码,用户只要用微信扫一扫这个二维码,官方公众号就会给这个用户发送一天图文消息,图文消息点开后就是用户刚刚获得的报价单,而且可以随时点击查看并且分享给朋友进行比价。所以临时二维码即可正常使用。   上面是我是怎么使用的,下面介绍一下整个交互的流程:   当用户扫描这个二维码,如果用户关注了公众号,用户会直接进入与公众号的会话页面,微信服务器会给我们在上一步设置的服务器URL中推送一条消息,其中可以携带一个我们自定义的参数。如果用户未关注公众号,则用户首先会跳转到公众号关注页面,用户点击关注后,会直接进入公众号的会话页面,微信服务器这时也会给我们设置的URL推送一个事件消息,携带我们自定义参数,我们可以根据这个参数和事件类型做控制下一步动作。   3 具体开发过程 3.1 获取access_token   这个access_token是我们程序调用微信接口的凭证,目前的有效期是7200秒,所以我们需要定时更新access_token。   获得方法: 方法 : GET url :https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET 登录后复制   其中的参数APPID和APPSECRET是我们公众号的APPID和APPSECRET,在微信公众号 -> 基本配置中可以查到,调用成功会返回如下JSON数据:…
2024-11-25 阅读全文 →
FWQ
小程序
关于微信小程序MD5的方法的解析
这篇文章主要介绍了微信小程序 md5的方法详解及实例代码的相关资料,需要的朋友可以参考下 微信小程序 MD5的方法详解 生成的文件可以放在  utils文件中哦!!! /*   * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message   * Digest Algorithm, as defined in RFC 1321.   * Version 1.1 Copyright (C) Paul Johnston 1999 - 2002.   * Code also contributed by Greg Holt   * See http://pajhome.org.uk/site/legal.html for details.   */      /*   * Add integers, wrapping at 2^32. This uses 16-bit operations internally   * to work around bugs in some JS interpreters.   */   function safe_add(x, y)   {    var lsw = (x & 0xFFFF) + (y & 0xFFFF)    var msw = (x >> 16) + (y >> 16) + (lsw >> 16)    return (msw >> (32 - cnt))   }      /*   * These functions implement the four basic operations the algorithm uses.   */  …
2024-11-25 阅读全文 →
FWQ
小程序
记录一次实践,看看小程序购物车动画怎么优化
本篇文章给大家分享一次小程序动画优化实践,看看小程序购物车动画怎么优化,希望对大家有所帮助! 小程序购物车动画优化 公司小程序点击加购时,会绘制一个抛物线动画,这个抛物线动画是计算出来的贝塞尔曲线上每个点的坐标,再由js遍历点坐标,然后动态设置点的样式,从而实现动画。但这会带来卡顿掉帧问题 this.goodBoxTimer = setInterval(() =&gt; {   index--   this.setData({     'movingBallInfo.posX': linePos[index][0],     'movingBallInfo.posY': linePos[index][1],   })   if (index <p><span style="font-size: 16px;"><strong>前置知识:Event Loop, Task, micro Task, UI Rendering</strong></span></p><p>javascript是单线程语言,这就意味着所有任务都要进行排队。任务分为两种:一种是同步任务(synchronous),另一种是异步任务(asynchronous)。同步任务指的是,在主线程上排队执行的任务,只有前一个任务执行完毕,才能执行后一个任务;异步任务指的是,不进入主线程、而进入"任务队列"(task queue)的任务,只有"任务队列"通知主线程,某个异步任务可以执行了,该任务才会进入主线程执行。</p><p>而异步任务又分为宏任务(Task)和微任务(micro Task),同理任务队列也分为宏任务队列和微任务队列。</p><p>事件循环(Event Loop) 大致步骤:</p> 登录后复制 所有同步任务都在主线程上执行,形成一个执行栈(execution context stack)。 只要异步任务有了运行结果,就在任务队列之中放置一个事件。 执行栈中的宏任务执行完毕,引擎会先读取微任务,推入执行栈。执行完成之后,继续读取下一个微任务。如果执行过中产生新的微任务,就会把这个微任务推入微任务队列。如果主线程执行完所有微任务队列中的任务中时,就会去读取宏任务队列,推入执行栈。…
2024-11-25 阅读全文 →
FWQ
小程序
微信小程序 less文件编译成wxss文件的实现
这篇文章主要介绍了微信小程序 less文件编译成微信小程序wxss文件实现办法的相关资料,这里给出具体实现方法,需要的朋友可以参考下 less文件编译成微信小程序wxss文件 2016年9月21日,微信小程序正式开启内测。在微信生态下,触手可及、用完即走的微信小程序引起广泛关注,刷爆朋友圈子。在这样的火爆氛围中,作为一个前端开发者的我,也悄悄地去尝鲜。 在做demo小示例的过程中,我发现了一个极为让人为难的事儿:**如何让 less/sass 文件转成小程序的 wxss 文件**。 对于基本不使用原生css,而习惯编写less的我,这个事儿让我的样式编写相当的吃力。 在尝试配置koala (一个可以编译less/sass的工具)以及搜索各种资料后,终于找到了一个可行的方法。我以less为示例,和大家分享下。sass也是可行的。 环境要求: – webstrom– nodejs 具体步骤 1.使用 nodejs 命令安装 less。 在 nodejs命令窗口输入:npm install less -g,然后回车安装。如下图: 2.webstrom 配置…
2024-11-25 阅读全文 →
FWQ
CMS教程
PHPCMS如何解决验证码加载不出来
PHPCMS如何解决验证码加载不出来 方法1、打开php.ini文件将php_gd2扩展开启; 找到php.ini文件 搜索extension=php_gd2.dll这段代码 然后把前面的“;”符号去掉即可。 方法2、修改PHPCMS配置文件“system”中的网站路径变量“web_path”; 立即学习“”; 关键一点是获取验证码的图片与全局变量SITE_URL相关,也就是网站的目录,所以只要修改cache/configs/system.php文件中的网站路径变量‘web_path’ 即可。 举例说明(本地域名http://localhost) 如果所有的文件都在根目录下(例如apache下的htdocs),此时,默认访问地址应该是http://localhost/,则‘web_path’=>’/’,若网站默认的访问地址不是根目录,则需要将变量‘web_path’的值改为新的目录地址,例如是在根目录下的install子目录里,那么应该是’web_path’=>’/install/’,注意最后一个’/’不能省略。 方法3、将config.inc.php文件的编码修改为ANS。 修改config.inc.php文件的编码为ANSI,也就是和checkcode.php的编码一致就可以了,因为checkcode.php的编码就是ANSI的!找个UTF-8的文本工具,如:UltraEdit-32,另存一下就可以了。 推荐教程:《/” target=”_blank”>PHPCMS教程》 以上就是PHPCMS如何解决验证码加载不出来的详细内容,更多请关注米云其它相关文章!
2024-11-25 阅读全文 →
FWQ
小程序
微信小程序网络超时怎么办?
微信小程序网络超时的解决办法:1、在onlaunch运行任务如果超时,就把错误级别定为0,并转向错误页面;2、如果是页面请求超时,就把错误定为2,可以通过重试来修复。 微信小程序网络超时的解决办法: onLaunch通过这个我们可以获取用户的基本信息,或者定位用来做下一步处理,如果这个无法获取数据,会导致整个小程序的失败。 所以我建议可以把错误分两个级别,假如是开发者服务器连接不上,可以通过重载页面来处理,但是如果是onLaunch中的数据也无法获取就必须让用户退出小程序,重新打开再试了。 app.json 中配置用来设置超时时间,默认为6000毫秒,也就是6秒 "networkTimeout": {     "request": 6000,     "downloadFile": 10000   } 登录后复制 相关学习推荐: 一、在onLaunch运行任务如果超时,我把错误级别定为0,并转向错误页面 wx.login({       success(res) {         if (res.code) {           //console.log(res.code);           //发起网络请求           wx.request({             url: 'https://**/index/zz/getuserinfo',             data: {               code: res.code             },             success: res =&gt; {                            wx.setStorageSync('open_id', res.data.openid);               wx.setStorageSync('session_id', res.data.session_id);               wx.setStorageSync('session_key', res.data.session_key);…
2024-11-25 阅读全文 →
FWQ
CMS教程
discuz门户怎么用
discuz! 门户是基于 discuz! 论坛系统开发的门户 cms,为社区网站提供了新闻发布、文章管理、自定义页面等功能。使用指南包括:安装 discuz! 门户插件添加新闻和文章创建自定义页面管理门户栏目自定义门户模板,添加广告,查看门户统计,集成 api 等其他功能 Discuz! 门户的使用指南 什么是 Discuz! 门户? Discuz! 门户是基于 Discuz! 论坛社区系统开发的一款门户 CMS 系统,它为社区网站提供了多种门户功能,例如新闻发布、文章管理、自定义页面等。 如何使用 Discuz! 门户? 安装和配置 下载 Discuz! 门户插件并将其解压到 Discuz!…
2024-11-25 阅读全文 →
FWQ
CMS教程
phpcms如何添加视频
如何添加视频?  phpcms添加视频分为三种情况,一种是在首页播放,一种是在列表页播放,另一种是在内容页播放。其中在首页播放和在列表页播放的区别就是catid值是固定的还是取得当前catid的区别。而在首页和列表页播放就是从内容页取得播放器的代码,传入某些值实现的,所以博主先介绍内容页添加视频的过程。   (一)phpcms后台操作步骤 一、查看自己的phpcms导航条是否有 “视频” 菜单 立即学习“”;     若导航中没有“视频”菜单,则可以点击“模块”菜单中的“模块管理选项”,在“视频库”一行中点击“卸载”,更新缓存后再如上找到“视频库”一行点击“安装”,再次更新栏目缓存即可。(博主已经有“视频”选项,故不再演示卸载安装过程) 二、出现“视频”菜单后点击“视频”菜单下的“申请开通”选项,这时右边的内容会要求登录者注册盛大账号,大家按要求注册即可,这里不再赘述。 三、注册完成后,会出现配置正确页面(可能有的同学会出现类似于验证失败,未登录等的错误提示,这时可退出phpcms,再次登录或关闭浏览器再次打开并清除缓存,或者重启电脑 [ 这年头,重启电脑能解决很多问题 ] ) 四、出现如上界面后,就表示“视频”功能已经开通了。点击“上传视频”选项,在右侧点击“选择文件”,将视频上传至phpcms服务器。剩余0秒时即上传完成,上传完成后点击提交即可。 五、点击“视频库”选项,会看到右侧中新增了上传的视频,但是要等到“状态”列中显示“审核通过”视频才可用。在这期间可以通过点击更新状态,查看审核过程。   至此,视频库中添加视频的工作已完成,接下来就是添加栏目,并选择视频模型,并在内容中选择相应栏目添加内容,在内容中添加视频库中的视频,具体实现步骤这里不再赘述。   注:在“播放器管理”选项中,可以对播放器的功能进行调整,如自动播放、是否播放声音等。(这些功能的改动会大大改善用户体验)     (二)PHP代码 一、实现点击列表页跳转内容页播放视频 1.在内容页中添加如下代码即可(如果还想实现更多功能,如排行、评论、分享等,可以找PHPcms的默认视频模板…
2024-11-25 阅读全文 →
FWQ
CMS教程
DEDECMS相关文章不相关怎么办
相关文章不相关怎么办? DEDE的相关文章完全不相关,有朋友在DEDE官方放出根据TAG显示相关文章,也是很不错,可惜我在根据那边文章改DEDE代码后老是不行,可能是能力有限,当然也有可能是代码有问题 推荐学习: 现在终于出了解决办法: 1 在 inc_functions.php 最后?>前 加上 //查询指定栏目里包含相应关键字的文章,并列出  //参数说明:$showImg 是否显示缩略图,0表示不显示,1表示显示   // $titleLen 标题长度,0表示无限   // $rowCount 输出行数,0表示无限   // $typeid 栏目ID,0表示所有栏目   // $keyWord 关键字,字符串   function ShowKeyWordArc($showImg,$titleLen,$rowCount,$typeid,$keyWord){ $dsql = new DedeSql(false); $sql = TypeGetSunID($typeid,$dsql); //关键字分词技术 $ks = explode(" ",$keyWord); foreach($ks as $k){ $k = trim($k); if ($k!="") { $kwsqlarr[] = " (xkzzz_archives.title like '%$k%') "; //$kwsqlarr[] = " (xkzzz_archives.keywords like '%$k%') "; //如果需要相关到其它文章的关键字,解除此行注释 } } $where = implode(' OR ',$kwsqlarr); $sql="Select tp.namerule,tp.typedir,xkzzz_full_search.aid,xkzzz_full_search.url,xkzzz_archives.* From xkzzz_full_search left join xkzzz_archives on xkzzz_full_search.aid=xkzzz_archives.ID left join xkzzz_arctype tp on xkzzz_archives.typeid=tp.ID where {$sql} and ((xkzzz_archives.title like '%".$keyWord."%') or $where) order by xkzzz_full_search.aid desc"; $dsql-&gt;SetQuery($sql); $dsql-&gt;Execute(); $ss=""; $i=0; while($row=$dsql-&gt;GetObject()){ $url=GetFileUrl($row-&gt;ID,$row-&gt;typeid,$row-&gt;senddate,$row-&gt;title,$row-&gt;ismake,$row-&gt;arcrank,$row-&gt;namerule,$row-&gt;typedir,$row-&gt;money); if ($showImg==0){ $ss=$ss." 登录后复制 “; }else{ $ss=$ss.” “; } $i ; if (($rowCount!=0)&&($i>=$rowCount)) return $ss; } return $ss; } 2 放在文章模板页内 {dede:field name=’keywords’ function=’ShowKeyWordArc(0,32,10,0,”@me”)’/} 登录后复制 就表示是取所有栏目内的相关文章(与当前文章的关键字相关),标题长度最大32,最多显示10条,不显示缩略图 或 {dede:field name=’keywords’ function=’ShowKeyWordArc(0,32,10,0,”高三 语文”)’/} 登录后复制 可以找到标题里,含有“高三…
2024-11-25 阅读全文 →
FWQ
小程序
微信接入探秘—加密消息的处理
在上一篇博文中,介绍了被动回调接口的抽象数据层次,并实现了一个高效的实体与xml互转的基础功能。细心的开发者在初次修改公众号的基本配置时会发现一个名为“消息加解密方式”的选项。展开后可供选择的值为:“明文模式”(默认)、“兼容模式”和“安全模式(推荐)”。那么这个安全模式又是什么呢?如何适配安全模式呢?带着这些问题,来进入微信接入的第三次探秘之旅。 可恶的流量劫持在文章的一开始,先给大家看两幅处于正常使用中的手机屏幕截图: 在屏幕的右下角你会看到都有个绿色的水球显示,这与要显示的画面格格不入,很明显不是设计者为之。点开水球,显示的是当前通讯套餐中剩余的流量详情。 从家庭局域网络到Internet再到IDC机房内网,我们的数据链路充满了转发的过程。我们的数据在经过任何一台设备的转发时都有可能被其持久化保存起来。你的办公内网一定安全吗?潜伏在你身边的黑客,通过设置局域网内某个网卡为混杂模式(Promiscuous Mode)可以将局域网中的所有数据都接收一份。可能你并不能发现什么,然而你的私有数据已经被别人窃取。 使用安全模式保护用户隐私 当启用安全模式之后,被动回调接口接收到的消息就产生了很大的变化,形式如下所示: <xml>     <tousername></tousername>     <encrypt></encrypt></xml> 登录后复制 可以看出,明文部分保留了该消息的公众号原始ID:gh_38a2de904e09,其余部分均为加密文本(这种结构可以使得同一个后台系统,接入多个公众号,再利用每个公众号的设置进行分别解密)。由于加密结构在官方文档(http://qydev.weixin.qq.com/wiki/index.php?title=加解密库下载与返回码)中并没有明确的阐述,这里就给大家详细地说明一下。 如果读者以前开发过网络协议应该很容易理解这个结构,典型的不定长消息。一定会有一个标识来指明不定长区域的长度,读取时以该值为准,在定长数据之后读取若干字节。在结构的开头,有16字节随机数,该部分数据无实际意义,可用于后续返回加密消息时作为随机数的填充数据。 安全模式的签名验证方法 微信的被动回调接口实际上是一个HTTP POST请求,我们都知道HTTP请求分为请求头和请求体。微信巧妙地将加密的XML数据放在了请求体,将验证签名时使用的参数放入了请求头。 POST /cgi-bin/wxpush? msg_signature=477715d11cdb4164915debcba66cb864d751f3e6×tamp=1409659813&nonce=1372623149 HTTP/1.1 Host: qy.weixin.qq.com Content-Length: 613 <xml>     <tousername></tousername>     <encrypt></encrypt></xml> 登录后复制 签名生成的过程: 通过上述计算,现在得出了当前加密消息的签名calculated_sign,然后从请求头中获取参数msg_signature,如果calculated_sign和msg_signature相同,则说明消息没有被篡改过。这种签名策略利用的数学难题有: 1. SHA1摘要算法对全部数据进行了计算,有任何改动最终的摘要都会发生变化; 2. Token是事先设置好的,在传输过程中并不包含,无从破解; 3. 时间戳和随机字符的引入,使得即便明文相同,每一次加密密文都有不同,给破解AES加密增加难度…
2024-11-25 阅读全文 →