收藏
回答

微信支付 获取商务密钥失败?



这个密钥到底要怎么弄,有没有详细的指导文档,证书下载的密钥里面---BEGIN ENCRYPTED PRIVATE KEY -- 为啥微信给我指导文档都是---BEGIN PRIVATE KEY --


回答关注问题邀请回答
收藏

1 个回答

  • Memory (私信不回复)
    Memory (私信不回复)
    2021-04-22

    示例代码你如果用不了,你可以用官方提供的SDK

    附:微信V3接口响应返回“平台私钥解密失败”解决方法

    https://developers.weixin.qq.com/community/develop/doc/000eec863c8df887b0db292355b409


    2021-04-22
    有用
    回复 7
    • 芃
      2021-04-22
      @Before
      public void setup() throws IOException {
          // 加载商户私钥(privateKey:私钥字符串)
          PrivateKey merchantPrivateKey = PemUtil
                  .loadPrivateKey(new ByteArrayInputStream(privateKey.getBytes("utf-8")));
       
          // 加载平台证书(mchId:商户号,mchSerialNo:商户证书序列号,apiV3Key:V3密钥)
          AutoUpdateCertificatesVerifier verifier = new AutoUpdateCertificatesVerifier(
                  new WechatPay2Credentials(mchId, new PrivateKeySigner(mchSerialNo, merchantPrivateKey)),apiV3Key.getBytes("utf-8"));
       
          // 初始化httpClient
          httpClient = WechatPayHttpClientBuilder.create()
                  .withMerchant(mchId, mchSerialNo, merchantPrivateKey)
                  .withValidator(new WechatPay2Validator(verifier)).build();
      }
       
      @After
      public void after() throws IOException {
          httpClient.close();
      }
      商户私钥(privateKey:私钥字符串)这个是否是api证书里面的apiclient_key.pem
      2021-04-22
      回复
    • Memory (私信不回复)
      Memory (私信不回复)
      发表于小程序端
      2021-04-22回复

      是的

      2021-04-22
      回复
    • 芃
      2021-04-22
      /**
        * 获取私钥。
        *
        * @param filename 私钥文件路径 (required)
        * @return 私钥对象
        */
      public static PrivateKey getPrivateKey(String filename) throws IOException {


        String content = new String(Files.readAllBytes(Paths.get(filename)), "utf-8");
        try {
          String privateKey = content.replace("-----BEGIN PRIVATE KEY-----", "")
              .replace("-----END PRIVATE KEY-----", "")
              .replaceAll("\\s+", "");


          KeyFactory kf = KeyFactory.getInstance("RSA");
          return kf.generatePrivate(
              new PKCS8EncodedKeySpec(Base64.getDecoder().decode(privateKey)));
        } catch (NoSuchAlgorithmException e) {
          throw new RuntimeException("当前Java环境不支持RSA", e);
        } catch (InvalidKeySpecException e) {
          throw new RuntimeException("无效的密钥格式");
        }
      }
      调用这个方法提示失败。我看了下api证书里面的apiclient_key.pem的包含-----BEGIN ENCRYPTED PRIVATE KEY----- 和官网提示方法里面不一样-----BEGIN PRIVATE KEY-----   就是最上面一张我本地调用报错的图。api证书里面的apiclient_key.pem还需要做什么特殊处理的么
      2021-04-22
      回复
    • Memory (私信不回复)
      Memory (私信不回复)
      2021-04-22回复
      你是最新的CA证书吗?
      2021-04-22
      回复
    • 芃
      2021-04-22
      刚不久申请的
      2021-04-22
      回复
    查看更多(2)
登录 后发表内容