HMacSHA256签名方式
  一:HMacSHA256的代码:
    
package com.huatech.httpapi.common.util;

import com.huatech.httpapi.business.i001.entity.comm.AccessTokenobject;

import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * String传参的HMacSHA256
 */
public class HMacSHA256 {
    private static String Encrypt(String message, String secret) {
        String hash = "";
        try {
            Mac sha256_HMAC = Mac.getInstance("HmacSHA256");
            SecretKeySpec secret_key = new SecretKeySpec(secret.getBytes(), "HmacSHA256");
            sha256_HMAC.init(secret_key);
            byte[] bytes = sha256_HMAC.doFinal(message.getBytes());
            hash = byteArrayToHexString(bytes);
            System.out.println(hash);
        } catch (Exception e) {
            System.out.println("Error HmacSHA256 ===========" + e.getMessage());
        }
        return hash;
    }

    private static String byteArrayToHexString(byte[] b) {
        StringBuilder hs = new StringBuilder();
        String stmp;
        for (int n = 0; b!=null && n < b.length; n++) {
            stmp = Integer.toHexString(b[n] & 0XFF);
            if (stmp.length() == 1)
                hs.append('0');
            hs.append(stmp);
        }
        return hs.toString().toLowerCase();
    }

  二:httpClient请求:

/**
 * @Description: TODO
 * @author: scott
 * @date: 2020年08月14日 15:29
 */
package com.huatech.httpapi.common.util;

import com.huatech.httpapi.business.i001.entity.comm.AccessTokenobject;
import com.huatech.httpapi.business.i001.entity.comm.PublicRequestobject;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.ResponseHandler;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.BasicResponseHandler;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;

import java.io.IOException;
import java.io.InputStream;
import java.nio.charset.Charset;
import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * 是根据当前业务在httpclient的衍生出来的新的
 */
public class HttpHelper {
    public static String HttpPostWithJson(String url, String json) {
        String returnValue = "这是默认返回值,接口调用失败";
        CloseableHttpClient httpClient = HttpClients.createDefault();
        ResponseHandler<String> responseHandler = new BasicResponseHandler();
        try{
            //第一步:创建HttpClient对象
            httpClient = HttpClients.createDefault();
            //第二步:创建httpPost对象
            HttpPost httpPost = new HttpPost(url);
            //第三步:给httpPost设置JSON格式的参数
            StringEntity requestEntity = new StringEntity(json,"UTF-8");
            requestEntity.setContentEncoding("UTF-8");
            httpPost.setHeader("Content-type", "application/json; charset=utf-8");
            httpPost.setEntity(requestEntity);
            //第四步:发送HttpPost请求,获取返回值
            HttpResponse response = httpClient.execute(httpPost);
            //处理请求中文乱码的解决方案
            HttpEntity entity = response.getEntity();
            if (entity != null) {
                InputStream instreams = entity.getContent();
                String str = convertStreamToString(instreams);
                httpPost.abort();
                return str;
            }
        }
        catch(Exception e)
        {
            e.printStackTrace();
        }
        finally {
            try {
                httpClient.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        //第五步:处理返回值
        return returnValue;
    }
    //处理请求中文乱码的解决方法
    private static String convertStreamToString(InputStream is) {
        StringBuilder sb1 = new StringBuilder();
        byte[] bytes = new byte[4096];
        int size = 0;
        try {
            while ((size = is.read(bytes)) > 0) {
                String str = new String(bytes, 0, size, "UTF-8");
                sb1.append(str);
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                is.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return sb1.toString();
    }



    //测试51接口的参数
    public static void main(String[] args) throws Exception {
        HMacSHA256 aMacSHA256 = new HMacSHA256();
        Class cls=Class.forName("com.huatech.httpapi.common.util.HMacSHA256");
        String url ="https://digi.aisino.com/accessToken/v1.0/get";
        PublicRequestobject p = new PublicRequestobject();
        p.setInterfaceCode("51.formatfile.build");
        p.setSpanId("");

        p.setDatagram("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");
        p.setZipCode("0");
        p.setEncryptCode("2");
       // p.setSignature();

        p.setAccess_token("c35756480b5c6a542d7ea0a0065d56ce2643c56012ba71201311a3c208ed5050");


    }
}

  

  三:测试申请身份令牌:

 public static void main(String[] args) {
        String url ="https://digi.aisino.com/accessToken/v1.0/get";
        AccessTokenobject atko = new AccessTokenobject();
        atko.setUserName("HLJTEST1");
        atko.setTaxpayerId("500102191212027426");
        atko.setTerminalId("1");
        atko.setSigntype("HMacSHA256");
        atko.setAuthorizationCode(HMacSHA256.Encrypt("Y4SKNBXECE","53244473").toUpperCase());
        atko.setTimestamp(new SimpleDateFormat("yyyyMMddHHmmss").format(new Date()).toString());
        atko.setSignature(HMacSHA256.Encrypt(atko.getUserName()+atko.getTaxpayerId()+atko.getTerminalId()+atko.getSigntype()+atko.getAuthorizationCode()+atko.getTimestamp(),"53244473").toUpperCase());
        //调用接口请求身份令牌
        String s = HttpHelper.HttpPostWithJson(url, JsonUtils.object2Json(atko));
        System.out.println(s);
View Code

四:JSON处理工具类

import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import net.sf.json.JSONArray;
import net.sf.json.JSONObject;

import org.jdom.Document;
import org.jdom.Element;
import org.jdom.input.SAXBuilder;
import org.jdom.output.XMLOutputter;

import com.fasterxml.jackson.databind.ObjectMapper;


public class JsonUtils {
    public static int PRETTY_PRINT_INDENT_FACTOR = 4;
    /**
     * <p>
     * 对象转JSON字符串
     * </p>
     *
     */
    public static String object2Json(Object obj) {
        String result = null;
        try {
            ObjectMapper objectMapper = new ObjectMapper();
            result = objectMapper.writeValueAsString(obj);
        } catch (IOException e) {
            e.printStackTrace();
        }
        return result;
    }
    
    /**
     * <p>
     * JSON字符串转Map对象
     * </p>
     *
     */
    public static Map<?, ?> jsonToMap(String json) {
        return json2Object(json, Map.class);
    }
    
    /**
     * <p>
     * JSON转Object对象
     * </p>
     * @author xul
     *
     */
    public static <T> T json2Object(String json, Class<T> cls) {
        T result = null;
        try {
            ObjectMapper objectMapper = new ObjectMapper();
            result = objectMapper.readValue(json, cls);
        } catch (IOException e) {
            e.printStackTrace();
        }
        
        return result;
    }
    
    /**
     * <p>
     * </p>
     * @author xul
     * @version V1.0
     */
    public static <T> T conveterObject(Object srcObject, Class<T> destObjectType) {
        String jsonContent = object2Json(srcObject);
        return json2Object(jsonContent, destObjectType);
    }
    
    /**
     * <p>
     * xml转json
     * </p>
     * @author xul
     * @version V1.0
     */
    public static  String xmlToJSON(String xml) {
        JSONObject obj = new JSONObject();
        try {
            InputStream is = new ByteArrayInputStream(xml.getBytes("utf-8"));
            SAXBuilder sb = new SAXBuilder();
            Document doc = sb.build(is);
            Element root = doc.getRootElement();
            Map map=iterateElement(root);
           obj.put(root.getName(),map);
           return obj.toString();
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }
    
    /**
     * <p>
     * json转xml
     * </p>
     * @author xul
     * @version V1.0
     * @date 2018年05月03日 下午17:26:02
     * @param obj
     * @return
     */
    public static  String JsonToXml(Object json)
    {
        if(json==null){
            return null;
        }else{
         Element elements=new Element("return");
         getXMLFromObject(json,"return",elements);
         XMLOutputter xmlOut = new XMLOutputter();
         String res=xmlOut.outputString(elements);
         return res;
       }
    }
    
    private static Map  iterateElement(Element root) {
        List childrenList = root.getChildren();
        Element element = null;
        Map map = new HashMap();
        List list = null;
        for (int i = 0; i < childrenList.size(); i++) {
            list = new ArrayList();
            element = (Element) childrenList.get(i);
            if(element.getChildren().size()>0){
                if(root.getChildren(element.getName()).size()>1){
                    if (map.containsKey(element.getName())) {
                        list = (List) map.get(element.getName());
                    }
                    list.add(iterateElement(element));
                    map.put(element.getName(), list);
                }else{
                    map.put(element.getName(), iterateElement(element));
                }
            }else {
                if(root.getChildren(element.getName()).size()>1){
                    if (map.containsKey(element.getName())) {
                        list = (List) map.get(element.getName());
                    }
                    list.add(element.getTextTrim());
                    map.put(element.getName(), list);
                }else{
                    map.put(element.getName(), element.getTextTrim());
                }
            }
        }
        return map;
    }
  
    private static void getXMLFromObject(Object obj,String tag,Element parent)
    {
        if(obj==null)
            return;
        Element child;
        String eleStr;
        Object childValue;
        if(obj instanceof JSONObject)
        {
            JSONObject jsonObject=(JSONObject)obj;
            for(Object temp:jsonObject.keySet())
            {
                eleStr=temp.toString();
                childValue=jsonObject.get(temp);
                child=new Element(eleStr);
                if(childValue instanceof JSONArray)
                    getXMLFromObject(childValue,eleStr,parent);
                else{
                    parent.addContent(child);
                    getXMLFromObject(childValue,eleStr,child);
                }
            }
        }else if(obj instanceof JSONArray){
            JSONArray jsonArray=(JSONArray)obj;
            for(int i=0;i<jsonArray.size();i++)
            {
                childValue=jsonArray.get(i);
                child=new Element(tag);
                parent.addContent(child);
                getXMLFromObject(childValue,tag,child);
            }
        }else if(obj instanceof Date){
            SimpleDateFormat sf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            parent.setText(sf.format((Date)obj));
        }else{
            parent.setText(obj.toString());
        }
    }
}
View Code

相关文章: