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 | 要显示的按钮的主题。可能的值包括:dark 和 light 。默认主题背景为 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 按钮中的语言会根据以下条件而变化:
- 如果用户已登录 Google,则该按钮会以用户的 Google 帐号个人资料中提供的首选语言呈现。 用户可以阅读更改语言,以了解如何更改其 Google 帐号的首选语言。
- 如果用户未登录 Google,则该按钮将使用 HTTP 标头中的
ACCEPT-LANGUAGE
值。
如果您发现按钮没有根据上述逻辑以正确的语言呈现,或者措辞不自然,请与我们的支持团队联系。