微信小程序request请求封装,验签

1/ 公共文件util添加

request请求

//简单封装请求
function request(params, path, isShowLoading = true, goBack = false, type = ‘none‘, obj={}) {
  try {
    console.log(path)
    let NowTime = Date.parse(new Date()) / 1000;
    let defaultParams = {
      platform: app.globalData.platform,
      appVersion: app.globalData.version,
      deviceId: uuId(),
      timestamp: params.timestamp ? params.timestamp : NowTime
    };

    params = Object.assign(params, defaultParams);
    let requestParams = signature(params)
    isShowLoading && wx.showLoading && wx.showLoading({
      title: ‘加
中...‘
    })
    return new Promise((resolve, reject) => {
      let header;
      obj.header = obj.header || {};
      console.log(‘获取ptkey‘)
      console.log(plugin.getJdListStorage([‘guid‘, ‘pt_key‘, ‘pt_token‘, ‘pt_pin‘]))
      let [GUID = ‘‘, KEY = ‘‘, TOKEN = ‘‘, PIN = ‘‘] = plugin.getJdListStorage([‘guid‘, ‘pt_key‘, ‘pt_token‘, ‘pt_pin‘]),
        _cookie = `guid=${GUID}; pt_pin=${encodeURIComponent(PIN)}; pt_key=${KEY}; pt_token=${TOKEN};${wx.getStorageSync("accessToken_v1")}`, {
          cookie
        } = obj.header;
      console.log(cookie)
      obj.header.cookie = cookie ? `${cookie};${_cookie}` : _cookie;
      if (!isEmpty(getToken())) {
        obj.header.authorization = ‘Bearer ‘ + getToken()
      }
      console.log(obj.header)

      wx.request({
        url: getApp().globalData.host + path,  //获取app.js 全局ip
        data: requestParams,
        method: ‘POST‘,
        header: obj.header,
        success: function(res) {
          console.log(res)
          isShowLoading && wx.hideLoading && wx.hideLoading()
          // 缺少登录失效的处理方法
          if (res.statusCode == 200 && res.data.code == 200) {
            if (isEmpty(res.data.data) || res.data.data == true) {
              resolve(‘true‘)
              return
            }
            if (res.data.data) {
              resolve(res.data.data);
            } else if (res.data.data == 0){
              resolve(res.data.data);
            } else {
              resolve(‘true‘)
            }
          } else if (res.statusCode == 200 && res.data.code == 401) { //token过期
            Login();
            resolve(false);
            return;
          } else {
            //需要再判断code码
            // errorShow(res.data.msg, goBack, type);
            errorShow(res.data.msg);
            resolve(false);
            // reject(res.data.res);
          }
        },
        fail: function(err) {
          console.log(err)
          // 因为hide会让showToast隐藏
          isShowLoading && wx.hideLoading && wx.hideLoading()
          errorShow(‘网络请求失败‘);
          reject(new Error(‘Network request failed‘))
          // throw new Error(‘Network request failed‘)
        },
        complete: function() {}
      })
    })
  } catch (err) {
    console.log(err)
    errorShow(‘网络请求失败‘);
    return false;
  }
}

2/  signature 签名

//生成签名
function signature(params) {
  let keyArr = []
  for (let key in params) {
    keyArr.push(key)
  }
  let arr = keyArr.sort();
  let result = "";
  arr.map((item, index) => {
    if (params[item] == null || params[item] == undefined) {
      delete params[item];
      arr.splice(index, 1);
    }
  })
  console.log("arr")
  console.log(arr)
  arr.map((item, index) => {
    if (Array.isArray(params[item]) == true) {
      let res = ‘‘
      let arr = params[item]
      arr.map(obj => {
        console.log(typeof(obj))
        if (typeof(obj) != ‘object‘) {
          res += obj
        } else {
          for (let key in obj) {
            if (Array.isArray(obj[key])) {
              let val = ‘‘;
              obj[key].map(item => {
                val += item
              })
              res += key + val
            } else {
              res += key + obj[key]
            }
          }
        }
      })
      result += ‘‘ + item + ‘‘ + res
    } else {
      result += ‘‘ + item + ‘‘ + params[item]
    }
  })
  console.log("result")
  console.log(result)

  let pos;
  if (isEmpty(getToken())) {
    pos = result
  } else {
    pos = result + getToken()
  }
  console.log(pos)
  console.log("signature")
  let signature = sha256.hmac.create(‘pos_secret‘).update(pos).hex().toLowerCase();  //需要引入sha256.min.js
  console.log(signature)
  let obj = {
    ‘signature‘: signature
  }
  return Object.assign(params, obj);
}

3/  util文件引入

const app = getApp()const sha256 = require(‘../libs/sha256.min.js‘);

原文地址:https://www.cnblogs.com/shuihanxiao/p/11971368.html

时间: 2024-07-31 09:56:37

微信小程序request请求封装,验签的相关文章

微信小程序 request请求封装

在utils文件夹新建文件utils.js,封装代码如下: 小程序升级后内部不自带Promise方法,需外部引入Promise方法   var sendRequest = function (url, method, data = {}, header = {} )     {     var promise = new Promise(function (resolve, reject){         wx.request({           url: url,           d

微信小程序request请求封装

var app = getApp(); function request(url,postData,doSuccess,doFail,doComplete){ var host = getApp().conf.host; wx.request({ url: host+url, data:postData, method: 'POST', success: function(res){ if(typeof doSuccess == "function"){ doSuccess(res);

微信小程序request请求实例,网络请求。

最近微信小程序开始开放测试了,小程序提供了很多api,极大的方便了开发者,其中网络请求api是wx.request(object),这是小程序与开发者的服务器实现数据交互的一个很重要的api. 官方参数说明如下 OBJECT参数说明: 参数名 类型 必填 说明 url String 是 开发者服务器接口地址 data Object.String 否 请求的参数 header Object 否 设置请求的 header , header 中不能设置 Referer method String 否

微信小程序 网络请求之re.request 和那些坑

微信小程序有四种网络请求类型,下面只详细介绍普通HTTPS请求(wx.request) 普通HTTPS请求(wx.request) 上传文件(wx.uploadFile) 下载文件(wx.downloadFile) WebSocket通信(wx.connectSocket) 首先,先确认是否设置了合法域名,或者在开发环境下不校验合法域名.关于设置合法域名请看→微信小程序 网络请求之设置合法域名   以下是wx.request的详细说明,截图于微信小程序开发文档 在微信index.js 发起一个普

微信小程序数据请求方法wx.request小测试

微信小程序数据请求方法 wx.request wxml文件: <view> <textarea value="{{textdata}}"/> </view> <button bindtap="RequestData" value="Button">Button</button> 主要是一个按钮,点击后将请求的数据写入到textarea中 js文件: Page({ data:{ textd

微信小程序使用promise封装异步请求

一:开发了一段时间的微信小程序,发现里面的API都是这样的: wx.showModal({ title: '提示', content: '这是一个模态弹窗', success: function(res) { if (res.confirm) { console.log('用户点击确定') } else if (res.cancel) { console.log('用户点击取消') } } }) 如果代码多了逻辑多了,就会出现所谓的回调地狱. wx.showModal({ title: '提示'

第三篇、微信小程序-网络请求API

wx.request(OBJECT)发起的是https请求.一个微信小程序,同时只能有5个网络请求连接. OBJECT参数说明: 效果图: net.js Page({ data:{ result:{}, }, onLoad:function(options){ this.getDate('http://baobab.wandoujia.com/api/v2/feed?num=2'); }, /** * 网络请求的函数:接收一个URL参数 */ getDate:function(URL){ var

让微信小程序每次请求的时候不改变session_id的方法

每次微信小程序请求的时候都会改变session id, 还好他的请求方法内可以设置header头 所以只需要在启动程序后第一次请求服务器获得一个sessionid(或是唯一编号 ) 然后本地存储起来,每次请求服务器的时候就在header里面带上 但是有个问题就是 你本地存储了这个session id后那么以后每次都会是这个session id 所以建议在程序每次启动的时候先清空本地存储的session id 然后发送首次请求获取新的sessionid 我把它请求的方法 重新包装了下 顺便贴出来大

微信小程序 POST请求

微信小程序开发中网络请求必不可少.GET.POST请求是最常用的.GET请求,POST请求的时候有好几个坑.我已经为大家填好了. <img src="http://img.blog.csdn.net/20161017170933243?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" align