收藏
回答

微信jsapi统一下单接口,返回401

在本地请求可以请求通过获取预付单id,服务器上获取的参数通过postman请求可以成功获取预付单id,但是服务器上请求一直不行。请问一下是什么原因

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

3 个回答

  • 陈兴国-冷链智联网
    陈兴国-冷链智联网
    2022-05-26

    你好,现在我也遇到类似的问题,请问怎么处理的

    2022-05-26
    有用
    回复
  • 北望沣渭
    北望沣渭
    2021-05-10

    401是服务器端验签失败,即Authorization的签名值不对;另外401的时候,其实服务端是有返回jsonstring的,建议调试时把responseBody打印出来,应该可以佐证Authorization不对的提示信息。

    2021-05-10
    有用
    回复 10
    • xh
      xh
      2021-05-10
      但是我拼接的 Authorization的签名值 把他通过postman 请求可以跑通,可以获取值。请问一下是为什么呢
      2021-05-10
      回复
    • xh
      xh
      2021-05-10
      还有我本地跑程序获取值 是可以获取到的,也不会报401异常
      2021-05-10
      回复
    • 北望沣渭
      北望沣渭
      2021-05-10回复xh
      建议排查一下服务器上的证书
      2021-05-10
      回复
    • xh
      xh
      2021-05-10
      能具体说一下是什么证书吗,TLS的吗?
      2021-05-10
      回复
    • 北望沣渭
      北望沣渭
      2021-05-10回复xh
      不是tsl的,是从商户平台下载的商户证书及商户私钥,Authorization是用私钥签名的,感觉你这个是私钥没配好的吧 https://pay.weixin.qq.com/wiki/doc/apiv3/wechatpay/wechatpay4_0.shtml
      2021-05-10
      回复
    查看更多(5)
  • xh
    xh
    2021-05-10
    public String post(String url, String data, String authorization) {
       StringBuilder sb = new StringBuilder();
       try {
          URL _url = new URL(url);
          if (url.toLowerCase().contains("https://")) {
             HttpsHandler httpsH = new HttpsHandler();
             httpsH.trustAllHttpsCertificates();
             HostnameVerifier hv = new HostnameVerifier() {
                @Override
                public boolean verify(String urlHostName, SSLSession session) {
                   return true;
                }
             };
             HttpsURLConnection.setDefaultHostnameVerifier(hv);
             HttpsURLConnection sconn = (HttpsURLConnection) _url
                   .openConnection();
    
             sconn.setRequestMethod("POST");
             sconn.setDoInput(true);
             sconn.setDoOutput(true);
             //application/x-www-form-urlencoded application/json
             sconn.setRequestProperty("Content-Type", "application/json");
             sconn.setRequestProperty("Accept", "application/json");
    
             sconn.setRequestProperty("Authorization", authorization);
             //往服务器端写内容
               if(null!=data){
                   OutputStream os=sconn.getOutputStream();
                   os.write(data.getBytes());
                   os.close();
               }
               
               //读取服务器端返回的内容
               InputStream is=sconn.getInputStream();
               InputStreamReader isr=new InputStreamReader(is,"utf-8");
               BufferedReader br=new BufferedReader(isr);
               String line=null;
               while((line=br.readLine())!=null){
                   sb.append(line);
               }
          }
       } catch (Exception e) {
          e.printStackTrace();
    
       }
       return sb.toString();
    }
    

    80 行报错调用的方法

    2021-05-10
    有用
    回复
登录 后发表内容