Недопустимый токен Braintree или клиентский в приложении Android - PullRequest
0 голосов
/ 03 марта 2019

Я пытаюсь внедрить тестовые платежи Braintree в приложении для Android.

Я следую учебному пособию, которое должно работать.

Этот код:

public class MainActivity extends AppCompatActivity {

    private static final int REQUEST_CODE = 1234;
    final String API_GET_TOKEN = "https://..main.php";
    final String API_CHECK_OUT = "..checkout.php";
    String token, amount;
    HashMap<String,String> paramsHash;


    Button btn_pay;
    EditText edt_amount;
    LinearLayout group_waiting, group_payment;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        group_waiting = (LinearLayout) findViewById(R.id.waiting_group);
        group_payment = (LinearLayout) findViewById(R.id.payment_group);

        btn_pay = (Button) findViewById(R.id.btn_pay);
        edt_amount = (EditText) findViewById(R.id.amount);

      new  getToken().execute();
      btn_pay.setOnClickListener(new View.OnClickListener() {
          @Override
          public void onClick(View v) {
              submitPayment();
          }
      });

    }

    private void submitPayment() {

        DropInRequest dropInRequest = new DropInRequest().clientToken(token);
        startActivityForResult(dropInRequest.getIntent(this),REQUEST_CODE);
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data){

        if (requestCode == REQUEST_CODE){

            if (resultCode == RESULT_OK){

                DropInResult result = data.getParcelableExtra(DropInResult.EXTRA_DROP_IN_RESULT);
                PaymentMethodNonce nonce = result.getPaymentMethodNonce();
                String strNonce = nonce.getNonce();

                if (!edt_amount.getText().toString().isEmpty()){
                    amount = edt_amount.getText().toString();
                    paramsHash = new HashMap<>();
                    paramsHash.put("amount", amount);
                    paramsHash.put("nonce",strNonce);

                    sendPayments();
                }
                else
                {
                    Toast.makeText(this,"Por favor, introduce un importe correcto.",Toast.LENGTH_LONG).show();
                }
            }
            else if (resultCode == RESULT_CANCELED)
                Toast.makeText(this,"Operación cancelada por el usuario",Toast.LENGTH_LONG).show();
            else
            {
                Exception error = (Exception) data.getSerializableExtra(DropInActivity.EXTRA_ERROR);
                Log.d("EDMT_ERROR",error.toString());
            }
        }


    }

    private void sendPayments() {
        Log.d("EDMT_LOG","esyoy en sendpayment");
        RequestQueue queue = Volley.newRequestQueue(MainActivity.this);

        StringRequest stringRequest = new StringRequest(Request.Method.POST, API_CHECK_OUT,
                new Response.Listener<String>() {
                    @Override
                    public void onResponse(String response) {

                        if (response.toString().contains("Successful"))
                            Toast.makeText(MainActivity.this, "Transacción correcta", Toast.LENGTH_LONG).show();
                        else
                        {
                            Toast.makeText(MainActivity.this,"Error en la transacción",Toast.LENGTH_LONG).show();

                        }
                        Log.d("EDMT_LOG",response.toString());
                    }
                }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                Log.d("EDMT_error",error.toString());

            }

    })
        {
            @Override
            protected Map<String,String> getParams() throws AuthFailureError {
                if (paramsHash == null)
                    return null;
                Map<String, String> params = new HashMap<>();
                for (String key : params.keySet()) {
                    params.put(key, paramsHash.get(key));
                }
                return params;
            }
            @Override
            public Map<String,String> getHeaders() throws AuthFailureError {
                Map<String,String> params = new HashMap<>();
                params.put("Content-Type","application/x-www-form-urlencoded");
                return params;
            }
        };
        queue.add(stringRequest);
    }

    private class getToken extends AsyncTask {

        ProgressDialog mDialog;
        @Override
        protected void onPreExecute(){
            mDialog  = new ProgressDialog(MainActivity.this,android.R.style.Theme_DeviceDefault_Dialog);
            mDialog.setCancelable(false);
            mDialog.setMessage("Por favor, espere");
            mDialog.show();
        }
        @Override
        protected Object doInBackground(Object[] objects) {

            HttpClient client = new HttpClient();
            client.get(API_GET_TOKEN, new HttpResponseCallback() {
                @Override
                public void success(final String responseBody) {
                    runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            group_waiting.setVisibility(View.GONE);
                            group_payment.setVisibility(View.VISIBLE);
                            token = responseBody;
                        }
                    });
                }

                @Override
                public void failure(Exception exception) {

                    Log.d("ERROR EN LA TRANSACCION",exception.toString());

                }
            });
            return null;
        }

        @Override
        protected void onPostExecute(Object o){
            super.onPostExecute(o);

            mDialog.dismiss();

        }

    }
}

Я получаю следующее сообщение об исключении в методе onActivityResult:

com.braintreepayments.api.exceptions.InvalidArgumentException: Tokenization Key or client token was invalid

Я проверил все закрытые, открытые ключи, а также идентификатор среды и продавца.На стороне сервера моего проекта файл main.php генерирует токен, если выполняется непосредственно из браузера.

Пожалуйста, посмотрите на код и скажите, что я делаю неправильно.

РЕДАКТИРОВАТЬ: после нажатия на кнопку оплаты, dropIn не отображается, я думаю, из-за неверного токена.

...