2016-05-24 3 views
0

Я интегрирую Stripe в приложение для Android. Я нашел два вопроса, и я застрял.Stripe payment gateway in android

Первый (и главный) выпуск - У меня есть ключ-ключ от информации о карте. Но когда я попытался сделать свой первый заряд, он показывает ошибку в следующей строке.

Stripe.apiKey = "sk_test_0000000000000"; 

У меня также есть googled, но не удалось найти решение.

Creating Stripe Customer - cannot resolve symbol apiKey

Я даже видел такой вопрос тоже. Но я не понял его решения.

Ниже мой код для создания заряда:

final String publishableApiKey = BuildConfig.DEBUG ? 
      "pk_test_000000000000000000" : 
      //"sk_test_00000000000000000000000" : 
      getString(R.string.com_stripe_publishable_key); 

    final TextView cardNumberField = (TextView) findViewById(R.id.cardNumber); 
    final TextView monthField = (TextView) findViewById(R.id.month); 
    final TextView yearField = (TextView) findViewById(R.id.year); 
    TextView cvcField = (TextView) findViewById(R.id.cvc); 

    Card card = new Card(cardNumberField.getText().toString(), 
      Integer.valueOf(monthField.getText().toString()), 
      Integer.valueOf(yearField.getText().toString()), 
      cvcField.getText().toString()); 

    Stripe stripe = new Stripe(); 
    stripe.createToken(card, publishableApiKey, new TokenCallback() { 
     public void onSuccess(Token token) { 
      // TODO: Send Token information to your backend to initiate a charge 
      Toast.makeText(
        getApplicationContext(), 
        "Charge Token created: " + token.getId(), 
        Toast.LENGTH_LONG).show(); 


      /*make a charge starts*/ 

      // Set your secret key: remember to change this to your live secret key in production 
      // Create the charge on Stripe's servers - this will charge the user's card 
      Stripe.apiKey = "sk_test_0000000000000000000000"; 
      try { 
       Map<String, Object> chargeParams = new HashMap<String, Object>(); 
       chargeParams.put("amount", 100); // amount in cents, again 
       chargeParams.put("currency", "usd"); 
       chargeParams.put("source", token.getId()); 
       chargeParams.put("description", "Example charge"); 

       Charge charge = Charge.create(chargeParams); 
       System.out.println("Charge Log :" + charge); 
      } catch (CardException e) { 
       // The card has been declined 
      } catch (APIException e) { 
       e.printStackTrace(); 
      } catch (AuthenticationException e) { 
       e.printStackTrace(); 
      } catch (InvalidRequestException e) { 
       e.printStackTrace(); 
      } catch (APIConnectionException e) { 
       e.printStackTrace(); 
      } 

      /*charge ends*/ 
     } 

Я попробовал эту коду из различных примеров. Я тоже следовал за Доктором.

Но я получил эту ошибку:

com.stripe.exception.AuthenticationException: No API key provided. (HINT: set your API key using 'Stripe.apiKey = '.

Второй проблемой является - о проверке. Если я ввожу свои собственные данные о карте, и если я напишу неправильный номер cvv. Он по-прежнему генерирует ключ токена.

Я уже реализовал проверку полей, используя официальный документ Stripe. Я не знаю, как проверить его с данными в реальном времени.

Решение для первого выпуска:

com.stripe.Stripe.apiKey = "sk_test_xxxxxxxxxxxxxxxxxxx"; 
         try { 
          final Map<String, Object> chargeParams = new HashMap<String, Object>(); 
          chargeParams.put("amount", 500); // amount in cents, again 
          chargeParams.put("currency", "usd"); 
          chargeParams.put("source", token.getId()); 
          chargeParams.put("description", "Example charge"); 
          new Thread(new Runnable() { 
           @Override 
           public void run() { 
            Charge charge = null; 
            try { 
             charge = Charge.create(chargeParams); 
            } catch (AuthenticationException e) { 
             e.printStackTrace(); 
            } catch (InvalidRequestException e) { 
             e.printStackTrace(); 
            } catch (APIConnectionException e) { 
             e.printStackTrace(); 
            } catch (CardException e) { 
             e.printStackTrace(); 
            } catch (APIException e) { 
             e.printStackTrace(); 
            } 
            System.out.println("Charge Log :" + charge); 
           } 
          }).start(); 

         } catch (Exception e) { 
          e.printStackTrace(); 
         } 
+0

@halfer - Спасибо за редактирование. –

+0

heya. Стоимость заряда = null; как импортировать Зарядка. Нет библиотеки для оплаты –

ответ

1

привязок Android Stripe только позволяют разметить информацию о карте. После того, как маркер был создан, он должен быть отправлен на внешний сервер, где вы можете использовать его в запросах API.

Вы не можете использовать токен непосредственно из приложения, так как приложение никогда не должно иметь доступ к вашему секретному ключу, где его можно было бы легко извлечь злоумышленником, у которого затем был бы доступ к вашей учетной записи.

Re. ваш второй вопрос, карта не проверяется с банком при создании токена (есть еще некоторые основные проверки здравомыслия, такие как проверка количества цифр, тот факт, что дата истечения срока действия в будущем и т. д.). Только когда вы используете маркер в запросе API на стороне сервера, чтобы карта была проверена в банке.

+0

Хорошо. Понял тебя. Но вчера я попробовал, и оплата была выполнена успешно. Хотя это была тестовая учетная запись. –

+0

Я тоже обновил свой вопрос. См. Решение там. И дайте мне знать, если я делаю что-то неправильно. –

+0

Технически возможно выдавать запросы API непосредственно из приложения. Но почти наверняка, если вы это сделаете, кто-то получит ваш секретный ключ API и получит доступ к вашей учетной записи. Вы не должны этого делать, а вместо этого используете внешний сервер. – Ywain

Смежные вопросы