internal void Fill(Native.PaymentInfo info) { captureMethod = info.CaptureMethod == Native.CaptureMethod.EMV ? CaptureMethod.EMV : CaptureMethod.Magstripe; status = info.Decision == Native.Decision.Refused ? PaymentStatus.Rejected : PaymentStatus.Accepted; paymentMethod = (PaymentMethod)info.ApplicationType; emv = captureMethod == CaptureMethod.EMV ? GetString(info.EmvData, info.EmvDataLength) : null; pan = GetString(info.Pan, info.PanLength); expirationDate = GetString(info.ExpirationDate); holderName = info.HolderNameLength.ToInt32() > 0 ? GetString(info.HolderName, info.HolderNameLength) : null; panSequenceNumber = info.PanSequenceNumber; pin = null; pinKek = null; isOnlinePin = info.IsOnlinePin != 0; requiredPin = info.PinRequired != 0; track1 = info.Track1Length.ToInt32() > 0 ? GetString(info.Track1, info.Track1Length) : null; track2 = GetString(info.Track2, info.Track2Length); track3 = info.Track3Length.ToInt32() > 0 ? GetString(info.Track3, info.Track3Length) : null; expirationDate = expirationDate.Substring(2, 2) + expirationDate.Substring(0, 2); if (holderName != null) { holderName = holderName.Trim().Split('/').Reverse().Aggregate((a, b) => a + ' ' + b); } if (requiredPin && isOnlinePin) { pin = GetString(info.Pin); pinKek = GetString(info.PinKek); } }
internal async Task <PaymentResult> HandlePaymentCallback(int error, Native.PaymentInfo info) { var result = new PaymentResult(); if (error == 0) { result.Fill(info); await result.BuildAccepted(EncryptionKey); } else { result.BuildErrored(error); } return(result); }