加密请求敏感参数
public String setProvidersParam(Map<String, Object> param,String profilePath) throws Exception {
//获取公共证书
X509Certificate certificate = PayKit.getCertificate(FileUtil.getInputStream(WxPayUtils.publicKeyPath));
JSONObject jsonObject = JSONObject.parseObject(JSONObject.toJSONString(param));
//获取超级管理员信息
String contact_info = jsonObject.getString("contact_info");
JSONObject admin = JSONObject.parseObject(contact_info);
String contact_name = admin.getString("contact_name");
String contact_id_number = admin.getString("contact_id_number");
String mobile_phone = admin.getString("mobile_phone");
String contact_email = admin.getString("contact_email");
//超级管理员账号加密信息
Map<String,String> map = new HashMap<>();
map.put("contact_name",contact_name);
map.put("contact_id_number",contact_id_number);
map.put("mobile_phone",mobile_phone);
map.put("contact_email",contact_email);
Map<String, String> adminRsa = PayKit.batchRsa(map, certificate);
//经营资料
JSONObject subject_info = jsonObject.getJSONObject("subject_info");
//证件信息
JSONObject identity_info = subject_info.getJSONObject("identity_info");
//身份证信息
JSONObject id_card_info = identity_info.getJSONObject("id_card_info");
Map<String,String> id_map = new HashMap<>();
id_map.put("id_card_name",id_card_info.getString("id_card_name"));
id_map.put("id_card_number",id_card_info.getString("id_card_number"));
Map<String, String> map_id_rsa = PayKit.batchRsa(id_map, certificate); //加密
//其他证件
JSONObject id_doc_info = identity_info.getJSONObject("id_doc_info");
Map<String,String> id_doc_info_map = new HashMap<>();
id_doc_info_map.put("id_doc_name",id_doc_info.getString("id_doc_name"));
id_doc_info_map.put("id_doc_number",id_doc_info.getString("id_doc_number"));
Map<String, String> id_doc_info_map_rsa = PayKit.batchRsa(id_doc_info_map, certificate); //加密
//结算银行账户
JSONObject bank_account_info = jsonObject.getJSONObject("bank_account_info");
Map<String,String> bank = new HashMap<>();
bank.put("account_name",bank_account_info.getString("account_name"));
bank.put("account_number",bank_account_info.getString("account_number"));
// Map<String, String> bank_ras = PayKit.batchRsa(bank, certificate);
String business_code = PayKit.generateStr();
//开始微信图片上传
String id_card_copyOld = jsonObject.getJSONObject("subject_info").getJSONObject("identity_info").getJSONObject("id_card_info").getString("id_card_copy");
String id_card_copy = WxPayUtils.uploadWx(profilePath + id_card_copyOld.replace("/profile", "")); //身份证正面
String id_card_nationalOlad = jsonObject.getJSONObject("subject_info").getJSONObject("identity_info").getJSONObject("id_card_info").getString("id_card_national");
String id_card_national = WxPayUtils.uploadWx(profilePath + id_card_nationalOlad.replace("/profile",""));//身份证反面
//json参数
Map<String,Object> paramJson = new HashMap<>();
paramJson.put("business_code",business_code); //唯一编号
Map<String,String> contact_infoMap = new HashMap<>();//超级管理员信息
contact_infoMap.put("contact_name",adminRsa.get("contact_name"));
contact_infoMap.put("contact_id_number",adminRsa.get("contact_id_number"));
contact_infoMap.put("mobile_phone",adminRsa.get("mobile_phone"));
contact_infoMap.put("contact_email",adminRsa.get("contact_email"));
Map<String,Object> subject_infoMap = new HashMap<>(); //主体资料信息
subject_infoMap.put("subject_type",jsonObject.getJSONObject("subject_info").getString("subject_type"));
// subject_infoMap.put("finance_institution",jsonObject.getJSONObject("subject_info").getBooleanValue("finance_institution"));
Map<String,Object> identity_infoMap = new HashMap<>();
identity_infoMap.put("id_doc_type",jsonObject.getJSONObject("subject_info").getJSONObject("identity_info").getString("id_doc_type"));
Map<String,String> id_card_infoMap = new HashMap<>();
id_card_infoMap.put("id_card_name",map_id_rsa.get("id_card_name"));
id_card_infoMap.put("id_card_number",map_id_rsa.get("id_card_number"));
id_card_infoMap.put("card_period_begin",jsonObject.getJSONObject("subject_info").getJSONObject("identity_info").getJSONObject("id_card_info").getString("card_period_begin"));
id_card_infoMap.put("card_period_end",jsonObject.getJSONObject("subject_info").getJSONObject("identity_info").getJSONObject("id_card_info").getString("card_period_end"));
id_card_infoMap.put("id_card_copy",id_card_copy);
id_card_infoMap.put("id_card_national",id_card_national);
identity_infoMap.put("id_card_info",id_card_infoMap);
identity_infoMap.put("owner",true);
subject_infoMap.put("identity_info",identity_infoMap);
Map<String,Object> business_infoMap = new HashMap<>();
business_infoMap.put("merchant_shortname",jsonObject.getJSONObject("business_info").getString("merchant_shortname"));
business_infoMap.put("service_phone",jsonObject.getJSONObject("business_info").getString("service_phone"));
Map<String,Object> sales_infoMap = new HashMap<>();
business_infoMap.put("sales_info",sales_infoMap);
JSONArray jsonArray1 = jsonObject.getJSONObject("business_info").getJSONObject("sales_info").getJSONArray("sales_scenes_type");
String sales_scenes_type = jsonArray1.get(0).toString();
List<String> sales_scenes_typeArr = new ArrayList<>();
for (int i = 0; i < jsonArray1.size(); i++) {
sales_scenes_typeArr.add(jsonArray1.get(i).toString());
}
String[] strings = new String[]{sales_scenes_type};
sales_infoMap.put("sales_scenes_type",JSONObject.toJSON(strings));
if (sales_scenes_type.equals("SALES_SCENES_STORE")){
Map<String,Object> biz_store_infoMap = new HashMap<>();
biz_store_infoMap.put("biz_store_name",jsonObject.getJSONObject("business_info").getJSONObject("sales_info").getJSONObject("biz_store_info").getString("biz_store_name"));
biz_store_infoMap.put("biz_address_code",jsonObject.getJSONObject("business_info").getJSONObject("sales_info").getJSONObject("biz_store_info").getString("biz_address_code"));
biz_store_infoMap.put("biz_store_address",jsonObject.getJSONObject("business_info").getJSONObject("sales_info").getJSONObject("biz_store_info").getString("biz_store_address"));
String store_entrance_picOld = jsonObject.getJSONObject("business_info").getJSONObject("sales_info").getJSONObject("biz_store_info").getString("store_entrance_pic");
String store_entrance_pic = WxPayUtils.uploadWx(profilePath + store_entrance_picOld.replace("/profile", ""));
Threads.sleep(50);
String[] shuzu1 = new String[]{store_entrance_pic};
biz_store_infoMap.put("store_entrance_pic",shuzu1);
String indoor_picOld = jsonObject.getJSONObject("business_info").getJSONObject("sales_info").getJSONObject("biz_store_info").getString("indoor_pic");
String indoor_pic = WxPayUtils.uploadWx(profilePath + indoor_picOld.replace("/profile", ""));
Threads.sleep(50);
String[] shuzu2 = new String[]{indoor_pic};
biz_store_infoMap.put("indoor_pic",shuzu2);
sales_infoMap.put("biz_store_info",biz_store_infoMap);
} else if (sales_scenes_type.equals("SALES_SCENES_MP")) {
Map<String,Object> mp_infoMap = new HashMap<>();
mp_infoMap.put("app_sub_appid",jsonObject.getJSONObject("business_info").getJSONObject("sales_info").getJSONObject("mp_info").getString("app_sub_appid"));
JSONArray app_picsOld = (JSONArray) jsonObject.getJSONObject("business_info").getJSONObject("sales_info").getJSONObject("mp_info").get("app_pics");
List<String> mp_app_prics = new ArrayList<>();
for (int i = 0; i < app_picsOld.size(); i++) {
System.out.println(app_picsOld.get(i));
String path = app_picsOld.get(i).toString();
String s = WxPayUtils.uploadWx(profilePath + path.replace("/profile", ""));
mp_app_prics.add(s);
}
for (String mp_app_pric : mp_app_prics) {
System.out.println(mp_app_pric);
}
mp_infoMap.put("app_pics",JSONObject.toJSONString(mp_app_prics));
sales_infoMap.put("mp_info",mp_infoMap);
} else if(sales_scenes_type.equals("SALES_SCENES_MINI_PROGRAM")){
Map<String,Object> mini_program_infoMap = new HashMap<>();
mini_program_infoMap.put("mini_program_sub_appid",jsonObject.getJSONObject("business_info").getJSONObject("sales_info").getJSONObject("mini_program_info").getString("mini_program_sub_appid"));
JSONArray mini_program_picsOld = (JSONArray) jsonObject.getJSONObject("business_info").getJSONObject("sales_info").getJSONObject("mini_program_info").get("mini_program_pics");
List<String> mini_program_picsList = new ArrayList<>();
for (int i = 0; i < mini_program_picsOld.size(); i++) {
String path = mini_program_picsOld.get(i).toString();
String s = WxPayUtils.uploadWx(profilePath + path.replace("/profile", ""));
mini_program_picsList.add(s);
}
mini_program_infoMap.put("mini_program_pics",mini_program_picsList);
sales_infoMap.put("mini_program_info",mini_program_infoMap);
} else if(sales_scenes_type.equals("SALES_SCENES_APP")){
Map<String,Object> mapInfo = new HashMap<>();
mapInfo.put("app_sub_appid",jsonObject.getJSONObject("business_info").getJSONObject("sales_info").getJSONObject("app_info").getString("app_sub_appid"));
JSONArray jsonArray = jsonObject.getJSONObject("business_info").getJSONObject("sales_info").getJSONObject("app_info").getJSONArray("app_pics");
List<String> app_picsList = new ArrayList<>();
for (int i = 0; i < jsonArray.size(); i++) {
String path = jsonArray.get(i).toString();
String s = WxPayUtils.uploadWx(profilePath + path.replace("/profile", ""));
app_picsList.add(s);
}
mapInfo.put("app_pics",(app_picsList));
sales_infoMap.put("app_info",mapInfo);
} else if(sales_scenes_type.equals("SALES_SCENES_WEB")){
Map<String,Object> web_infoMap = new HashMap<>();
web_infoMap.put("domain",jsonObject.getJSONObject("business_info").getJSONObject("sales_info").getJSONObject("web_info").getString("domain"));
sales_infoMap.put("web_info",web_infoMap);
} else if(sales_scenes_type.equals("SALES_SCENES_WEWORK")){
Map<String,Object> wework_infoMap = new HashMap<>();
wework_infoMap.put("sub_corp_id",jsonObject.getJSONObject("business_info").getJSONObject("sales_info").getJSONObject("wework_info").getString("sub_corp_id"));
sales_infoMap.put("wework_info",wework_infoMap);
}
Map<String,Object> business_license_infoMap = new HashMap<>();
String string = jsonObject.getJSONObject("subject_info").getJSONObject("business_license_info").getString("license_copy");
String s = WxPayUtils.uploadWx(profilePath + string.replace("/profile", ""));
String[] shuzu4 = new String[]{s};
business_license_infoMap.put("license_copy",s);
business_license_infoMap.put("license_number",jsonObject.getJSONObject("subject_info").getJSONObject("business_license_info").getString("license_number"));
business_license_infoMap.put("merchant_name",jsonObject.getJSONObject("subject_info").getJSONObject("business_license_info").getString("merchant_name"));
business_license_infoMap.put("legal_person",jsonObject.getJSONObject("subject_info").getJSONObject("business_license_info").getString("legal_person"));
Map<String,Object> settlement_infoMap = new HashMap<>();
settlement_infoMap.put("settlement_id",jsonObject.getJSONObject("settlement_info").getString("settlement_id"));
settlement_infoMap.put("qualification_type",jsonObject.getJSONObject("settlement_info").getString("qualification_type"));
String qualificationsOld = jsonObject.getJSONObject("settlement_info").getString("qualifications");
String qualifications = WxPayUtils.uploadWx(profilePath + qualificationsOld.replace("/profile", ""));
String[] shuzu3 = new String[]{qualifications};
settlement_infoMap.put("qualifications",shuzu3);
settlement_infoMap.put("activities_id",jsonObject.getJSONObject("settlement_info").getString("activities_id"));
settlement_infoMap.put("activities_rate",jsonObject.getJSONObject("settlement_info").getString("activities_rate"));
Map<String,Object> bank_account_infoMap = new HashMap<>();
bank_account_infoMap.put("bank_account_type",jsonObject.getJSONObject("bank_account_info").getString("bank_account_type"));
Map<String,String> bank_account_infoRSA = new HashMap<>();
bank_account_infoRSA.put("account_name",jsonObject.getJSONObject("bank_account_info").getString("account_name"));
bank_account_infoRSA.put("account_number",jsonObject.getJSONObject("bank_account_info").getString("account_number"));
Map<String, String> stringStringMap = PayKit.batchRsa(bank_account_infoRSA,certificate);
bank_account_infoMap.put("account_name",stringStringMap.get("account_name").toString());
bank_account_infoMap.put("account_bank",jsonObject.getJSONObject("bank_account_info").getString("account_bank"));
bank_account_infoMap.put("bank_address_code",jsonObject.getJSONObject("bank_account_info").getString("bank_address_code"));
bank_account_infoMap.put("bank_name",jsonObject.getJSONObject("bank_account_info").getString("bank_name"));
bank_account_infoMap.put("account_number",stringStringMap.get("account_number"));
subject_infoMap.put("business_license_info",business_license_infoMap);
paramJson.put("contact_info",contact_infoMap);
paramJson.put("subject_info",subject_infoMap);
paramJson.put("business_info",business_infoMap);
paramJson.put("settlement_info",settlement_infoMap);
paramJson.put("bank_account_info",bank_account_infoMap);
return JSONObject.toJSONString(paramJson);
}
发送请求
public Map<String, String> postApplymentV2(String body) throws Exception{
String url = "https://api.mch.weixin.qq.com/v3/applyment4sub/applyment/";
String merchantId = WxPayUtils.merchantId;
String serialNo = WxPayUtils.getSerialNumber();
String token = WeChatUtil.getToken("POST", url, body, merchantId, serialNo);
String authorization = "WECHATPAY2-SHA256-RSA2048 " + token;
HttpPost httpPost = new HttpPost(url);
httpPost.setHeader("Wechatpay-Serial", serialNo);
httpPost.setHeader("Accept", "application/json");
httpPost.setHeader("Content-Type", "application/json");
httpPost.setHeader("user-agent", WeChatUtil.DEFAULT_USER_AGENT);
httpPost.setHeader("Authorization", authorization);
HttpClientBuilder httpClientBuilder = HttpClients.custom();
CloseableHttpClient httpClient = httpClientBuilder.build();
CloseableHttpResponse httpResponse = httpClient.execute(httpPost);
HttpEntity httpResponseEntity = httpResponse.getEntity();
String responseEntityStr = EntityUtils.toString(httpResponseEntity);
httpResponse.close();
JSONObject respJson = JSONObject.parseObject(responseEntityStr);
Map<String, String> respMap = new HashMap<String, String>();
for(Object key : respJson.keySet()) {
respMap.put(key.toString(), respJson.get(key).toString());
}
return respMap;
}
构建请求头签名
/**
* 获取签名
* method(请求类型GET、POST url(请求url)
* body(请求body,GET请求时body传"",POST请求时body为请求参数的json串)
* merchantId(商户号)
* certSerialNo(API证书序列号)
* keyPath(API证书路径)
*
* @param method 请求方式
* @param url 请求路径
* @param body 请求参数
* @param merchantId 商户号
* @param certSerialNo API证书序列号
* @return
* @throws Exception
*/
public static String getToken(String method, String url, String body, String merchantId, String certSerialNo) throws Exception {
String signStr = "";
HttpUrl httpurl = HttpUrl.parse(url);
String nonceStr = UUID.randomUUID().toString().replaceAll("-", "");
long timestamp = System.currentTimeMillis() / 1000;
if (StringUtils.isEmpty(body)) {
body = "";
}
assert httpurl != null;
String message = buildMessage(method, httpurl, timestamp, nonceStr, body);
String signature = sign(message.getBytes(StandardCharsets.UTF_8), privageKeyPaht);
signStr = "mchid=\"" + merchantId
+ "\",nonce_str=\"" + nonceStr
+ "\",timestamp=\"" + timestamp
+ "\",serial_no=\"" + certSerialNo
+ "\",signature=\"" + signature + "\"";
return signStr;
}
public static String buildMessage(String method, HttpUrl url, long timestamp, String nonceStr, String body) {
String canonicalUrl = url.encodedPath();
if (url.encodedQuery() != null) {
canonicalUrl += "?" + url.encodedQuery();
}
return method + "\n"
+ canonicalUrl + "\n"
+ timestamp + "\n"
+ nonceStr + "\n"
+ body + "\n";
}
public static String sign(byte[] message, String keyPath) throws Exception {
Signature sign = Signature.getInstance("SHA256withRSA");
sign.initSign(PayKit.getPrivateKey(WxPayUtils.privageKeyPaht));
sign.update(message);
return Base64.encodeBase64String(sign.sign());
}
其他获取证书工具官方文档给的有
版权声明:本文为weixin_44825409原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。