2019-09-26 15:31:26 Crystal_2112 阅读数 146
  • 微信开发之三素材管理-微信开发php版

    微信开发之素材管理是子恒老师《微信公众平台开发》视频教程的第三部。详细讲解了用php开发微信,对微信公众平台中的素材管理开发。内容包含微信临时素材,永久素材的上传,删除,获取素材的media_id等等。欢迎反馈,微信/QQ:68183131

    14670 人正在学习 去看看 秦子恒

问题描述:

数据库中存的日期是字符串,yyyyMMdd格式

取出后转为"yyyy-MM-dd 00:00:00:000"格式

之后date = new Date(yyyy-MM-dd 00:00:00:000)

之后转时间戳 date.getTime()。用这个时间戳计算得到一整周的日期数据,并显示在页面中。

在微信开发者工具和安卓手机中日期均正常显示,但苹果手机显示NaN。

解决办法:

经查询,ios只能识别yyyy/MM/dd hh:mm:ss 这种格式的字段,多个符号或符号错误都不行。【坑啊】

所以从数据库取出 yyyyMMdd 格式字段后,改为转 yyyy/MM/dd hh:mm:ss 格式即可,后面操作不变。

 

2020-03-02 16:26:46 programercch 阅读数 16
  • 微信开发之三素材管理-微信开发php版

    微信开发之素材管理是子恒老师《微信公众平台开发》视频教程的第三部。详细讲解了用php开发微信,对微信公众平台中的素材管理开发。内容包含微信临时素材,永久素材的上传,删除,获取素材的media_id等等。欢迎反馈,微信/QQ:68183131

    14670 人正在学习 去看看 秦子恒

微信开放的JS-SDK面向网页开发者提供了基于微信内的网页开发工具包,最直接的好处就是我们可以使用微信分享、扫一扫、卡券、支付等微信特有的能力

配置授权思路:首先要获取access_token(access_token利用缓存保存起来,方便全局访问),然后根据access_token获取jsapi_ticket,在通过获取到的jsapi_ticket以及随机生成的字符串、时间戳,再加上需要授权的页面地址url,进行SHA-1加密,返回加密字符串,最后根据加密串调用微信提供的config接口。

1.首先登录公众后后台获取appId和appsecret,然后配置JS接口安全域名,如下图,记得将那个txt文件上传到域名服务器的根目录下(index.php所在目录),否则配置不了JS安全域名

2.获取、缓存全局的access_token,以下以tp3.2框架为例,下面appid和appsecret都已配置好,请求微信提供的接口获取access_token并存入缓存

protected function getAccessToken()
    {

        // access_token 应该全局存储与更新,以下代码以写入到文件中做示例

        $data = S('weixin_access_token');

        if (empty($data)) {

            // 如果是企业号用以下URL获取access_token

            // $url = "https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=$this->appId&corpsecret=$this->appSecret";

            $appId = C('weixin_appId');

            $appSecret = C('weixin_appSecret');

            $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=$appId&secret=$appSecret";

            $res = json_decode($this->httpGet($url), true);

            $access_token = $res['access_token'];

            S('weixin_access_token', $access_token, 7000);

        } else {

            $access_token = $data;

        }

        return $access_token;

    }

2.获取微信jsapi_ticket,根据上面获取的access_token获取jsapi_ticket,并存入缓存(获取jsapi_ticket微信有100000次限制)

protected function getJsApiTicket()
    {

        // jsapi_ticket 应该全局存储与更新,以下代码以写入到文件中做示例

        $data = S('weixin_jsapi_ticket');

        if (empty($data)) {

            $accessToken = $this->getAccessToken();

            // 如果是企业号用以下 URL 获取 ticket

            // $url = "https://qyapi.weixin.qq.com/cgi-bin/get_jsapi_ticket?access_token=$accessToken";

            $url = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?type=jsapi&access_token=$accessToken";

            $res = json_decode($this->httpGet($url), true);

            $ticket = $res['ticket'];

            S('weixin_jsapi_ticket', $ticket, 7000);

        } else {

            $ticket = $data;

        }

        

        return $ticket;

    }

3.建立微信随机字符串



    private function createNonceStr($length = 16)
    {

        $chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";

        $str = "";

        for ($i = 0; $i < $length; $i++) {

            $str .= substr($chars, mt_rand(0, strlen($chars) - 1), 1);

        }

        return $str;

    }

4.获取微信JS签名,注意http协议要兼容http和https,否则可能有跨域报错

//微信JS签名
    protected function getSignPackage()
    {

        $jsapiTicket = $this->getJsApiTicket();

        // 注意 URL 一定要动态获取,不能 hardcode.

        $protocol = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off' || $_SERVER['SERVER_PORT'] == 443) ? "https://" : "http://";

        $url = "$protocol$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";

        $timestamp = time();

        $nonceStr = $this->createNonceStr();

        // 这里参数的顺序要按照 key 值 ASCII 码升序排序

        $string = "jsapi_ticket=$jsapiTicket&noncestr=$nonceStr&timestamp=$timestamp&url=$url";

        $signature = sha1($string);

        $signPackage = array(

            "appId"     => C('weixin_appId'),

            "nonceStr"  => $nonceStr,

            "timestamp" => $timestamp,

            "url"       => $url,

            "signature" => $signature,

            "rawString" => $string,

        );
        return $signPackage;
    }

5.在页面通过JS获取appid,noncestr,timestamp,signature这四个参数就能配置好微信分享了

2017-09-01 12:46:00 weixin_34355559 阅读数 9
  • 微信开发之三素材管理-微信开发php版

    微信开发之素材管理是子恒老师《微信公众平台开发》视频教程的第三部。详细讲解了用php开发微信,对微信公众平台中的素材管理开发。内容包含微信临时素材,永久素材的上传,删除,获取素材的media_id等等。欢迎反馈,微信/QQ:68183131

    14670 人正在学习 去看看 秦子恒

随着微信开发者工具v1.0.0的释出,beta已久的微信小程序视图层的新功能特性WXS(WeiXin Script),也正式到来了。

熟悉微信小程序开发框架的开发者,肯定会对其视图层WXML中缺失的一个功能耿耿于怀,那就是没有办法在视图层对数据进行格式化处理。比如我们从后端获取到一个包含了时间戳数据的数组,然后需要在界面上把这些日期都格式化显示为2017-01-01这种格式的日期形式,在Vue, Angular之类的前端Web框架中,一般在视图层都提供了如filter之类相应比较好用的方案。

而在现有的微信小程序代码中?你能怎么做?估计我们的做法要么是在Page代码中遍历一次数组,做一下格式化;要么,只能让后端返回已经格式化好的数据了。

对于追求程序代码优雅的程序员来说,这简直就是心中一个巨大的疙瘩!微信小程序团队估计没少受这方面的吐槽。因此,这次WXS的推出算是满足了对这种需求的渴望吧。

WXS算是专供WXML调用的有独立作用域的JS模块(不是全功能的JS,感觉有所限制)。举个例子,在这之前,我们是没有办法在WXML的数据绑定括号{{}}中调用JS函数的,所以在WXML层面就缺少了进一步做数据处理的能力。

下列代码是不工作的:

<!-- wxml文件 -->
<view>{{testFunc(name)}}</view>

// some-page.js
Page({
    data: {
        name: "一斤代码"
    },

    testFunc: function (name) {
          return "Hello," + name
    }
})

而有了WXS之后,我们就可以实现我们预期的功能了:

<!-- wxml文件 -->
<view>{{myModule.testFunc(name)}}</view>

<wxs module="myModule">
    function testFunc(name) {
        return "Hello," + name
    }
    module.exports.testFunc = testFunc
</wxs>

// some-page.js
Page({
    data: {
        name: "一斤代码"
    }
})

WXS可以直接定义在wxml文件的<wxs>标签体中,也可以写在独立的.wxs后缀名的文件中,然后在wxml文件中通过<wxs src="..." />的形式引入。

如要要在WXS代码中去引用其他独立.wxs文件,可以通过 require()函数来引入,基本上都是我们熟悉的方式:

var formatUtil = require("./format-util.wxs");
var now = getDate()

formatUtil.formatDate(now)

所以,WXS在功能方面,并没有什么复杂的东西,唯一需要特别注意一些的,就是它的作用域了:

  • <wxs> 模块只能在定义模块的 WXML 文件中被访问到。使用 <include> 或 <import> 时,<wxs> 模块不会被引入到对应的 WXML 文件中。

  • <template> 标签中,只能使用定义该 <template> 的 WXML 文件中定义的 <wxs> 模块。

赶紧去试试吧,看看你现有的代码是不是有可以借助WXS来优化重构一下的地方。

2017-09-25 21:14:19 weixin_37849807 阅读数 1635
  • 微信开发之三素材管理-微信开发php版

    微信开发之素材管理是子恒老师《微信公众平台开发》视频教程的第三部。详细讲解了用php开发微信,对微信公众平台中的素材管理开发。内容包含微信临时素材,永久素材的上传,删除,获取素材的media_id等等。欢迎反馈,微信/QQ:68183131

    14670 人正在学习 去看看 秦子恒

声明

这篇文章会很长很长,在学习的过程编写,时间戳会打。
入门篇主要参考:
[简易教程·小程序][1]
[1]https://mp.weixin.qq.com/debug/wxadoc/dev/

简易教程

  1. 获取微信小程序的 AppID
    1. 登入你的小程序 :
      https://mp.weixin.qq.com/
  2. 创建项目
    1. 下载开发者工具:
      https://mp.weixin.qq.com/debug/wxadoc/dev/devtools/download.html
    2. 创建一个quick start项目
      开发者工具会帮助我们在开发目录里生成一个简单的 demo。
  3. 编写代码
    1. 创建小程序实例
      1. app.js 脚本文件
        小程序的脚本代码。监听并处理小程序的生命周期函数、声明全局变量。调用框架提供的丰富的 API
      2. app.json 配置文件
        小程序的全局配置。配置小程序是由哪些页面组成,配置小程序的窗口背景色,配置导航条样式,配置默认标题。注意该文件不可添加任何注释。
      3. app.wxss 样式表文件
        小程序的公共样式表。页面组件的 class 属性上直接使用 app.wxss 中声明的样式规则。
  4. 创建页面
    页面都在 pages 目录下。每一个页面的【路径+页面名】都需要写在 app.json 的 pages 中,且 pages 中的第一个页面是小程序的首页。
    每一个小程序页面是由同路径下同名的四个不同后缀文件的组成:
    index.js 脚本文件:
    监听并处理页面的生命周期函数、获取小程序实例,声明并处理数据,响应页面交互事件等。
    index.json 配置文件:
    非必要的。当有页面的配置文件时,配置项在该页面会覆盖 app.json 的 window 中相同的配置项。如果没有指定的页面配置文件,则在该页面直接使用 app.json 中的默认配置。
    index.wxss 样式表文件:
    非必要的。当有页面样式表时,页面的样式表中的样式规则会层叠覆盖 app.wxss 中的样式规则。如果不指定页面的样式表,也可以在页面的结构文件中直接使用 app.wxss 中指定的样式规则。
    index.wxml 页面结构文件:
    搭建页面结构,绑定数据和交互处理函数。
没有更多推荐了,返回首页