Я не могу войти в систему с моим пользователем и пройти с песочницей PayPal - PullRequest
1 голос
/ 08 ноября 2019

Я внедрил песочницу PayPal с соответствующим учебным пособием, все работает отлично, но 1 вещь ... Я не могу войти в свою учетную запись PayPal, используя песочницу, утверждая, что это неправильно, хотя я могу войти с ней на их веб-сайте.

2019-11-08 16:59:33.406 2205-2205/? E/Zygote: isWhitelistProcess - Process is Whitelisted
2019-11-08 16:59:33.407 2205-2205/? E/Zygote: accessInfo : 1
2019-11-08 16:59:47.442 2205-2748/com.capstone.araba E/Camera_APM :: [APM]APM's Thread is started
2019-11-08 16:59:47.443 2205-2748/com.capstone.araba E/Camera_APM :: [APM] This app is forground app
2019-11-08 17:00:05.962 2205-2734/com.capstone.araba E/paypal.sdk: request failure with http statusCode:401,exception:
2019-11-08 17:00:05.963 2205-2734/com.capstone.araba E/paypal.sdk: request failed with server response:{"error":"invalid_user","error_description":"Invalid user credentials"}
2019-11-08 17:00:05.965 2205-2205/com.capstone.araba E/paypal.sdk: invalid_user
2019-11-08 17:00:06.039 2205-2205/com.capstone.araba E/InputMethodManager: prepareNavigationBarInfo() rootView is null
2019-11-08 17:00:06.048 2205-2205/com.capstone.araba E/InputMethodManager: prepareNavigationBarInfo() rootView is null
2019-11-08 17:00:06.155 2205-2205/com.capstone.araba E/ViewRootImpl: sendUserActionEvent() returned.
2019-11-08 17:00:07.009 2205-2205/com.capstone.araba E/ViewRootImpl: sendUserActionEvent() returned.
2019-11-08 17:02:28.358 2205-2205/com.capstone.araba E/RecyclerView: No adapter attached; skipping layout
2019-11-08 17:02:45.879 2205-2205/com.capstone.araba E/RecyclerView: No adapter attached; skipping layout

enter image description here

Это код, который я использовал для реализации PayPal SDK: Я старался изо всех сил, даже могследовал этому руководству на YouTube: https://www.youtube.com/watch?v=k5lPy_50f0Y&t=687s

package com.capstone.araba.config;

public class Config {
    public static final String PAYPAL_CLIENT_ID = "AW_BtWNOeAwHWiSEUeMfrlB395P1GXgCQaB6K29mnBPw46VnqC27kMhZISw4y1hijEv3TLzPtKsK5-T5";
}
package com.capstone.araba;

import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;

import com.capstone.araba.config.Config;
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 com.paypal.android.sdk.payments.PaymentConfirmation;

import java.math.BigDecimal;

public class MembershipActivity extends AppCompatActivity {

    public static final int PAYPAL_REQUEST_ID = 7171;
    private static PayPalConfiguration config = new PayPalConfiguration()
            .environment(PayPalConfiguration.ENVIRONMENT_SANDBOX)
            .clientId(Config.PAYPAL_CLIENT_ID);

    Button bronze, silver, gold;
    TextView b, s, g;
    String amount = "";

    @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_membership);

        Intent intent = new Intent(this, PayPalService.class);
        intent.putExtra(PayPalService.EXTRA_PAYPAL_CONFIGURATION, config);
        startService(intent);

        bronze = findViewById(R.id.bronze);
        silver = findViewById(R.id.silver);
        gold = findViewById(R.id.gold);

        b = findViewById(R.id.b);
        s = findViewById(R.id.s);
        g = findViewById(R.id.g);


        bronze.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                bronzePayment();
            }
        });

        silver.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                silverPayment();
            }
        });

        gold.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                goldPayment();
            }
        });
    }

    private void goldPayment() {
        amount = g.getText().toString();
        PayPalPayment payPalPayment = new PayPalPayment(new BigDecimal(amount), "USD", "Buy the gold membership", PayPalPayment.PAYMENT_INTENT_SALE);

        Intent intent = new Intent(this, PaymentActivity.class);
        intent.putExtra(PayPalService.EXTRA_PAYPAL_CONFIGURATION, config);
        intent.putExtra(PaymentActivity.EXTRA_PAYMENT, payPalPayment);
        startActivityForResult(intent, PAYPAL_REQUEST_ID);
    }

    private void silverPayment() {
        amount = s.getText().toString();
        PayPalPayment payPalPayment = new PayPalPayment(new BigDecimal(amount), "USD", "Buy the silver membership", PayPalPayment.PAYMENT_INTENT_SALE);

        Intent intent = new Intent(this, PaymentActivity.class);
        intent.putExtra(PayPalService.EXTRA_PAYPAL_CONFIGURATION, config);
        intent.putExtra(PaymentActivity.EXTRA_PAYMENT, payPalPayment);
        startActivityForResult(intent, PAYPAL_REQUEST_ID);
    }

    private void bronzePayment() {
        amount = b.getText().toString();
        PayPalPayment payPalPayment = new PayPalPayment(new BigDecimal(amount), "USD", "Buy the bronze membership", PayPalPayment.PAYMENT_INTENT_SALE);

        Intent intent = new Intent(this, PaymentActivity.class);
        intent.putExtra(PayPalService.EXTRA_PAYPAL_CONFIGURATION, config);
        intent.putExtra(PaymentActivity.EXTRA_PAYMENT, payPalPayment);
        startActivityForResult(intent, PAYPAL_REQUEST_ID);

    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == PAYPAL_REQUEST_ID) {
            if (resultCode == RESULT_OK) {
                assert data != null;
                PaymentConfirmation paymentConfirmation = data.getParcelableExtra(PaymentActivity.EXTRA_RESULT_CONFIRMATION);
                if (paymentConfirmation != null) {
                    try {
                        String paymentDetails = paymentConfirmation.toJSONObject().toString(4);
                        startActivity(new Intent(this, PaymentDetails.class)
                                .putExtra("PaymentDetails", paymentDetails)
                                .putExtra("PaymentAmount", amount));

                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            } else if (resultCode == Activity.RESULT_CANCELED) {
                Toast.makeText(this, "Cancel", Toast.LENGTH_SHORT).show();
            }
        } else if (resultCode == PaymentActivity.RESULT_EXTRAS_INVALID) {
            Toast.makeText(this, "Invalid", Toast.LENGTH_SHORT).show();
        }
    }
}
package com.capstone.araba;

import androidx.appcompat.app.AppCompatActivity;

import android.annotation.SuppressLint;
import android.content.Intent;
import android.os.Bundle;
import android.widget.TextView;

import org.json.JSONException;
import org.json.JSONObject;

import java.util.Objects;

public class PaymentDetails extends AppCompatActivity {

    TextView txtId, txtAmount, txtStatus;

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

        txtId = findViewById(R.id.txtId);
        txtAmount = findViewById(R.id.txtAmount);
        txtStatus = findViewById(R.id.txtStatus);

        Intent intent = getIntent();

        try {
            JSONObject jsonObject = new JSONObject(Objects.requireNonNull(intent.getStringExtra("PaymentDetails")));
            showDetails(jsonObject.getJSONObject("Response"), intent.getStringExtra("PaymentAmount"));
        } catch (JSONException e) {
            e.printStackTrace();
        }
    }

    @SuppressLint("SetTextI18n")
    private void showDetails(JSONObject response, String paymentAmount) {
        try {

            txtId.setText(response.getString("id"));
            txtStatus.setText(response.getString("state"));
            txtAmount.setText("AED" + paymentAmount);

        } catch (JSONException e) {
            e.printStackTrace();
        }
    }
}
...