-
Notifications
You must be signed in to change notification settings - Fork 1
/
wallet.php
128 lines (104 loc) · 3.71 KB
/
wallet.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
<?php
require 'vendor/autoload.php';
use GuzzleHttp\Client;
use Firebase\JWT\JWT;
class WalletPass {
private $credentials;
private $client;
private $baseUrl = 'https://walletobjects.googleapis.com/walletobjects/v1';
private $issuerId = '';
private $classId;
public function __construct($credentialsPath) {
$this->credentials = json_decode(file_get_contents($credentialsPath), true);
$this->client = new Client();
$this->classId = $this->issuerId . '.';
}
private function getAuthToken() {
$tokenUri = 'https://oauth2.googleapis.com/token';
$jwt = JWT::encode([
'iss' => $this->credentials['client_email'],
'scope' => 'https://www.googleapis.com/auth/wallet_object.issuer',
'aud' => $tokenUri,
'exp' => time() + 3600,
'iat' => time()
], $this->credentials['private_key'], 'RS256');
$response = $this->client->post($tokenUri, [
'form_params' => [
'grant_type' => 'urn:ietf:params:oauth:grant-type:jwt-bearer',
'assertion' => $jwt
]
]);
$data = json_decode($response->getBody(), true);
return $data['access_token'];
}
private function formatCodabar($accountNumber) {
return 'A' . $accountNumber . 'A';
}
public function createPassObject() {
$randomNumber = rand(1000, 9999);
$objectId = "{$this->issuerId}.{$randomNumber}";
$accountNumber = "29085006805780"; // Hardcoded account number
$codabar = $this->formatCodabar($accountNumber);
$firstName = "Test ";
$lastName = "Test";
$genericObject = [
'id' => $objectId,
'classId' => $this->classId,
'genericType' => 'GENERIC_TYPE_UNSPECIFIED',
'logo' => [
'sourceUri' => [
'uri' => ''
]
],
'cardTitle' => [
'defaultValue' => [
'language' => 'en',
'value' => ''
]
],
'header' => [
'defaultValue' => [
'language' => 'en',
'value' => $firstName . ' ' . $lastName
]
],
'barcode' => [
'type' => 'CODABAR',
'value' => $codabar,
'alternateText' => $accountNumber // Added missing 'alternateText'
],
'hexBackgroundColor' => '#6e3acf', // Fixed formatting and added to array
'heroImage' => [
'sourceUri' => [
'uri' => ''
],
'contentDescription' => [
'defaultValue' => [
'language' => 'en-US',
'value' => 'HERO_IMAGE_DESCRIPTION'
]
]
]
];
$claims = [
'iss' => $this->credentials['client_email'],
'aud' => 'google',
'origins' => [],
'typ' => 'savetowallet',
'payload' => [
'genericObjects' => [$genericObject]
]
];
$token = JWT::encode($claims, $this->credentials['private_key'], 'RS256');
$saveUrl = "https://pay.google.com/gp/v/save/{$token}";
return $saveUrl;
}
}
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
header("Access-Control-Allow-Origin: *");
header("Access-Control-Allow-Methods: POST");
header("Access-Control-Allow-Headers: Content-Type, Authorization");
$walletPass = new WalletPass('config/walletconfig.json');
echo $walletPass->createPassObject();
}
?>