Skip to content
This repository has been archived by the owner on Oct 13, 2022. It is now read-only.

Unexpected response code 400 #4

Closed
Artur512 opened this issue Sep 25, 2018 · 14 comments
Closed

Unexpected response code 400 #4

Artur512 opened this issue Sep 25, 2018 · 14 comments

Comments

@Artur512
Copy link

Hey, Im implementing saving to google pay Loyalty card. Im following tutorial with using the native Android SDK.
zrzut ekranu 2018-09-25 o 14 18 17
After building request and sending by AutoResolverHelper result code is allways 1. In logcat console I have error:

2018-09-25 13:28:58.151 3686-4458/? E/Volley: [51418] BasicNetwork.performRequest: Unexpected response code 400 for https://wallet.google.com/payments/apis/instantbuy/android/v1/createWalletObjects
2018-09-25 13:28:58.156 3686-3699/? E/ServerConnection: Exception sending Volley request
java.util.concurrent.ExecutionException: com.android.volley.ClientError
at com.android.volley.toolbox.RequestFuture.a(:com.google.android.gms@13280019@13.2.80 (040400-211705629):4)
at com.android.volley.toolbox.RequestFuture.get(:com.google.android.gms@13280019@13.2.80 (040400-211705629):1)
at arwj.a(:com.google.android.gms@13280019@13.2.80 (040400-211705629):34)
at arwj.a(:com.google.android.gms@13280019@13.2.80 (040400-211705629):30)
at asph.a(:com.google.android.gms@13280019@13.2.80 (040400-211705629):8)
at aspb.a(:com.google.android.gms@13280019@13.2.80 (040400-211705629):19)
at asfj.a(:com.google.android.gms@13280019@13.2.80 (040400-211705629):5)
at aspa.a(:com.google.android.gms@13280019@13.2.80 (040400-211705629):4)
at aspk.a(:com.google.android.gms@13280019@13.2.80 (040400-211705629):2)
at asou.a(Unknown Source:2)
at asoy.a(:com.google.android.gms@13280019@13.2.80 (040400-211705629):1)
at wwt.a(:com.google.android.gms@13280019@13.2.80 (040400-211705629):3)
at cgv.onTransact(:com.google.android.gms@13280019@13.2.80 (040400-211705629):5)
at asou.onTransact(Unknown Source:0)
at android.os.Binder.transact(Binder.java:622)
at djf.onTransact(:com.google.android.gms@13280019@13.2.80 (040400-211705629):3)
at android.os.Binder.execTransact(Binder.java:692)
Caused by: com.android.volley.ClientError
at com.android.volley.toolbox.BasicNetwork.performRequest(:com.google.android.gms@13280019@13.2.80 (040400-211705629):53)
at pwh.performRequest(:com.google.android.gms@13280019@13.2.80 (040400-211705629):14)
at com.android.volley.NetworkDispatcher.a(:com.google.android.gms@13280019@13.2.80 (040400-211705629):6)
at com.android.volley.NetworkDispatcher.run(:com.google.android.gms@13280019@13.2.80 (040400-211705629):2)

@jonneymendoza
Copy link

Hi i am having the same issue. did you manage to fix this?

@Artur512
Copy link
Author

I'm not solving this issue. Still waiting.

@jonneymendoza
Copy link

damm ok

@trombocit
Copy link

Hi, I have the same problem :(
There are new ideas?
I wrote in support, but they say check query parameters :(

@LOG-TAG
Copy link

LOG-TAG commented Dec 17, 2018

guys got any solution? same problem here SO https://stackoverflow.com/questions/53320259/add-loyalty-card-to-google-pay-via-google-play-services-api, please upvote! is there any way to enable debugging for google wallet api? like someobject.setenablelogging()

  public void saveToAndroid(View view) {
        OfferWalletObject wob = generateOfferWalletObject();
        //CreateWalletObjectsRequest request = new CreateWalletObjectsRequest(wob);

     //           CreateWalletObjectsRequest request = new CreateWalletObjectsRequest.newBuilder().build();
       // request.getOfferWalletObject(wob);

//        CreateWalletObjectsRequest request = CreateWalletObjectsRequest.newBuilder().build();
//        request.getOfferWalletObject(wob);

        CreateWalletObjectsRequest request=   CreateWalletObjectsRequest.newBuilder()

                .setCreateMode(SHOW_SAVE_PROMPT)
                .setOfferWalletObject(wob)
                .build();
        Wallet.WalletOptions walletOptions = new Wallet.WalletOptions.Builder()
                .setTheme(WalletConstants.THEME_LIGHT)
                .setEnvironment(WalletConstants.ENVIRONMENT_PRODUCTION)
                .build();

        walletObjectsClient = Wallet.getWalletObjectsClient(this, walletOptions);
        Task<AutoResolvableVoidResult> task = walletObjectsClient.createWalletObjects(request);
        AutoResolveHelper.resolveTask(task, this, SAVE_TO_ANDROID);
    }

@Inquallity
Copy link

Hi to all. I've successfully implemented app with play-services-wallet library.
Try to check the environment setup for complience with the following list:

Merchant center
  1. Check that all of required fields are filled with relevant data;
  2. Check your loyalty class. Verify Status field value. It must be selected as UNDER_REVIEW (will change automatically to APPROVED after save);
  3. Be sure you've tied google API service account and your Merchant Center. Add it in Share Account settings. Value: sugar-s2w-prod@system.gserviceaccount.com. Can edit;
  4. Note your Issuer Name, Issuer ID, Class ID and Program name.
Application. Wallet request builder
  1. Check your LoyaltyWalletObjectBuilder. Here is example (minimum working version):
//Replace "${something}" with your values noted previously
final LoyaltyWalletObject loyaltyWalletObject = LoyaltyWalletObject.newBuilder()
                .setClassId("${your_issuer_id}.${your_class_id}")
                .setId("${your_issuer_id}.${some_unque_name}")
                .setIssuerName("${your_issuer_name}")
                .setProgramName("${your_program_name}")
                .setState(WalletObjectsConstants.State.ACTIVE)
                .setAccountId("1000") //Your user id
                .setAccountName("John Doe") //User name
                .setBarcodeType("qrCode")
                .setBarcodeValue("Hello world!")
                .build();
Whitelist your app with SHA1 fingerprint

Explained here: https://developers.google.com/pay/passes/guides/get-started/basic-setup/get-access-to-android-sdk#obtain-credentials-to-whitelist-your-app
Then contact Google team via form https://support.google.com/pay/merchants/contact/instore_merchant_support (Technical/API Integration) with request to start whitelisting process. Pass them necessary information: package name and SHA1.
Note: you can whitelist your debug key (for testing purposes) without restrictions.

These key points helped me successfully add a loyalty card to Google Pay from my app.

@hardwayraja
Copy link

package com.google.checkout.android.demo;

public class MainActivity extends FragmentActivity
implements GoogleApiClient.OnConnectionFailedListener {

private static final String TAG = "MainActivity";
public static final int SAVE_TO_ANDROID = 888;

private String ISSUER_ID;
private String LOYALTY_CLASS_ID;
private String LOYALTY_OBJECT_ID;
private String SUCCESS_RESPONSE_TEXT;
private String CANCELED_RESPONSE_TEXT;
private String ERROR_PREFIX_TEXT;

// public static final Scope WOB =
new Scope("https://www.googleapis.com/auth/wallet_object.issuer");

private WalletObjectsClient walletObjectsClient;

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

    ISSUER_ID = getResources().getString(R.string.ISSUER_ID);
    LOYALTY_CLASS_ID = getResources().getString(R.string.LOYALTY_CLASS_ID);
    LOYALTY_OBJECT_ID= getResources().getString(R.string.LOYALTY_OBJECT_ID);
    SUCCESS_RESPONSE_TEXT= getResources().getString(R.string.SUCCESS_RESPONSE_TEXT);
    CANCELED_RESPONSE_TEXT= getResources().getString(R.string.CANCELED_RESPONSE_TEXT);
    ERROR_PREFIX_TEXT = getResources().getString(R.string.ERROR_PREFIX_TEXT);
}

@Override
public void onConnectionFailed(ConnectionResult result) {
    Log.w(TAG, "onConnectionFailed: " + result);
}

public void saveToAndroid(View view) {
    LoyaltyWalletObject wob = generateLoyaltyWalletObject();
    CreateWalletObjectsRequest request = new CreateWalletObjectsRequest(wob);
    Wallet.WalletOptions walletOptions = new Wallet.WalletOptions.Builder()
            .setTheme(WalletConstants.THEME_LIGHT)
            .setEnvironment(WalletConstants.ENVIRONMENT_PRODUCTION)
            .build();

    walletObjectsClient = Wallet.getWalletObjectsClient(this, walletOptions);
    Task<AutoResolvableVoidResult> task = walletObjectsClient.createWalletObjects(request);
    AutoResolveHelper.resolveTask(task, this, SAVE_TO_ANDROID);
   

}

public void onActivityResult(int requestCode, int resultCode, Intent data) {
    EditText textBox = (EditText) findViewById(R.id.s2wResponse);
    switch (requestCode) {
        case SAVE_TO_ANDROID:
            switch (resultCode) {
                case Activity.RESULT_OK:
                    textBox.setText(SUCCESS_RESPONSE_TEXT);
                    break;
                case Activity.RESULT_CANCELED:
                    textBox.setText(CANCELED_RESPONSE_TEXT);
                    break;
                default:
                    int errorCode =
                            data.getIntExtra(
                                    WalletConstants.EXTRA_ERROR_CODE, -1);
                    textBox.setText(ERROR_PREFIX_TEXT + errorCode);
                    break;
            }
    }
}

public LoyaltyWalletObject generateLoyaltyWalletObject() {
    LoyaltyPoints points = LoyaltyPoints.newBuilder()
            .setLabel("Points")
            .setType("points")
            .setBalance(LoyaltyPointsBalance.newBuilder().setString("500").build()).build();
    List textModulesData = new ArrayList();
    TextModuleData textModuleData = new TextModuleData("Jane's Baconrista Rewards",
            "Save more at your local Mountain View store Jane." +
                    " You get 1 bacon fat latte for every 5 coffees purchased." +
                    " Also just for you, 10% off all pastries in the Mountain View store.");
    textModulesData.add(textModuleData);
    List uris = new ArrayList();
    UriData uri1 = new UriData("https://www.hubbell.com","My Hubbell");

// UriData uri1 = new UriData("https://www.hubbell.com",
// "My Hubbell Account");
uris.add(uri1);
List imageUris = new ArrayList();
UriData uri2 = new UriData("https://www.sctsoftware.com/wp-content/uploads/2017/01/customer-logo-hubbell.png", "Image Description");
imageUris.add(uri2);

    List row0cols = new ArrayList();
    LabelValue row0col0 = new LabelValue("Next Reward in", "2 coffees");
    LabelValue row0col1 = new LabelValue("Member Since", "01/15/2013");
    row0cols.add(row0col0);
    row0cols.add(row0col1);
    List row1cols = new ArrayList();
    LabelValue row1col0 = new LabelValue("Local Store", "Mountain View");
    row1cols.add(row1col0);
    List rows = new ArrayList();
    LabelValueRow row0 = LabelValueRow.newBuilder().addColumns(row0cols).build();
    LabelValueRow row1 = LabelValueRow.newBuilder().addColumns(row1cols).build();
    rows.add(row0);
    rows.add(row1);
    List messages = new ArrayList();
    WalletObjectMessage message = WalletObjectMessage.newBuilder()
            .setHeader("Hi Prasanth!")
            .setBody("Thanks for joining our program. Show this message to " +
                    "our hubbell for your checkout!")
            .build();
    messages.add(message);
    LatLng location = new LatLng(37.422601, -122.085286);
    List locations = new ArrayList();
    locations.add(location);
    LoyaltyWalletObject wob = LoyaltyWalletObject.newBuilder()
            .setClassId(ISSUER_ID+"."+LOYALTY_CLASS_ID)
            .setId(ISSUER_ID+"."+LOYALTY_OBJECT_ID)
            .setState(WalletObjectsConstants.State.ACTIVE)
            .setAccountId("1234")
            .setAccountName("Hubbell Incorporated")
            .setIssuerName("Test")
            .setProgramName("Test")
            .setLoyaltyPoints(points)
            .addTextModulesData(textModulesData)
            .addLinksModuleDataUris(uris)
            .addInfoModuleDataLabelValueRows(rows)
            .addImageModuleDataMainImageUris(imageUris)
            .addMessages(messages)
            .addLocations(locations)
            .build();
    return wob;
}

}

@hardwayraja
Copy link

Above one is my code, i am getting error code:-1. I have whitelisted the app and included service account in merchant center also. But still i am getting the same error code. Can you please someone help me out?

@hardwayraja
Copy link

Hi trombocit,

Now i am getting the below error.

E/Volley: [352] BasicNetwork.performRequest: Unexpected response code 400 for https://wallet.google.com/payments/apis/instantbuy/android/v1/createWalletObjects
2019-06-04 16:07:23.682 5614-5985/? E/ServerConnection: Exception sending Volley request
java.util.concurrent.ExecutionException: com.android.volley.ClientError
at com.android.volley.toolbox.RequestFuture.a(:com.google.android.gms@17455022@17.4.55 (040700-248795830):4)
at com.android.volley.toolbox.RequestFuture.get(:com.google.android.gms@17455022@17.4.55 (040700-248795830):1)
at axkv.a(:com.google.android.gms@17455022@17.4.55 (040700-248795830):17)
at axkv.a(:com.google.android.gms@17455022@17.4.55 (040700-248795830):13)
at ayei.a(:com.google.android.gms@17455022@17.4.55 (040700-248795830):9)
at axjq.a(Unknown Source:1)
at ayec.a(:com.google.android.gms@17455022@17.4.55 (040700-248795830):16)
at axuj.a(:com.google.android.gms@17455022@17.4.55 (040700-248795830):4)
at ayed.a(:com.google.android.gms@17455022@17.4.55 (040700-248795830):4)
at ayen.a(:com.google.android.gms@17455022@17.4.55 (040700-248795830):2)
at aydx.a(Unknown Source:2)
at ayeb.a(Unknown Source:19)
at aahy.a(:com.google.android.gms@17455022@17.4.55 (040700-248795830):1)
at cwc.onTransact(:com.google.android.gms@17455022@17.4.55 (040700-248795830):4)
at aydx.onTransact(:com.google.android.gms@17455022@17.4.55 (040700-248795830):1)
at android.os.Binder.transact(Binder.java:627)
at edn.onTransact(:com.google.android.gms@17455022@17.4.55 (040700-248795830):3)
at android.os.Binder.transact(Binder.java:627)
at aaiz.onTransact(:com.google.android.gms@17455022@17.4.55 (040700-248795830):25)
at android.os.Binder.execTransact(Binder.java:697)
Caused by: com.android.volley.ClientError
at com.android.volley.toolbox.BasicNetwork.performRequest(:com.google.android.gms@17455022@17.4.55 (040700-248795830):58)
at sfj.performRequest(:com.google.android.gms@17455022@17.4.55 (040700-248795830):13)
at com.android.volley.NetworkDispatcher.a(:com.google.android.gms@17455022@17.4.55 (040700-248795830):7)
at com.android.volley.NetworkDispatcher.run(:com.google.android.gms@17455022@17.4.55 (040700-248795830):2)

@shishirshettygit
Copy link

I finally got it woking. I was signing the apk with the debug key and not release key.

What I noticed is, if I use .setBarcodeType("codebar") instead of .setBarcodeType("qrCode") I get the same 400 response error.

@shishirshettygit
Copy link

I finally got it woking. I was signing the apk with the debug key and not release key.

What I noticed is, if I use .setBarcodeType("codebar") instead of .setBarcodeType("qrCode") I get the same 400 response error.

My bad, I was able to set a bar code by setting .setBarcodeType("code128")

@vincentcastagna
Copy link

We are facing this issue on one of your project, but oddly, only on build from appcenter.

I must say that we use the exact same keystore, and so the same sha1 ... I don't get why it doesn't work on appcenter but it does from a build download from playstore, but this error is happenning since we switcher to AAB instead of APKs, and when we bumped to Android 11/12 target.

@ncalteen
Copy link

Hello,

My apologies, this repository is being deprecated. Please refer to the following repositories going forward. If there is anything you would like assistance with, please feel free to submit an issue.

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

No branches or pull requests

9 participants