@Override
  public void unpack(Map<String, Object> fieldValues, ControlMessage cm, BusinessMessage bm)
      throws PacketOperationException {

    // 备付金密码
    String prePayPwd = (String) fieldValues.get("D_PREPAY_PWD");
    if (prePayPwd == null) throw new PacketOperationException();
    bm.setPrePayPwd(prePayPwd);

    // 交易金额
    String amount = (String) fieldValues.get("D_AMOUNT");
    if (amount == null) throw new PacketOperationException();
    bm.setAmount(Double.valueOf(amount));

    // 用户号
    String userCode = (String) fieldValues.get("D_USER_CODE");
    if (userCode == null) throw new PacketOperationException();
    bm.setUserCode(userCode);

    // 附加响应数据
    String data = (String) fieldValues.get("D_ADDITIONAL_TIP");
    if (data == null) throw new PacketOperationException();
    bm.setCurrencyCode(data);

    // 货币代码
    String currencyCode = (String) fieldValues.get("D_CURRENCY_CODE");
    if (currencyCode == null) throw new PacketOperationException();
    bm.setCurrencyCode(currencyCode);

    // 自定义域
    String customField = (String) fieldValues.get("D_CUSTOM_FIELD");
    if (customField == null) throw new PacketOperationException();
    bm.setCustomField(customField);

    // 原系统流水号
    String origSysJournalSeqno = (String) fieldValues.get("D_SYS_ORIGSEQNO");
    if (origSysJournalSeqno == null) throw new PacketOperationException();
    bm.setOrigSysJournalSeqno(origSysJournalSeqno);
  }