2017-04-25 1 views
0

j'appelle api pour le paiement de la broche: https://test-api.pin.net.au/1/cards/Okhttp javax.net.ssl.sslexception: connexion fermée par les pairs

J'essaie de postier, il bon travail.

Quand j'applique en code Android avec okhttp 2.7.5

Mon code:

OkHttpClient httpClient = new OkHttpClient();

RequestBody requestBody = new FormEncodingBuilder() 
      .add("publishable_api_key", BuildConfig.PIN_PAYMENT_PUBLISHABLE_KEY) 
      .add("number", scanResult.cardNumber) 
      .add("expiry_month", scanResult.expiryMonth+"") 
      .add("expiry_year", scanResult.expiryYear+"") 
      .add("cvc", scanResult.cvv) 
      .add("address_postcode", scanResult.postalCode) 
      .add("name", name).build(); 


    Request request = new Request.Builder() 
      .url(BuildConfig.BASE_URL_PIN_PAYMENT + Constants.API_CARD_PIN_PAYMENT) 
      .post(requestBody) 
      .build(); 

    httpClient.newCall(request).enqueue(new Callback() { 
     @Override 
     public void onFailure(Request request, IOException e) { 
      view.hideLoading(); 
      view.showError(e.getMessage()); 
     } 

     @Override 
     public void onResponse(Response response) throws IOException { 
      view.hideLoading(); 
      if (!response.isSuccessful()){ 
       String body = "Something went wrong.Please try again later."; 
       try { 
        JSONObject object = new JSONObject(response.body().string()); 
        body = object.getString("error_description"); 
       } catch (JSONException e) { 
        e.printStackTrace(); 
       } 
       view.showError(body); 
      }else { 
       view.hideLoading(); 
       Gson gson = new Gson(); 
       CardPinPaymentResponse paymentResponse = gson.fromJson(response.body().string() , CardPinPaymentResponse.class); 
       view.getTokenCardSuccess(paymentResponse); 
      } 
     } 

    }); 

Mais il ne fonctionne et problème: javax.net.ssl.SSLException: Connexion fermée par les pairs

Répondre

0

Lorsque vous vous connectez à https serveur le OKhttp a besoin de savoir que TLS versions et suites de chiffrement à offrir. Voici l'exemple de code pour se connecter avec https

ConnectionSpec spec = new ConnectionSpec.Builder(ConnectionSpec.MODERN_TLS) 
    .tlsVersions(TlsVersion.TLS_1_2) 
    .cipherSuites(
      CipherSuite.TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256, 
      CipherSuite.TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256, 
      CipherSuite.TLS_DHE_RSA_WITH_AES_128_GCM_SHA256) 
    .build(); 

OkHttpClient client = new OkHttpClient.Builder() 
    .connectionSpecs(Collections.singletonList(spec)) 
    .build(); 

Bonne chance !!!

+0

Merci, mais cela ne fonctionne pas, problème maintenant: Impossible de trouver des protocoles acceptables. isFallback = false, modes = [ConnectionSpec (CipherSuites = [TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256, TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256, TLS_DHE_RSA_WITH_AES_128_GCM_SHA256], tlsVersions = [TLS_1_1], supportsTlsExtensions = true)], les protocoles pris en charge = [SSLv3, TLSv1] –

+0

Il est code exemple. Vous devez savoir quelle version TLS utilise sur votre serveur, puis définir le code client –

+0

J'ai le même problème, et j'essaie aussi la version TLS de mon serveur mais je n'ai trouvé aucune solution pour kitkat, son fonctionnement est correct sur toutes les versions plus grand que kitkat, si vous avez trouvé une solution s'il vous plaît faites le moi savoir aussi –