import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;
import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.util.*;
import java.util.Map; public class order {
private static String create_order(String ip, String merchantId, String key, String payWay, String amount)
throws NoSuchAlgorithmException, InvalidKeyException, IOException {
// url参数
Map<String, Object> url_map = new TreeMap<String, Object>();
url_map.put("merchantId", merchantId);
url_map.put("signatureMethod", "HmacSHA256");
url_map.put("signatureVersion", "1");
url_map.put("timestamp", System.currentTimeMillis()); // url参数拼接
StringBuilder url_data = new StringBuilder();
for (Map.Entry<String, Object> url :url_map.entrySet()) {
url_data.append(url.getKey()).append("=").append(url.getValue()).append("&");
}
url_data = new StringBuilder(url_data.substring(0, url_data.length() - 1));
// System.out.println(url_data); // body参数
Map<String, Object> body_map = new TreeMap<String, Object>();
body_map.put("jUserId", "666666");
body_map.put("jUserIp", "110.110.110.110");
body_map.put("jOrderId", Long.toString(System.currentTimeMillis()));
body_map.put("orderType", "1");
body_map.put("payWay", payWay);
body_map.put("amount", amount);
body_map.put("currency", "CNY");
body_map.put("jUserName", "奥里给");
body_map.put("notifyUrl", "https://test.com"); // 全部参数
Map<String, Object> all_map = new TreeMap<String, Object>();
all_map.putAll(url_map);
all_map.putAll(body_map); // 参数拼接
StringBuilder all_data = new StringBuilder();
for (Map.Entry<String, Object> url :all_map.entrySet()) {
all_data.append(url.getKey()).append("=").append(url.getValue()).append("&");
} all_data = new StringBuilder(all_data.substring(0, all_data.length() - 1));
// System.out.println("data:" + all_data); // HmacSHA256加密
Mac sha256_HMAC = Mac.getInstance("HmacSHA256");
SecretKeySpec secret_key = new SecretKeySpec(key.getBytes(StandardCharsets.UTF_8), "HmacSHA256");
sha256_HMAC.init(secret_key);
byte[] array = sha256_HMAC.doFinal(all_data.toString().getBytes(StandardCharsets.UTF_8));
StringBuilder sec = new StringBuilder();
for (byte item : array) {
sec.append(Integer.toHexString((item & 0xFF) | 0x100), 1, 3);
}
String signature_data = sec.toString().toUpperCase();
System.out.println("signature:" + signature_data); String URL = ip + "?" + url_data + "&signature=" + signature_data;
System.out.println("url:" + URL);
HttpPost httppost = new HttpPost(URL); // 请求body参数拼接
StringBuilder list_data = new StringBuilder();
for (Map.Entry<String, Object> m :body_map.entrySet()) {
list_data.append(m.getKey()).append("=").append(m.getValue()).append("&");
}
list_data = new StringBuilder(list_data.substring(0, list_data.length() - 1));
System.out.println("data:" + list_data); // 创建订单-发送请求
StringEntity entity = new StringEntity(list_data.toString(), "utf-8");
entity.setContentEncoding("UTF-8");
entity.setContentType("application/x-www-form-urlencoded");
httppost.setEntity(entity);
HttpClient httpClient = new DefaultHttpClient();
HttpResponse response = httpClient.execute(httppost);
String strResult = EntityUtils.toString(response.getEntity());
System.out.println("result:" + strResult + "\t");
httppost.releaseConnection(); return strResult;
} public static void main(String[] args) throws Exception {
create_order("https://test.com", "merchantId",
"key", "pay", "666");
}
}

java键对值SHA256加密接口请求的更多相关文章

  1. 接口自动化:HttpClient + TestNG + Java(四) - 封装和测试post方法请求

    在上一篇中,我们对第一个自动化接口测试用例做了初步优化和断言,这一篇我们处理POST请求. 4.1 发送POST方法请求 post方法和get方法是我们在做接口测试时,绝大部分场景下要应对的主要方法. ...

  2. 【转】js生成接口请求参数签名加密

    js生成接口请求参数签名加密 签名算法规则: 第一步,设所有发送或者接收到的数据为集合M,将集合M内非空参数值的参数按照参数名ASCII码从小到大排序(字典序),使用URL键值对的格式(即key1=v ...

  3. C#、Java和JS实现SHA256+BASE64加密总结

    C#.Java和JS实现SHA256+BASE64加密总结 --莫非(www.muphy.me) 原理 首先,通过编码格式(UTF-8.ASCII等,如果含有汉字等字符,编码格式不同加密结果也不同)获 ...

  4. C# 动态创建SQL数据库(二) 在.net core web项目中生成二维码 后台Post/Get 请求接口 方式 WebForm 页面ajax 请求后台页面 方法 实现输入框小数多 自动进位展示,编辑时实际值不变 快速掌握Gif动态图实现代码 C#处理和对接HTTP接口请求

    C# 动态创建SQL数据库(二) 使用Entity Framework  创建数据库与表 前面文章有说到使用SQL语句动态创建数据库与数据表,这次直接使用Entriy Framwork 的ORM对象关 ...

  5. SpringBoot整合knife4j框架(可生成离线接口文档),并设置接口请求头token默认值

    功能和swagger类似 官网地址:https://doc.xiaominfo.com/knife4j/ 这个框架可以设置返回字段的描述 引入依赖 <dependency> <gro ...

  6. SpringBoot整合Swagger框架 ,并设置接口请求头token默认值

      引入maven依赖 <!-- swagger2--> <dependency> <groupId>io.springfox</groupId> &l ...

  7. Android(java)学习笔记105:Map集合的遍历之键值对对象找键和值

    package cn.itcast_01; import java.util.HashMap; import java.util.Map; import java.util.Set; /* * Map ...

  8. Android(java)学习笔记104:Map集合的遍历之键找值

    package cn.itcast_01; import java.util.HashMap; import java.util.Map; import java.util.Set; /* * Map ...

  9. Java基础知识强化之集合框架笔记53:Map集合之Map集合的遍历 键值对对象找键和值

    1. Map集合的遍历(键值对对象找键和值) Map -- 夫妻对  思路:  A: 获取所有结婚证的集合  B: 遍历结婚证的集合,得到每一个结婚证  C: 根据结婚证获取丈夫和妻子 转换:  A: ...

随机推荐

  1. 基于pcntl的PHP进程池

    想必大家都知道可以通过多进程或者多线程的方式实现异步. PHP多进程编程当前主要有这几种方式, 1>基于pcntl实现多进程,这也是PHP自带的多进程玩法 2>Swoole自己修改PHP内 ...

  2. Uni-app从入门到实战

    前言 uni-app是一个使用vue.js开发跨平台应用的前端框架,开发者只需要编写一套代码,便可以发布到IOS.Android和微信小程序等多个平台.所以我打算学习下这个框架,快速浏览了一遍官网之后 ...

  3. Java引用类型之软引用(2)

    下面接着上一篇介绍第2阶段和第3阶段的处理逻辑. 2.process_phase2() 第2个阶段移除所有的referent还存活的Reference,也就是从refs_list中移除Referenc ...

  4. 使用hexo+github搭建博客

    https://blog.csdn.net/qq_36667170/article/details/105789610这一篇已经写得很详细了,下面的内容是我操作的时候遇到的问题及解决方法. 1.下载N ...

  5. MAC安装Navicat Premiun12

    链接地址:https://blog.csdn.net/wenyicodedog/article/details/97970154

  6. Open MPI 4.0 编译安装

    电脑上目前使用的mpi环境是2.1.1版本的openmpi,是我之前直接使用系统的包管理工具安装的.但是系统包版本一般都比较老旧,现在openmpi最新版已经出到了4.0,即将出4.1了,所以我打算升 ...

  7. CentOS 7环境下大量创建账号的方法

    1 一些账号相关的检查工具 1.1 pwck命令 pwck 这个指令在检查 /etc/passwd 这个账号配置文件内的信息,与实际的家目录是否存在等信息,还可以比对 /etc/passwd /etc ...

  8. 网站更换服务器或IP对排名有影响吗

    http://www.wocaoseo.com/thread-287-1-1.html 网站更换服务器或IP对排名有影响吗 复制代码 百度官方观点:原则上是不会的.除非-新换的服务器太糟糕,三天两头访 ...

  9. 最强云硬盘来了,让AI模型迭代从1周缩短到1天

    摘要:华为云擎天架构+ Flash-Native存储引擎+低时延CurreNET,数据存储和处理还有啥担心的? 虽然我们已经进入大数据时代,但多数企业数据利用率只有10%,数据的价值没有得到充分释放. ...

  10. pyinstaller库的简单使用 打包科赫雪花几何图形

    pyinstaller 简单使用 (cmd命令行) pyinstaller -F <文件名.py> Pyinstaller库常用参数 参数 描述 -h 查看帮助 --clean 清理打包过 ...