能否在打开Google Wallet时触发Google Pass回调更新?求实现步骤
在打开Google Wallet时触发Google Pass凭证更新的实现方案
是的,可以实现打开Google Wallet时触发凭证更新,核心是利用Google Wallet的事件触发更新机制结合后端接口完成。以下是具体实现步骤:
步骤1:配置凭证的触发更新规则
在创建或更新Google Pass的JSON模板中,添加refreshInterval基础刷新间隔和issuerNotification配置,指定触发时机为ON_OPEN:
$passPayload = [ "generic" => [ // 保留你已有的凭证字段(如标题、logo、用户信息等) "refreshInterval" => "3600s", // 基础刷新间隔,配合ON_OPEN触发 "issuerNotification" => [ "notificationType" => "ON_OPEN", "targetUri" => "https://your-domain.com/google-pass-refresh.php" ] ] ];
其中targetUri是你的后端接口地址,用于返回最新的凭证数据。
步骤2:实现后端更新接口
编写google-pass-refresh.php接口,处理Google Wallet的更新请求,返回最新凭证数据:
<?php // 验证请求合法性(必须,防止恶意请求) $signature = $_SERVER['HTTP_X_GOOGLE_SIGNATURE']; // 使用Google提供的公钥验证签名,确保请求来自官方 // 获取请求中的凭证ID $passId = $_GET['id'] ?? ''; // 从你的数据库/数据源获取该凭证的最新数据 $latestPassData = getLatestPassFromDatabase($passId); // 返回符合Google Pass格式的JSON响应 header('Content-Type: application/json'); echo json_encode($latestPassData); ?>
注意:签名验证逻辑需参考Google Wallet官方规范实现,避免非法请求篡改凭证。
步骤3:更新已存在的凭证
调用Google Wallet API,将上述更新规则应用到已创建的凭证上:
$passId = "your-existing-pass-id"; $updateUrl = "https://walletobjects.googleapis.com/walletobjects/v1/genericObject/{$passId}"; $ch = curl_init($updateUrl); curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'PATCH'); curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($passPayload)); curl_setopt($ch, CURLOPT_HTTPHEADER, [ 'Content-Type: application/json', 'Authorization: Bearer ' . $yourGoogleAccessToken ]); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $response = curl_exec($ch); curl_close($ch);
步骤4:测试触发逻辑
将更新后的凭证重新添加到Google Wallet,关闭并重新打开应用,此时Google Wallet会自动向你的targetUri发送请求,获取最新数据并更新凭证。
关键注意事项
- 后端接口必须是公网可访问的HTTPS地址
- 严格执行请求签名验证,避免安全风险
ON_OPEN触发不会过于频繁,Google会限制请求频率,refreshInterval作为兜底刷新机制
内容的提问来源于stack exchange,提问作者Robin Bronston
相关产品推荐
相关产品推荐

