- request.js
import Taro from '@tarojs/taro'
const cryptoJS = require('./CryptoJS.js')
const base64 = require('./enc-base64.js')
import { HTTP_STATUS } from './http_status'
const flag = xxxxx
const version = xxxxx
let appId = xxxxx
let secretKey = xxxxxxx
let host = xxxxxx
const genkey = (method, service) => {
var url = ''
var timeStamp = Math.round(new Date().getTime() / 1000)
var encodeResult = getContentStr(method, service, timeStamp)
var uri = flag + ':' + timeStamp + ':' + encodeResult
url = host + service + '/' + version + '/' + appId + '/' + uri
return url
}
const getContentStr = (method, service, timeStamp) => {
var content =
flag +
'\nappid=' +
appId +
'\nmethod=' +
method +
'\n' +
'service=' +
service +
'\n' +
'time=' +
timeStamp +
'\n' +
'version=' +
version +
'\n'
var hash = cryptoJS.HmacSHA1(content, secretKey)
var encodeResult = hash.toString(cryptoJS.enc.Base64)
return encodeURIComponent(encodeResult)
}
const customInterceptor = (chain) => {
const requestParams = chain.requestParams
return chain.proceed(requestParams).then((res) => {
if (res.statusCode === HTTP_STATUS.NOT_FOUND) {
return Promise.reject('请求资源不存在')
} else if (res.statusCode === HTTP_STATUS.BAD_GATEWAY) {
return Promise.reject('服务端出现了问题')
} else if (res.statusCode === HTTP_STATUS.FORBIDDEN) {
return Promise.reject('没有权限访问')
} else if (res.statusCode === HTTP_STATUS.AUTHENTICATE) {
return Promise.reject('需要鉴权')
} else if (res.statusCode === HTTP_STATUS.SUCCESS) {
if (res.data.code === 1) {
return res.data
}
}
}
})
}
Taro.addInterceptor(customInterceptor)
Taro.addInterceptor(Taro.interceptors.timeoutInterceptor)
const baseOptions = (params, method) => {
let { url, data } = params
let postUrl = genkey(method, url)
let contentType = 'application/x-www-form-urlencoded'
contentType = params.contentType || contentType
return (new Promise((resolve, reject) => {
Taro.showLoading({
title: '加载中',
})
Taro.request({
url: postUrl,
data: data,
method: method,
timeout: 30000,
header: {
'content-type': contentType,
},
success: function (res) {
resolve(res.data)
Taro.hideLoading()
},
fail: function (err) {
Taro.hideLoading()
let msg = ''
if (!err.statusCode) {
if (err.errMsg.includes('timeout')) {
msg = '请求超时'
}
} else {
switch (err.statusCode) {
case 500:
msg = '网络500错误'
break
case 404:
msg = '未找到远程服务器'
break
case 400:
msg = '数据异常'
break
default:
msg = '请求出错,请重试'
break
}
}
Taro.showModal({
title: '提示',
showCancel: false,
content: msg,
})
reject(err)
},
})
}))
}
const get = (url, data, contentType) => {
let option = { url, data, contentType }
return baseOptions(option, 'GET')
}
const post = (url, data, contentType) => {
let option = { url, data, contentType }
return baseOptions(option, 'POST')
}
let request = {
genkey: genkey,
post: post,
get: get,
}
export default request
- http_status.js
export const HTTP_STATUS = {
SUCCESS: 200,
CREATED: 201,
ACCEPTED: 202,
CLIENT_ERROR: 400,
AUTHENTICATE: 401,
FORBIDDEN: 403,
NOT_FOUND: 404,
SERVER_ERROR: 500,
BAD_GATEWAY: 502,
SERVICE_UNAVAILABLE: 503,
GATEWAY_TIMEOUT: 504
}