Add loyalty card to Google Pay via Google Play Services API










3















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@14574021@14.5.74 (040408-219897028):4)
at com.android.volley.toolbox.RequestFuture.get(:com.google.android.gms@14574021@14.5.74 (040408-219897028):1)
at atew.a(:com.google.android.gms@14574021@14.5.74 (040408-219897028):29)
at atew.a(:com.google.android.gms@14574021@14.5.74 (040408-219897028):25)
at atyd.a(:com.google.android.gms@14574021@14.5.74 (040408-219897028):8)
at atxx.a(:com.google.android.gms@14574021@14.5.74 (040408-219897028):16)
at atof.a(:com.google.android.gms@14574021@14.5.74 (040408-219897028):4)
at atxw.a(:com.google.android.gms@14574021@14.5.74 (040408-219897028):4)
at atyg.a(:com.google.android.gms@14574021@14.5.74 (040408-219897028):2)
at atxq.a(Unknown Source:2)
at atxu.a(Unknown Source:19)
at xrb.a(:com.google.android.gms@14574021@14.5.74 (040408-219897028):3)
at cpb.onTransact(:com.google.android.gms@14574021@14.5.74 (040408-219897028):4)
at atxq.onTransact(:com.google.android.gms@14574021@14.5.74 (040408-219897028):1)
at android.os.Binder.transact(Binder.java:627)
at dry.onTransact(:com.google.android.gms@14574021@14.5.74 (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@14574021@14.5.74 (040408-219897028):49)
at qni.performRequest(:com.google.android.gms@14574021@14.5.74 (040408-219897028):13)
at com.android.volley.NetworkDispatcher.a(:com.google.android.gms@14574021@14.5.74 (040408-219897028):6)
at com.android.volley.NetworkDispatcher.run(:com.google.android.gms@14574021@14.5.74 (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)










share|improve this question
























  • got any solution? it's a bug or whitelisting problem? please update

    – LOG_TAG
    Dec 17 '18 at 17:05











  • .setCreateMode(SHOW_SAVE_PROMPT) is needed ?

    – LOG_TAG
    Dec 17 '18 at 17:38











  • No, our team didn't get any solution for this. Out discussion is in progress with google.

    – Alex Nuts
    Dec 18 '18 at 11:39











  • @LOG_TAG - unfortunately .setCreateMode(SHOW_SAVE_PROMPT) doesn't work for testing for us

    – Alex Nuts
    Dec 18 '18 at 11:40











  • same here! let me know if you get solution from google team , I will also update you on the progress! please comment here also github.com/google-pay/s2gp-quickstart-android/issues/4

    – LOG_TAG
    Dec 18 '18 at 14:44















3















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@14574021@14.5.74 (040408-219897028):4)
at com.android.volley.toolbox.RequestFuture.get(:com.google.android.gms@14574021@14.5.74 (040408-219897028):1)
at atew.a(:com.google.android.gms@14574021@14.5.74 (040408-219897028):29)
at atew.a(:com.google.android.gms@14574021@14.5.74 (040408-219897028):25)
at atyd.a(:com.google.android.gms@14574021@14.5.74 (040408-219897028):8)
at atxx.a(:com.google.android.gms@14574021@14.5.74 (040408-219897028):16)
at atof.a(:com.google.android.gms@14574021@14.5.74 (040408-219897028):4)
at atxw.a(:com.google.android.gms@14574021@14.5.74 (040408-219897028):4)
at atyg.a(:com.google.android.gms@14574021@14.5.74 (040408-219897028):2)
at atxq.a(Unknown Source:2)
at atxu.a(Unknown Source:19)
at xrb.a(:com.google.android.gms@14574021@14.5.74 (040408-219897028):3)
at cpb.onTransact(:com.google.android.gms@14574021@14.5.74 (040408-219897028):4)
at atxq.onTransact(:com.google.android.gms@14574021@14.5.74 (040408-219897028):1)
at android.os.Binder.transact(Binder.java:627)
at dry.onTransact(:com.google.android.gms@14574021@14.5.74 (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@14574021@14.5.74 (040408-219897028):49)
at qni.performRequest(:com.google.android.gms@14574021@14.5.74 (040408-219897028):13)
at com.android.volley.NetworkDispatcher.a(:com.google.android.gms@14574021@14.5.74 (040408-219897028):6)
at com.android.volley.NetworkDispatcher.run(:com.google.android.gms@14574021@14.5.74 (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)










share|improve this question
























  • got any solution? it's a bug or whitelisting problem? please update

    – LOG_TAG
    Dec 17 '18 at 17:05











  • .setCreateMode(SHOW_SAVE_PROMPT) is needed ?

    – LOG_TAG
    Dec 17 '18 at 17:38











  • No, our team didn't get any solution for this. Out discussion is in progress with google.

    – Alex Nuts
    Dec 18 '18 at 11:39











  • @LOG_TAG - unfortunately .setCreateMode(SHOW_SAVE_PROMPT) doesn't work for testing for us

    – Alex Nuts
    Dec 18 '18 at 11:40











  • same here! let me know if you get solution from google team , I will also update you on the progress! please comment here also github.com/google-pay/s2gp-quickstart-android/issues/4

    – LOG_TAG
    Dec 18 '18 at 14:44













3












3








3


1






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@14574021@14.5.74 (040408-219897028):4)
at com.android.volley.toolbox.RequestFuture.get(:com.google.android.gms@14574021@14.5.74 (040408-219897028):1)
at atew.a(:com.google.android.gms@14574021@14.5.74 (040408-219897028):29)
at atew.a(:com.google.android.gms@14574021@14.5.74 (040408-219897028):25)
at atyd.a(:com.google.android.gms@14574021@14.5.74 (040408-219897028):8)
at atxx.a(:com.google.android.gms@14574021@14.5.74 (040408-219897028):16)
at atof.a(:com.google.android.gms@14574021@14.5.74 (040408-219897028):4)
at atxw.a(:com.google.android.gms@14574021@14.5.74 (040408-219897028):4)
at atyg.a(:com.google.android.gms@14574021@14.5.74 (040408-219897028):2)
at atxq.a(Unknown Source:2)
at atxu.a(Unknown Source:19)
at xrb.a(:com.google.android.gms@14574021@14.5.74 (040408-219897028):3)
at cpb.onTransact(:com.google.android.gms@14574021@14.5.74 (040408-219897028):4)
at atxq.onTransact(:com.google.android.gms@14574021@14.5.74 (040408-219897028):1)
at android.os.Binder.transact(Binder.java:627)
at dry.onTransact(:com.google.android.gms@14574021@14.5.74 (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@14574021@14.5.74 (040408-219897028):49)
at qni.performRequest(:com.google.android.gms@14574021@14.5.74 (040408-219897028):13)
at com.android.volley.NetworkDispatcher.a(:com.google.android.gms@14574021@14.5.74 (040408-219897028):6)
at com.android.volley.NetworkDispatcher.run(:com.google.android.gms@14574021@14.5.74 (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)










share|improve this question
















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@14574021@14.5.74 (040408-219897028):4)
at com.android.volley.toolbox.RequestFuture.get(:com.google.android.gms@14574021@14.5.74 (040408-219897028):1)
at atew.a(:com.google.android.gms@14574021@14.5.74 (040408-219897028):29)
at atew.a(:com.google.android.gms@14574021@14.5.74 (040408-219897028):25)
at atyd.a(:com.google.android.gms@14574021@14.5.74 (040408-219897028):8)
at atxx.a(:com.google.android.gms@14574021@14.5.74 (040408-219897028):16)
at atof.a(:com.google.android.gms@14574021@14.5.74 (040408-219897028):4)
at atxw.a(:com.google.android.gms@14574021@14.5.74 (040408-219897028):4)
at atyg.a(:com.google.android.gms@14574021@14.5.74 (040408-219897028):2)
at atxq.a(Unknown Source:2)
at atxu.a(Unknown Source:19)
at xrb.a(:com.google.android.gms@14574021@14.5.74 (040408-219897028):3)
at cpb.onTransact(:com.google.android.gms@14574021@14.5.74 (040408-219897028):4)
at atxq.onTransact(:com.google.android.gms@14574021@14.5.74 (040408-219897028):1)
at android.os.Binder.transact(Binder.java:627)
at dry.onTransact(:com.google.android.gms@14574021@14.5.74 (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@14574021@14.5.74 (040408-219897028):49)
at qni.performRequest(:com.google.android.gms@14574021@14.5.74 (040408-219897028):13)
at com.android.volley.NetworkDispatcher.a(:com.google.android.gms@14574021@14.5.74 (040408-219897028):6)
at com.android.volley.NetworkDispatcher.run(:com.google.android.gms@14574021@14.5.74 (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)







android google-play-services google-pay






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited Dec 18 '18 at 16:55









LOG_TAG

14.8k106194




14.8k106194










asked Nov 15 '18 at 13:10









Alex NutsAlex Nuts

11616




11616












  • got any solution? it's a bug or whitelisting problem? please update

    – LOG_TAG
    Dec 17 '18 at 17:05











  • .setCreateMode(SHOW_SAVE_PROMPT) is needed ?

    – LOG_TAG
    Dec 17 '18 at 17:38











  • No, our team didn't get any solution for this. Out discussion is in progress with google.

    – Alex Nuts
    Dec 18 '18 at 11:39











  • @LOG_TAG - unfortunately .setCreateMode(SHOW_SAVE_PROMPT) doesn't work for testing for us

    – Alex Nuts
    Dec 18 '18 at 11:40











  • same here! let me know if you get solution from google team , I will also update you on the progress! please comment here also github.com/google-pay/s2gp-quickstart-android/issues/4

    – LOG_TAG
    Dec 18 '18 at 14:44

















  • got any solution? it's a bug or whitelisting problem? please update

    – LOG_TAG
    Dec 17 '18 at 17:05











  • .setCreateMode(SHOW_SAVE_PROMPT) is needed ?

    – LOG_TAG
    Dec 17 '18 at 17:38











  • No, our team didn't get any solution for this. Out discussion is in progress with google.

    – Alex Nuts
    Dec 18 '18 at 11:39











  • @LOG_TAG - unfortunately .setCreateMode(SHOW_SAVE_PROMPT) doesn't work for testing for us

    – Alex Nuts
    Dec 18 '18 at 11:40











  • same here! let me know if you get solution from google team , I will also update you on the progress! please comment here also github.com/google-pay/s2gp-quickstart-android/issues/4

    – LOG_TAG
    Dec 18 '18 at 14:44
















got any solution? it's a bug or whitelisting problem? please update

– LOG_TAG
Dec 17 '18 at 17:05





got any solution? it's a bug or whitelisting problem? please update

– LOG_TAG
Dec 17 '18 at 17:05













.setCreateMode(SHOW_SAVE_PROMPT) is needed ?

– LOG_TAG
Dec 17 '18 at 17:38





.setCreateMode(SHOW_SAVE_PROMPT) is needed ?

– LOG_TAG
Dec 17 '18 at 17:38













No, our team didn't get any solution for this. Out discussion is in progress with google.

– Alex Nuts
Dec 18 '18 at 11:39





No, our team didn't get any solution for this. Out discussion is in progress with google.

– Alex Nuts
Dec 18 '18 at 11:39













@LOG_TAG - unfortunately .setCreateMode(SHOW_SAVE_PROMPT) doesn't work for testing for us

– Alex Nuts
Dec 18 '18 at 11:40





@LOG_TAG - unfortunately .setCreateMode(SHOW_SAVE_PROMPT) doesn't work for testing for us

– Alex Nuts
Dec 18 '18 at 11:40













same here! let me know if you get solution from google team , I will also update you on the progress! please comment here also github.com/google-pay/s2gp-quickstart-android/issues/4

– LOG_TAG
Dec 18 '18 at 14:44





same here! let me know if you get solution from google team , I will also update you on the progress! please comment here also github.com/google-pay/s2gp-quickstart-android/issues/4

– LOG_TAG
Dec 18 '18 at 14:44












2 Answers
2






active

oldest

votes


















1















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"






share|improve this answer






























    1














    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






    share|improve this answer

























    • glad someone already posted here! any update on this? all documentations are updated, code samples are deprecated!

      – LOG_TAG
      Dec 17 '18 at 17:05











    • Hello, @Stevenr12 . Thank you for your answer. The app currentry isn't in white list (Discussion with google is in progress). Rest were done.

      – Alex Nuts
      Dec 18 '18 at 11:45











    • @LOG_TAG and Alex Nuts: See the edits, I got it working by updating the status in the merchant center.

      – Stevenr12
      Dec 21 '18 at 18:16











    • @Stevenr12 .setId(ISSUER_ID + "." + OFFER_OBJECT_ID) .setClassId(ISSUER_ID + "." + OFFER_CLASS_ID) can you clarifiy OFFER_OBJECT_ID and OFFER_CLASS_ID is same ? github.com/google-pay/s2gp-quickstart-android/blob/master/app/… ! how do you creating layality Object ?

      – LOG_TAG
      Dec 23 '18 at 4:43






    • 1





      @LOG_TAG From the documentation: "The unique identifier for an object. This ID must be unique across all objects from an issuer. This value should follow the format issuer ID.identifier where the former is issued by Google and latter is chosen by you. The unique identifier should only include alphanumeric characters, '.', '_', or '-'." developers.google.com/pay/passes/reference/v1/loyaltyobject In your code sample OfferTestObject1 will not be a unique value. Also, be careful about posting your issuer ID.

      – Stevenr12
      Dec 27 '18 at 17:47











    Your Answer






    StackExchange.ifUsing("editor", function ()
    StackExchange.using("externalEditor", function ()
    StackExchange.using("snippets", function ()
    StackExchange.snippets.init();
    );
    );
    , "code-snippets");

    StackExchange.ready(function()
    var channelOptions =
    tags: "".split(" "),
    id: "1"
    ;
    initTagRenderer("".split(" "), "".split(" "), channelOptions);

    StackExchange.using("externalEditor", function()
    // Have to fire editor after snippets, if snippets enabled
    if (StackExchange.settings.snippets.snippetsEnabled)
    StackExchange.using("snippets", function()
    createEditor();
    );

    else
    createEditor();

    );

    function createEditor()
    StackExchange.prepareEditor(
    heartbeatType: 'answer',
    autoActivateHeartbeat: false,
    convertImagesToLinks: true,
    noModals: true,
    showLowRepImageUploadWarning: true,
    reputationToPostImages: 10,
    bindNavPrevention: true,
    postfix: "",
    imageUploader:
    brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
    contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
    allowUrls: true
    ,
    onDemand: true,
    discardSelector: ".discard-answer"
    ,immediatelyShowMarkdownHelp:true
    );



    );













    draft saved

    draft discarded


















    StackExchange.ready(
    function ()
    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53320259%2fadd-loyalty-card-to-google-pay-via-google-play-services-api%23new-answer', 'question_page');

    );

    Post as a guest















    Required, but never shown

























    2 Answers
    2






    active

    oldest

    votes








    2 Answers
    2






    active

    oldest

    votes









    active

    oldest

    votes






    active

    oldest

    votes









    1















    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"






    share|improve this answer



























      1















      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"






      share|improve this answer

























        1












        1








        1








        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"






        share|improve this answer














        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"







        share|improve this answer












        share|improve this answer



        share|improve this answer










        answered Jan 11 at 7:17









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

        261




        261























            1














            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






            share|improve this answer

























            • glad someone already posted here! any update on this? all documentations are updated, code samples are deprecated!

              – LOG_TAG
              Dec 17 '18 at 17:05











            • Hello, @Stevenr12 . Thank you for your answer. The app currentry isn't in white list (Discussion with google is in progress). Rest were done.

              – Alex Nuts
              Dec 18 '18 at 11:45











            • @LOG_TAG and Alex Nuts: See the edits, I got it working by updating the status in the merchant center.

              – Stevenr12
              Dec 21 '18 at 18:16











            • @Stevenr12 .setId(ISSUER_ID + "." + OFFER_OBJECT_ID) .setClassId(ISSUER_ID + "." + OFFER_CLASS_ID) can you clarifiy OFFER_OBJECT_ID and OFFER_CLASS_ID is same ? github.com/google-pay/s2gp-quickstart-android/blob/master/app/… ! how do you creating layality Object ?

              – LOG_TAG
              Dec 23 '18 at 4:43






            • 1





              @LOG_TAG From the documentation: "The unique identifier for an object. This ID must be unique across all objects from an issuer. This value should follow the format issuer ID.identifier where the former is issued by Google and latter is chosen by you. The unique identifier should only include alphanumeric characters, '.', '_', or '-'." developers.google.com/pay/passes/reference/v1/loyaltyobject In your code sample OfferTestObject1 will not be a unique value. Also, be careful about posting your issuer ID.

              – Stevenr12
              Dec 27 '18 at 17:47
















            1














            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






            share|improve this answer

























            • glad someone already posted here! any update on this? all documentations are updated, code samples are deprecated!

              – LOG_TAG
              Dec 17 '18 at 17:05











            • Hello, @Stevenr12 . Thank you for your answer. The app currentry isn't in white list (Discussion with google is in progress). Rest were done.

              – Alex Nuts
              Dec 18 '18 at 11:45











            • @LOG_TAG and Alex Nuts: See the edits, I got it working by updating the status in the merchant center.

              – Stevenr12
              Dec 21 '18 at 18:16











            • @Stevenr12 .setId(ISSUER_ID + "." + OFFER_OBJECT_ID) .setClassId(ISSUER_ID + "." + OFFER_CLASS_ID) can you clarifiy OFFER_OBJECT_ID and OFFER_CLASS_ID is same ? github.com/google-pay/s2gp-quickstart-android/blob/master/app/… ! how do you creating layality Object ?

              – LOG_TAG
              Dec 23 '18 at 4:43






            • 1





              @LOG_TAG From the documentation: "The unique identifier for an object. This ID must be unique across all objects from an issuer. This value should follow the format issuer ID.identifier where the former is issued by Google and latter is chosen by you. The unique identifier should only include alphanumeric characters, '.', '_', or '-'." developers.google.com/pay/passes/reference/v1/loyaltyobject In your code sample OfferTestObject1 will not be a unique value. Also, be careful about posting your issuer ID.

              – Stevenr12
              Dec 27 '18 at 17:47














            1












            1








            1







            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






            share|improve this answer















            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







            share|improve this answer














            share|improve this answer



            share|improve this answer








            edited Dec 21 '18 at 18:14

























            answered Dec 14 '18 at 17:18









            Stevenr12Stevenr12

            937




            937












            • glad someone already posted here! any update on this? all documentations are updated, code samples are deprecated!

              – LOG_TAG
              Dec 17 '18 at 17:05











            • Hello, @Stevenr12 . Thank you for your answer. The app currentry isn't in white list (Discussion with google is in progress). Rest were done.

              – Alex Nuts
              Dec 18 '18 at 11:45











            • @LOG_TAG and Alex Nuts: See the edits, I got it working by updating the status in the merchant center.

              – Stevenr12
              Dec 21 '18 at 18:16











            • @Stevenr12 .setId(ISSUER_ID + "." + OFFER_OBJECT_ID) .setClassId(ISSUER_ID + "." + OFFER_CLASS_ID) can you clarifiy OFFER_OBJECT_ID and OFFER_CLASS_ID is same ? github.com/google-pay/s2gp-quickstart-android/blob/master/app/… ! how do you creating layality Object ?

              – LOG_TAG
              Dec 23 '18 at 4:43






            • 1





              @LOG_TAG From the documentation: "The unique identifier for an object. This ID must be unique across all objects from an issuer. This value should follow the format issuer ID.identifier where the former is issued by Google and latter is chosen by you. The unique identifier should only include alphanumeric characters, '.', '_', or '-'." developers.google.com/pay/passes/reference/v1/loyaltyobject In your code sample OfferTestObject1 will not be a unique value. Also, be careful about posting your issuer ID.

              – Stevenr12
              Dec 27 '18 at 17:47


















            • glad someone already posted here! any update on this? all documentations are updated, code samples are deprecated!

              – LOG_TAG
              Dec 17 '18 at 17:05











            • Hello, @Stevenr12 . Thank you for your answer. The app currentry isn't in white list (Discussion with google is in progress). Rest were done.

              – Alex Nuts
              Dec 18 '18 at 11:45











            • @LOG_TAG and Alex Nuts: See the edits, I got it working by updating the status in the merchant center.

              – Stevenr12
              Dec 21 '18 at 18:16











            • @Stevenr12 .setId(ISSUER_ID + "." + OFFER_OBJECT_ID) .setClassId(ISSUER_ID + "." + OFFER_CLASS_ID) can you clarifiy OFFER_OBJECT_ID and OFFER_CLASS_ID is same ? github.com/google-pay/s2gp-quickstart-android/blob/master/app/… ! how do you creating layality Object ?

              – LOG_TAG
              Dec 23 '18 at 4:43






            • 1





              @LOG_TAG From the documentation: "The unique identifier for an object. This ID must be unique across all objects from an issuer. This value should follow the format issuer ID.identifier where the former is issued by Google and latter is chosen by you. The unique identifier should only include alphanumeric characters, '.', '_', or '-'." developers.google.com/pay/passes/reference/v1/loyaltyobject In your code sample OfferTestObject1 will not be a unique value. Also, be careful about posting your issuer ID.

              – Stevenr12
              Dec 27 '18 at 17:47

















            glad someone already posted here! any update on this? all documentations are updated, code samples are deprecated!

            – LOG_TAG
            Dec 17 '18 at 17:05





            glad someone already posted here! any update on this? all documentations are updated, code samples are deprecated!

            – LOG_TAG
            Dec 17 '18 at 17:05













            Hello, @Stevenr12 . Thank you for your answer. The app currentry isn't in white list (Discussion with google is in progress). Rest were done.

            – Alex Nuts
            Dec 18 '18 at 11:45





            Hello, @Stevenr12 . Thank you for your answer. The app currentry isn't in white list (Discussion with google is in progress). Rest were done.

            – Alex Nuts
            Dec 18 '18 at 11:45













            @LOG_TAG and Alex Nuts: See the edits, I got it working by updating the status in the merchant center.

            – Stevenr12
            Dec 21 '18 at 18:16





            @LOG_TAG and Alex Nuts: See the edits, I got it working by updating the status in the merchant center.

            – Stevenr12
            Dec 21 '18 at 18:16













            @Stevenr12 .setId(ISSUER_ID + "." + OFFER_OBJECT_ID) .setClassId(ISSUER_ID + "." + OFFER_CLASS_ID) can you clarifiy OFFER_OBJECT_ID and OFFER_CLASS_ID is same ? github.com/google-pay/s2gp-quickstart-android/blob/master/app/… ! how do you creating layality Object ?

            – LOG_TAG
            Dec 23 '18 at 4:43





            @Stevenr12 .setId(ISSUER_ID + "." + OFFER_OBJECT_ID) .setClassId(ISSUER_ID + "." + OFFER_CLASS_ID) can you clarifiy OFFER_OBJECT_ID and OFFER_CLASS_ID is same ? github.com/google-pay/s2gp-quickstart-android/blob/master/app/… ! how do you creating layality Object ?

            – LOG_TAG
            Dec 23 '18 at 4:43




            1




            1





            @LOG_TAG From the documentation: "The unique identifier for an object. This ID must be unique across all objects from an issuer. This value should follow the format issuer ID.identifier where the former is issued by Google and latter is chosen by you. The unique identifier should only include alphanumeric characters, '.', '_', or '-'." developers.google.com/pay/passes/reference/v1/loyaltyobject In your code sample OfferTestObject1 will not be a unique value. Also, be careful about posting your issuer ID.

            – Stevenr12
            Dec 27 '18 at 17:47






            @LOG_TAG From the documentation: "The unique identifier for an object. This ID must be unique across all objects from an issuer. This value should follow the format issuer ID.identifier where the former is issued by Google and latter is chosen by you. The unique identifier should only include alphanumeric characters, '.', '_', or '-'." developers.google.com/pay/passes/reference/v1/loyaltyobject In your code sample OfferTestObject1 will not be a unique value. Also, be careful about posting your issuer ID.

            – Stevenr12
            Dec 27 '18 at 17:47


















            draft saved

            draft discarded
















































            Thanks for contributing an answer to Stack Overflow!


            • Please be sure to answer the question. Provide details and share your research!

            But avoid


            • Asking for help, clarification, or responding to other answers.

            • Making statements based on opinion; back them up with references or personal experience.

            To learn more, see our tips on writing great answers.




            draft saved


            draft discarded














            StackExchange.ready(
            function ()
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53320259%2fadd-loyalty-card-to-google-pay-via-google-play-services-api%23new-answer', 'question_page');

            );

            Post as a guest















            Required, but never shown





















































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown

































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown







            這個網誌中的熱門文章

            How to read a connectionString WITH PROVIDER in .NET Core?

            In R, how to develop a multiplot heatmap.2 figure showing key labels successfully

            Museum of Modern and Contemporary Art of Trento and Rovereto