欢迎加群: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();
}