Android: ошибка идентификатора продавца Paypal как недействительные учетные данные

#android #paypal

#Android #paypal

Вопрос:

Я новичок в Android и выполнил интеграцию paypal с использованием идентификатора песочницы, но когда я использую производственную среду, она выйдет из строя и выйдет, и когда я проверю logcat, я получу сообщение об ошибке, как показано ниже

 06-18 07:09:40.221: W/DefaultRequestDirector(3943): Authentication error: Unable to respond to any of these challenges: {}
06-18 07:09:40.591: W/paypal.sdk(3943): aa SN:35 PayPal Debug-ID: 7d7a3da2bf9aa [live, 2.2.2;release]
06-18 07:09:40.591: E/paypal.sdk(3943): request failure with http statusCode:401,exception:org.apache.http.client.HttpResponseException: Unauthorized
06-18 07:09:40.641: E/paypal.sdk(3943): request failed with server response:{"error":"invalid_client","error_description":"The client credentials are invalid"}
06-18 07:09:40.641: E/PayPalService(3943): invalid_client
  

Но идентификатор клиента, который я использую в этом приложении, является правильным, но я получаю сообщение об ошибке при использовании идентификатора
производства. Кто-нибудь может сказать мне, почему это происходит и как работает paypal SDK

код paypal

 package com.coded.sandeep;

import java.math.BigDecimal;
import java.util.StringTokenizer;

import org.json.JSONException;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;

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; 
public class PaypalActivity extends Activity {


    private static final String CONFIG_ENVIRONMENT = PayPalConfiguration.ENVIRONMENT_PRODUCTION;

    // note that these credentials will differ between live amp; sandbox environments.
    private static final String CONFIG_CLIENT_ID = "AfZKkxA3Detdl4CgpOKoDMUVTSn3VHq633qkQp_F5hL520589653";


    private static PayPalConfiguration config = new PayPalConfiguration()
    .environment(CONFIG_ENVIRONMENT)
    .clientId(CONFIG_CLIENT_ID);

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

        Intent intent = new Intent(PaypalActivity.this, PayPalService.class);

        intent.putExtra(PayPalService.EXTRA_PAYPAL_CONFIGURATION, config);

        startService(intent);
    }

    public void onBuyPressed(View pressed) {

        PayPalPayment thingToBuy = getThingToBuy(PayPalPayment.PAYMENT_INTENT_SALE);

        Intent intent = new Intent(PaypalActivity.this, PaymentActivity.class);

        intent.putExtra(PaymentActivity.EXTRA_PAYMENT, thingToBuy);

        startActivityForResult(intent, 0);

    }

     private PayPalPayment getThingToBuy(String paymentIntent) {

        Intent intent1 = getIntent();

        String message = "people"
        String amount = "1.26"



        return new PayPalPayment(new BigDecimal(amount), "GBP", message,
                paymentIntent);

    }

    @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("paymentExample", confirm.toJSONObject().toString(4));
                } catch (JSONException e) {
                    Log.e("paymentExample", "an extremely unlikely failure occurred: ", e);
                }
            }
        }
        else if (resultCode == Activity.RESULT_CANCELED) {
            Log.i("paymentExample", "The user canceled.");
        }
        else if (resultCode == PaymentActivity.RESULT_EXTRAS_INVALID) {
            Log.i("paymentExample", "An invalid payment was submitted. Please see the docs.");
        }
    }

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

Я выполняю интеграцию Paypal для приложения Android, но когда я использовал ENVIRONMENT_PRODUCTION и добавил live id, который я создал в PayPal, я добавил, Config_client_id но после добавления моего приложения происходит сбой и появляется ошибка «идентификатор продавца недействителен» как я могу это исправить Я опубликовал кодниже я использую его.

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

Комментарии:

1. @Rutvij может ли u, пожалуйста, сказать, что не так с идентификатором клиента

Ответ №1:

Попробуйте полный код, и идентификатор sanbox или идентификатор клиента отличаются:-

     import java.io.StringReader;
    import java.math.BigDecimal;
    import java.util.ArrayList;
    import java.util.List;

    import org.json.JSONException;
    import org.xmlpull.v1.XmlPullParser;
    import org.xmlpull.v1.XmlPullParserFactory;

    import android.app.Activity;
    import android.app.Dialog;
    import android.app.ProgressDialog;
    import android.content.Context;
    import android.content.Intent;
    import android.graphics.drawable.Drawable;
    import android.os.AsyncTask;
    import android.os.Bundle;
    import android.text.Html;
    import android.util.Log;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.view.Window;
    import android.view.WindowManager;
    import android.widget.AdapterView;
    import android.widget.AdapterView.OnItemSelectedListener;
    import android.widget.ArrayAdapter;
    import android.widget.Button;
    import android.widget.ImageButton;
    import android.widget.RelativeLayout;
    import android.widget.Spinner;
    import android.widget.TextView;
    import android.widget.Toast;

    import com.actionbarsherlock.app.ActionBar;
    import com.actionbarsherlock.app.SherlockActivity;
    import com.actionbarsherlock.view.MenuItem;
    import com.coloruapp.model.utilities.Constant;
    import com.paypal.android.sdk.payments.PayPalAuthorization;
    import com.paypal.android.sdk.payments.PayPalConfiguration;
    import com.paypal.android.sdk.payments.PayPalFuturePaymentActivity;
    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;

    public class PayPalMainActivity extends Activity implements OnClickListener{

        /*
         * - Set to PaymentActivity.ENVIRONMENT_PRODUCTION to move real money.
         * 
         * - Set to PaymentActivity.ENVIRONMENT_SANDBOX to use your test credentials from
         * https://developer.paypal.com
         * 
         * - Set to PayPalConfiguration.ENVIRONMENT_NO_NETWORK to kick the tires without communicating
         * to PayPal's servers.
         */
        private static final String CONFIG_ENVIRONMENT = PayPalConfiguration.ENVIRONMENT_PRODUCTION;

        // note that these credentials will differ between live amp; sandbox environments.


        private static final String CONFIG_CLIENT_ID = "Your client id";        //Live Id


        private static final int REQUEST_CODE_PAYMENT = 1;
        private static final int REQUEST_CODE_FUTURE_PAYMENT = 2;


        private static PayPalConfiguration config;


        final Context context = this;

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


              config = new PayPalConfiguration()
             .environment(CONFIG_ENVIRONMENT)
             .clientId(CONFIG_CLIENT_ID)
             // The following are only used in PayPalFuturePaymentActivity.
             .merchantName("Your Merchent Name")
             .defaultUserEmail("Your Email id")
             .languageOrLocale("Your set Language");
             //.merchantPrivacyPolicyUri(Uri.parse("https://www.example.com/privacy"))
             //.merchantUserAgreementUri(Uri.parse("https://www.example.com/legal"));




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


        public void onBuyPressed(View pressed) {
            // change PAYMENT_INTENT_SALE to PAYMENT_INTENT_AUTHORIZE to only authorize payment and capture funds later.
            PayPalPayment thingToBuy = new PayPalPayment(new BigDecimal(String.valueOf(1.26)), "GBP", "people",
                PayPalPayment.PAYMENT_INTENT_AUTHORIZE);

            Intent intent = new Intent(PayPalMainActivity.this, PaymentActivity.class);

            intent.putExtra(PaymentActivity.EXTRA_PAYMENT, thingToBuy);

            startActivityForResult(intent, REQUEST_CODE_PAYMENT);
        }

        public void onFuturePaymentPressed(View pressed) {
            Intent intent = new Intent(PayPalMainActivity.this, PayPalFuturePaymentActivity.class);

            startActivityForResult(intent, REQUEST_CODE_FUTURE_PAYMENT);
        }

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


                            Toast.makeText(PayPalMainActivity.this, "Payment Successful. You will receive an email shortly", Toast.LENGTH_SHORT).show();



                        } catch (JSONException e) {
                            //Log.e("paymentExample", "an extremely unlikely failure occurred: ", e);
                        }
                    }
                } else if (resultCode == Activity.RESULT_CANCELED) {
                    Log.i("paymentExample", "The user canceled.");
                } else if (resultCode == PaymentActivity.RESULT_EXTRAS_INVALID) {
                    Log.i("paymentExample", "An invalid Payment was submitted. Please see the docs.");
                }
            } else if (requestCode == REQUEST_CODE_FUTURE_PAYMENT) {
                if (resultCode == Activity.RESULT_OK) {
                    PayPalAuthorization auth = data
                            .getParcelableExtra(PayPalFuturePaymentActivity.EXTRA_RESULT_AUTHORIZATION);
                    if (auth != null) {
                        try {
                            Log.i("FuturePaymentExample", auth.toJSONObject().toString(4));

                            String authorization_code = auth.getAuthorizationCode();
                            Log.i("FuturePaymentExample", authorization_code);

                            sendAuthorizationToServer(auth);
                            Toast.makeText(getApplicationContext(), "Future Payment code received from PayPal",
                                    Toast.LENGTH_LONG).show();

                        } catch (JSONException e) {
                            Log.e("FuturePaymentExample", "an extremely unlikely failure occurred: ", e);
                        }
                    }
                } else if (resultCode == Activity.RESULT_CANCELED) {
                    Log.i("FuturePaymentExample", "The user canceled.");
                } else if (resultCode == PayPalFuturePaymentActivity.RESULT_EXTRAS_INVALID) {
                    Log.i("FuturePaymentExample",
                            "Probably the attempt to previously start the PayPalService had an invalid PayPalConfiguration. Please see the docs.");
                }
            }
        }

        private void sendAuthorizationToServer(PayPalAuthorization authorization) {

            // TODO:
            // Send the authorization response to your server, where it can exchange the authorization code
            // for OAuth access and refresh tokens.
            //
            // Your server must then store these tokens, so that your server code can execute payments
            // for this user in the future.

        }

        public void onFuturePaymentPurchasePressed(View pressed) {
            // Get the Application Correlation ID from the SDK
            String correlationId = PayPalConfiguration.getApplicationCorrelationId(this);

            Log.i("FuturePaymentExample", "Application Correlation ID: "   correlationId);

            // TODO: Send correlationId and transaction details to your server for processing with
            // PayPal...
            Toast.makeText(getApplicationContext(), "App Correlation ID received from SDK",
                    Toast.LENGTH_LONG).show();
        }

        @Override
        public void onDestroy() {
            // Stop service when done
            stopService(new Intent(this, PayPalService.class));
            super.onDestroy();
        }



    }
  

xml-код:-

 <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="#161616"
    android:orientation="vertical" >


        <ImageButton
            android:id="@ id/buyItBtn"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:onClick="onBuyPressed" />
    </LinearLayout>



</LinearLayout>
  

Комментарии:

1. Через секунду я проверю и сообщу вам @Rutvij

2. Это то же самое @Rutvij Та же ошибка недопустимый клиент

3. Это сообщение автоматически помечается как низкое качество, потому что это всего лишь код. Не могли бы вы расширить его, добавив текст, объясняющий, как он решает проблему?

4. @gung уверен, что я это сделаю