mvallim / emv-qrcode

Java Based EMV QR Code Generator and Parser (MPM, CPM)
https://mvallim.github.io/emv-qrcode/
Apache License 2.0
95 stars 46 forks source link

EmvCard Object To CPM #23

Closed sloopsight closed 3 years ago

sloopsight commented 3 years ago

Hi @mvallim , As per your suggestion I have tried to create CPM BAS64 by using this android NFC library it after tapping it will return this EmvCard object. Now I have to use data returned by EmvCard and create CPM. Here is the code I have written

public class EMVQRCode {

    public static String from(EmvCard card)
    {
        final ConsumerPresentedMode consumerPresentedMode = new ConsumerPresentedMode();
        com.emv.qrcode.model.cpm.CommonDataTemplate cdt= new CommonDataTemplate();
        if (!card.getApplications().isEmpty())
        {
            for (Application app: card.getApplications())
            {
                final ApplicationTemplate applicationTemplate = new ApplicationTemplate();
                applicationTemplate.setApplicationDefinitionFileName(BytesUtils.bytesToString( app.getAid()));
                applicationTemplate.setApplicationLabel(app.getApplicationLabel());
                applicationTemplate.setApplicationTransactionCounter(String.valueOf(app.getTransactionCounter()));
                String name=StringUtils.EMPTY;
                  if (StringUtils.isNotBlank(card.getHolderFirstname()))
                  {
                      name=card.getHolderFirstname()+" "+StringUtils.trimToEmpty(card.getHolderLastname());
                  }

                consumerPresentedMode.addApplicationTemplate(applicationTemplate);
            }
        }

        final CommonDataTransparentTemplate commonDataTransparentTemplate = new CommonDataTransparentTemplate();
        commonDataTransparentTemplate.setTrack2EquivalentData(BytesUtils.bytesToStringNoSpace(card.getTrack2().getRaw()));

        final CommonDataTemplate commonDataTemplate = new CommonDataTemplate();
        commonDataTemplate.setTrack2EquivalentData(BytesUtils.bytesToStringNoSpace(card.getTrack2().getRaw()));
        commonDataTemplate.setApplicationPAN(card.getTrack2().getCardNumber());
        commonDataTemplate.setCommonDataTransparentTemplate(commonDataTransparentTemplate);
        PayloadFormatIndicator pfv=new PayloadFormatIndicator();
        pfv.setValue("CPV01");
        consumerPresentedMode.setPayloadFormatIndicator(pfv);
        consumerPresentedMode.setCommonDataTemplate(commonDataTemplate);
        return  consumerPresentedMode.toBase64();
    }

}

Could please help me to make this mapping correct, thanks for help in advance

mvallim commented 3 years ago

Hi @sloopsight ,

It looks right the way you implemented it.

Thanks,

subhanshu-shukla commented 3 years ago

But i dont have values for many fields like token requestor id, issuers url etc but all these marked optional in Specifications.

mvallim commented 3 years ago

Closing this issue for inactivity.