🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
## 一、面向对象 面向使用物联网卡的【微服务用户】的管理平台;使用池中池方案的【微服务用户】; ## 二、概述 平台支持提供完整的外部接口方案,让具有开发能力的大客户/代理商自行开发自己的应用(以下简称下行应用),平台提供两方面功能: 1、开放接口服务 通过这个服务,下行应用可以实现卡片的管理、套餐的订购、账号充值等管理功能; 具体参考:[接入指南](%E5%BC%80%E6%94%BE%E5%B9%B3%E5%8F%B0/%E6%8E%A5%E5%85%A5%E6%8C%87%E5%8D%97.md) 2、提供接口平台管理 在卡管理系统中,提供接口平台的用户管理功能,接口平台用户,可以通过该功能,实现卡片的管理、账号充值等; 具体参考: [卡片查询](%E5%BC%80%E6%94%BE%E5%B9%B3%E5%8F%B0/%E5%8D%A1%E7%89%87%E6%9F%A5%E8%AF%A2.md)、[我的套餐](%E5%BC%80%E6%94%BE%E5%B9%B3%E5%8F%B0/%E6%88%91%E7%9A%84%E5%A5%97%E9%A4%90.md)、[账户充值](%E5%BC%80%E6%94%BE%E5%B9%B3%E5%8F%B0/%E8%B4%A6%E6%88%B7%E5%85%85%E5%80%BC.md)、[充值查询](%E5%BC%80%E6%94%BE%E5%B9%B3%E5%8F%B0/%E5%85%85%E5%80%BC%E6%9F%A5%E8%AF%A2.md)、[订购记录](%E5%BC%80%E6%94%BE%E5%B9%B3%E5%8F%B0/%E8%AE%A2%E8%B4%AD%E8%AE%B0%E5%BD%95.md)、[扣费记录](%E5%BC%80%E6%94%BE%E5%B9%B3%E5%8F%B0/%E6%89%A3%E8%B4%B9%E8%AE%B0%E5%BD%95.md) 3、内部营销接口接入 把卡、套餐拨入api用户; 具体参考:[接口接入](%E5%86%85%E9%83%A8%E8%90%A5%E9%94%80/%E6%8E%A5%E5%8F%A3%E6%8E%A5%E5%85%A5%20.md) ## 三、实例代码 签名算法: ``` private static String getParamStringByMap(Map<String, String> paramMap) { TreeMap map = new TreeMap(); for (Map.Entry<String, String> me : paramMap.entrySet()) { if (!me.getKey().equalsIgnoreCase("sign")) { map.put(me.getKey(), me.getValue()); } } return getParamStringByMap(map); } private static String getParamStringByMap(TreeMap<String, String> paramMap) { StringBuilder paramString = new StringBuilder(); for (Map.Entry<String, String> me : paramMap.entrySet()) { paramString.append(me.getKey()).append("=").append(me.getValue()).append("&"); } return paramString.toString().substring(0, paramString.toString().length() - 1); } private static String encodeHex(byte[] bytes) { StringBuffer buf = new StringBuffer(bytes.length * 2); for (int i = 0; i < bytes.length; i++) { if (((int) bytes[i] & 0xff) < 0x10) { buf.append("0"); } buf.append(Long.toString((int) bytes[i] & 0xff, 16)); } return buf.toString(); } public static synchronized String encryptByMD5(String data) { try { MessageDigest digest = MessageDigest.getInstance("MD5"); digest.update(data.getBytes()); return encodeHex(digest.digest()); } catch (NoSuchAlgorithmException nsae) { nsae.printStackTrace(); return null; } } public static String generateSign(Map<String, String> parameterMaps, String appSecret) { String para = getParamStringByMap(parameterMaps); return encryptByMD5(new StringBuilder(encryptByMD5(para)).append(appSecret).toString()); } ``` 调用: ``` static Logger logger = LoggerFactory.getLogger(Sample.class); public static void main(String[] args) { Log4jV2Util.initLog4jV2TestEnv(); String serviceUrl = "http://ip:port/oauth/service/test/validation"; String appId = "s123"; String appSecret = "axbdedgefger"; Map<String, String> paramap = new HashMap(); paramap.put("appId", appId); paramap.put("timeStamp", String.valueOf(new Date().getTime())); paramap.put("sign", Sign.generateSign(paramap, appSecret)); //签名参数放到最后计算再传入 String result = null; try { result = HttpPostUtil.executeAction(serviceUrl, paramap, null); } catch (Exception e) { e.printStackTrace(); } logger.warn(result); } ```