Java微信支付服务商进件V3接口

加密请求敏感参数


 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());
    }

其他获取证书工具官方文档给的有

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java服务商可以代理开发小程序。小程序是一种轻量级的应用,可以在手机上进行使用,具有类似于APP的功能。Java服务商作为技术开发团队,可以帮助企业进行小程序的开发工作。 首先,Java服务商可以根据企业的需求和要求,为其定制开发小程序。他们熟悉Java语言和相关的开发框架,能够根据企业的需求开发出符合其特定需求的小程序。Java语言具有良好的可移植性和可扩展性,可以兼容多个平台,满足不同用户的使用需求。 其次,Java服务商可以提供小程序的后台支持。小程序的后台开发需要涉及到数据库的设计和开发,以及与前端页面的对接等工作。Java服务商具备这方面的技术能力,能够为企业建立和维护小程序的后台系统,确保小程序的正常运行和数据的安全性。 此外,Java服务商可以为企业提供小程序的测试和优化。他们可以对小程序进行全面的测试,检查和修复潜在的问题和bug,确保小程序的质量。同时,他们还可以通过优化代码和性能等方面来提升小程序的用户体验,使其更加流畅和高效。 最后,Java服务商还可以提供小程序的维护和升级服务。小程序的运行过程中可能会出现一些问题,比如服务器故障、性能下降等。Java服务商可以及时进行故障排除和问题修复,保证小程序的正常运行。而且,随着技术的不断发展和用户需求的变化,小程序也需要进行升级和更新。Java服务商可以帮助企业进行小程序的升级,使其与时俱进。 总之,Java服务商可以代理开发小程序,为企业提供一站式的服务,包括小程序的定制开发、后台支持、测试优化和维护升级等方面,帮助企业打造出具有竞争力的小程序,提升企业在移动互联网时代的竞争力。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值