# 更新交通卡

更新交通卡的相关信息，从而保持卡数据与交通卡公司系统同步。

#### 交互流程

交通卡的更新过程分为：卡片展示、生成更新业务订单和发起更新三个步骤，如下图所示：

#### 开发步骤

1.  开发者App启动后，可调用getCardMetadataInDevice接口获取指定设备上可访问的交通卡信息，并以数组形式返回。
    
    如返回的数组为空，则表示开发者App在该设备上没有可访问的交通卡，无需显示卡片开通入口；如返回数组不为空，则根据返回的交通卡数据进行页面展示。如果交通卡信息中包括卡号、余额信息，则表明该卡片在设备上已开通，显示卡片信息即可；否则可显示卡片的开通入口。
    
    ```
    async getCardMetadataInDevice() {
       try {
          // 如果是手机设备，数组只有一个元素。如果是穿戴设备，会根据连接的穿戴设备数返回对应数量的数组元素。
          const cardMetadataInDeviceList = await this.transitCardClient.getCardMetadataInDevice(this.deviceType);
          console.info(`Succeeded in getting cardMetadataInDevice, card length is ${cardMetadataInDeviceList.length}`);
          return cardMetadataInDeviceList;
       } catch (err) {
          console.error(`Failed to get CardMetadataInDevice, code:${err.code}, message:${err.message}`);
          return [];
       }
    }
    ```
    
2.  用户选择了要更新的交通卡后，开发者App需向开发者的后台服务器发起更新业务订单的生成请求。
    
3.  开发者App可调用updateTransitCard接口发起更新处理过程。
    
    ```
    async updateTransitCard(cardMetadataInDevice: walletTransitCard.CardMetadataInDevice) {
       try {
          const logicalCardNumber = cardMetadataInDevice.cardMetadata[0].logicalCardNumber;
          const specifiedDeviceId = cardMetadataInDevice.deviceId;
          await this.transitCardClient.updateTransitCard(logicalCardNumber, specifiedDeviceId, this.serverOrderId);
          console.info('Succeeded in updating');
       } catch (err) {
          console.error(`Failed to update, code:${err.code}, message:${err.message}`);
       }
    }
    ```