口袋通对接工具类

  1 package com.frame.util;
  2
  3 import java.io.BufferedReader;
  4 import java.io.InputStreamReader;
  5 import java.io.UnsupportedEncodingException;
  6 import java.net.URL;
  7 import java.net.URLConnection;
  8 import java.net.URLEncoder;
  9 import java.util.Date;
 10 import java.util.HashMap;
 11 import java.util.Iterator;
 12 import java.util.Map;
 13 import java.util.Set;
 14 import java.util.TreeMap;
 15 import java.util.regex.Matcher;
 16 import java.util.regex.Pattern;
 17
 18 import net.sf.json.JSONArray;
 19 import net.sf.json.JSONObject;
 20
 21 import org.apache.commons.codec.digest.DigestUtils;
 22
 23 /**
 24  *
 25  * @Description: 口袋通对接工具类
 26  * @author 27  * @date
 28  */
 29 public class KouDaiTongUtil {
 30     public static final String KDT_URL="http://open.koudaitong.com/api/entry";
 31     public static final String APP_ID="";
 32     public static final String SECRET="";
 33     public static final String FORMAT="json"; //响应格式
 34     public static final String SIGN_METHOD="md5"; //参数的加密方法
 35     public static final String V="1.0";//API协议版本
 36     /**
 37      * 通用构造API请求参数
 38      * @param appId 在口袋通后台获取
 39      * @param format 可选,指定响应格式。默认json,目前支持格式为json
 40      * @param method 调用API的接口名称,参照口袋通
 41      * @param signMethod 可选,参数的加密方法选择。默认为md5
 42      * @param timestamp 时间戳 方法内部会处理成格式为yyyy-mm-dd HH:mm:ss
 43      * @param v API协议版本,可选值:1.0
 44      * @param paramMap(调用api的参数,key为参数名称,需要和调用口袋通方法参数名称相同,否则调用不成功)
 45      * @return
 46      * @throws UnsupportedEncodingException
 47      */
 48     public static String constructParam(String appId,String secret,String format,String method,String signMethod,Date timestamp,String v,Map<String,Object> paramMap) throws UnsupportedEncodingException {
 49         String timestampStr=new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(timestamp);
 50         //遵循API对参数进行升序排列
 51         Map<String,Object> map=new TreeMap<String,Object>();
 52         //加密参数(升序排列)
 53         map.put("app_id", appId);
 54         map.put("format", format);
 55         map.put("method", method);
 56         map.put("sign_method", signMethod);
 57         map.put("timestamp", timestampStr);
 58         map.put("v", v);
 59         //应用参数
 60         map.putAll(paramMap);
 61         StringBuffer systemStr=new StringBuffer();
 62         //头加secret
 63         systemStr.append(SECRET);
 64         Set<Map.Entry<String, Object>> set=map.entrySet();
 65         for(Iterator<Map.Entry<String, Object>> it= set.iterator();it.hasNext();){
 66             Map.Entry<String, Object> entry=it.next();
 67             systemStr.append(entry.getKey()+entry.getValue());
 68         }
 69         //尾加secret
 70         systemStr.append(SECRET);
 71         //拼接应用参数
 72         Set<Map.Entry<String, Object>> paramSet=paramMap.entrySet();
 73         StringBuffer appStr=new StringBuffer();
 74         for(Iterator<Map.Entry<String, Object>> it=paramSet.iterator();it.hasNext();){
 75             appStr.append("&");
 76             Map.Entry<String, Object> entry=it.next();
 77             if(containWhiteSpace((String)entry.getValue().toString())){
 78                 appStr.append(entry.getKey()+"="+URLEncoder.encode((String)entry.getValue(),"utf-8"));
 79             }else{
 80                 appStr.append(entry.getKey()+"="+entry.getValue());
 81             }
 82         }
 83         //32位md5加密
 84         String sign=DigestUtils.md5Hex(systemStr.toString());
 85         String param="sign="+sign+"&timestamp="+URLEncoder.encode(timestampStr,"utf-8")+"&v="+v+"&app_id="+APP_ID+"&method="+method+"&sign_method="+signMethod+"&format="+format+appStr;
 86         System.out.println("URL:"+KDT_URL+"?"+param);
 87         return param;
 88     }
 89
 90
 91     /**
 92      *
 93      * @param 判断是否包含空字符串
 94      * @return
 95      */
 96     public static boolean containWhiteSpace(String input){
 97         Pattern pattern = Pattern.compile("\\s");
 98         Matcher matcher = pattern.matcher(input);
 99         boolean flag = matcher.find();
100         return flag;
101     }
102     /**
103      * 发送get请求
104      * @param url
105      * @param param
106      * @return
107      */
108     public static String sendGet(String url,String param) {
109         String result = "";
110         BufferedReader in = null;
111         try {
112              String urlNameString = url + "?" + param;
113              URL realUrl = new URL(urlNameString);
114              URLConnection connection = realUrl.openConnection();
115              connection.connect();
116              in = new BufferedReader(new InputStreamReader(
117                     connection.getInputStream()));
118              String line;
119              while ((line = in.readLine()) != null) {
120                 result += line;
121              }
122         } catch (Exception e) {
123             System.out.println("发送GET请求出现异常!" + e);
124             e.printStackTrace();
125         }
126         finally {
127             try {
128                 if (in != null) {
129                     in.close();
130                 }
131             } catch (Exception e2) {
132                 e2.printStackTrace();
133             }
134         }
135         return result;
136     }
137     /**
138      * 口袋同通用请求方法返回json字符串
139      * @param method 调用API的接口名称来源KdtMethodListEnum
140      * @param paramMap(调用api的参数,key为参数名称,需要和调用口袋通方法参数名称相同,否则调用不成功)
141      * @return
142      * @throws UnsupportedEncodingException
143      */
144     public static Map<String,Object> sendRequest(String method,Map<String,Object> paramMap) throws UnsupportedEncodingException{
145         Map<String,Object> resultMap=new HashMap<String,Object>();
146         String param = constructParam(APP_ID,SECRET, FORMAT, method, SIGN_METHOD, new Date(System.currentTimeMillis() + 8*60 * 60 * 1000), V,paramMap);///////////////////////////////////////////////////
147           String reponse= sendGet(KDT_URL,param);
148           JSONObject jsonObject=JSONObject.fromObject(reponse);
149           //请求发生错误
150         if(jsonObject.containsKey("error_response")){
151             int errorCode=Integer.parseInt(JSONObject.fromObject(jsonObject.get("error_response")).get("code").toString());
152             String msg=JSONObject.fromObject(jsonObject.get("error_response")).get("msg").toString();
153             resultMap.put("status", "FAILED");
154             resultMap.put("message","请求失败,"+msg+",错误码:"+errorCode);
155         }else{
156             resultMap.put("status", "SUCCESS");
157             resultMap.put("result", reponse);
158         }
159           return resultMap;
160     }
161
162     /**
163      * 获取交易订单(如果参数都不传就会下拉所有订单)
164      * @param status 订单状态
165      * @param startCreated 订单创建起始时间
166      * @param endCreated 订单创建结束时间
167      * @param startPayDate 支付起始时间
168      * @param endPayDate  支付结束时间
169      * @return map
170      * @throws UnsupportedEncodingException
171      */
172     public static Map<String,Object> getOrderListByCondition(String status,String startCreated,String endCreated,String startPayDate,String endPayDate) throws UnsupportedEncodingException{
173         String method="kdt.trades.sold.get"; //查询卖家已卖出的交易列表
174         Map<String,Object> paramMap=new HashMap<String,Object>();
175         if(status!=null){
176             paramMap.put("status", status);
177         }
178         if(startCreated!=null){
179             paramMap.put("start_created", startCreated);
180         }
181         if(endCreated!=null){
182             paramMap.put("end_created", endCreated);
183         }
184         if(startPayDate!=null){
185             paramMap.put("start_pay", startPayDate);
186         }
187         if(endPayDate!=null){
188             paramMap.put("end_pay", endPayDate);
189         }
190           Map<String,Object> map=KouDaiTongUtil.sendRequest(method,paramMap);
191           return map;
192     }
193      public static String getValue(Map map, String key) {
194             Object obj = map.get(key);
195             if (obj == null) {
196               return "";
197             }
198             return String.valueOf(obj);
199           }
200     public static void main(String[] args) throws UnsupportedEncodingException{
201         System.out.println(new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date(System.currentTimeMillis() + 8*60 * 60 * 1000)));
202         Map<String,Object> map=KouDaiTongUtil.getOrderListByCondition(null,"2014-07-01 00:00:00", null, null, null);
203         String ss=getValue(map,"result");
204         System.out.println("*************"+ss);
205         JSONObject jsonObject=JSONObject.fromObject(ss);
206         //System.out.println(jsonObject);
207         JSONObject  response=jsonObject.getJSONObject("response");
208         JSONArray  data=response.getJSONArray("trades");
209         System.out.println(data.size());
210         String save_sql=" begin ";
211         for(int i=0;i<data.size();i++){
212             JSONObject info=data.getJSONObject(i);
213             String num=info.getString("num");
214             String num_iid=info.getString("num_iid");
215             String price=info.getString("price");
216             String pic_path=info.getString("pic_path");
217             String pic_thumb_path=info.getString("pic_thumb_path");
218             String title=info.getString("title");
219             String status=info.getString("status");
220             String shipping_type=info.getString("shipping_type");
221             String post_fee=info.getString("post_fee");
222             String total_fee=info.getString("total_fee");
223             String discount_fee=info.getString("discount_fee");
224             String payment=info.getString("payment");
225             String created=info.getString("created");
226             String pay_time=info.getString("pay_time");
227             String pay_type=info.getString("pay_type");
228             String consign_time=info.getString("consign_time");
229             String buyer_area=info.getString("buyer_area");
230             String tid=info.getString("tid");
231             String weixin_user_id=info.getString("weixin_user_id");
232             String buyer_nick=info.getString("buyer_nick");
233             String buyer_message=info.getString("buyer_message");
234             String seller_flag=info.getString("seller_flag");
235             String trade_memo=info.getString("trade_memo");
236             String receiver_city=info.getString("receiver_city");
237             String receiver_district=info.getString("receiver_district");
238             String receiver_name=info.getString("receiver_name");
239             String receiver_state=info.getString("receiver_state");
240             String receiver_address=info.getString("receiver_address");
241             String receiver_zip=info.getString("receiver_zip");
242             String receiver_mobile=info.getString("receiver_mobile");
243             String feedback=info.getString("feedback");
244             String outer_tid=info.getString("outer_tid");
245             save_sql+=" insert into KDT_TRADES values(‘"+tid+"‘,‘"+num+"‘,‘"+num_iid+"‘,‘"+price+"‘,‘"+pic_path+"‘,‘"+pic_thumb_path+"‘,‘"+title+"‘,‘"+weixin_user_id+"‘,‘"+buyer_nick+"‘,‘"+buyer_message+"‘,‘"+seller_flag+"‘,‘"+trade_memo+"‘,‘"+receiver_city+"‘,‘"+receiver_district+"‘,‘"+receiver_name+"‘,‘"+receiver_state+"‘,‘"+receiver_address+"‘,‘"+receiver_zip+"‘,‘"+receiver_mobile+"‘,‘"+feedback+"‘,‘"+outer_tid+"‘,‘"+status+"‘,‘"+shipping_type+"‘,‘"+post_fee+"‘,‘"+total_fee+"‘,‘"+discount_fee+"‘,‘"+payment+"‘,‘"+created+"‘,‘"+pay_time+"‘,‘"+pay_type+"‘,‘"+consign_time+"‘,‘"+buyer_area+"‘); ";
246             //int updateForSql = AccessDB.updateForSql(save_sql);
247             JSONArray orders=info.getJSONArray("orders");
248             for(int j=0;j<orders.size();j++){//目前的所有交易只有 1 个子订单
249                 JSONObject order_info=orders.getJSONObject(j);
250                 String _trades_id=tid;
251                 String _outer_sku_id=order_info.getString("outer_sku_id");
252                 String _title=order_info.getString("title");
253                 String _seller_nick=order_info.getString("seller_nick");
254                 String _price=order_info.getString("price");
255                 String _total_fee=order_info.getString("total_fee");
256                 String _payment=order_info.getString("payment");
257                 String _sku_properties_name=order_info.getString("sku_properties_name");
258                 String _pic_path=order_info.getString("pic_path");
259                 String _pic_thumb_path=order_info.getString("pic_thumb_path");
260                 String _buyer_messages=order_info.getString("buyer_messages");
261                 String _num_iid=order_info.getString("num_iid");
262                 String _num=order_info.getString("num");
263                 String _sku_id=order_info.getString("sku_id");
264                 //String _discount_fee=order_info.getString("discount_fee");
265                 save_sql+=" insert into KDT_ORDERS values(‘"+_trades_id+"‘,‘"+_num_iid+"‘,‘"+_sku_id+"‘,‘"+_num+"‘,‘"+_outer_sku_id+"‘,‘"+_title+"‘,‘"+_seller_nick+"‘,‘"+_price+"‘,‘"+_total_fee+"‘,‘0‘,‘"+payment+"‘,‘"+_sku_properties_name+"‘,‘"+_pic_path+"‘,‘"+_pic_thumb_path+"‘,‘"+_buyer_messages+"‘); ";
266                 //int updateForSql1 = AccessDB.updateForSql(save_sql);
267 //                System.out.println("_title"+_title);
268 //                System.out.println("_trades_id"+_trades_id);
269             }
270
271             //System.out.println(orders);
272 //            System.out.println("weixin_user_id:"+weixin_user_id);
273 //            System.out.println("title:"+title);
274         }
275         save_sql+=" end; ";
276         System.out.println("save_sql:"+save_sql);
277         //int updateForSql = AccessDB.updateForSql(save_sql);
278         System.out.println("OK");
279
280 //        JSONArray  orders=data.optJSONArray("orders");
281 //        System.out.println(orders);
282 //        JSONArray data=response.getJSONArray("data");
283 //        JSONObject info=data.getJSONObject(0);
284 //        String province=info.getString("province");
285 //        String city=info.getString("city");
286 //        String district=info.getString("district");
287 //        String address=info.getString("address");
288 //         System.out.println(province+city+district+address);
289
290
291     }
292
293
294 }

口袋通对接工具类,布布扣,bubuko.com

时间: 2024-10-08 20:29:26

口袋通对接工具类的相关文章

身份证号码工具类

转载自:http://www.3fwork.com/b200/002695MYM017139/ 身份证工具类,可以解析出身份证号是否通过校验.性别.年龄和出生所在地 一.居民身份证的简介      居民身份证号码,由十七位数字本体码和一位数字校验码组成.排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码,三位数字顺序码和一位数字校验码.居民身份证是国家法定的证明公民个人身份的有效证件.二.居民身份证的组成和结构      1.号码的结构      公民身份号码是特征组合码,由十七位数字本

工具类app存亡观察

每一个族群有每一个族群最爱的app,工具型的那种. 文/张书乐 对于模特张美荧来说,"等"字,曾经是她每天最常见的关键词.过去每次为了在网上分享自己的独家美照,她总是要等,等摄影师有空,等天公作美或摄影棚方便:拍完之后,继续等摄影师得空修片--往往这么一轮等待下来,一组新片,往往要一个月的周期才能折腾好. 现在,不用等了.和其他朋友没事吃个饭就拿美颜相机秀进朋友圈不一样,张美荧则是典型的美图手机和美拍双料粉,每天从衣柜里选择几件衣服混搭一下,就拿美图手机架好,调个定时,就能从容的自拍一

汉字转拼音 java 工具类

package qing.huang; import java.io.UnsupportedEncodingException;import java.util.ArrayList;import java.util.Collections;import java.util.HashMap;import java.util.HashSet;import java.util.Iterator;import java.util.LinkedHashMap;import java.util.Set; /

用fastjson框架解析Json数据工具类

在Android应用开发中,APP端与server交互的数据一般是json格式的数据,那么为了方便操作,我们通常会用json解析框架来帮助我们进行数据操作.经常使用的有Gjson和fastjson框架.在项目中用到了fastjson解析数据,当然前提是要准备要对应的jar包工具,把工具类(主要是json数据与实体bean之间的转换操作)贴出来方便以后使用: public class FastJsonTools { /** * 用fastjson 将json字符串解析为一个 JavaBean *

android获取屏幕宽高工具类

import java.lang.reflect.Field; import android.app.Activity; import android.content.Context; import android.graphics.Point; import android.util.DisplayMetrics; import android.view.Display; import android.view.Window; import android.view.WindowManager

为大家提供一个好的时间工具类DateTime

此类的灵感来源于C# 尽管网上有什么date4j,可是jar太纠结了.先给出源代码,能够继承到自己的util包中.作为一个资深程序猿,我相信都有不少好的util工具类,我也希望经过此次分享,能带动技术大牛们能分享出自己的好用的工具类. 先看源代码 /* * 岸思科技开发平台(JAVA) SDK * * Copyright (c) 2014, Ansitech Network Technology Co.,Ltd All rights reserved. * http://www.ansitech

项目ITP(四) javaweb http json 交互 in action (服务端 spring 手机端 提供各种工具类)勿喷!

前言 系列文章:[传送门] 洗了个澡,准备写篇博客.然后看书了.时间 3 7 分.我慢慢规律生活,向目标靠近.  很喜欢珍惜时间像叮当猫一样 正文 慢慢地,二维码实现签到将要落幕了.下篇文章出二维码实现签到 这次 我们实现 javaweb http json 交互 in action 题目很长,但我想让你们看下,给我点意见. 开始吧 实战 本次以经典的登录作为案例.登录做的好也是经典. 服务端 和 app端,服务端简略,app端详细介绍... 服务端 资料: <spring> @Respons

JAVA 邮件发送工具类

1.封装邮件接收地址MODEL和邮件信息MODEL package com.sicdt.jnzxgzc.common.mail.model; import java.io.Serializable; /** * * <br>类 名: MailAddress * <br>描 述: InternetAddress的封装类 * <br>作 者: shizhenwei * <br>创 建: 2017年8月4日 * <br>版 本: v1.0.0 * &l

数组 工具类 Arrays API

Arrays 数组工具类 public class Arrays extends Object 1 1 1 public class Arrays extends Object 此类包含用来操作数组(比如排序和搜索)的各种方法.此类还包含一个允许将数组作为列表来查看的静态工厂. 除非特别注明,否则如果指定数组引用为 null,则此类中的方法都会抛出 NullPointerException. 此类是 Java Collections Framework 的成员. asList 方法 static