通过 Google Play Services API 将会员卡添加到 Google Pay

Posted

技术标签:

【中文标题】通过 Google Play Services API 将会员卡添加到 Google Pay【英文标题】:Add loyalty card to Google Pay via Google Play Services API 【发布时间】:2019-04-18 14:28:49 【问题描述】:

我在使用 google play services api 将会员卡添加到 google pay 应用时遇到问题。谷歌支付请求后我得到了帐户验证,但我在日志中收到 400。

找不到问题...

以下代码是按照本指南编写的:

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

附上代码(看看cmets,很重要

// 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)

日志:

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 问题:https://github.com/google-pay/s2gp-quickstart-android/issues/4(示例代码,Google Pass API 团队尚未更新的 Pass API 开发人员指南)

【问题讨论】:

有什么解决办法吗?这是一个错误或白名单问题?请更新 .setCreateMode(SHOW_SAVE_PROMPT) 需要吗? 不,我们的团队对此没有任何解决方案。正在与谷歌进行讨论。 @LOG_TAG - 不幸的是 .setCreateMode(SHOW_SAVE_PROMPT) 不适用于我们的测试 这里也一样!如果您从谷歌团队获得解决方案,请告诉我,我也会向您更新进度!也请在这里评论github.com/google-pay/s2gp-quickstart-android/issues/4 【参考方案1】:

您的应用需要被 Google Pay 团队列入白名单。 是的,很重要,但是……

我向 Google Pay 团队发送了我发布的 SHA1 指纹 (https://developers.google.com/pay/passes/guides/get-started/basic-setup/native-android-sdk)。之后,当直接从 apk 文件安装应用程序时,一切正常(点击“添加到 GPay”-> 会员卡添加到 Google Pay 时)!

但上传到Play Market时仍然无法正常工作(

经过艰苦的研究......)

解决方案: SHA1 指纹需要从“Google Play Console > 发布管理 > 应用签名 > 应用签名证书”获取

【讨论】:

【参考方案2】:

我也遇到了这个问题。错误消息不是很丰富。您的应用需要被 Google Pay 团队列入白名单。您需要通过https://support.google.com/pay/merchants/contact/interest 与他们联系并提供以下信息:

发行人 ID(位于您的商家帐户页面上) 应用程序包名称(可在清单父元素 com.companyname.appname 上的 AndroidManifest.xml 中找到) SHA1 指纹(可以按照此处概述的说明找到:https://developers.google.com/pay/passes/guides/get-started/basic-setup/native-android-sdk)

所以我终于得到了这个工作,在一般区域下的商家中心,我将状态字段从草稿更改为 UNDER_REVIEW。它立即更改为已批准,我可以保存会员卡。

【讨论】:

很高兴有人已经在这里发帖了!这事有进一步更新吗?所有文档都已更新,代码示例已弃用! 你好,@Stevenr12。谢谢您的回答。当前应用程序不在白名单中(正在与谷歌讨论)。休息完毕。 @LOG_TAG 和 Alex Nuts:查看编辑,我通过更新商家中心的状态使其正常工作。 @Stevenr12 .setId(ISSUER_ID + "." + OFFER_OBJECT_ID) .setClassId(ISSUER_ID + "." + OFFER_CLASS_ID) 你能澄清一下OFFER_OBJECT_ID和OFFER_CLASS_ID是一样的吗? github.com/google-pay/s2gp-quickstart-android/blob/master/app/…!你如何创建layality Object? @LOG_TAG 来自文档:“对象的唯一标识符。此 ID 在来自颁发者的所有对象中必须是唯一的。此值应遵循格式颁发者 ID.identifier,前者由Google 和后者由您选择。唯一标识符应仅包含字母数字字符、“.”、“_”或“-”。 developers.google.com/pay/passes/reference/v1/loyaltyobject 在您的代码示例中,OfferTestObject1 将不是唯一值。另外,请注意发布您的发行人 ID。

以上是关于通过 Google Play Services API 将会员卡添加到 Google Pay的主要内容,如果未能解决你的问题,请参考以下文章

Xamarin 找不到与给定名称匹配的资源 @integer/google_play_services_version

使用 google-play-services 进行 Proguard

如何为项目使用不同版本的 google-play-services 库

Google Play Services 9.2.1 和 google-services 插件

为啥 Localytics 需要 google-play-services:ads?

Google Play Services GCM 9.2.0 要求“更新”回 9.0.0