一、不同环境配置封装

新建config文件夹,根据自己有不同环境设置不同的js文件

具体js文件内容:

exports.config = {
requestHost: 'https://******.com.cn',
APPID:'*******',
Business: {
'jiaxiao': '1'
}
}

新建api.js文件(放哪里根据自己喜好),用json形式来储存接口地址:

exports.api = {
'do' : {
'login': '/merchant/do/login',
},
'payment' : {
'pay': '/V2/TokenPay/pay',
}
}

配置完成后在app.js中就可以调用了,

//app.js

App({
onLaunch: function (options) {
let env = options.query.env ? options.query.env : "product";
var config = require("config/config." + env + ".js");
this.globalData = config.config;
//获取接口信息
var api = require('api.js');
}, })

在页面中调用接口时只要引入先引入

const app = getApp();
就可以通过变量来获取接口地址了。
 
封装微信小程序get post方法:
const app = getApp();

const setToken = token => {
return wx.setStorageSync('token', token);
} const getToken = () =>{
return wx.getStorageSync('token');
} const judge = () =>{
var host = app.globalData.requestHost;
// console.log(host + app.api.do.token)
wx.request({
url: host + app.api.do.token,
data: {
token: getToken() ? getToken(): ''
},
header: {
'content-type': 'application/json' // 默认值
},
success: function (res) {
if (res.data.ret_code != 200) {
wx.navigateTo({
url: "/pages/login/index"
})
}
},
fail: function (error) {
wx.navigateTo({
url: "/pages/login/index"
})
}
})
//设置title
wx.setNavigationBarTitle({
title: wx.getStorageSync('merchantName') ? wx.getStorageSync('merchantName') : ''
})
} const get = (url, data, callback) => {
//判断是否登录、token是否过期
var host = app.globalData.requestHost;
judge(); if(data == false){
var data = {
token: wx.getStorageSync('token'),
business: app.globalData.Business.jiaxiao
}
}else{
data.token = wx.getStorageSync('token');
data.business = app.globalData.Business.jiaxiao;
}
wx.request({
url: host+url,
data: data,
header: {
'content-type': 'application/json'
},
success: res => {
callback(res);
},
})
} const post = (url, data, callback) => {
//判断是否登录、token是否过期
var host = app.globalData.requestHost;
judge();
//设置title // console.log(wx.getStorageSync('token'))
wx.setNavigationBarTitle({
title: wx.getStorageSync('merchantName') ? wx.getStorageSync('merchantName') : ''
}) if (data == false) {
var data = {
token: wx.getStorageSync('token'),
business: app.globalData.Business.jiaxiao
}
} else {
data.token = wx.getStorageSync('token');
}
// console.log(method)
wx.request({
url: host + url,
method: 'POST',
data: data,
header: {
'content-type': 'application/x-www-form-urlencoded'
},
success: res => {
callback(res);
},
})
} module.exports = {
setToken: setToken,
getToken: getToken,
judge: judge,
get: get,
post: post
}

因为小程序接口都是对外的开放接口,所以会存在安全性问题,为了接口安全每次都要传一个‘token’来校验请求的安全性,上边封装的意义也在此处,不用每次都传递token了,调用也很简单:

//页面引入
var request = require('../../utils/request.js'); request.get(
app.api.pay.pay,
false, function (res) {
console.log(res)
});
//request.get(接口地址,是否有参数,结果回调)

简单封装微信小程序的更多相关文章

  1. 详解封装微信小程序组件及小程序坑(附带解决方案)

    一.序 上一篇介绍了如何从零开发微信小程序,博客园审核变智障了,每次代码都不算篇幅,好好滴一篇原创,不到3分钟从首页移出来了.这篇介绍一下组件封装和我的踩坑历程. 二.封装微信小程序可复用组件 首先模 ...

  2. [组件封装]微信小程序-图片批量上传照片墙

    描述 批量上传图片, 可设置最大上传个数, 可删除, 可设置默认值. 效果 源码 pictures-wall.wxml <view class="picturesWall"& ...

  3. 【原创】1、简单理解微信小程序

    先看下网站的运行方式: 而小程序是这样: what?就这样?是的,就这样.那小程序官方提供的Wafer,还有Wafer2...想太多了,抛弃它们吧.不应当为了解决一个简单的旧问题而去整一个复杂的新问题 ...

  4. 封装微信小程序支付

    <?php /** * User: Eden * Date: 2019/3/21 * 共有内容 */ namespace Common\Service; use Think\Exception; ...

  5. 使用 async await 封装微信小程序HTTP请求

    1. 编写将普通回调函数形式的方法转换为promise方法的promisic方法 // util.js const promisic = function (func) { return functi ...

  6. promise封装微信小程序的request

    1.在utils下创建一个 request.js文件,然后将方法导出 const app = getApp(); //使用promise封装request请求 const POST = (url, p ...

  7. [组件封装]微信小程序-底部弹框

    描述 模仿ios浏览器底部弹框效果. 遮罩层淡入淡出,弹框高度根据内容自适应. 效果 源码 popup-bottom.wxml <!-- popup-bottom.wxml --> < ...

  8. [组件封装]微信小程序-日历

    描述 切换月份, 当天文案为今天, 日期背景变色, 日期红点标识, 点击选中日期. 效果 源码 calendar.wxml <view class="component"&g ...

  9. 详解微信小程序开发(项目从零开始)

    一.序 微信小程序,估计大家都不陌生,现在应用场景特别多.今天就系统的介绍一下小程序开发.注意,这里只从项目代码上做解析,不涉及小程序如何申请.打包.发布的东西.(这些跟着微信官方文档的流程走就好). ...

随机推荐

  1. Ubuntu 16.04下使用Wine安装PowerDesigner15

    说明: 1.关于没有.wine文件夹的解决方法:在命令行上运行winecfg: 2.使用的Wine版本是深度出品(Deepin),已经精简了很多没用的配置,使启动能非常快,占用资源小. 下载: (链接 ...

  2. DevExpress打印功能介绍 z

    一.打印功能说明: 打印功能,我们有多种实现方式,可以根据需要自行选择,我简单的总结下两种方法. (1).使用微软.net框架自带的PrintDocument,这种方式是直接借助Graphics,自行 ...

  3. SpringMVC同时支持多视图(JSP,Velocity,Freemarker等)的一种思路实现

    在基于SpringMVC的项目中有时需要同时使用多种视图格式,如jsp,velocity及freemarker等,通过不同的请求路径配置规则,映射到不同的视图文件.下面我提供一种思路,通过视图模板文件 ...

  4. Neutron网络入门

    Neutron是OpenStack核心项目之中的一个,提供云计算环境下的虚拟网络功能.Neutron的功能日益强大,并在Horizon面板中已经集成该模块.作为Neutron的核心开发人员之中的一个. ...

  5. makefile 与android.mk中加信息打印

    makefile里面加打印: [table]@echo ' zImage - Compressed kernel image' android.mk里面加信息打印: $(warning TEXT... ...

  6. 配置Office Outlook 2013

    导航 背景——配置过程——错误(Error)——参考资料 背景 最近,折腾了一阵子邮箱客户端,包括:Foxmail.thuderbird.outlook:最后,考虑到outlook对文本的强大的支持能 ...

  7. sqlite数据库改动及升级

    今天是上班的第二天.听说我近期的任务就是改bug.唉,权当学习了,遇到的一些问题都记录下来. sqlite数据库是android中很经常使用的数据库.今天帮别人改bug,遇到一些问题记录下来. 1.改 ...

  8. C++风格的强制性类型转换

    显示类型转换 被称为强制类型转换(cast) C风格:(type_id) C++风格:static_cast, dynamic_cast, reinterpret_cast, const_cast 在 ...

  9. python去除停用词(结巴分词下)

    python 去除停用词  结巴分词 import jieba #stopwords = {}.fromkeys([ line.rstrip() for line in open('stopword. ...

  10. PHP读取远程文件的4种方法

    1. fopen, fread1 if($file = fopen("http://www.example.com/", "r")) {2 while(!feo ...