[Flutter]請求阿里百川的API

簡單封裝了一下,請求阿里百川的api。只是做了一個簡單的get請求封裝,要更加優(yōu)雅可以自己再封裝一下。

可以簡單的學(xué)習(xí)一下Flutter的網(wǎng)絡(luò)請求用法。

文件tb_api.dart代碼如下:

import 'dart:convert';
import 'package:convert/convert.dart';
import 'package:crypto/crypto.dart';
import 'dart:async';
import 'package:http/http.dart' as http;

// 阿里百川
const AlibcAppKey = "";
const AlibcAppSecret = "";
const AlibcApiUrl = "http://gw.api.taobao.com/router/rest?";

const BCGoodsListURL = "taobao.tae.items.list";
const BCGoodsDetailURL = "taobao.item.detail.get";

// md5 加密
String generateMd5(String data) {
  var content = new Utf8Encoder().convert(data);
  var digest = md5.convert(content);
  return hex.encode(digest.bytes);
}

// 公共請求參數(shù)
Map<String, String> commonParams(String method) {
  const app_key = AlibcAppKey;
  DateTime date = new DateTime.now();

  // yyyy-MM-dd HH:mm:ss
  String timestamp =
      "${date.year.toString()}-${date.month.toString().padLeft(2,'0')}-${date.day.toString().padLeft(2,'0')} ${date.hour.toString().padLeft(2, '0')}:${date.minute.toString().padLeft(2, '0')}:${date.second.toString().padLeft(2, '0')}";
  const format = "json";
  const v = "2.0";
  const sign_method = "md5";
  const simplify = "true";

  var params = {
    "app_key": app_key,
    "format": format,
    "method": method,
    "sign_method": sign_method,
    "timestamp": timestamp,
    "v": v
  };

  return params;
}

// 這是商品列表接口的參數(shù)
Map<String, String> goodsListParams() {
  return {
    "num_iids": '534014773552',
    "fields": "cid,title,nick,price,num,pic_url"
  };
}

// 最終的請求參數(shù) 通過公共參數(shù)和接口參數(shù)確定簽名
Map<String, String> requestParameters(String method, Map<String, String> customParams) {
  var params = commonParams(method);
  var custom = customParams;

  // print("接口參數(shù): \(custom)")
  custom.forEach((k, v) {
    params[k] = v;
  });

  // print("最終參數(shù): \(params)")

  List<String> keys = params.keys.toList();
  keys.sort();

  // print("排序后的參數(shù):\(keys)")
  String total = '';
  keys.forEach((key) {
    total += '${key}${params[key]}';
  });

  String sign =
      generateMd5(AlibcAppSecret + total + AlibcAppSecret).toUpperCase();
  params['sign'] = sign;

  return params;
}

// 讀取商品列表
getGoodsList() {
  get(requestParameters(BCGoodsListURL, goodsListParams()));
}

// 讀取商品詳情
getGoodDetail(String itemId) {
  var params = { "item_id" : itemId, "fields" : "item" };
  get(requestParameters(BCGoodsDetailURL, params));
}

Future<Map> get(Map params) async {
  final uri = new Uri.http('gw.api.taobao.com', '/router/rest', params);
  // print('請求的url: ${uri}');
  final headers = {
    "Content-Type": "application/json",
  };

  final response = await http.get(uri, headers: headers);
  var data = json.decode(response.body);
  print('阿里返回的數(shù)據(jù):${data}');

  return data;
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 在上一篇教程中說了Flutter使用Dart語言開發(fā)。本篇教程整體介紹一下Dart語言,注意,本篇不會介紹Dart...
    lazydu閱讀 5,179評論 3 13
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,057評論 25 709
  • 譯者丨覃云 Flutter 是什么? Flutter 移動應(yīng)用程序 SDK 是為開發(fā)人員提供一種創(chuàng)建快捷、美觀的應(yīng)...
    言射手閱讀 7,950評論 1 14
  • 之所以在這里,本意是想找一個平臺單純的寫寫東西來滿足我偶爾的小文藝。 以下是從微博搬來: 時光易逝,轉(zhuǎn)眼間我就在接...
    秘密花園k閱讀 270評論 0 0
  • 倆年了,別離開了好不好,很累啊 世界不需要同情我 我已經(jīng)十五歲了 年少輕狂呢 我什么都不怕 只怕你們離開
    凜凌7閱讀 298評論 0 0

友情鏈接更多精彩內(nèi)容