最近朋友在有赞商城上面开了一个店铺,因为有实体店,一般卖商品后送货上门,但是打票时候老是人工用world文档人工复制黏贴订单打印小票, 所以就找我帮忙做一个软件专门打印小票的,就研究起来调用有赞第三方api来着,本篇主要介绍如何用qml中的xmlhttprequest来实现http请求协议,就以调用有赞商城api的查询订单接口为例:kdt.trades.sold.get

  1. function searchTrades(startDate,endDate){
  2. tradesModel.clear();//清空列表
  3. var request=new XMLHttpRequest();
  4. var data;
  5. //监听onreadystatechange事件
  6. request.onreadystatechange=function(){
  7. if(request.readyState===request.DONE){
  8. data=JSON.parse(request.responseText.toString());
  9. console.log(request.responseText.toString())
  10. for(var i=0;i<data.response.trades.length;i++){
  11. var defference=true;
  12. for(var index=0;index<tradesModel.count;index++){
  13. if(tradesModel.get(index).tid===data.response.trades[i].tid){
  14. defference=false;
  15. }
  16. }
  17. if(defference){
  18. var str="";
  19. var orders=data.response.trades[i].orders;
  20. for(var a=0;a<orders.length;a++){
  21. str+=(" "+orders[a].title+" 数量:"+orders[a].num+" 单价:"+orders[a].price+"元"+"\n\n\n")
  22. }
  23. var sum=0.0;
  24. for(var a=0;a<orders.length;a++){
  25. sum+=Number(orders[a].total_fee);
  26. }
  27. var pay_type;
  28. if(data.response.trades[i].pay_type==="WEIXIN"){
  29. pay_type="微信支付";
  30. }
  31. else if(data.response.trades[i].pay_type==="ALIPAY "){
  32. pay_type="支付宝支付";
  33. }
  34. else if(data.response.trades[i].pay_type==="BANKCARDPAY "){
  35. pay_type="银行卡支付";
  36. }
  37. else if(data.response.trades[i].pay_type==="PEERPAY "){
  38. pay_type="代付";
  39. }
  40. else if(data.response.trades[i].pay_type==="CODPAY "){
  41. pay_type="货到付款";
  42. }
  43. else if(data.response.trades[i].pay_type==="BAIDUPAY "){
  44. pay_type="百度钱包支付";
  45. }
  46. else if(data.response.trades[i].pay_type==="PRESENTTAKE "){
  47. pay_type="直接领取赠品";
  48. }
  49. else if(data.response.trades[i].pay_type==="COUPONPAY"){
  50. pay_type="优惠券/码全额抵扣";
  51. }
  52. else if(data.response.trades[i].pay_type==="BULKPURCHASE"){
  53. pay_type="来自分销商的采购";
  54. }
  55. else{
  56. pay_type="未知类型"
  57. }
  58. str+=" 应付:"+sum.toFixed(2)+"元\n\n"+
  59. " 订单创建日期:"+data.response.trades[i].created+"\n\n"+
  60. "付款类型:"+pay_type;
  61. tradesModel.append({"tid":data.response.trades[i].tid,
  62. "orders":data.response.trades[i].orders,
  63. "ordersContent":str,
  64. "trade":data.response.trades[i],
  65. "selected":false});
  66. str=""
  67. }
  68. }
  69. }
  70. }
  71. //params
  72. var startCreated=startDate;
  73. var endCreadted=endDate;
  74. var secret="your app secret";
  75. var appid="your app id";
  76. var currentDate=new Date();
  77. var method="kdt.trades.sold.get";//调用第三方接口函数
  78. var dateString=currentDate.getFullYear().toString()+"-"+
  79. (currentDate.getMonth()+1<10?"0"+currentDate.getMonth()+1:currentDate.getMonth()+1)+"-"+
  80. (currentDate.getDate()<10?"0"+currentDate.getDate():currentDate.getDate())+" "+
  81. (currentDate.getHours()<10?"0"+currentDate.getHours():currentDate.getHours())+":"+
  82. (currentDate.getMinutes()<10?"0"+currentDate.getMinutes():currentDate.getMinutes())+":"+
  83. (currentDate.getSeconds()<10?"0"+currentDate.getSeconds():currentDate.getSeconds());
  84. //md5验证码
  85. var md5=Qt.md5(secret+"app_id"+appid+"end_created"+endCreadted+"formatjson"+"method"
  86. +method+"sign_methodmd5"+"start_created"+startCreated+"timestamp"+dateString+"v1.0"+secret
  87. );
  88. var url ="https://open.koudaitong.com/api/entry?sign="+md5+"&"+"timestamp="+
  89. dateString+"&v=1.0&app_id="+appid+"&method="+
  90. method+"&sign_method=md5&format=json"+
  91. "&start_created="+startCreated+
  92. "&end_created="+endCreadted;
  93. request.open("GET",url);
  94. request.send();
  95. }

函数调用后返回来的是一个Json文本,qml中非常友好的读取这些信息,并且进行处理,我直接用Listmodel来存放json中的订单列表,用Listviewl来显示出来。

http://www.heilqt.com/topic/5622160642ca1a2d046d6548

qt qml 利用xmlhttprequest 调用有赞api的更多相关文章

  1. 利用Python调用pastebin.com API自动创建paste

    在上一篇文章中,已经实现了模拟pastebin.com的账号登录,并且获取了api_dev_key,这一篇文章主要讲一下调用API创建paste 登录之后,进入API页面,发现网站已经提供了几个API ...

  2. Qt刷新机制的一些总结(Qt内部画的时候是相当于画在后台一个对象里,然后在刷新的时候调用bitblt统一画,调用window的api并不会影响到后面的那个对象)

    前段时间做过一个界面刷新的优化,遇到的坑比较多,在这里做一点点总结吧.     优化的方案是滚动滚动条的时候用截屏的方式代替界面全部刷新,优化完成后,界面在滚动时效率能提升大概一倍,背景介绍完毕.   ...

  3. Qt QML referenceexamples attached Demo hacking

    /********************************************************************************************* * Qt ...

  4. Qt qml 单例模式

    Qt qml 单例模式,没什么好说的,看代码吧.单例模式很适合做全局的配置文件. [示例下载] http://download.csdn.net/detail/surfsky/8539313 [以下是 ...

  5. Qt qml listview 列表视图控件(下拉刷新、上拉分页、滚动轴)

    Qt qml listview下拉刷新和上拉分页主要根据contentY来判断.但要加上顶部下拉指示器.滚动条,并封装成可简单调用的组件,着实花了我不少精力:) [先看效果]    [功能] 下拉刷新 ...

  6. qt qml qchart 图表组件

    qt qml qchart 图表组件 * Author: Julien Wintz * Created: Thu Feb 13 23:41:59 2014 (+0100) 这玩意是从chart.js迁 ...

  7. mfc 调用Windows的API函数实现同步异步串口通信(源码)

    在工业控制中,工控机(一般都基于Windows平台)经常需要与智能仪表通过串口进行通信.串口通信方便易行,应用广泛. 一般情况下,工控机和各智能仪表通过RS485总线进行通信.RS485的通信方式是半 ...

  8. Jquery利用ajax调用asp.net webservice的各种数据类型(总结篇)

    原文:Jquery利用ajax调用asp.net webservice的各种数据类型(总结篇) 老话说的好:好记心不如烂笔头! 本着这原则,我把最近工作中遇到的jquery利用ajax调用web服务的 ...

  9. Qt中利用QTime类来控制时间,这里简单介绍一下QTime的成员函数的用法:

    Qt中利用QTime类来控制时间,这里简单介绍一下QTime的成员函数的用法: ------------------------------------------------------------ ...

随机推荐

  1. Java图形化界面设计——中间容器(Jpanel)

    1.  将组件添加到JFrame中 方式之一: frame.getContentPane().add(childComponent) 用getContentPane()方法获得JFrame的内容面板, ...

  2. Ubuntu 麒麟版下安装:Apache+php5+mysql+phpmyadmin.

    摘要 LAMP是Linux web服务器组合套装的缩写,分别是Apache+MySQL+PHP.此文记录在Ubuntu上安装Apache2服务器,包括PHP5(mod_php)+MySQL+phpmy ...

  3. (HLS播放器之中的一个)HLS协议之M3U8解析

    參照 http://tools.ietf.org/html/draft-pantos-http-live-streaming-08, 能够对M3U8有比較系统的认识. HLS(HTTP Live St ...

  4. 【Android界面实现】信息更新小红点显示——自己定义控件BadgeView的使用介绍

    在如今大部分的信息公布类应用,都有这样的一个功能:当后台数据更新,比方有系统消息或者是用户间有互动的时候,通过在控件上显示一个小红点来提示用户有新的信息.一般来说,这样的业务需求,我们能够在布局文件里 ...

  5. Yii2.0中文开发向导——删除数据

    直接 model 删除 $model = User::find($id); $model->delete(); 带有条件的删除 $connection ->createCommand() ...

  6. 微信 php 获取ticket

    <?phpheader('content-type:text/html; charset=utf8');define('TOKEN', 'youtoken'); // TOKENdefine(' ...

  7. 修改spfile导致oracle无法启动

    今天尝试着调整一下数据库的性能,由于疏忽没有做好备份(spfile.ora),直接修改了MEMORY_TARGET参数,alter system set MEMORY_TARGET=4096m;导致重 ...

  8. [LeetCode]题解(python):133-Clone Graph

    题目来源: https://leetcode.com/problems/clone-graph/ 题意分析: 克隆一个无向图.每个节点包括一个数值和它的邻居. 题目思路: 直接深度拷贝. 代码(pyt ...

  9. Oracle10g任务调度创建步骤

    /* 创建可执行程序 */begin DBMS_SCHEDULER.CREATE_PROGRAM( program_name => 'peace_sj_his.PROG_DATASYNC', p ...

  10. JS声明语句提升与作用域

    <!DOCTYPE html><html><head></head><body><script>//-------------- ...