У меня возникли проблемы с приложением, в том числе с платежом через PayPal SDK (используется версия 2.15.3 atm).
Ниже приведен пример кода: он состоит из действия с двумя кнопками. Каждая кнопка инициирует платеж PayPal. В зависимости от того, какую кнопку вы нажимаете, продавец меняется с помощью другого clientID. Пока это работает.
НО: при повторном входе в игру невозможно сменить продавца! (Как только платеж будет завершен, вы будете перенаправлены на MainActivity. То же самое, если вы отмените процесс оплаты, независимо от того, на каком этапе.) Только после перезапуска приложения можно снова выбрать продавца.
Я проверил намерение, но config-extra кажется правильным. Также я пытался работать с «stopService» и «saveInstanceState», но это ничего не изменило. Также проблема все еще возникает с PayPal SDK версии 2.16.0.
MainActivity.java:
package com.example.paypal_client_testapp;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import com.paypal.android.sdk.payments.PayPalConfiguration;
import com.paypal.android.sdk.payments.PayPalPayment;
import com.paypal.android.sdk.payments.PayPalService;
import com.paypal.android.sdk.payments.PaymentActivity;
import java.math.BigDecimal;
public class MainActivity extends AppCompatActivity {
private static final int PAYPAL_REQUEST_CODE = 1234;
public static final String CLIENT_ID_1 = "abcdefghijklmnopqrstuvw_xyzabcdefghijklmnopqrstuvwxyzabcdefghij_klmnopqrstuvwxy1";
public static final String CLIENT_ID_2 = "abcdefghijklmnopqrstuvw_xyzabcdefghijklmnopqrstuvwxyzabcdefghij_klmnopqrstuvwxy2";
@Override
protected void onDestroy(){
stopService(new Intent(this, PayPalService.class));
super.onDestroy();
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button button1 = findViewById(R.id.button1);
Button button2 = findViewById(R.id.button2);
button1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
processPayment(CLIENT_ID_1);
}
});
button2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
processPayment(CLIENT_ID_2);
}
});
}
private void processPayment(String CLIENT_ID) {
int amount = 1;
PayPalConfiguration config = new PayPalConfiguration()
.environment(PayPalConfiguration.ENVIRONMENT_SANDBOX)
.clientId(CLIENT_ID);
PayPalPayment payPalPayment = new PayPalPayment(new BigDecimal(amount), "EUR","myPayment",PayPalPayment.PAYMENT_INTENT_SALE);
Intent intent = new Intent(this, PaymentActivity.class);
intent.putExtra(PayPalService.EXTRA_PAYPAL_CONFIGURATION,config);
intent.putExtra(PaymentActivity.EXTRA_PAYMENT,payPalPayment);
startService(intent);
startActivityForResult(intent,PAYPAL_REQUEST_CODE);
}
}
Пример 1: я запускаю приложение, выбираю merchant / clientID 1, совершаю платеж, возвращаюсь в MainActivity. Теперь я выбираю merchant / clientID 2, делаю оплату. Но ОБА платежи в конечном итоге у продавца 1.
Пример 2. Я запускаю приложение, выбираю merchant / clientID 2, запускаю процесс оплаты, отменяю его (независимо от того, на каком этапе), возвращаюсь в MainActivity. Теперь я выбираю merchant / clientID 1, делаю оплату. Но платеж заканчивается у продавца 2.
В конце пользователь думает, что он заплатил продавцу X, но его деньги заканчиваются у продавца Y.
Есть ли у вас какие-либо предложения / опыт по этой проблеме? Спасибо!
Ура,
dahaoenf