JavaScript 网页按钮

Google Wallet API 可让您的用户从网络向 Google 钱包添加对象。用户可以直接从您的网站添加他们的卡。

本参考资料详细介绍了用于呈现 Google Wallet API 按钮的 HTML 元素 g:savetoandroidpay,以及向 Google 说明您的 Web 服务的 JSON Web 令牌

Google Wallet API JavaScript

若要在加载时自动解析 g:savetoandroidpay HTML 标记,请包含标准 JavaScript

<script src="https://apis.google.com/js/platform.js" type="text/javascript"></script>

对于 AJAX 应用和 Google Wallet API 按钮的显式呈现,请添加 "parsetags": "explicit" 参数。

<script src="https://apis.google.com/js/platform.js" type="text/javascript">
  {"parsetags": "explicit"}
</script>

g:savetoandroidpay 个 HTML 标记

g:savetoandroidpay 命名空间标记定义了“Add to Google Wallet”按钮的放置位置和各种属性。如果您在服务器端呈现 HTML 和 JWT,请使用此标记。

<g:savetoandroidpay jwt="JWT" onsuccess="successHandler" onfailure="failureHandler" />
字段 类型 必需 说明
height 字符串 N 要显示的按钮的高度。可能的值包括:small(高度为 30 像素)和 standard(高度为 38 像素)。height 默认为 small。 如需查看不同 height 设置的按钮示例,请参阅 Google Wallet API 按钮
jwt 字符串 Google Wallet API JWT。
onsuccess 字符串 N 保存成功回调处理程序函数的字符串名称。
onfailure 字符串 N 保存失败回调处理程序函数的字符串名称。系统会向此函数传递一个包含 errorCode 和 errorMessage 的错误对象。
onprovidejwt 字符串 N 提供 JWT 处理程序函数的字符串名称。此函数用于在将对象添加到 Google 钱包之前拦截并可能操纵 JWT 数据。此函数不接受任何参数,并且必须以字符串形式返回 JWT。实现事件处理脚本时,可以在字段 this.getOpenParams().renderData.userParams.jwt 下检索原始 JWT 数据。
size 字符串 N 要显示的按钮的宽度。您可以将 size 设置为 matchparent,使其宽度与父元素的宽度相匹配。您也可以不定义 size,以拉伸宽度并使其适合 text 设置的宽度。 如需查看不同 size 设置的按钮示例,请参阅 Google Wallet API 按钮
text 字符串 N 已弃用
textsize 字符串 N 指定 textsize=large 后,针对具有特殊界面要求的情况,显示文字和按钮尺寸会显著增加。
theme 字符串 N 要显示的按钮的主题。可能的值包括:darklight。默认主题背景为 dark。如需查看不同 theme 设置的按钮示例,请参阅 Google Wallet API 按钮

Google Wallet API JWT

Google Wallet API JWT 定义了要保存的对象和类。

协议

        {
  "iss": "example_service_account@developer.gserviceaccount.com",
  "aud": "google",
  "typ": "savetoandroidpay",
  "iat": 1368029586,
  "payload": {
    "eventTicketClasses": [{
      ... //Event ticket Class JSON
    }],
    "eventTicketObjects": [{
      // Event ticket Object JSON
    }],
    "flightClasses": [{
      // Flight Class JSON
    }],
    "flightObjects": [{
      // Flight Object JSON
    }],
    "giftCardClasses": [{
      // Gift card Class JSON
    }],
    "giftCardObjects": [{
      // Gift card Object JSON
    }],
    "loyaltyClasses": [{
      // Loyalty Class JSON
    }],
    "loyaltyObjects": [{
      // Loyalty Object JSON
    }],
    "offerClasses": [{
      // Offer Class JSON
    }],
    "offerObjects": [{
      // Offer Object JSON
    }],
    "transitClasses": [{
      // Transit Class JSON
    }],
    "transitObjects": [{
      // Transit Object JSON
    }]
  },
  "origins": ["http://baconrista.com", "https://baconrista.com"]
}

注意:这些 JWT 使用 RSA-SHA256 签名。签名密钥是 OAuth 服务帐号生成的密钥。

字段 类型 必需 说明
iss 字符串 您的 OAuth 2.0 服务帐号生成的电子邮件地址。
aud 字符串 受众群体。Google Wallet API 对象的受众将始终为 google
typ 字符串 JWT 的类型。Google Wallet API 对象的受众将始终为 savetoandroidpay
iat 整数 在自纪元开始的时间(以秒为单位)发出。
payload 对象 载荷对象。
payload.eventTicketClasses 数组 N 要保存的活动门票类。
payload.eventTicketObjects 数组 N 要保存的活动门票对象。
payload.flightClasses 数组 N 要保存的航班类。
payload.flightObjects 数组 N 要保存的广告投放对象。
payload.giftCardClasses 数组 N 要保存的礼品卡类。
payload.giftCardObjects 数组 N 要保存的礼品卡对象。
payload.loyaltyClasses 数组 N 要保存的会员卡类。
payload.loyaltyObjects 数组 N 要保存的会员卡对象。
payload.offerObjects 数组 N 要保存的优惠对象。
payload.offerClasses 数组 N 优惠类必须保存。
payload.transitObjects 数组 N 要保存的公交对象。
payload.transitClasses 数组 N 要保存的公交类。
origins 数组 批准使用 JWT 保存功能的一组网域。如果 origins 字段未定义,Google Wallet API 按钮将不会呈现。如果“origins”字段未定义,您可能会在浏览器控制台中收到“Loadden by X-Frame-Options”或“Refused to display”消息。

编码后的 JWT 应与以下示例类似:

eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJnb29nbGUiLCJvcmlnaW5zIjpbImh0dHA6Ly9sb2NhbGhvc3Q6ODA4MCIsImh0dHA6Ly93d3cuZ29vZ2xlLmNvbSJdLCJpc3MiOiJzMmFwLXRvb2wuZ29vZ2xlLmNvbUBhcHBzcG90LmdzZXJ2aWNlYWNjb3VudC5jb20iLCJpYXQiOjE1NTE5ODcxNTEsInR5cCI6InNhdmV0b3dhbGxldCIsInBheWxvYWQiOnsib2ZmZXJPYmplY3RzIjpbeyJpZCI6IjMyMDI0MTMyNDE4NDM2OTk0MDEuMDFfT2ZmZXJPYmplY3RJZCJ9XX19.maHX40WWT29TC_kEb90EKQBH9AiTYAZR3153K8UI7fznVnfjVdlwsH_GKTECV3PGXdNnKCcmatUbKsONC0bxrnAHYG02kuvA1D3hSctz_amU66ntsvGIDe13mpxTzhI8fPvt9KMP1iaO7uOJuLQIHwipu4uRFAjyFaHGVaSFaP9c53qQyb_Zgyyk50M-MhH2n4kDpstNCqUJKWaadQkOWjrtMjwGzQ_ME04lbR4wb_mfK1A7Rc1UieWkxM9aMl5TOPubBKxKRRk_CqillN8XoTl9MI5RRGPuElVO28zGpYlFS6BarzDaaUfmbRZGvfF8ZiKrHZKxVrJjfZIJ2TCcDw

gapi.savetoandroidpay.render 函数

此函数可让您显式呈现 Google Wallet API 按钮。

gapi.savetoandroidpay.render("dom-container",{
  "jwt": "JWT",
  "onsuccess": "successHandler",
  "onfailure": "failureHandler"
});
字段 类型 必需 说明
dom-container 字符串 用于放置 Google Wallet API 按钮的容器的 ID。
jwt 字符串 定义要保存的内容的 JWT。
onsuccess 字符串 N 保存成功回调处理程序函数的字符串名称。
onfailure 字符串 N 保存失败回调处理程序函数的字符串名称。系统会向此函数传递一个包含 errorCode 和 errorMessage 的错误对象。
onprovidejwt 字符串 N 提供 JWT 处理程序函数的字符串名称。此函数用于在将对象添加到 Google 钱包之前拦截并可能操纵 JWT 数据。此函数不接受任何参数,并且必须以字符串形式返回 JWT。实现事件处理脚本时,可以在字段 this.getOpenParams().renderData.userParams.jwt 下检索原始 JWT 数据。

Google Wallet API 错误代码和消息

下表列出了当对象无法使用 JavaScript 按钮成功保存时,在错误对象中传递给失败回调函数的错误代码和默认错误消息。

        {
          "errorCode": "errorCode",
          "errorMessage": "errorMessage"
        }
errorCode errorMessage
SERVICE_FAILURE Google 钱包服务器发生错误。
CLASS_NOT_FOUND 找不到对象中引用的类。
CLASS_MISMATCH 对象必须存在且类型相同,而且必须引用封装的类。
ORIGIN_MISMATCH 按钮的来源与来源列表中指定的来源不匹配。
INVALID_NUM_TYPES 只能指定一种类型的对象。
INVALID_SIGNATURE 无法验证签名。
INVALID_DUPLICATE_IDS 不允许使用重复的对象或类。
INVALID_JWT JWT 无效。
INVALID_EXP_IAT JWT 已过期或将来颁发。
INVALID_AUD AUD 字段的值无效。
INVALID_TYP TYP 字段的值无效。
INVALID_NUM_OBJECTS 对于会员卡、礼品卡和优惠,只能指定一个对象,并且最多只能指定一个类。
MALFORMED_ORIGIN_URL 源网址格式错误。网址必须包含协议和域名。
MISSING_ORIGIN 必须指定来源。
MISSING_FIELDS 封闭的对象或类缺少必填字段。

本地化

JavaScript 按钮中的语言会根据以下条件而变化:

  1. 如果用户已登录 Google,则该按钮会以用户的 Google 帐号个人资料中提供的首选语言呈现。 用户可以阅读更改语言,以了解如何更改其 Google 帐号的首选语言。
  2. 如果用户未登录 Google,则该按钮将使用 HTTP 标头中的 ACCEPT-LANGUAGE 值。

如果您发现按钮没有根据上述逻辑以正确的语言呈现,或者措辞不自然,请与我们的支持团队联系