private payoutItemDetails getPayoutItem(string payoutItemID, PayPalOAuthToken authToken, Guid logID) { Log(MessageType.Info, "getPayouts()", "Fetch payouts", relatedMessageID: logID); try { var request = new WebClient.RequestParams(this) { Method = HTTPRequestMethod.GET, ContentType = ContentType.JSON, Headers = new Dictionary <string, string> { { HDR_AUTHORIZATION, authToken.AuthorizationHeader } } }; var response = WebClient.GetJson(URI_GetPayoutItem(payoutItemID), request); Log(MessageType.Trace, "getPayouts()", "Payouts", relatedMessageID: logID, parameters: response.ToJSON()); Log(MessageType.Info, "getPayouts()", "Payotus fetched", relatedMessageID: logID); return(new payoutItemDetails(response)); } catch (Exception ex) { var error = composeError(StringConsts.PAYPAL_PAYOUT_ITEM_FETCH_ERROR_MESSAGE.Args(ex.ToMessageWithType()), ex); Log(MessageType.Error, "getPayouts()", error.Message, relatedMessageID: logID); throw error; } }
private bool doVoid(PayPalSession session, PayPalOAuthToken authToken, Transaction transaction, string description = null, object extraData = null) { var logID = Log(MessageType.Info, "doVoid()", "Void transaction"); var payoutItemID = getPayoutItemID(transaction); if (payoutItemID.IsNullOrWhiteSpace()) { if (doRefresh(session, authToken, transaction, extraData)) { session.StoreTransaction(transaction); payoutItemID = getPayoutItemID(transaction); } else { return(false); } } var payoutItem = cancelPayoutItem(payoutItemID, authToken, logID); if (payoutItem.TransactionStatus != payoutTransactionStatus.RETURNED) { return(false); } transaction.__Apply(Transaction.Operation.Void(TransactionStatus.Refunded, payoutItem.TimeProcessed.Value, payoutItem.Token, description, extraData: extraData)); return(true); }
private payoutBatch createPayouts(payout payout, PayPalOAuthToken authToken, Guid logID) { Log(MessageType.Info, "createPayouts()", "Create payouts", relatedMessageID: logID); try { var request = new WebClient.RequestParams(this) { Method = HTTPRequestMethod.POST, ContentType = ContentType.JSON, Headers = new Dictionary <string, string> { { HDR_AUTHORIZATION, authToken.AuthorizationHeader } }, QueryParameters = new Dictionary <string, string> { { PRM_SYNC_MODE, m_SyncMode.AsString() } }, Body = payout.ToJSONDataMap().ToJSON(JSONWritingOptions.Compact) }; var response = WebClient.GetJson(URI_CreatePayouts(), request); Log(MessageType.Trace, "createPayouts()", "Payouts", relatedMessageID: logID, parameters: response.ToJSON()); Log(MessageType.Info, "createPayouts()", "Payouts created", relatedMessageID: logID); return(new payoutBatch(response)); } catch (Exception ex) { var error = composeError(StringConsts.PAYPAL_PAYOUTS_CREATE_ERROR_MESSAGE.Args(ex.ToMessageWithType()), ex); Log(MessageType.Error, "createPayouts()", error.Message, relatedMessageID: logID); throw error; } }
private void refreshOAuthToken(PayPalConnectionParameters connectParameters) { try { Log(MessageType.Info, "refreshOAuthToken()", StringConsts.PAYPAL_REFRESH_TOKEN_MESSAGE); var user = connectParameters.User; var request = new WebClient.RequestParams { Caller = this, Uri = new Uri(m_ApiUri + URI_GET_OAUTH_TOKEN), Method = HTTPRequestMethod.POST, ContentType = ContentType.FORM_URL_ENCODED, Headers = new Dictionary <string, string> { { HDR_AUTHORIZATION, HDR_AUTHORIZATION_BASIC.Args(getBaseAuthString(user.Credentials)) } }, BodyParameters = new Dictionary <string, string> { { PRM_GRANT_TYPE, PRM_CLIENT_CREDENTIALS } } }; var response = WebClient.GetJson(request); Log(MessageType.Info, "refreshOAuthToken()", response.ToJSON()); var oauthToken = new PayPalOAuthToken(response, m_OAuthTokenExpirationMargin); var token = new AuthenticationToken(PAYPAL_REALM, oauthToken); connectParameters.User = new User(user.Credentials, token, user.Name, user.Rights); Log(MessageType.Info, "refreshOAuthToken()", StringConsts.PAYPAL_TOKEN_REFRESHED_MESSAGE); } catch (Exception ex) { var message = StringConsts.PAYPAL_REFRESH_TOKEN_ERROR.Args(ex.ToMessageWithType()); var error = PayPalPaymentException.ComposeError(message, ex); Log(MessageType.Error, "refreshOAuthToken()", error.Message, ex); throw error; } }
private bool doRefresh(PayPalSession session, PayPalOAuthToken authToken, Transaction transaction, object extraData = null) { var logID = Log(MessageType.Info, "doRefresh()", "Refresh transaction"); payoutItemDetails payoutItem = null; var payoutItemID = getPayoutItemID(transaction); if (payoutItemID.IsNullOrWhiteSpace()) { var payouts = getPayouts(getBatchID(transaction), authToken, logID); switch (payouts.BatchHeader.BatchStatus) { case payoutBatchStatus.NEW: case payoutBatchStatus.PENDING: case payoutBatchStatus.PROCESSING: return(false); } if (!payouts.Items.Any()) { return(false); } payoutItem = payouts.Items.FirstOrDefault(item => item.PayoutItem.SenderItemId.Equals(transaction.ID.AsString())); } else { payoutItem = getPayoutItem(payoutItemID, authToken, logID); } if (payoutItem == null) { return(false); } var transactionStatus = mapTransactionStatus(payoutItem.TransactionStatus); if (transaction.Status == transactionStatus) { return(false); } transaction.__Apply(Transaction.Operation.Refresh(transactionStatus, payoutItem.TimeProcessed, payoutItem.Token, payoutItem.Amount, payoutItem.PayoutItemFee.Value, extraData)); return(true); }
private payoutItemDetails cancelPayoutItem(string payoutItemID, PayPalOAuthToken authToken, Guid logID) { Log(MessageType.Info, "cancelPayoutIyem()", "Cancel payout item", relatedMessageID: logID); try { var request = new WebClient.RequestParams(this) { Method = HTTPRequestMethod.POST, ContentType = ContentType.JSON, Headers = new Dictionary <string, string> { { HDR_AUTHORIZATION, authToken.AuthorizationHeader } } }; var response = WebClient.GetJson(URI_CancelPayoutItem(payoutItemID), request); Log(MessageType.Trace, "cancelPayoutIyem()", "Payout Item", relatedMessageID: logID, parameters: response.ToJSON()); var payoutItem = new payoutItemDetails(response); if (payoutItem.TransactionStatus == payoutTransactionStatus.RETURNED) { Log(MessageType.Info, "cancelPayoutIyem()", "Payout item canceled", relatedMessageID: logID); } else { Log(MessageType.Info, "cancelPayoutIyem()", "Payout item not canceled", relatedMessageID: logID); } return(payoutItem); } catch (Exception ex) { var error = composeError(StringConsts.PAYPAL_PAYOUT_ITEM_CANCEL_ERROR_MESSAGE.Args(ex.ToMessageWithType()), ex); Log(MessageType.Error, "cancelPayoutIyem()", error.Message, ex, relatedMessageID: logID); throw error; } }
private bool doTransfer(PayPalSession session, PayPalOAuthToken authToken, Transaction transaction, object extraData = null) { var logID = Log(MessageType.Info, "doTransfer()", "Transfer {0}".Args(transaction.Amount)); var fromActualData = session.FetchAccountData(transaction.From); var toActualData = session.FetchAccountData(transaction.To); var payouts = createPayouts( new payout { SenderBatchHeader = new payoutSenderBatchHeader { SenderBatchID = transaction.ID.AsString(), EmailSubject = m_PayoutEmailSubject, RecipientType = payoutRecipientType.EMAIL }, Items = new List <payoutItem> { new payoutItem { SenderItemId = transaction.ID.AsString(), RecipientType = payoutRecipientType.EMAIL, Amount = transaction.Amount, Note = transaction.Description, Receiver = toActualData.AccountID.AsString() } } }, authToken, logID); switch (payouts.BatchHeader.BatchStatus) { case payoutBatchStatus.NEW: case payoutBatchStatus.PENDING: case payoutBatchStatus.PROCESSING: transaction.__Apply(Transaction.Operation.Refresh(TransactionStatus.Pending, App.TimeSource.UTCNow, payouts.BatchHeader.PayoutBatchID, transaction.Amount.Value, extraData: extraData)); return(true); case payoutBatchStatus.SUCCESS: var payoutItem = payouts.Items.FirstOrAnyOrDefault(item => item.PayoutItem.SenderItemId.Equals(transaction.ID.ToString())); if (payoutItem == null) { throw new PaymentException(); } var transactionStatus = mapTransactionStatus(payoutItem.TransactionStatus); switch (transactionStatus) { case TransactionStatus.Pending: case TransactionStatus.Unclaimed: case TransactionStatus.Refunded: break; case TransactionStatus.Success: StatTransfer(transaction.Amount); break; default: throw new PaymentException(); } transaction.__Apply(Transaction.Operation.Refresh(transactionStatus, payouts.BatchHeader.TimeCreated.Value, payoutItem.Token, transaction.Amount.Value, payoutItem.PayoutItemFee.Value, extraData: extraData)); return(true); } throw new PaymentException(); }
private void refreshOAuthToken(PayPalConnectionParameters connectParameters) { try { Log(MessageType.Info, "refreshOAuthToken()", StringConsts.PAYPAL_REFRESH_TOKEN_MESSAGE); var user = connectParameters.User; var request = new WebClient.RequestParams { Caller = this, Uri = new Uri(m_ApiUri + URI_GET_OAUTH_TOKEN), Method = HTTPRequestMethod.POST, ContentType = ContentType.FORM_URL_ENCODED, Headers = new Dictionary<string, string> { { HDR_AUTHORIZATION, HDR_AUTHORIZATION_BASIC.Args(getBaseAuthString(user.Credentials)) } }, BodyParameters = new Dictionary<string, string> { { PRM_GRANT_TYPE, PRM_CLIENT_CREDENTIALS } } }; var response = WebClient.GetJson(request); Log(MessageType.Info, "refreshOAuthToken()", response.ToJSON()); var oauthToken = new PayPalOAuthToken(response, m_OAuthTokenExpirationMargin); var token = new AuthenticationToken(PAYPAL_REALM, oauthToken); connectParameters.User = new User(user.Credentials, token, user.Name, user.Rights); Log(MessageType.Info, "refreshOAuthToken()", StringConsts.PAYPAL_TOKEN_REFRESHED_MESSAGE); } catch (Exception ex) { var message = StringConsts.PAYPAL_REFRESH_TOKEN_ERROR.Args(ex.ToMessageWithType()); var error = PayPalPaymentException.ComposeError(message, ex); Log(MessageType.Error, "refreshOAuthToken()", error.Message, ex); throw error; } }