微信小程序开发总结

微信小程序开发总结

  1. 微信公众号的账户和微信小程序的账户是分离的,并不是同一个,需要使用一个新的邮箱来注册小程序。

  2. 正式环境必须使用https协议,测试环境配置工具中可以设置为不校验http协议。

微信小程序开发总结

  1. 第三方框架 wepympvue 的区别:

wepy

腾讯官方开发的类vue框架,但是实际使用和vue还是有不小的区别的,总的来说比直接用原生开发体验上要好很多,如果是新项目建议用wepy开发,不能使用div、ul等html标签,而必须使用小程序的view、text等基础组件。

mpvue

美团基于vue开发的框架,最大的优点就是符合vue的使用习惯,熟悉vue开发的同学,可以很快适应,比较适用于从原有vue项目迁移过来。

  1. wepyvue 的异同

#### 相同点:

Props、 Mixin、 computed、 slot、组件化开发

#### 不同点:

methods里只能写template里绑定的事件、脏数据检查需要手动调用方法触发

  1. 微信小程序的第三方UI框架,目前各方面相对比较好用的是 iview weapp,不过还是存在比较多的坑,建议iview只是作为参考,另外自己实现组件体验和稳定性上来说会更好。

  2. 微信小程序的http封装

默认是get方法,post方法只接受表单传值。

  // http.js
  export const API_URI = ‘https://test.faceke.com/api/v2‘
  import util from "./util"
  let token = ""
  function fetch(url, params, method, header, resolve, reject) {
     let _header = {
      ...header,
      ‘client‘: ‘miniapp‘,
      ‘Authorization‘: "Bearer " + token
   }
   wx.request({
      url: `${API_URI}/${url}`,
      data: params,
      method: method,
      header: _header,
      success: res => {
      if (res.statusCode === 200 || res.statusCode === 201 || res.statusCode === 202 || res.statusCode 
      === 204) {
       resolve(res)
     } else if (res.statusCode === 401) {
       console.log("token过期重新登录")
       wx.removeStorage({
         key: ‘token‘,
         success(res) {
           console.log(res.data)
         }
       })
       setTimeout(() => {
         wx.reLaunch({
           url: ‘index‘
         })
       }, 600);
     } else {
       reject(res)
     }
   },
   fail: err => {
     console.log(err)
   }
 })
 }

  const http = function (url, params, method, header) {
 if (!token) {
   wx.getStorage({
     key: ‘token‘,
     success(res) {
       token = res.data
       console.log(res.data)
     }
   })
 }
 return new Promise((resolve, reject) => {
   if (!token) {
     setTimeout(() => {
       fetch(url, params, method, header, resolve, reject)
     }, 300);
   } else {
     fetch(url, params, method, header, resolve, reject)
   }
 })
 }

 module.exports = {
 baseUrl: function () {
   return API_URI
 },
 get: function (url, params) {
   return http(url, params, "GET", {
     ‘content-type‘: ‘application/json‘
   })
 },
 delete: function (url, params) {
   return http(url, params, "DELETE", {
     ‘content-type‘: ‘application/json‘
   })
 },
 post: function (url, params) {
   let formData = util.json2Form(params)
   return http(url, formData, "POST", {
     ‘content-type‘: ‘application/x-www-form-urlencoded‘
   })
 }
 }

封装一个json格式数据转form格式数据的方法

function json2Form(json) {
 let str = [];
 for (let p in json) {
   str.push(encodeURIComponent(p) + "=" + encodeURIComponent(json[p]));
 }
 return str.join("&");
}

module.exports = {
 json2Form,
}
  1. 小程序/公众号登录涉及到两个最关键的用户标识:

OpenId 是一个用户对于一个小程序/公众号的标识,开发者可以通过这个标识识别出用户。

UnionId 是一个用户对于同主体微信小程序/公众号/APP的标识,开发者需要在微信开放平台下绑定相同账号的主体。开发者可通过UnionId,实现多个小程序、公众号、甚至APP 之间的数据互通了。

  1. wx.getUserInfo用户信息在wx.login之后再获取
  wx.login({
   success(res) {
     if (res.code) {
       that.code = res.code
       wx.getUserInfo({
         success: function (res) {
           console.log("获取微信用户信息", res)
           let data = res
           http.post("miniLogin", {
             code: that.code,
             encryptedData: data.encryptedData,
             iv: data.iv
           }).then(({
             data
           }) => {
             console.log("登录", data)
           })
         }
       })
     }
   }
 })
  1. 小程序模板消息推送获取formId

突破微信小程序模板消息限制,实现无限制主动推送

模板消息

这里的button必须用原生的button, 如果用iview的i-buttton会获取不到formId。

  <template>
    <form @submit="getFormId" report-submit="true">
      <button form-type="submit" @submit="getFormId">开关</button>
    </from>
  </template>
  <script>
   import wepy from ‘wepy‘
   export default class XXX extends wepy.component {
      methods = {
        getFormId(e) {
           let formId = e.detail.formId
           // to do sth
        }
      }
   }
  </script>
  1. template中{{}}直接写js不起效

有时候我们在vue中习惯写{{ item.label.substr(0,2) }}来处理字符串,但是在wepy中这种写法有时候会不起效,为了使程序更稳定,我们可以在onLoad中直接处理好。

  1. wx.navigateTo 和 wx.reLaunch

wx.navigateTo 会保留当前页面然后跳转,当用户按返回按钮后不会触发onLoad等事件,导致无法更数据。

wx.reLaunch 会关闭所有页面再跳转。

使用时需要根据实际业务选择合适的api。

  1. 微信开发者工具的bug

当发现输入框不能输入或者工具的按钮点不动时,关掉微信开发者工具,然后重新打开即可。

  1. 发布审核流程

提交体验版,内部测试审核通过后 -> 提交审核(1~3天,本次项目审核时间2个小时)-> 提交发布

注意,提交审核后,还需要手动去提交发布,否则是不算上线的。提交发布成功后,大概需要5分钟左右的时间,就可以在微信里搜索到小程序了。

  1. 右上角的转发/分享按钮

默认右上角是没有转发按钮的,需要自己手动在需要转发分享的页面onLoad里添加以下代码。

wx.showShareMenu({
    withShareTicket: false
})

微信小程序开发总结

上一篇:如何清除微信网页缓存


下一篇:记账本微信小程序开发三