PayPal Android: принятие платежа по PayPal / кредитной карте


пример

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

Полный код приложения для этого примера доступен в репозитарии Gigub для разработчиков PayPal Developer .

Давайте начнем.

Первым шагом является получение и добавление SDK в ваш проект . Мы добавляем ссылку на наши зависимости build.gradle, например:

dependencies {
    compile 'com.paypal.sdk:paypal-android-sdk:2.14.1'
    ...
}

Теперь мы перейдем к нашему файлу MainActivity.java (или там, где вы хотите добавить интеграцию с кнопкой PayPal), и добавьте в объект config наш идентификатор клиента и среду (песочницу), которую мы будем использовать.

private static PayPalConfiguration config = new PayPalConfiguration()
    .environment(PayPalConfiguration.ENVIRONMENT_SANDBOX)
    .clientId("YOUR CLIENT ID");

Теперь мы создадим кнопку в нашем onCreate(...) , который позволит нам обрабатывать платеж через PayPal после щелчка.

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

    final Button button = (Button) findViewById(R.id.paypal_button);
}

Теперь нам нужно определить функциональность этой кнопки. В вашем файле res> layout> main XML вы можете добавить следующее определение для кнопки, которое будет определять текст и обработчик onClick для кнопки с идентификатором paypal_button.

<Button android:id="@+id/paypal_button"
    android:layout_height="wrap_content"
    android:layout_width="wrap_content"
    android:text="@string/paypal_button"
    android:onClick="beginPayment" />

При нажатии кнопки будет вызываться метод beginPayment(...) . Затем мы можем добавить текст для кнопки в наш файл strings.xml, например:

<string name="paypal_button">Pay with PayPal</string>

С помощью кнопки на месте мы теперь должны обрабатывать нажатие кнопки, чтобы начать обработку платежа. Добавьте следующий beginPayment(...) ниже нашего предыдущего onCreate(...) .

public void beginPayment(View view){
    Intent serviceConfig = new Intent(this, PayPalService.class);
    serviceConfig.putExtra(PayPalService.EXTRA_PAYPAL_CONFIGURATION, config);
    startService(serviceConfig);

    PayPalPayment payment = new PayPalPayment(new BigDecimal("5.65"), 
        "USD", "My Awesome Item", PayPalPayment.PAYMENT_INTENT_SALE);

    Intent paymentConfig = new Intent(this, PaymentActivity.class);
    paymentConfig.putExtra(PayPalService.EXTRA_PAYPAL_CONFIGURATION, config);
    paymentConfig.putExtra(PaymentActivity.EXTRA_PAYMENT, payment);
    startActivityForResult(paymentConfig, 0);
}

Мы здесь делаем настройку сервиса ( serviceConfig ), используя config которую мы определили ранее для нашего идентификатора клиента и среды песочницы. Затем мы указываем объект платежа, который мы хотим обработать. Для этого примера мы устанавливаем статическую цену, валюту и описание. В конечном приложении эти значения должны быть получены из того, что пользователь пытается купить в приложении. Наконец, мы установили paymentConfig , добавив в него как config и payment объекты, которые мы ранее определили, и запустите paymentConfig .

На этом этапе пользователю будут представлены экраны входа и оплаты PayPal, позволяющие им выбирать, оплачивать ли PayPal или кредитную карту (с помощью ручного ввода или card.io, если камера доступна). Этот экран будет выглядеть примерно так:

Экран подтверждения платежа PayPal

После этого мы должны иметь обработчик, готовый к тому, когда PayPal перенаправляет пользователя обратно в приложение после подтверждения оплаты или отмены. Давайте переопределим onActivityResult(...) для этой цели.

@Override
protected void onActivityResult (int requestCode, int resultCode, Intent data){
    if (resultCode == Activity.RESULT_OK){
        PaymentConfirmation confirm = data.getParcelableExtra(
            PaymentActivity.EXTRA_RESULT_CONFIRMATION);
        if (confirm != null){
            try {
                Log.i("sampleapp", confirm.toJSONObject().toString(4));

                // TODO: send 'confirm' to your server for verification

            } catch (JSONException e) {
                Log.e("sampleapp", "no confirmation data: ", e);
            }
        }
    } else if (resultCode == Activity.RESULT_CANCELED) {
        Log.i("sampleapp", "The user canceled.");
    } else if (resultCode == PaymentActivity.RESULT_EXTRAS_INVALID) {
        Log.i("sampleapp", "Invalid payment / config set");
    }
}

В onActivityResult(...) мы проверяем, возвращается ли resultCode , RESULT_OK (пользовательская оплата), RESULT_CANCELED (аннулированный пользовательский платеж) или RESULT_EXTRAS_INVALID (возникла проблема с конфигурацией). В случае действительного подтверждения мы получаем объект, который возвращается из платежа, и в этом примере зарегистрируйте его. То, что будет возвращено нам, должно выглядеть примерно так:

{
    "client": {
        "environment": "sandbox",
        "paypal_sdk_version": "2.14.1",
        "platform": "Android",
        "product_name": "PayPal-Android-SDK"
    },
    "response": {
        "create_time": "2016-05-02T15:33:43Z",
        "id": "PAY-0PG63447RB821630KK1TXGTY",
        "intent": "sale",
        "state": "approved"
    },
    "response_type": "payment"
}

Если мы посмотрим на объект response , мы увидим, что у нас есть state approved , что означает, что платеж был подтвержден. На этом этапе этот объект должен быть отправлен на ваш сервер, чтобы подтвердить, что платеж действительно прошел. Дополнительные сведения об этих шагах см. В этих документах .

Наш последний шаг - очистка в нашем onDestroy(...) .

@Override
public void onDestroy(){
    stopService(new Intent(this, PayPalService.class));
    super.onDestroy();
}

Вот и все. В этом примере мы создали простую кнопку для обработки платежа с помощью PayPal или кредитной карты. С этого момента вам предстоит несколько следующих шагов по расширению этого примера:

  • Динамическое beginPayment(...) информации о платежах на основе выбора пользовательского продукта в beginPayment(...) .
  • Отправка подтверждения платежа на ваш сервер и подтверждение того, что платеж действительно прошел.
  • Обработка ошибок и случаев аннулирования пользователя в приложении.