标签 - 小程序

小程序    2019-07-24 11:34:23    23    0    0

今天在使用components组件时遇到一个坑就是在获取components对象时一直返回空,(说句实话我不需要获取components对象)但是秉着知其然的精髓,仔细查了一下发现可能会有几个原因记录一下 

1.确保userAuthorize这个和wxml中的组件名保持一致

"usingComponents": {
  "userAuthorize":"../../components/userAuthorize/userAuthorize"
}
//就是下面的这个
<userAuthorize id="userAuthorizeId" class='user-Authorize'/>

2.获取的时候有两个方法一是根据id

  this.userAuthori = this.selectComponent('#userAuthorizeId')

3.获取的时候有两个方法二是根据classname

  this.userAuthori = this.selectComponent('.user-Authorize')

3.如果还是不行的话仍旧返回null的话可以看一下你的代码中有没有这种情况

//wx:if='{{hiddenAlert == 1}}'
//这个东西如果为真还行否则的话就不会往下走,一直为null,这个方法坑了我
<userAuthorize id="userAuthorizeId" wx:if='{{hiddenAlert == 1}}'
 class='user-Authorize' />

最后的一点就是可能会出现的就是你写这个方法的时机不对,不要放到onload方法中这个时候可是什么都没有啊!


小程序 微信小程序    2019-06-05 11:03:07    41    0    0

 

GitHub 上使用 JavaScript 来生成公钥私钥对的库:https://github.com/travist/jsencrypt/

修改库

但是在微信小程序中,引入这个库会报这样的错误
 
 

原因是这个第三方库使用了 window 对象,而微信小程序的页面的脚本逻辑是在 JsCore 中运行,JsCore 是一个没有窗口对象的环境,所以不能在脚本中使用 window,也无法在脚本中操作组件。

经过了一段时间的挣扎,终于找到了解决方法:

  1. 给第三方库添加 window2 和 navigator2 变量
  2. 将程序中用到 window 和 navigator 的地方进行全局替换 为window2 和 navigator2。
(function (global, factory) {
    typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :
    typeof define === 'function' && define.amd ? define(['exports'], factory) :
    (factory((global.JSEncrypt = {})));
}(this, (function (exports) { 'use strict';
//--------------------- 这里开始添加---------------------
  // 用来替换 navigator
  var navigator2 = {
    appName: 'Netscape',
    userAgent: 'Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1'
  };
  //  用来替换window
  var window2 = {
    ASN1: null,
    Base64: null,
    Hex: null,
    crypto: null,
    href: null
  };
//-------------
小程序    2019-05-28 15:51:59    42    0    0

小程序的开发者密码(AppSecret)是一个非常重要的字段,使用该密码可以调用小程序的所有后台接口。请不要将该字段放置在微信小程序的前端代码中,因为微信手机客户端容易被反编译并轻松获得Appsecret,造成重大的安全威胁。开发者应将Appsecret保存到后台服务器中,通过服务器使用Appsecert获取Accesstoken。微信公众平台小程序后台的服务器地址设置也将禁止将“api.weixin.qq.com”域名的配置,所有对于“api.weixin.qq.com”域名下的接口请求请全部通过后台服务器发起,请勿直接通过小程序的前端代码发起。
  
所以解决办法就是把code传给后台,让后台去请求微信的官方接口获得openId和session-key。


总结下整个openid、session_key获取的流程:

注册微信小程序、登录后台在设置中获得appId和secret(密钥)
调用wx.login()接口获取登录凭证js_code
调用wx.request()接口把js_code发送到服务器后台
在服务器后台,已知appId、secret、js_code
然后调用官方提供的http接口,即可返回获取openId、session_key

https://api.weixin.qq.com/sns/jscode2session?appid=APPID&secret=SECRET&js_code=JSCODE&grant_type=authorization_code

// 登录
wx.login({
    success: res => {
    // ------ 获取凭证 ------
    var code = res.code;
    if (code) {
        // console.log('获取用户登录凭证:' + code);
        // ------ 发送凭证 ------
        wx.request({
        url: '后台通过获取前端传的code返回openid的接口地址',
        data: {
        code: code
        },
        method: 'POST',
        header: {
          'content-type': 'ap