Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
Merge branch 'master' into develop
  • Loading branch information
Giovani Brady committed Aug 21, 2015
2 parents e0f7f85 + b7cd631 commit bb04306
Show file tree
Hide file tree
Showing 3 changed files with 62 additions and 51 deletions.
81 changes: 37 additions & 44 deletions src/StripeClient.Charges.cs
Expand Up @@ -15,7 +15,7 @@ public partial class StripeClient
/// <param name="token">Stripe.js token for a credit card</param>
/// <param name="currency">3-letter ISO currency code</param>
/// <param name="description">Description displayed on the Stripe web interface</param>
/// <param name="metaData"></param>
/// <param name="metadata"></param>
/// <param name="capture">Whether or not to immediately capture the charge. When false, the charge issues an authorization (or pre-authorization), and will need to be captured later.</param>
/// <param name="statementDescriptor">An arbitrary string to be displayed on your customer's credit card statement</param>
/// <param name="receiptEmail">The email address to send this charge's receipt to. The receipt will not be sent until the charge is paid.</param>
Expand All @@ -24,16 +24,20 @@ public partial class StripeClient
/// <param name="shipping">Shipping information for the charge. Helps prevent fraud on charges for physical goods.</param>
/// <returns>Stripe Charge Object</returns>
public StripeObject CreateChargeWithToken(decimal amount, string token, string currency = "usd",
string description = null, Dictionary<object, object> metaData = null, bool capture = true,
string description = null, IDictionary<object, object> metadata = null, bool capture = true,
string statementDescriptor = null, string receiptEmail = null, string destination = null,
decimal? applicationFee = null, Dictionary<object, object> shipping = null)
decimal? applicationFee = null, IDictionary<object, object> shipping = null)
{
Require.Argument("amount", amount);
Require.Argument("currency", currency);
Require.Argument("token", token);

return this.CreateChargeGeneric<string>(amount, currency, null, token, description, metaData, capture,
var request = GetCreateChargeRequest(amount, currency, null, description, metadata, capture,
statementDescriptor, receiptEmail, destination, applicationFee, shipping);

request.AddParameter("source", token);

return ExecuteObject(request);
}

/// <summary>
Expand All @@ -44,7 +48,7 @@ public partial class StripeClient
/// <param name="customerId">The ID of an existing customer that will be charged in this request</param>
/// <param name="cardId">A payment source to be charged, such as a credit card</param>
/// <param name="description">Description displayed on the Stripe web interface</param>
/// <param name="metaData"></param>
/// <param name="metadata"></param>
/// <param name="capture">Whether or not to immediately capture the charge. When false, the charge issues an authorization (or pre-authorization), and will need to be captured later.</param>
/// <param name="statementDescriptor">An arbitrary string to be displayed on your customer's credit card statement</param>
/// <param name="receiptEmail">The email address to send this charge's receipt to. The receipt will not be sent until the charge is paid.</param>
Expand All @@ -53,17 +57,21 @@ public partial class StripeClient
/// <param name="shipping">Shipping information for the charge. Helps prevent fraud on charges for physical goods.</param>
/// <returns>Stripe Charge Object</returns>
public StripeObject CreateCharge(decimal amount, string currency, string customerId,
string cardId = null, string description = null, Dictionary<object, object> metaData = null,
bool capture = true, string statementDescriptor = null, string receiptEmail = null,
string destination = null, decimal? applicationFee = null,
Dictionary<object, object> shipping = null)
string cardId = null, string description = null, IDictionary<object, object> metadata = null,
bool capture = true, string statementDescriptor = null, string receiptEmail = null,
string destination = null, decimal? applicationFee = null,
IDictionary<object, object> shipping = null)
{
Require.Argument("amount", amount);
Require.Argument("currency", currency);
Require.Argument("customerId", customerId);

return this.CreateChargeGeneric<string>(amount, currency, customerId, cardId, description, metaData,
var request = GetCreateChargeRequest(amount, currency, customerId, description, metadata,
capture, statementDescriptor, receiptEmail, destination, applicationFee, shipping);

request.AddParameter("source", cardId);

return ExecuteObject(request);
}

/// <summary>
Expand All @@ -73,7 +81,7 @@ public partial class StripeClient
/// <param name="currency">3-letter ISO currency code</param>
/// <param name="source"></param>
/// <param name="description">Description displayed on the Stripe web interface</param>
/// <param name="metaData"></param>
/// <param name="metadata"></param>
/// <param name="capture">Whether or not to immediately capture the charge. When false, the charge issues an authorization (or pre-authorization), and will need to be captured later.</param>
/// <param name="statementDescriptor">An arbitrary string to be displayed on your customer's credit card statement</param>
/// <param name="receiptEmail">The email address to send this charge's receipt to. The receipt will not be sent until the charge is paid.</param>
Expand All @@ -82,23 +90,26 @@ public partial class StripeClient
/// <param name="shipping">Shipping information for the charge. Helps prevent fraud on charges for physical goods.</param>
/// <returns>Stripe Charge Object</returns>
public StripeObject CreateCharge(decimal amount, string currency, ICreditCard source,
string description = null, Dictionary<object, object> metaData = null, bool capture = true,
string description = null, IDictionary<object, object> metadata = null, bool capture = true,
string statementDescriptor = null, string receiptEmail = null, string destination = null,
decimal? applicationFee = null, Dictionary<object, object> shipping = null)
decimal? applicationFee = null, IDictionary<object, object> shipping = null)
{
Require.Argument("amount", amount);
Require.Argument("currency", currency);
Require.Argument("card", source);

return this.CreateChargeGeneric<ICreditCard>(amount, currency, null, source, description, metaData, capture,
var request = GetCreateChargeRequest(amount, currency, null, description, metadata, capture,
statementDescriptor, receiptEmail, destination, applicationFee, shipping);

source.Validate();
source.AddParametersToRequest(request);

return ExecuteObject(request);
}

private StripeObject CreateChargeGeneric<T>(decimal amount, string currency, string customerId = null,
T source = null, string description = null, Dictionary<object, object> metaData = null,
bool capture = true, string statementDescriptor = null, string receiptEmail = null,
string destination = null, decimal? applicationFee = null,
Dictionary<object, object> shipping = null) where T : class
private RestRequest GetCreateChargeRequest(decimal amount, string currency, string customerId,
string description, IDictionary<object, object> metadata, bool capture, string statementDescriptor,
string receiptEmail, string destination, decimal? applicationFee, IDictionary<object, object> shipping)
{
if (amount < 0.5M)
throw new ArgumentOutOfRangeException("amount", amount, "Amount must be at least 50 cents");
Expand All @@ -110,35 +121,17 @@ public partial class StripeClient
request.AddParameter("amount", Convert.ToInt32(amount * 100M));
request.AddParameter("currency", currency);
request.AddParameter("capture", capture);

if (customerId.HasValue()) request.AddParameter("customer", customerId);

if (source != null)
{

if (typeof(T) == typeof(string) || typeof(T) == typeof(String))
{
request.AddParameter("source", source);
}
else if (typeof(T) == typeof(ICreditCard) || typeof(T) == typeof(CreditCard))
{
(source as ICreditCard).Validate();
(source as ICreditCard).AddParametersToRequest(request);
}
else
{
throw new ArgumentException("invalid type for source parameter");
}
}

if (description.HasValue()) request.AddParameter("description", description);
if (statementDescriptor.HasValue()) request.AddParameter("statement_descriptor", statementDescriptor);
if (receiptEmail.HasValue()) request.AddParameter("receipt_email", receiptEmail);
if (destination.HasValue()) request.AddParameter("destination", destination);
if (applicationFee.HasValue) request.AddParameter("application_fee", Convert.ToInt32(applicationFee.Value * 100M));
if (metaData != null) AddDictionaryParameter(metaData, "metadata", ref request);
if (metadata != null) AddDictionaryParameter(metadata, "metadata", ref request);
if (shipping != null) AddDictionaryParameter(shipping, "shipping", ref request);

return ExecuteObject(request);
return request;
}

/// <summary>
Expand All @@ -163,13 +156,13 @@ public StripeObject RetrieveCharge(string chargeId)
/// </summary>
/// <param name="chargeId">The identifier of the charge to be updated</param>
/// <param name="description">An arbitrary string which you can attach to a charge object. It is displayed when in the web interface alongside the charge</param>
/// <param name="metaData">A set of key/value pairs that you can attach to a charge object. It can be useful for storing additional information about the charge in a structured format</param>
/// <param name="metadata">A set of key/value pairs that you can attach to a charge object. It can be useful for storing additional information about the charge in a structured format</param>
/// <param name="receiptEmail">This is the email address that the receipt for this charge will be sent to. If this field is updated, then a new email receipt will be sent to the updated address.</param>
/// <param name="fraudDetails">A set of key/value pairs you can attach to a charge giving information about its riskiness</param>
/// <param name="shipping">Shipping information for the charge. Helps prevent fraud on charges for physical goods. </param>
/// <returns>A Stripe Charge Object</returns>
public StripeObject UpdateCharge(string chargeId, string description = null, Dictionary<object, object> metaData = null,
string receiptEmail = null, Dictionary<object, object> fraudDetails = null, Dictionary<object, object> shipping = null)
public StripeObject UpdateCharge(string chargeId, string description = null, IDictionary<object, object> metadata = null,
string receiptEmail = null, IDictionary<object, object> fraudDetails = null, IDictionary<object, object> shipping = null)
{
Require.Argument("chargeId", chargeId);

Expand All @@ -182,7 +175,7 @@ public StripeObject RetrieveCharge(string chargeId)
if (description.HasValue()) request.AddParameter("description", description);
if (receiptEmail.HasValue()) request.AddParameter("receipt_email", receiptEmail);
if (fraudDetails != null) AddDictionaryParameter(fraudDetails, "fraud_details", ref request);
if (metaData != null) AddDictionaryParameter(metaData, "metadata", ref request);
if (metadata != null) AddDictionaryParameter(metadata, "metadata", ref request);
if (shipping != null) AddDictionaryParameter(shipping, "shipping", ref request);

return ExecuteObject(request);
Expand Down
18 changes: 15 additions & 3 deletions src/StripeClient.Transfers.cs
Expand Up @@ -20,7 +20,11 @@ public partial class StripeClient
string sourceTransaction = null, string description = null, string statementDescriptor = null,
Dictionary<object, object> metaData = null)
{
var request = new RestRequest() { Method = Method.POST, Resource = "transfers" };
var request = new RestRequest()
{
Method = Method.POST,
Resource = "transfers"
};

request.AddParameter("amount", amount);
request.AddParameter("currency", currency);
Expand All @@ -41,7 +45,11 @@ public partial class StripeClient
/// <returns>Stripe Transfers Object</returns>
public StripeObject RetrieveTransfer(string transferId)
{
var request = new RestRequest() { Method = Method.GET, Resource = "transfers/{transferId}" };
var request = new RestRequest()
{
Method = Method.GET,
Resource = "transfers/{transferId}"
};

request.AddUrlSegment("transferId", transferId);

Expand All @@ -58,7 +66,11 @@ public StripeObject RetrieveTransfer(string transferId)
public StripeObject UpdateTransfer(string transferId, string description = null,
Dictionary<object, object> metaData = null)
{
var request = new RestRequest() { Method = Method.POST, Resource = "transfers/{transferId}" };
var request = new RestRequest()
{
Method = Method.POST,
Resource = "transfers/{transferId}"
};

request.AddUrlSegment("transferId", transferId);

Expand Down
14 changes: 10 additions & 4 deletions src/StripeClient.cs
Expand Up @@ -15,13 +15,17 @@ public partial class StripeClient

private readonly RestClient _client;

public StripeClient(string apiKey, string apiVersion = null)
public StripeClient(string apiKey)
: this(apiKey, null)
{
}

public StripeClient(string apiKey, string apiVersion)
{
ApiVersion = "v1";
ApiEndpoint = "https://api.stripe.com/";
ApiKey = apiKey;



// silverlight friendly way to get current version
var assembly = Assembly.GetExecutingAssembly();
AssemblyName assemblyName = new AssemblyName(assembly.FullName);
Expand All @@ -31,7 +35,9 @@ public StripeClient(string apiKey, string apiVersion = null)
_client.UserAgent = "stripe-dotnet/" + version;
_client.Authenticator = new StripeAuthenticator(apiKey);
_client.BaseUrl = new Uri(String.Format("{0}{1}", ApiEndpoint, ApiVersion));
_client.AddDefaultParameter("Stripe-Version", apiVersion.HasValue() ? apiVersion : "2015-04-07", ParameterType.HttpHeader);

if (apiVersion.HasValue())
_client.AddDefaultParameter("Stripe-Version", apiVersion, ParameterType.HttpHeader);
}

/// <summary>
Expand Down

0 comments on commit bb04306

Please sign in to comment.