打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
口袋通api对接


   

       
        分类:
            BAT开放平台
       

    2014-02-13 17:13
    390人阅读
    评论(0)
    收藏
    举报
   



   


由于公司最近要求和口袋通对接微商城,所以用到了口袋通的API,其实和微信开放平台的API很像,那么在上代码之前先说说口袋通吧,口袋通也是随着微信的浪潮诞生自白鸦之手,都是基于微信开放平台,对微信公众账号做二次开发,不过目前口袋通完全免费,和他们对接的过程中,有过一些沟通,反馈挺快的。


  1. /** 
  2.  *  
  3.  * @Description: 口袋通对接工具类 
  4.  * @author zhangJun 
  5.  * @date 2014-1-23 下午1:52:29 
  6.  */  
  7. public class KouDaiTongUtil {  
  8.     public static final String KDT_URL="http://open.koudaitong.com/api/entry";  
  9.     public static final String APP_ID="";  
  10.     public static final String SECRET="";  
  11.     public static final String FORMAT="json"//响应格式  
  12.     public static final String SIGN_METHOD="md5"//参数的加密方法  
  13.     public static final String V="1.0";//API协议版本  
  14.     /** 
  15.      * 通用构造API请求参数 
  16.      * @param appId 在口袋通后台获取 
  17.      * @param format 可选,指定响应格式。默认json,目前支持格式为json 
  18.      * @param method 调用API的接口名称,参照口袋通 
  19.      * @param signMethod 可选,参数的加密方法选择。默认为md5 
  20.      * @param timestamp 时间戳 方法内部会处理成格式为yyyy-mm-dd HH:mm:ss 
  21.      * @param v API协议版本,可选值:1.0 
  22.      * @param paramMap(调用api的参数,key为参数名称,需要和调用口袋通方法参数名称相同,否则调用不成功) 
  23.      * @return 
  24.      * @throws UnsupportedEncodingException 
  25.      */  
  26.     public static String constructParam(String appId,String secret,String format,String method,String signMethod,Date timestamp,String v,Map<String,Object> paramMap) throws UnsupportedEncodingException {  
  27.         String timestampStr=DateUtils.DateToString(timestamp, DateUtils.YYYY_MM_DD_HH_MM_SS);   
  28.         //遵循API对参数进行升序排列  
  29.         Map<String,Object> map=new TreeMap<String,Object>();  
  30.         //通讯系统参数  
  31.         map.put("app_id", appId);  
  32.         map.put("format", format);  
  33.         map.put("method", method);  
  34.         map.put("sign_method", signMethod);  
  35.         map.put("timestamp", timestampStr);  
  36.         map.put("v", v);  
  37.         //应用参数  
  38.         map.putAll(paramMap);  
  39.         StringBuffer systemStr=new StringBuffer();  
  40.         //头加secret  
  41.         systemStr.append(SECRET);  
  42.         Set<Map.Entry<String, Object>> set=map.entrySet();  
  43.         for(Iterator<Map.Entry<String, Object>> it= set.iterator();it.hasNext();){  
  44.             Map.Entry<String, Object> entry=it.next();  
  45.             systemStr.append(entry.getKey()+entry.getValue());  
  46.         }  
  47.         //尾加secret  
  48.         systemStr.append(SECRET);   
  49.         //拼接应用参数      
  50.         Set<Map.Entry<String, Object>> paramSet=paramMap.entrySet();  
  51.         StringBuffer appStr=new StringBuffer();  
  52.         for(Iterator<Map.Entry<String, Object>> it=paramSet.iterator();it.hasNext();){  
  53.             appStr.append("&");  
  54.             Map.Entry<String, Object> entry=it.next();  
  55.             if(containWhiteSpace((String)entry.getValue().toString())){  
  56.                 appStr.append(entry.getKey()+"="+URLEncoder.encode((String)entry.getValue(),"utf-8"));  
  57.             }else{  
  58.                 appStr.append(entry.getKey()+"="+entry.getValue());   
  59.             }  
  60.         }  
  61.         //32位md5加密  
  62.         String sign=Md5CyptoUtil.md5(systemStr.toString());  
  63.         String param="sign="+sign+"×tamp="+URLEncoder.encode(timestampStr,"utf-8")+"&v="+v+"&app_id="+APP_ID+"&method="+method+"&sign_method="+signMethod+"&format="+format+appStr;  
  64.         return param;  
  65.     }  
  66.       
  67.       
  68.     /** 
  69.      *  
  70.      * @param 判断是否包含空字符串 
  71.      * @return 
  72.      */  
  73.     public static boolean containWhiteSpace(String input){  
  74.         Pattern pattern = Pattern.compile("\\s");  
  75.         Matcher matcher = pattern.matcher(input);  
  76.         boolean flag = matcher.find();  
  77.         return flag;  
  78.     }  
  79.     /** 
  80.      * 发送get请求 
  81.      * @param url 
  82.      * @param param 
  83.      * @return 
  84.      */  
  85.     public static String sendGet(String url,String param) {  
  86.         String result = "";  
  87.         BufferedReader in = null;  
  88.         try {  
  89.              String urlNameString = url + "?" + param;  
  90.              URL realUrl = new URL(urlNameString);  
  91.              URLConnection connection = realUrl.openConnection();      
  92.              connection.connect();  
  93.              in = new BufferedReader(new InputStreamReader(  
  94.                     connection.getInputStream()));  
  95.              String line;  
  96.              while ((line = in.readLine()) != null) {  
  97.                 result += line;  
  98.              }  
  99.         } catch (Exception e) {  
  100.             System.out.println("发送GET请求出现异常!" + e);  
  101.             e.printStackTrace();  
  102.         }  
  103.         finally {  
  104.             try {  
  105.                 if (in != null) {  
  106.                     in.close();  
  107.                 }  
  108.             } catch (Exception e2) {  
  109.                 e2.printStackTrace();  
  110.             }  
  111.         }  
  112.         return result;  
  113.     }  
  114.       
  115.     /** 
  116.      * 口袋同通用请求方法返回json字符串 
  117.      * @param method 调用API的接口名称来源KdtMethodListEnum 
  118.      * @param paramMap(调用api的参数,key为参数名称,需要和调用口袋通方法参数名称相同,否则调用不成功) 
  119.      * @return 
  120.      * @throws UnsupportedEncodingException 
  121.      */  
  122.     public static Map<String,Object> sendRequest(String method,Map<String,Object> paramMap) throws UnsupportedEncodingException{  
  123.         Map<String,Object> resultMap=new HashMap<String,Object>();   
  124.         String param = constructParam(APP_ID,SECRET, FORMAT, method, SIGN_METHOD, new Date(), V, paramMap);  
  125.         String reponse= sendGet(KDT_URL,param);  
  126.         JSONObject jsonObject=JSONObject.fromObject(reponse);  
  127.         //请求发生错误  
  128.         if(jsonObject.containsKey("error_response")){  
  129.             int errorCode=Integer.parseInt(JSONObject.fromObject(jsonObject.get("error_response")).get("code").toString());  
  130.             String msg=JSONObject.fromObject(jsonObject.get("error_response")).get("msg").toString();  
  131.             KdtErrorCodeEnum codeEnum=KdtErrorCodeEnum.getKdtErrorCodeEnumByCode(errorCode);  
  132.             resultMap.put("status""FAILED");  
  133.             resultMap.put("message","请求失败,"+msg+",错误码:"+errorCode+"错误名称:"+codeEnum.name+"解决方案:"+codeEnum.scheme);  
  134.         }else{  
  135.             resultMap.put("status""SUCCESS");       
  136.             resultMap.put("result", reponse);  
  137.         }  
  138.         return resultMap;  
  139.     }  
测试方法


  1. /** 
  2.      * 获取交易订单(如果参数都不传就会下拉所有订单) 
  3.      * @param status 订单状态 
  4.      * @param startCreated 订单创建起始时间 
  5.      * @param endCreated 订单创建结束时间 
  6.      * @param startPayDate 支付起始时间 
  7.      * @param endPayDate  支付结束时间 
  8.      * @param buyerNick 昵称 
  9.      * @param pageNo 页数 
  10.      * @param pageSize 每页条数 
  11.      * @return 
  12.      * @throws UnsupportedEncodingException 
  13.      */  
  14.     public  Map<String,Object> getOrderListByCondition(KdtOrderStatusEnum status,Date startCreated,Date endCreated,Date startPayDate,Date endPayDate,String buyerNick,Integer pageNo,Integer pageSize) throws UnsupportedEncodingException{  
  15.         String method=KdtMethodListEnum.KDT_TRADES_SOLD_GET.vlaue; //查询卖家已卖出的交易列表         
  16.         Map<String,Object> paramMap=new HashMap<String,Object>();  
  17.         if(status!=null){  
  18.             paramMap.put("status", status.type);  
  19.         }  
  20.         if(startCreated!=null){  
  21.             paramMap.put("start_created", DateUtils.DateToString(startCreated,DateUtils.YYYY_MM_DD_HH_MM_SS));  
  22.         }  
  23.         if(endCreated!=null){  
  24.             paramMap.put("end_created", DateUtils.DateToString(endCreated,DateUtils.YYYY_MM_DD_HH_MM_SS));  
  25.         }  
  26.         if(startPayDate!=null){  
  27.             paramMap.put("start_pay", DateUtils.DateToString(startPayDate,DateUtils.YYYY_MM_DD_HH_MM_SS));  
  28.         }  
  29.         if(endPayDate!=null){  
  30.             paramMap.put("end_pay", DateUtils.DateToString(endPayDate,DateUtils.YYYY_MM_DD_HH_MM_SS));  
  31.         }  
  32.         if(!StringUtils.isBlank(buyerNick)){  
  33.             paramMap.put("buyer_nick", buyerNick);  
  34.         }  
  35.         if(pageNo!=null){  
  36.             paramMap.put("page_no", pageNo);  
  37.         }  
  38.         if(pageSize!=null){  
  39.             paramMap.put("page_size", pageSize);  
  40.         }  
  41.         Map<String,Object> map=KouDaiTongUtil.sendRequest(method,paramMap);  
  42.         return map;  
  43.     }  
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
高效的找出两个List中的不同元素
Java 最新支付版本 demo 微信支付
HanLP自然语言处理包初步安装与使用
Java构造和解析Json数据的两种方法详解二
JAVA实现的微信扫描二维码支付
Map
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服