Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Add loyalty card to Google Pay via Google Play Services API

I have problem with adding loyalty card to google pay app using google play services api. I have got account verficication after google pay request, but I'm receiving 400 in logs.

Can't find what's wrong...

Code below has been written following this guides:

https://developers.google.com/pay/passes/guides/get-started/implementing-the-api/save-to-google-pay#from-native-android-app

https://developers.google.com/pay/passes/guides/overview/basics/typical-api-flow

Attached code (Take a look on comments, it's important)

// is 9999999
val userId : String = usr.idUser.toString()
// value is "John Snow"
val fullname : String = usr.fullname
// ISSUER_ID - is numeric value from console

val wob = LoyaltyWalletObject.newBuilder()
//    the class id has similar name. All characters has been replaced with 'x' character
    .setClassId("$ISSUER_ID.xxxx.xxx.xxxxxxxxxxxx.xxxxxxxxxx")
//    similar to comment from method setClassId
    .setId("$ISSUER_ID.xxxx.xxx.xxxxxxxxxxxx.xxxxxxxxxx.$userId")
    .setState(WalletObjectsConstants.State.ACTIVE)
//   id of user in app
    .setAccountId(userId)
//   name of user in app
    .setAccountName(fullname)
//    from console - "Issuer" = Loyalty
    .setIssuerName("Loyalty")
//    from console - "Program Name" = Loyalty card
    .setProgramName("Loyalty card")
//    barcode type from docs  
    .setBarcodeType("code128")
//   card 16 digits card number
    .setBarcodeValue("1234567890123456")
//   formatter card number
    .setBarcodeAlternateText("1234 5678 9012 3456")
//   url on web resources
    .addLinksModuleDataUris(uris)
    .build()

val request = CreateWalletObjectsRequest.newBuilder()
    .setLoyaltyWalletObject(wob)
    .build()

val opts = Wallet.WalletOptions.Builder()
    .setTheme(WalletConstants.THEME_LIGHT)
    .setEnvironment(WalletConstants.ENVIRONMENT_PRODUCTION)
    .build()

val client = Wallet.getWalletObjectsClient(activity, opts)
val task = client.createWalletObjects(request)
AutoResolveHelper.resolveTask(task,activity,UIRequestCode.RC_GPAY)

The log:

E: [13290] BasicNetwork.performRequest: Unexpected response code 400 for https://wallet.google.com/payments/apis/instantbuy/android/v1/createWalletObjects
E: Exception sending Volley request
java.util.concurrent.ExecutionException: com.android.volley.ClientError
    at com.android.volley.toolbox.RequestFuture.a(:com.google.android.gms@[email protected] (040408-219897028):4)
    at com.android.volley.toolbox.RequestFuture.get(:com.google.android.gms@[email protected] (040408-219897028):1)
    at atew.a(:com.google.android.gms@[email protected] (040408-219897028):29)
    at atew.a(:com.google.android.gms@[email protected] (040408-219897028):25)
    at atyd.a(:com.google.android.gms@[email protected] (040408-219897028):8)
    at atxx.a(:com.google.android.gms@[email protected] (040408-219897028):16)
    at atof.a(:com.google.android.gms@[email protected] (040408-219897028):4)
    at atxw.a(:com.google.android.gms@[email protected] (040408-219897028):4)
    at atyg.a(:com.google.android.gms@[email protected] (040408-219897028):2)
    at atxq.a(Unknown Source:2)
    at atxu.a(Unknown Source:19)
    at xrb.a(:com.google.android.gms@[email protected] (040408-219897028):3)
    at cpb.onTransact(:com.google.android.gms@[email protected] (040408-219897028):4)
    at atxq.onTransact(:com.google.android.gms@[email protected] (040408-219897028):1)
    at android.os.Binder.transact(Binder.java:627)
    at dry.onTransact(:com.google.android.gms@[email protected] (040408-219897028):3)
    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@[email protected] (040408-219897028):49)
    at qni.performRequest(:com.google.android.gms@[email protected] (040408-219897028):13)
    at com.android.volley.NetworkDispatcher.a(:com.google.android.gms@[email protected] (040408-219897028):6)
    at com.android.volley.NetworkDispatcher.run(:com.google.android.gms@[email protected] (040408-219897028):2)
E: Unknown ServerResponse type=1

Github issue: https://github.com/google-pay/s2gp-quickstart-android/issues/4 (sample code, developer Guide for passes APIs not yet updated by Google passes API team)

like image 269
Alex Nuts Avatar asked Nov 15 '18 13:11

Alex Nuts


2 Answers

Your app needs to be whitelisted by the Google Pay team. Yes, is very important, but...

I sent to Google Pay team my release SHA1 Fingerprint (https://developers.google.com/pay/passes/guides/get-started/basic-setup/native-android-sdk). After that, when install app directly from apk file, all start work great (when click on "Add To GPay" -> loyalty card add to Google Pay)!

But continued to not work when upload to Play Market(

After hard research... )

Solution: SHA1 Fingerprint need get from "Google Play Console > Release Management > App Signing > App signing certificate"

like image 80
Павел Карпычев Avatar answered Nov 15 '22 03:11

Павел Карпычев


I was having this problem as well. The error message isn't very informative. Your app needs to be whitelisted by the Google Pay team. You need to contact them at https://support.google.com/pay/merchants/contact/interest and provide the following:

  • Issuer ID (this is on your merchant account page)
  • App package name (this is found in your AndroidManifest.xml on the manifest parent element com.companyname.appname)
  • SHA1 Fingerprint (This can be found by following the instructions outlined here: https://developers.google.com/pay/passes/guides/get-started/basic-setup/native-android-sdk)

So I finally got this to work, in the merchant center under the general area I changed the status field from DRAFT to UNDER_REVIEW. It immediately changed to approved and I could save the loyalty card.

Status screenshot

like image 20
Stevenr12 Avatar answered Nov 15 '22 04:11

Stevenr12