ข้อกำหนดเบื้องต้น
ตรวจสอบว่าคุณทำตามขั้นตอนต่อไปนี้แล้วก่อนดำเนินการต่อ
เลือกบัญชีที่จะเปิดใช้การแตะอัจฉริยะ
ก่อนดำเนินการต่อ คุณต้องระบุบัญชีที่จะกำหนดให้เป็นบัญชี บัญชีผู้ออกการแลกสิทธิ์ ซึ่งทำได้ 2 วิธีในการพิจารณาดังนี้
สร้างบัญชีผู้ออกบัตรใหม่
ข้อมูลติดต่อบัญชีของบัญชีใหม่ต้องมีข้อมูล สำหรับคำแนะนำเกี่ยวกับวิธีดำเนินการใน Google Pay และ กระเป๋าสตางค์ Console บทความสนับสนุน ตัวอย่างโค้ดต่อไปนี้สาธิตการสร้างบัญชีผู้ออกบัตรโดยใช้ API ของ Google Wallet:
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 และ TeLuv คุณสามารถจัดการคลาสบัตรโดยสารได้ใน วิธีต่อไปนี้
แนวทาง | คำอธิบาย |
---|---|
บัญชีผู้ออกรายเดียว | มีประเภทการสะสมคะแนนทั้งหมดภายใต้ผู้ออกใบรับรองรายเดียว บัญชี "Foo-Loyalty" ขอแนะนำตัวเลือกนี้ หากคุณวางแผนที่จะติดตามบัตร สามารถแลกได้ในระดับชั้นเรียน และยัง ตัวเลือกที่ดีหากคุณไม่เคยให้สิทธิ์ผู้ขาย สิทธิ์เข้าถึง API ไปยังบัญชีผู้ออกบัตร |
แยกบัญชีผู้ออกบัตร | สร้างบัญชีผู้ออก 2 บัญชีแยกกัน: "iLuvCoffee ผ่าน Foo-Loyalty" และ "teaLuv via Foo-Loyalty" แนะนำให้ใช้ตัวเลือกนี้หากคุณต้องการ ว่าชั้นเรียนทั้งหมดภายใต้บัญชีผู้ออกบัตรหนึ่งๆ แลกสิทธิ์ได้ที่ระดับผู้ขาย หรือหาก คุณวางแผนจะให้ merchants API เข้าถึง บัญชีผู้ออกบัตร |
บัญชีผู้ออกการแลกสิทธิ์
การพิจารณาการแลกสิทธิ์ที่ถูกต้องมี 2 กรณีดังนี้ บัญชีผู้ออกบัตรที่จะใช้
สถานการณ์ที่ 1: ผู้ขายใช้การแตะอัจฉริยะอยู่แล้ว
หากผู้ขายยืนยันว่าสามารถแลกจาก Google Wallet ได้โดยใช้ เครื่องชำระเงิน (ผู้ขายตั้งค่าเป็นผู้ออกการแลกสิทธิ์อยู่แล้ว) ให้ทำตาม ได้ที่ด้านล่าง
- ขอรหัสผู้ออกการแลกสิทธิ์ของผู้ขาย
- เพิ่มรหัสผู้ออกการแลกสิทธิ์ของผู้ขายลงในพร็อพเพอร์ตี้
redemptionIssuers
ของคลาสบัตร
สถานการณ์ที่ 2: ผู้ขายเพิ่งเริ่มใช้การแตะอัจฉริยะ
ในกรณีนี้ ผู้ขายมีเครื่องชำระเงินที่รองรับการแตะอัจฉริยะ แต่ยังไม่รองรับ ได้ใช้ประโยชน์จากฟีเจอร์นี้ ผู้ขาย ผู้ให้บริการเครื่องชำระเงิน หรือผู้พัฒนาบัตรจะ ต้องดำเนินการตั้งค่าแบบครั้งเดียวเพื่อเปิดใช้การแตะอัจฉริยะบนเครื่องชำระเงินของผู้ขาย
สำหรับข้อมูลเพิ่มเติม โปรดดู การกำหนดค่าผู้ขาย