与第三方公司对接java后端接口的代码整理---很常用,基本上都是这个规则

欢迎加群:854228077。
帮助更多java程序员提升技术!资料多,大佬多!

最近,在做支付功能的第三方接口对接工作
这里发现接口都有个共同点
1,需要秘钥
2,传参方式相同 : API采用 HTTPS 协议进行数据传输,数据传输格式统一为JSON。
3,返参方式 : API处理完成交易后,以 JSON 数据格式将交易结果信息反馈给请求方。

于是,我把这块代码整理总结了下:

/**
	* @Description: 通过这个接口获取身份标识
	* @DateTime: 2019/10/31 10:00
	* @Params: [request, response, authCode:授权码,需要通过接口获取,我这边是通过js前端获取传过来,但是不同业务操作不同]
	* @Return java.lang.Object
	*/
    @RequestMapping(value = "/getUserId.do")
    @ResponseBody
    public Object getAlibabaUserId(HttpServletRequest request,HttpServletResponse response,String authCode){
        JSONObject data=new JSONObject();
        data.put("flag","0");
        String timestamp = String.valueOf(new Date().getTime() / 1000);
        String client_code="**";
        String scope="***";
        String app_key="**********************";	// 正式域名配套使用
        String sign=getSignValue(timestamp,client_code,authCode,scope,app_key);
        /*封装成json格式数据*/
        Map<String,Object> mapData =new HashMap<String, Object>();
        mapData.put("time", Integer.parseInt(timestamp));
        mapData.put("client_code", client_code);
        mapData.put("scope", scope);
        mapData.put("auth_code", authCode);
        mapData.put("sign", sign);
        JSONObject jsonData = new JSONObject(mapData);

        /*正式环境地址*/
        String VeryStarURL="https://xxxxxxxxxxxxxxxxxxxxxx";
        //发起http后端请求
        HttpResponse responseByFR= HttpRequest.post(VeryStarURL)
                .header("Content-Type","application/json")
                .body(jsonData.toString())
                .execute();
        StringBuffer jsonResult = new StringBuffer();
        //解析请求接口返回的结果
        try {
            BufferedReader tBufferedReader = new BufferedReader(new InputStreamReader(responseByFR.bodyStream()));
            String sTempOneLine = new String("");
            while ((sTempOneLine = tBufferedReader.readLine()) != null){
                jsonResult.append(sTempOneLine);
            }
        JSONObject  paramJson = JSONObject.parseObject(jsonResult.toString());
        Map<String,Object> map = (Map<String,Object>)paramJson;
        if(Integer.parseInt(map.get("ttt").toString())==200){
            JSONObject  dataJson = JSONObject.parseObject(map.get("data").toString());
            Map<String,Object> dataMap = (Map<String,Object>)dataJson;
            data.put("flag","1");
            data.put("rrr",dataMap.get("rrr"));
        }
        } catch (IOException e) {
            e.printStackTrace();
        }
	    return data;
    }
    
    /**
    * @Description: 获取sign
    * @DateTime: 2019/10/31 10:05
    * @Params: [time, client_code, auth_code, scope, app_secret]
    * @Return java.lang.String
    */
    public static String getSignValue(String time,String client_code,String auth_code,String scope,String app_key){
		//这块代码逻辑各个公司不同,处于信息安全,我给省略了。
		String stringSignTemp="mmmm";
		String signValue=getSHA256(stringSignTemp);
        return signValue;
    }

    /**
    * @Author: pan_zhongjian
    * @Description: 利用java原生的类实现SHA256加密
    * @DateTime: 2019/10/31 10:05
    * @Params: [str] 加密后的报文
    * @Return java.lang.String
    */
    public static String getSHA256(String str) {
        MessageDigest messageDigest;
        String encodestr = "";
        try {
            messageDigest = MessageDigest.getInstance("SHA-256");
            messageDigest.update(str.getBytes("UTF-8"));
            encodestr = byte2Hex(messageDigest.digest());
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
        return encodestr;
    }

    /**
    * @Description: 将byte转为16进制
    * @DateTime: 2019/10/31 10:05
    * @Params: [bytes]
    * @Return java.lang.String
    */
    private static String byte2Hex(byte[] bytes) {
        StringBuffer stringBuffer = new StringBuffer();
        String temp = null;
        for (int i = 0; i < bytes.length; i++) {
            temp = Integer.toHexString(bytes[i] & 0xFF);
            if (temp.length() == 1) {
                // 1得到一位的进行补0操作
                stringBuffer.append("0");
            }
            stringBuffer.append(temp);
        }
        return stringBuffer.toString();
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值