ข้อกำหนดเบื้องต้น
โปรดตรวจสอบว่าคุณได้ทำตามขั้นตอนต่อไปนี้แล้วก่อนที่จะดำเนินการต่อ
กำหนดบัญชีที่จะเปิดใช้สำหรับการแตะอัจฉริยะ
ก่อนดำเนินการต่อ คุณจะต้องระบุบัญชีที่จะกำหนดให้เป็นบัญชีผู้ออกการแลกสิทธิ์ การตรวจสอบดังกล่าวมี 2 วิธีดังนี้
สร้างบัญชีผู้ออกบัตรใหม่
ข้อมูลติดต่อของบัญชีใหม่ต้องมีข้อมูลของผู้ขาย สำหรับคำแนะนำเกี่ยวกับวิธีดำเนินการในคอนโซล Google Pay และ Wallet โปรดดูบทความสนับสนุนนี้ ตัวอย่างโค้ดต่อไปนี้แสดงให้เห็นการสร้างบัญชีผู้ออกบัตรโดยใช้ Google Wallet API
Java
/** * Create a new Google Wallet Issuer account. * * @param issuerName The Issuer's name. * @param issuerEmail The Issuer's email address. * @throws IOException */ public void CreateIssuerAccount(String issuerName, String issuerEmail) throws IOException { // New Issuer information Issuer issuer = new Issuer() .setName(issuerName) .setContactInfo(new IssuerContactInfo().setEmail(issuerEmail)); Issuer response = service.issuer().insert(issuer).execute(); System.out.println("Issuer insert response"); System.out.println(response.toPrettyString()); }
PHP
/** * Create a new Google Wallet issuer account. * * @param string $issuerName The Issuer's name. * @param string $issuerEmail The Issuer's email address. */ public function createIssuerAccount(string $issuerName, string $issuerEmail) { // New Issuer information $issuer = new Google_Service_Walletobjects_Issuer([ 'name' => $issuerName, 'contactInfo' => new Google_Service_Walletobjects_IssuerContactInfo([ 'email' => $issuerEmail, ]), ]); $response = $this->service->issuer->insert($issuer); print "Issuer insert response\n"; print_r($response); }
Python
def create_issuer_account(self, issuer_name: str, issuer_email: str): """Create a new Google Wallet Issuer account. Args: issuer_name (str): The Issuer's name. issuer_email (str): The Issuer's email address. """ # New Issuer information issuer = {'name': issuer_name, 'contactInfo': {'email': issuer_email}} # Make the POST request response = self.http_client.post(url=self.issuer_url, json=issuer) print('Issuer insert response') print(response.text)
C#
/// <summary> /// Create a new Google Wallet Issuer account. /// </summary> /// <param name="issuerName">The Issuer's name.</param> /// <param name="issuerEmail">The Issuer's email address.</param> public void CreateIssuerAccount(string issuerName, string issuerEmail) { // New issuer information Issuer issuer = new Issuer() { ContactInfo = new IssuerContactInfo() { Email = issuerEmail }, Name = issuerName, }; Stream responseStream = service.Issuer .Insert(issuer) .ExecuteAsStream(); StreamReader responseReader = new StreamReader(responseStream); JObject jsonResponse = JObject.Parse(responseReader.ReadToEnd()); Console.WriteLine("Issuer insert response"); Console.WriteLine(jsonResponse.ToString()); }
Node.js
/** * Create a new Google Wallet Issuer account. * * @param {string} issuerName The Issuer's name. * @param {string} issuerEmail The Issuer's email address. */ async createIssuerAccount(issuerName, issuerEmail) { // New Issuer information let issuer = { name: issuerName, contactInfo: { email: issuerEmail } }; let response = await this.httpClient.request({ url: this.issuerUrl, method: 'POST', data: issuer }); console.log('Issuer insert response'); console.log(response); }
ในตอนแรก จะมีเพียงผู้ใช้หลัก (บัญชีบริการหรือผู้ใช้) ที่สร้างบัญชีผู้ออกบัตรเท่านั้นที่จะมีสิทธิ์เข้าถึง คุณจะต้องอัปเดตสิทธิ์ของบัญชีผู้ออกบัตรให้รวมผู้ใช้หรือบัญชีบริการเพิ่มเติมที่ควรจัดการบัตรได้ ตัวอย่างโค้ดต่อไปนี้จะแสดงการอัปเดตสิทธิ์ของบัญชีผู้ออกบัตร
Java
/** * Update permissions for an existing Google Wallet Issuer account. * * <p><strong>Warning:</strong> This operation overwrites all existing permissions! * * <p>Example permissions list argument below. Copy the add entry as needed for each email address * that will need access. Supported values for role are: 'READER', 'WRITER', and 'OWNER' * * <pre><code> * ArrayList<Permission> permissions = new ArrayList<Permission>(); * permissions.add(new Permission().setEmailAddress("emailAddress").setRole("OWNER")); * </code></pre> * * @param issuerId The Issuer ID being used for this request. * @param permissions The list of email addresses and roles to assign. * @throws IOException */ public void UpdateIssuerAccountPermissions(String issuerId, ArrayList<Permission> permissions) throws IOException { Permissions response = service .permissions() .update( Long.parseLong(issuerId), new Permissions().setIssuerId(Long.parseLong(issuerId)).setPermissions(permissions)) .execute(); System.out.println("Issuer permissions update response"); System.out.println(response.toPrettyString()); }
PHP
/** * Update permissions for an existing Google Wallet Issuer account. * * **Warning:** This operation overwrites all existing permissions! * * Example permissions list argument below. Copy the entry as * needed for each email address that will need access. Supported * values for role are: 'READER', 'WRITER', and 'OWNER' * * $permissions = array( * new Google_Service_Walletobjects_Permission([ * 'emailAddress' => 'email-address', * 'role' => 'OWNER', * ]), * ); * * @param string $issuerId The Issuer ID being used for this request. * @param array $permissions The list of email addresses and roles to assign. */ public function updateIssuerAccountPermissions(string $issuerId, array $permissions) { // Make the PUT request $response = $this->service->permissions->update( $issuerId, new Google_Service_Walletobjects_Permissions([ 'issuerId' => $issuerId, 'permissions' => $permissions, ]) ); print "Permissions update response\n"; print_r($response); }
Python
def update_issuer_account_permissions(self, issuer_id: str, permissions: List): """Update permissions for an existing Google Wallet Issuer account. **Warning:** This operation overwrites all existing permissions! Example permissions list argument below. Copy the dict entry as needed for each email address that will need access. Supported values for role are: 'READER', 'WRITER', and 'OWNER' permissions = [ { 'emailAddress': 'email-address', 'role': 'OWNER' } ] Args: issuer_id (str): The Issuer ID being used for this request. permissions (List): The list of email addresses and roles to assign. """ response = self.http_client.put(url=f'{self.permissions_url}/{issuer_id}', json={ 'issuerId': issuer_id, 'permissions': permissions }) print('Permissions update response') print(response.text)
C#
/// <summary> /// Update permissions for an existing Google Wallet Issuer account. /// <para /> /// <strong>Warning:</strong> This operation overwrites all existing permissions! /// <para /> /// Example permissions list argument below. Copy the add entry as needed for each email /// address that will need access.Supported values for role are: 'READER', 'WRITER', and 'OWNER' /// <para /> /// <![CDATA[List<Permission> permissions = new List<Permission>();]]> /// <para /> /// permissions.Add(new Permission { EmailAddress = "emailAddress", Role = "OWNER"}); /// </summary> /// <param name="issuerId">The issuer ID being used for this request.</param> /// <param name="permissions">The list of email addresses and roles to assign.</param> public void UpdateIssuerAccountPermissions(string issuerId, List<Permission> permissions) { Stream responseStream = service.Permissions .Update(new Permissions { IssuerId = long.Parse(issuerId), PermissionsValue = permissions }, long.Parse(issuerId)) .ExecuteAsStream(); StreamReader responseReader = new StreamReader(responseStream); JObject jsonResponse = JObject.Parse(responseReader.ReadToEnd()); Console.WriteLine("Issuer permissions update response"); Console.WriteLine(jsonResponse.ToString()); }
Node.js
/** * Update permissions for an existing Google Wallet Issuer account. * * **Warning:** This operation overwrites all existing permissions! * * Example permissions list argument below. Copy the dict entry as * needed for each email address that will need access. Supported * values for role are: 'READER', 'WRITER', and 'OWNER' * * let permissions = [ * { * 'emailAddress': 'email-address', * 'role': 'OWNER', * }, * ]; * * @param {string} issuerId The Issuer ID being used for this request. * @param {Array} permissions The list of email addresses and roles to assign. */ async updateIssuerPermissions(issuerId, permissions) { let response = await this.httpClient.request({ url: `${this.permissionsUrl}/${issuerId}`, method: 'PUT', data: { issuerId: issuerId, permissions: permissions } }); console.log('Permissions update response'); console.log(response); }
ใช้บัญชีที่มีอยู่
เราควรใช้เกณฑ์ต่อไปนี้เพื่อระบุว่าจะใช้บัญชีผู้ออกบัตรที่มีคลาสบัตรที่มีอยู่ได้หรือไม่
- หากบัญชีผู้ออกบัตรสำหรับการพัฒนาบัตรมีคลาสสำหรับผู้ขายรายอื่นๆ คุณต้องตั้งค่าบัญชีใหม่ในนามของผู้ขาย
- หากบัญชีผู้ออกบัตรสำหรับการพัฒนาบัตรมีเฉพาะคลาสสำหรับผู้ขายรายนั้น ก็ใช้บัญชีดังกล่าวได้
หากบัญชีเป็นไปตามเกณฑ์เหล่านี้ คุณต้องอัปเดตข้อมูลติดต่อใน Business Profile ด้วยข้อมูลของผู้ขายเพื่อให้แน่ใจว่าชื่อบัญชีจะระบุถึงผู้ขายได้ เฉพาะคุณเท่านั้นที่ควรมีสิทธิ์เข้าถึง API ในบัญชีนี้ นักพัฒนาแอปบัตรผ่านเพิ่มเติมควรสร้างบัญชีผู้ออกบัตรของตนเอง
การกำหนดค่าบัญชีผู้ออกการแลกสิทธิ์
ใช้คอนโซล Google Pay และ Wallet
คุณจะต้องทำตามขั้นตอนต่อไปนี้ในบัญชีผู้ออกการแลกสิทธิ์
- ไปที่ส่วน Google Wallet API
- เลือกฟีเจอร์เพิ่มเติม
- เลือกเพิ่มคีย์การตรวจสอบสิทธิ์
- อัปโหลดคีย์สาธารณะ (ไฟล์
.pem
) และระบุเวอร์ชันคีย์ - เลือกสร้างคีย์การตรวจสอบสิทธิ์
คุณจะได้รับรหัสผู้เรียกเก็บเงินเมื่ออัปโหลดคีย์การตรวจสอบสิทธิ์เรียบร้อยแล้ว
-----BEGIN PUBLIC KEY-----
MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEchyXj869zfmKhRi9xP7f2AK07kEo
4lE7ZlWTN14jh4YBTny+hRGRXcUzevV9zSSPJlPHpqqu5pEwlv1xyFvE1w==
-----END PUBLIC KEY-----
ใช้ Google Wallet API
อัปโหลดคีย์สาธารณะ
หากต้องการกำหนดคีย์สาธารณะและเวอร์ชันคีย์โดยใช้ Google Wallet API คุณจะต้องส่งคำขอ PATCH
ไปยังปลายทางผู้ออกบัตร
PATCH https://walletobjects.googleapis.com/walletobjects/v1/issuer/{issuerId}
เนื้อหาคำขอ PATCH
จะมีลักษณะคล้ายกับด้านล่างนี้
{
"smartTapMerchantData": {
"authenticationKeys": [
{
"id": 1,
"publicKeyPem": "-----BEGIN PUBLIC KEY-----\n...\n-----END PUBLIC KEY-----"
},
{
"id": 2,
"publicKeyPem": "-----BEGIN PUBLIC KEY-----\n...\n-----END PUBLIC KEY-----"
}
]
}
}
ตัวอย่างโค้ดต่อไปนี้แสดงให้เห็นการอัปเดตบัญชีผู้ออกให้รวมคีย์สาธารณะสาธิตที่กล่าวถึงก่อนหน้านี้
Java
/** * Add a new public key to an Issuer account. * * @param issuerId The issuer ID being used for this request. * @throws IOException */ public void AddSmartTapKey(Long issuerId) throws IOException { // New smart tap key information Issuer patchBody = new Issuer() .setSmartTapMerchantData( new SmartTapMerchantData() .setAuthenticationKeys( Arrays.asList( new AuthenticationKey() .setId(1) .setPublicKeyPem( "-----BEGIN PUBLIC KEY-----\n" + "MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEchyXj869zfmKhRi9xP7f2AK07kEo\n" + "4lE7ZlWTN14jh4YBTny+hRGRXcUzevV9zSSPJlPHpqqu5pEwlv1xyFvE1w==\n" + "-----END PUBLIC KEY-----")))); Issuer response = service.issuer().patch(issuerId, patchBody).execute(); System.out.println("Issuer patch response"); System.out.println(response.toPrettyString()); }
PHP
/** * Add a new public key to an Issuer account. * * @param string $issuerId The issuer ID being used for this request. */ public function addSmartTapKey(string $issuerId) { // New smart tap key information $patchBody = new Google_Service_Walletobjects_Issuer([ 'smartTapMerchantData' => new Google_Service_Walletobjects_SmartTapMerchantData([ 'authenticationKeys' => [ new Google_Service_Walletobjects_AuthenticationKey([ 'id' => 1, 'publicKeyPem' => "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEchyXj869zfmKhRi9xP7f2AK07kEo\n4lE7ZlWTN14jh4YBTny+hRGRXcUzevV9zSSPJlPHpqqu5pEwlv1xyFvE1w==\n-----END PUBLIC KEY-----" ]) ] ]) ]); $response = $this->service->issuer->patch($issuerId, $patchBody); print "Issuer patch response\n"; print_r($response); }
Python
def add_smart_tap_key(self, issuer_id: str) -> str: """Add a new public key to an Issuer account. Args: issuer_id (str): The issuer ID being used for this request. """ # New smart tap key information patch_body = { 'smartTapMerchantData': { 'authenticationKeys': [{ 'id': 1, 'publicKeyPem': '-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEchyXj869zfmKhRi9xP7f2AK07kEo\n4lE7ZlWTN14jh4YBTny+hRGRXcUzevV9zSSPJlPHpqqu5pEwlv1xyFvE1w==\n-----END PUBLIC KEY-----' }] } } # Make the PATCH request response = self.http_client.patch(url=f'{self.issuer_url}/{issuer_id}', json=patch_body) print('Issuer patch response') print(response.text) return response.json()['smartTapMerchantData']['smartTapMerchantId']
C#
/// <summary> /// Add a new public key to an Issuer account. /// </summary> /// <param name="issuerId">The issuer ID being used for this request.</param> public void AddSmartTapKey(long issuerId) { // New smart tap key information Issuer patchBody = new Issuer() { SmartTapMerchantData = new SmartTapMerchantData { AuthenticationKeys = new List<AuthenticationKey> { new AuthenticationKey { Id = 1, PublicKeyPem = "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEchyXj869zfmKhRi9xP7f2AK07kEo\n4lE7ZlWTN14jh4YBTny+hRGRXcUzevV9zSSPJlPHpqqu5pEwlv1xyFvE1w==\n-----END PUBLIC KEY-----" } } } }; Stream responseStream = service.Issuer .Patch(patchBody, issuerId) .ExecuteAsStream(); StreamReader responseReader = new StreamReader(responseStream); JObject jsonResponse = JObject.Parse(responseReader.ReadToEnd()); Console.WriteLine("Issuer patch response"); Console.WriteLine(jsonResponse.ToString()); }
Node.js
/** * Add a new public key to an Issuer account. * * @param {string} issuerId The issuer ID being used for this request. */ async addSmartTapKey(issuerId) { // New smart tap key information let patchBody = { smartTapMerchantData: { authenticationKeys: [ { id: 1, publicKeyPem: '-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEchyXj869zfmKhRi9xP7f2AK07kEo\n4lE7ZlWTN14jh4YBTny+hRGRXcUzevV9zSSPJlPHpqqu5pEwlv1xyFvE1w==\n-----END PUBLIC KEY-----' } ] } }; let response = await this.httpClient.request({ url: `${this.issuerUrl}/${issuerId}`, method: 'PATCH', data: patchBody }); console.log('Issuer patch response'); console.log(response); }
คำตอบจะประกอบด้วยเนื้อหาที่คุณส่งและช่องเพิ่มเติม smartTapMerchantData.smartTapMerchantId
นี่คือรหัสผู้เรียกเก็บเงินของบัญชี
ผู้ออกการแลกสิทธิ์
ขอรหัสผู้เรียกเก็บเงิน
หลังจากเพิ่มคีย์และเวอร์ชันคีย์แล้ว คุณจะใช้ Google Wallet API เพื่อรับรหัสผู้เรียกเก็บเงินได้โดยการส่งคำขอ GET
ไปยังปลายทางผู้ออกบัตร
GET https://walletobjects.googleapis.com/walletobjects/v1/issuer/{issuerId}
Java
/** * Get the Collector ID for an Issuer account. * * @param issuerId The issuer ID being used for this request. * @return The Collector ID * @throws IOException */ public Long GetCollectorId(Long issuerId) throws IOException { Issuer response = service.issuer().get(issuerId).execute(); System.out.println("Issuer patch response"); System.out.println(response.toPrettyString()); return response.getSmartTapMerchantData().getSmartTapMerchantId(); }
PHP
/** * Get the Collector ID for an Issuer account. * * @param string $issuerId The issuer ID being used for this request. * @return string The Collector ID. */ public function getCollectorId(string $issuerId) { $response = $this->service->issuer->get($issuerId); print "Issuer get response\n"; print_r($response); return $response['smartTapMerchantData']['smartTapMerchantId']; }
Python
def get_collector_id(self, issuer_id: str) -> str: """Get the Collector ID for an Issuer account. Args: issuer_id (str): The issuer ID being used for this request. """ # Make the GET request response = self.http_client.get(url=f'{self.issuer_url}/{issuer_id}') print('Issuer get response') print(response.text) return response.json()['smartTapMerchantData']['smartTapMerchantId']
C#
/// <summary> /// Get the Collector ID for an Issuer account. /// </summary> /// <param name="issuerId">The issuer ID being used for this request.</param> /// <returns>The Collector ID</returns> public string GetCollectorId(long issuerId) { Stream responseStream = service.Issuer .Get(issuerId) .ExecuteAsStream(); StreamReader responseReader = new StreamReader(responseStream); JObject jsonResponse = JObject.Parse(responseReader.ReadToEnd()); Console.WriteLine("Issuer get response"); Console.WriteLine(jsonResponse.ToString()); return jsonResponse["smartTapMerchantData"]["smartTapMerchantId"].Value<string>(); }
Node.js
/** * Get the Collector ID for an Issuer account. * * @param {string} issuerId The issuer ID being used for this request. * * @returns {string} The Collector ID */ async getCollectorId(issuerId) { let response = await this.httpClient.request({ url: `${this.issuerUrl}/${issuerId}`, method: 'GET' }); console.log('Issuer patch response'); console.log(response); return response.data.smartTapMerchantData.smartTapMerchantId; }
คำตอบจะประกอบด้วยช่อง smartTapMerchantData.smartTapMerchantId
นี่คือรหัสผู้เรียกเก็บเงินของบัญชีผู้ออกการแลกสิทธิ์
การจัดการบัญชีผู้ออกบัตร
การจัดระเบียบบัตร
วิธีทั่วไปในการจัดการคลาสและออบเจ็กต์บัตรสำหรับผู้ขายหลายรายมีอยู่ 2 วิธีดังนี้
- บัญชีผู้ออกส่วนกลางบัญชีเดียวสำหรับผู้ขายทั้งหมด
- บัญชีผู้ออกบัตรใหม่ 1 บัญชีสำหรับผู้ขายแต่ละราย
เช่น Foo-Loyalty จัดการโปรแกรมสะสมคะแนนสำหรับผู้ขาย 2 รายแยกกัน ได้แก่ ILuvCoffee และ TeaLuv คุณสามารถจัดการชั้นเรียนบัตรด้วยวิธีใดวิธีหนึ่งต่อไปนี้
แนวทาง | คำอธิบาย |
---|---|
บัญชีผู้ออกบัตรรายเดียว | มีคลาสการสะสมคะแนนทั้งหมดภายใต้บัญชี ผู้ออกบัตร "Foo-Loyalty" บัญชีเดียว เราขอแนะนำตัวเลือกนี้หากคุณวางแผนที่จะติดตามสถานที่ที่แลกบัตรได้ในระดับชั้นเรียน และยังเป็นตัวเลือกที่ดีหากคุณไม่เคยให้สิทธิ์ API ผู้ขายเข้าถึงบัญชีผู้ออกรหัสนั้นเลย |
บัญชีผู้ออกบัตรแยกต่างหาก | สร้างบัญชีผู้ออก 2 บัญชีแยกกัน ได้แก่ "iLuvCoffee ผ่าน Foo-Loyalty" และ "teaLuv ผ่าน Foo-Loyalty" เราขอแนะนำตัวเลือกนี้หากคุณต้องการเข้าใจว่าคลาสทั้งหมดภายใต้บัญชีผู้ออกบัตรหนึ่งๆ จะแลกสิทธิ์ได้ที่ระดับผู้ขาย หรือในกรณีที่คุณวางแผนที่จะให้สิทธิ์เข้าถึง API ของผู้ขายแก่บัญชีผู้ออกบัตร |
บัญชีผู้ออกการแลกสิทธิ์
มี 2 สถานการณ์ที่ควรพิจารณาเมื่อเลือกใช้บัญชีผู้ออกการแลกสิทธิ์ที่ถูกต้อง
สถานการณ์ที่ 1: ผู้ขายใช้การแตะอัจฉริยะอยู่แล้ว
หากผู้ขายยืนยันว่าสามารถแลกจาก Google Wallet โดยใช้เทอร์มินัลของตนได้แล้ว (ผู้ขายได้รับการตั้งค่าเป็นผู้ออกการแลกสิทธิ์อยู่แล้ว) ให้ทำตามขั้นตอนต่อไปนี้
- ขอรหัสผู้แลกสิทธิ์สำหรับการแลกสิทธิ์ของผู้ขาย
- เพิ่มรหัสผู้ออกการแลกสิทธิ์ของผู้ขายลงในพร็อพเพอร์ตี้
redemptionIssuers
ของประเภทบัตร
สถานการณ์ที่ 2: ผู้ขายยังไม่คุ้นเคยกับการแตะอัจฉริยะ
ในสถานการณ์นี้ ผู้ขายมีเครื่องชำระเงินที่รองรับการแตะอัจฉริยะ แต่ยังไม่ได้ใช้ฟีเจอร์ดังกล่าว ผู้ขาย ผู้ให้บริการเครื่องชำระเงิน หรือผู้พัฒนาบัตรจะต้องตั้งค่าแบบครั้งเดียวเพื่อเปิดใช้การแตะอัจฉริยะบนเครื่องชำระเงินของผู้ขาย
ดูข้อมูลเพิ่มเติมได้ที่การกำหนดค่าผู้ขาย