public string AuthTransactionToIssuer(string json) { ContactCardOnlineAuthRequest request = ContactCardOnlineAuthRequest.FromJsonString(json); ContactCardOnlineAuthResponse response = new ContactCardOnlineAuthResponse(); try { EMVApproverResponse onlineResponse = GoOnline( new EMVApproverRequest() { EMV_Data = TLVasJSON.Convert(request.EMV_Data), }); response.AuthCode_8A = TLVasJSON.Convert(onlineResponse.AuthCode_8A); response.IssuerAuthData_91 = TLVasJSON.Convert(onlineResponse.IssuerAuthData_91); response.ResponseMessage = onlineResponse.ResponseMessage; if (onlineResponse.IsApproved) { response.Response = ContactCardOnlineAuthResponseEnum.Approved; } else { response.Response = ContactCardOnlineAuthResponseEnum.Declined; } return(JsonConvert.ToString(response.ToJsonString())); } catch (Exception ex) { response.Response = ContactCardOnlineAuthResponseEnum.UnableToGoOnline; Logger.Log("Unable to go online:" + ex.Message); return(JsonConvert.ToString(response.ToJsonString())); } }
private EMVApproverResponse GoOnlineForContactEMV(InterFaceType interfaceType, TLV data, TLV discretionary) { try { #region Merge EMV Lists if (discretionary != null) { data.Children.AddListToList(discretionary.Children); } #endregion EMVApproverResponse onlineResponse = (EMVApproverResponse)onlineContactEMVApprover.DoAuth( new EMVApproverRequest() { EMV_Data = data, TCPClientStream = tcpClientStream }); return(onlineResponse); } catch (Exception ex) { Logger.Log("Unable to go online:" + ex.Message); return(null); } }
private void EmvTxCtl_TxCompleted(object sender, EventArgs e) { if ((e as TxCompletedEventArgs).TxResult == TxResult.Cancelled) { UpdateView(ViewState.StepTxCtl); } if ((e as TxCompletedEventArgs).EMV_Data.IsPresent()) { //the contact app would have already gone online, and the TxResult would be approved or declined //the reason going online for contactless is handled differently to going online for //contact is that with contact we have to go online and then back to the card before we can //process the transaction on the backend, for contacless we can choose to go online and process //the transaction in one call if ((e as TxCompletedEventArgs).TxResult == TxResult.ContactlessOnline) { EMVApproverRequest auth = new EMVApproverRequest() { EMV_Data = (e as TxCompletedEventArgs).EMV_Data.Get() }; try { EMVApproverResponse response = (EMVApproverResponse)onlineApprover.DoAuth(auth); emvTxCtl.SetTxFinalResultLabel("CTLS Online:" + response.ResponseMessage); } catch (Exception ex) { emvTxCtl.SetTxFinalResultLabel("CTLS Online:" + ex.Message); } } } if ((e as TxCompletedEventArgs).QR_Data.IsPresent()) { if ((e as TxCompletedEventArgs).TxResult == TxResult.QRCodeScanned) { //send qr code auth request QRCodeApproverRequest auth = new QRCodeApproverRequest() { QRData = (e as TxCompletedEventArgs).QR_Data.Get() }; try { QRCodeApproverResponse response = (QRCodeApproverResponse)onlineApprover.DoAuth(auth); emvTxCtl.SetTxFinalResultLabel("QRCode Online:" + response.ResponseMessage); } catch (Exception ex) { emvTxCtl.SetTxFinalResultLabel("QRCode Online:" + ex.Message); } } } }
private ApproverResponseBase DoEMVAuth(ApproverRequestBase requestIn) { try { EMVApproverRequest request = ((EMVApproverRequest)requestIn); DCEMVDemoServerClient client = SessionSingleton.GenDCEMVServerApiClient(); using (SessionSingleton.HttpClient) { ContactCardOnlineAuthRequest tx = new ContactCardOnlineAuthRequest() { EMV_Data = TLVasJSON.Convert(request.EMV_Data), }; string responseJson = ""; Task.Run(async() => { responseJson = await client.TransactionAuthtransactiontoissuerPostAsync(tx.ToJsonString()); }).Wait(); ContactCardOnlineAuthResponse response = ContactCardOnlineAuthResponse.FromJsonString(responseJson); EMVApproverResponse approverResponse = null; switch (response.Response) { case ContactCardOnlineAuthResponseEnum.Approved: case ContactCardOnlineAuthResponseEnum.Declined: approverResponse = new EMVApproverResponse(); approverResponse.AuthCode_8A = TLVasJSON.Convert(response.AuthCode_8A); approverResponse.IssuerAuthData_91 = TLVasJSON.Convert(response.IssuerAuthData_91); approverResponse.IsApproved = response.Response == ContactCardOnlineAuthResponseEnum.Approved ? true : false; approverResponse.ResponseMessage = response.ResponseMessage; break; case ContactCardOnlineAuthResponseEnum.UnableToGoOnline: break; } return(approverResponse); } } catch { return(null); } }
private void ContactApp_OnlineRequest(object sender, EventArgs e) { EMVApproverResponse onlineResponse = GoOnlineForContactEMV(InterFaceType.Contact, ((OnlineEventArgs)e).data, ((OnlineEventArgs)e).discretionaryData); if (onlineResponse == null) { contactCardApp.DoOnlineReponse(KernelOnlineResponseType.UnableToGoOnline, TLV.Create(EMVTagsEnum.AUTHORISATION_RESPONSE_CODE_8A_KRN.Tag), TLV.Create(EMVTagsEnum.ISSUER_AUTHENTICATION_DATA_91_KRN.Tag), TLV.Create(EMVTagsEnum.ISSUER_SCRIPT_TEMPLATE_1_71_KRN.Tag), TLV.Create(EMVTagsEnum.ISSUER_SCRIPT_TEMPLATE_2_72_KRN.Tag)); } else { if (onlineResponse.IsApproved) { contactCardApp.DoOnlineReponse(KernelOnlineResponseType.Approve, onlineResponse.AuthCode_8A, onlineResponse.IssuerAuthData_91, onlineResponse.IssuerScriptTemplate_71, onlineResponse.IssuerScriptTemplate_72); } else { contactCardApp.DoOnlineReponse(KernelOnlineResponseType.Decline, onlineResponse.AuthCode_8A, onlineResponse.IssuerAuthData_91, onlineResponse.IssuerScriptTemplate_71, onlineResponse.IssuerScriptTemplate_72); } } }