android android-studio paypal android-volley access-token

Cómo obtener Access Token paypal en android



android-studio android-volley (3)

Esto funcionó para mí, el problema era con la seguridad de la conexión de red, así que cambié mi wifi, y funciona perfectamente bien

Esa fue la razón por la que estaba recibiendo este error

NoConnectionError: javax.net.ssl.SSLHandshakeException: Connection closed by peer

CÓDIGO

HttpClient httpclient = new DefaultHttpClient(); HttpPost httppost = new HttpPost("https://api.sandbox.paypal.com/v1/oauth2/token"); try { String text="CLIENT ID"+":"+"SECRET ID"; byte[] data = text.getBytes("UTF-8"); String base64 = Base64.encodeToString(data, Base64.NO_WRAP); httppost.addHeader("content-type", "application/x-www-form-urlencoded"); httppost.addHeader("Authorization", "Basic " + base64); StringEntity se=new StringEntity("grant_type=client_credentials"); httppost.setEntity(se); // Execute HTTP Post Request HttpResponse response = httpclient.execute(httppost); String responseContent = EntityUtils.toString(response.getEntity()); Log.d("Response", responseContent ); } catch (ClientProtocolException e) { // TODO Auto-generated catch block } catch (IOException e) { // TODO Auto-generated catch block }

Estoy usando paypal SDK en mi proyecto, puedo hacer pagos desde mi aplicación, pero no puedo obtener el access token después del pago.

Este es miResultado de actividad

@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == REQUEST_CODE_PAYMENT) { if (resultCode == Activity.RESULT_OK) { PaymentConfirmation confirm = data.getParcelableExtra(PaymentActivity.EXTRA_RESULT_CONFIRMATION); if (confirm != null) { try { Log.i(TAG, confirm.toJSONObject().toString(4)); Log.i(TAG, confirm.getPayment().toJSONObject().toString(4)); /** * TODO: send ''confirm'' (and possibly confirm.getPayment() to your server for verification * or consent completion. * See https://developer.paypal.com/webapps/developer/docs/integration/mobile/verify-mobile-payment/ * for more details. * * For sample mobile backend interactions, see * https://github.com/paypal/rest-api-sdk-python/tree/master/samples/mobile_backend */ displayResultText("PaymentConfirmation info received from PayPal"); new DownloadLink().execute(); } catch (JSONException e) { Log.e(TAG, "an extremely unlikely failure occurred: ", e); } }

Así es como trato de obtener el token de acceso

class DownloadLink extends AsyncTask<Void, Void, Void> { @Override protected Void doInBackground(Void... params) { // TODO Auto-generated method stub HttpClient httpclient = new DefaultHttpClient(); HttpPost httppost = new HttpPost("https://api.sandbox.paypal.com/v1/oauth2/token"); try { String text="AUDZWiH7HHihjLqUT3....."+":"+"EDx-t8O2h1......."; byte[] data = text.getBytes("UTF-8"); String base64 = Base64.encodeToString(data, Base64.NO_WRAP); httppost.addHeader("content-type", "application/x-www-form-urlencoded"); httppost.addHeader("Authorization", "Basic " + base64); StringEntity se=new StringEntity("grant_type=client_credentials"); httppost.setEntity(se); // Execute HTTP Post Request HttpResponse response = httpclient.execute(httppost); String responseContent = EntityUtils.toString(response.getEntity()); Log.d("Response", responseContent ); } catch (ClientProtocolException e) { // TODO Auto-generated catch block } catch (IOException e) { // TODO Auto-generated catch block } //Do Your stuff here.. return null; } }

También utilicé con volly y CURL

public void getaccesstokens() { String clientID="AUDZWiH7H........."; String clientSecret="EDx-t8O2h1....."; String text=clientID+":"+clientSecret; byte[] data = new byte[0]; try { data = text.getBytes("UTF-8"); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } final String base64 = Base64.encodeToString(data, Base64.NO_WRAP); StringRequest postRequest=new StringRequest(Request.Method.POST,"https://api.sandbox.paypal.com/v1/oauth2/token",new Response.Listener<String>() { @Override public void onResponse(String response) { Log.d("accessToken:", response); } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError volleyError) { Log.d("error:",volleyError.toString()); } }){ @Override protected Map<String, String> getParams() throws AuthFailureError { Map<String,String> params=new HashMap<String,String>(); params.put("grant_type","client_credentials"); params.put("Authorization", "Basic "+base64); return params; } @Override public Map<String, String> getHeaders() throws AuthFailureError { Map<String,String> headers=new HashMap<String,String>(); headers.put("Accept","application/json"); headers.put("Accept-Language","en_US"); headers.put("Content-Type","application/x-www-form-urlencoded"); return headers; } }; postRequest.setRetryPolicy(new DefaultRetryPolicy(60000, DefaultRetryPolicy.DEFAULT_MAX_RETRIES, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT)); Volley.newRequestQueue(Testones.this).add(postRequest); }

El uso de Volly muestra este error en mi logcat

D/error:﹕ com.android.volley.NoConnectionError: javax.net.ssl.SSLHandshakeException: Connection closed by peer


Prueba esto:

Dictionary<string, string> sdkConfig = new Dictionary<string, string>(); sdkConfig.Add("mode", "sandbox"); string clientid = "<your client id>"; string secretid = "<your secret id>"; string accessToken = new OAuthTokenCredential(clientid, secretid, sdkConfig).GetAccessToken();

para referencia.