void WebEvents_OnLoadRequestedPath(System.Web.HttpApplication app, string sprocketPath, string[] pathSections, HandleFlag handled) { if (!IntegrationEnabled) { return; } switch (sprocketPath) { case "paypal-ipn-process": using (PayPalTransactionResponse resp = InstantPaymentNotification.Authenticate()) { if (OnInstantPaymentNotification != null && resp != null) { OnInstantPaymentNotification(resp); } } break; case "paypal-trans-return": using (PayPalTransactionResponse resp = TransactionReturn()) { if (OnTransactionResponse != null && resp != null) { OnTransactionResponse(resp); } } break; default: return; } handled.Set(); }
void WebEvents_OnLoadRequestedPath(HandleFlag handled) { if (!IntegrationEnabled) { return; } switch (SprocketPath.Value) { case "paypal-ipn-process": { PayPalTransactionResponse resp = InstantPaymentNotification.Authenticate(); if (OnInstantPaymentNotification != null && resp != null) { OnInstantPaymentNotification(resp); } } break; case "paypal-trans-return": { PayPalTransactionResponse resp = TransactionReturn(); if (OnTransactionResponse != null && resp != null) { OnTransactionResponse(resp); } } break; default: return; } handled.Set(); }
public Result Delete(PayPalTransactionResponse payPalTransactionResponse) { Result result = new Result(); if (OnBeforeDeletePayPalTransactionResponse != null) OnBeforeDeletePayPalTransactionResponse(payPalTransactionResponse, result); if (result.Succeeded) { try { using (TransactionScope scope = new TransactionScope()) { SqlConnection conn = (SqlConnection)DatabaseManager.DatabaseEngine.GetConnection(); SqlCommand cmd = new SqlCommand("PayPalTransactionResponse_Delete", conn); cmd.CommandType = CommandType.StoredProcedure; cmd.Parameters.Add(new SqlParameter("@TransactionID", payPalTransactionResponse.TransactionID)); cmd.ExecuteNonQuery(); scope.Complete(); } } catch (Exception ex) { return new Result(ex.Message); } finally { DatabaseManager.DatabaseEngine.ReleaseConnection(); } if (OnPayPalTransactionResponseDeleted != null) OnPayPalTransactionResponseDeleted(payPalTransactionResponse); } return result; }
public static PayPalTransactionResponse Authenticate() { WebRequest w = WebRequest.Create(PayPal.PayPalPostURL); w.ContentType = "application/x-www-form-urlencoded"; w.Method = "POST"; string data = ComposeFormPostData("cmd", "_notify-validate"); NameValueCollection form = HttpContext.Current.Request.Form; for (int i = 0; i < form.Count; i++) { data += "&" + ComposeFormPostData(form.GetKey(i), form[i]); } Stream s = w.GetRequestStream(); byte[] buf = Encoding.ASCII.GetBytes(data); s.Write(buf, 0, buf.Length); s.Close(); HttpWebResponse r = (HttpWebResponse)w.GetResponse(); StreamReader sr = new StreamReader(r.GetResponseStream()); string response = HttpUtility.UrlDecode(sr.ReadToEnd()); sr.Close(); r.Close(); if (!response.StartsWith("VERIFIED")) { return(null); } PayPalTransactionResponse resp = new PayPalTransactionResponse(); resp.Populate(HttpContext.Current.Request.Form); string appstr = "PayPal_IPN_RecentTXNIDs" + resp.Txn_type; Queue <string> recentIDs = HttpContext.Current.Application[appstr] as Queue <string>; if (recentIDs == null) { recentIDs = new Queue <string>(); HttpContext.Current.Application[appstr] = recentIDs; } if (recentIDs.Count > 500) { recentIDs.Dequeue(); } if (recentIDs.Contains(resp.Txn_id)) { return(null); } recentIDs.Enqueue(resp.Txn_id); try { PayPal.DataProvider.Store(resp); } catch (Exception e) { } // thrown usually on duplicate id, which we try to avoid via the queue above (less hits to database) return(resp); }
public static PayPalTransactionResponse Authenticate() { WebRequest w = WebRequest.Create(PayPal.PayPalPostURL); w.ContentType = "application/x-www-form-urlencoded"; w.Method = "POST"; string data = ComposeFormPostData("cmd","_notify-validate"); NameValueCollection form = HttpContext.Current.Request.Form; for (int i = 0; i < form.Count; i++) data += "&" + ComposeFormPostData(form.GetKey(i), form[i]); Stream s = w.GetRequestStream(); byte[] buf = Encoding.ASCII.GetBytes(data); s.Write(buf, 0, buf.Length); s.Close(); HttpWebResponse r = (HttpWebResponse)w.GetResponse(); StreamReader sr = new StreamReader(r.GetResponseStream()); string response = HttpUtility.UrlDecode(sr.ReadToEnd()); sr.Close(); r.Close(); if (!response.StartsWith("VERIFIED")) return null; PayPalTransactionResponse resp = new PayPalTransactionResponse(); resp.Populate(HttpContext.Current.Request.Form); string appstr = "PayPal_IPN_RecentTXNIDs" + resp.Txn_type; Queue<string> recentIDs = HttpContext.Current.Application[appstr] as Queue<string>; if (recentIDs == null) { recentIDs = new Queue<string>(); HttpContext.Current.Application[appstr] = recentIDs; } if (recentIDs.Count > 500) recentIDs.Dequeue(); if (recentIDs.Contains(resp.Txn_id)) return null; recentIDs.Enqueue(resp.Txn_id); try { resp.Save(); } catch(Exception e) { } // thrown usually on duplicate id, which we try to avoid via the queue above (less hits to database) return resp; }
public static Dictionary<Guid, PayPalTransactionResponse> Filter(Guid? transactionID, string txn_id, string txn_type, decimal? auth_amount, string auth_id, DateTime? auth_exp, string auth_status, decimal? mc_gross_x, decimal? mc_handling_x, int? num_cart_items, string parent_txn_id, DateTime? payment_date, string payment_status, string payment_type, string pending_reason, string reason_code, decimal? remaining_settle, string transaction_entity, string invoice, string memo, decimal? tax, string business, string item_name, string item_number, int? quantity, string receiver_email, string receiver_id, string address_city, string address_country, string address_country_code, string address_name, string address_state, string address_status, string address_street, string address_zip, string first_name, string last_name, string payer_id, string payer_status, string residence_country, decimal? exchange_rate, decimal? mc_fee, decimal? mc_gross, decimal? mc_handlingamount, decimal? mc_shippingamount, decimal? payment_fee, decimal? payment_gross, decimal? settle_amount, string settle_currency, DateTime? subscr_date, DateTime? subscr_effective, string period1, string period2, string period3, decimal? amount1, decimal? amount2, decimal? amount3, decimal? mc_amount1, decimal? mc_amount2, decimal? mc_amount3, string mc_currency, bool? recurring, bool? reattempt, DateTime? retry_at, int? recur_times, string username, string password, string subscr_id, string custom) { Database.Main.RememberOpenState(); Dictionary<Guid, PayPalTransactionResponse> results = new Dictionary<Guid, PayPalTransactionResponse>(); IDbCommand cmd = Database.Main.CreateCommand("PayPalTransactionResponse_Filter", CommandType.StoredProcedure); Database.Main.AddParameter(cmd, "@TransactionID", transactionID, DbType.Guid); Database.Main.AddParameter(cmd, "@txn_id", txn_id, DbType.String); Database.Main.AddParameter(cmd, "@txn_type", txn_type, DbType.String); Database.Main.AddParameter(cmd, "@auth_amount", auth_amount, DbType.Decimal); Database.Main.AddParameter(cmd, "@auth_id", auth_id, DbType.String); Database.Main.AddParameter(cmd, "@auth_exp", auth_exp, DbType.DateTime); Database.Main.AddParameter(cmd, "@auth_status", auth_status, DbType.String); Database.Main.AddParameter(cmd, "@mc_gross_x", mc_gross_x, DbType.Decimal); Database.Main.AddParameter(cmd, "@mc_handling_x", mc_handling_x, DbType.Decimal); Database.Main.AddParameter(cmd, "@num_cart_items", num_cart_items, DbType.Int32); Database.Main.AddParameter(cmd, "@parent_txn_id", parent_txn_id, DbType.String); Database.Main.AddParameter(cmd, "@payment_date", payment_date, DbType.DateTime); Database.Main.AddParameter(cmd, "@payment_status", payment_status, DbType.String); Database.Main.AddParameter(cmd, "@payment_type", payment_type, DbType.String); Database.Main.AddParameter(cmd, "@pending_reason", pending_reason, DbType.String); Database.Main.AddParameter(cmd, "@reason_code", reason_code, DbType.String); Database.Main.AddParameter(cmd, "@remaining_settle", remaining_settle, DbType.Decimal); Database.Main.AddParameter(cmd, "@transaction_entity", transaction_entity, DbType.String); Database.Main.AddParameter(cmd, "@invoice", invoice, DbType.String); Database.Main.AddParameter(cmd, "@memo", memo, DbType.String); Database.Main.AddParameter(cmd, "@tax", tax, DbType.Decimal); Database.Main.AddParameter(cmd, "@business", business, DbType.String); Database.Main.AddParameter(cmd, "@item_name", item_name, DbType.String); Database.Main.AddParameter(cmd, "@item_number", item_number, DbType.String); Database.Main.AddParameter(cmd, "@quantity", quantity, DbType.Int32); Database.Main.AddParameter(cmd, "@receiver_email", receiver_email, DbType.String); Database.Main.AddParameter(cmd, "@receiver_id", receiver_id, DbType.String); Database.Main.AddParameter(cmd, "@address_city", address_city, DbType.String); Database.Main.AddParameter(cmd, "@address_country", address_country, DbType.String); Database.Main.AddParameter(cmd, "@address_country_code", address_country_code, DbType.String); Database.Main.AddParameter(cmd, "@address_name", address_name, DbType.String); Database.Main.AddParameter(cmd, "@address_state", address_state, DbType.String); Database.Main.AddParameter(cmd, "@address_status", address_status, DbType.String); Database.Main.AddParameter(cmd, "@address_street", address_street, DbType.String); Database.Main.AddParameter(cmd, "@address_zip", address_zip, DbType.String); Database.Main.AddParameter(cmd, "@first_name", first_name, DbType.String); Database.Main.AddParameter(cmd, "@last_name", last_name, DbType.String); Database.Main.AddParameter(cmd, "@payer_id", payer_id, DbType.String); Database.Main.AddParameter(cmd, "@payer_status", payer_status, DbType.String); Database.Main.AddParameter(cmd, "@residence_country", residence_country, DbType.String); Database.Main.AddParameter(cmd, "@exchange_rate", exchange_rate, DbType.Decimal); Database.Main.AddParameter(cmd, "@mc_fee", mc_fee, DbType.Decimal); Database.Main.AddParameter(cmd, "@mc_gross", mc_gross, DbType.Decimal); Database.Main.AddParameter(cmd, "@mc_handling#", mc_handlingamount, DbType.Decimal); Database.Main.AddParameter(cmd, "@mc_shipping#", mc_shippingamount, DbType.Decimal); Database.Main.AddParameter(cmd, "@payment_fee", payment_fee, DbType.Decimal); Database.Main.AddParameter(cmd, "@payment_gross", payment_gross, DbType.Decimal); Database.Main.AddParameter(cmd, "@settle_amount", settle_amount, DbType.Decimal); Database.Main.AddParameter(cmd, "@settle_currency", settle_currency, DbType.String); Database.Main.AddParameter(cmd, "@subscr_date", subscr_date, DbType.DateTime); Database.Main.AddParameter(cmd, "@subscr_effective", subscr_effective, DbType.DateTime); Database.Main.AddParameter(cmd, "@period1", period1, DbType.String); Database.Main.AddParameter(cmd, "@period2", period2, DbType.String); Database.Main.AddParameter(cmd, "@period3", period3, DbType.String); Database.Main.AddParameter(cmd, "@amount1", amount1, DbType.Decimal); Database.Main.AddParameter(cmd, "@amount2", amount2, DbType.Decimal); Database.Main.AddParameter(cmd, "@amount3", amount3, DbType.Decimal); Database.Main.AddParameter(cmd, "@mc_amount1", mc_amount1, DbType.Decimal); Database.Main.AddParameter(cmd, "@mc_amount2", mc_amount2, DbType.Decimal); Database.Main.AddParameter(cmd, "@mc_amount3", mc_amount3, DbType.Decimal); Database.Main.AddParameter(cmd, "@mc_currency", mc_currency, DbType.String); Database.Main.AddParameter(cmd, "@recurring", recurring, DbType.Boolean); Database.Main.AddParameter(cmd, "@reattempt", reattempt, DbType.Boolean); Database.Main.AddParameter(cmd, "@retry_at", retry_at, DbType.DateTime); Database.Main.AddParameter(cmd, "@recur_times", recur_times, DbType.Int32); Database.Main.AddParameter(cmd, "@username", username, DbType.String); Database.Main.AddParameter(cmd, "@password", password, DbType.String); Database.Main.AddParameter(cmd, "@subscr_id", subscr_id, DbType.String); Database.Main.AddParameter(cmd, "@custom", custom, DbType.String); DataSet ds = Database.Main.GetDataSet(cmd); Database.Main.CloseIfWasntOpen(); foreach(DataRow row in ds.Tables[0].Rows) { PayPalTransactionResponse o = new PayPalTransactionResponse(row); results.Add(o.transactionID, o); } return results; }
public static PayPalTransactionResponse[] Load(DataTable payPalTransactionResponseDataTable) { PayPalTransactionResponse[] arr = new PayPalTransactionResponse[payPalTransactionResponseDataTable.Rows.Count]; for(int i=0; i<payPalTransactionResponseDataTable.Rows.Count; i++) arr[i] = new PayPalTransactionResponse(payPalTransactionResponseDataTable.Rows[i]); return arr; }
public Result Store(PayPalTransactionResponse payPalTransactionResponse) { try { using (TransactionScope scope = new TransactionScope()) { SqlConnection conn = (SqlConnection)DatabaseManager.DatabaseEngine.GetConnection(); SqlCommand cmd = new SqlCommand("PayPalTransactionResponse_Store", conn); cmd.CommandType = CommandType.StoredProcedure; SqlParameter prm = new SqlParameter("@TransactionID", payPalTransactionResponse.TransactionID); prm.Direction = ParameterDirection.InputOutput; cmd.Parameters.Add(prm); cmd.Parameters.Add(NewParameter("@txn_id", payPalTransactionResponse.Txn_id, SqlDbType.NVarChar)); cmd.Parameters.Add(NewParameter("@txn_type", payPalTransactionResponse.Txn_type, SqlDbType.NVarChar)); cmd.Parameters.Add(NewParameter("@auth_amount", payPalTransactionResponse.Auth_amount, SqlDbType.Decimal)); cmd.Parameters.Add(NewParameter("@auth_id", payPalTransactionResponse.Auth_id, SqlDbType.NVarChar)); cmd.Parameters.Add(NewParameter("@auth_exp", payPalTransactionResponse.Auth_exp, SqlDbType.DateTime)); cmd.Parameters.Add(NewParameter("@auth_status", payPalTransactionResponse.Auth_status, SqlDbType.NVarChar)); cmd.Parameters.Add(NewParameter("@mc_gross_x", payPalTransactionResponse.Mc_gross_x, SqlDbType.Decimal)); cmd.Parameters.Add(NewParameter("@mc_handling_x", payPalTransactionResponse.Mc_handling_x, SqlDbType.Decimal)); cmd.Parameters.Add(NewParameter("@num_cart_items", payPalTransactionResponse.Num_cart_items, SqlDbType.Int)); cmd.Parameters.Add(NewParameter("@parent_txn_id", payPalTransactionResponse.Parent_txn_id, SqlDbType.NVarChar)); cmd.Parameters.Add(NewParameter("@payment_date", payPalTransactionResponse.Payment_date, SqlDbType.DateTime)); cmd.Parameters.Add(NewParameter("@payment_status", payPalTransactionResponse.Payment_status, SqlDbType.NVarChar)); cmd.Parameters.Add(NewParameter("@payment_type", payPalTransactionResponse.Payment_type, SqlDbType.NVarChar)); cmd.Parameters.Add(NewParameter("@pending_reason", payPalTransactionResponse.Pending_reason, SqlDbType.NVarChar)); cmd.Parameters.Add(NewParameter("@reason_code", payPalTransactionResponse.Reason_code, SqlDbType.NVarChar)); cmd.Parameters.Add(NewParameter("@remaining_settle", payPalTransactionResponse.Remaining_settle, SqlDbType.Decimal)); cmd.Parameters.Add(NewParameter("@transaction_entity", payPalTransactionResponse.Transaction_entity, SqlDbType.NVarChar)); cmd.Parameters.Add(NewParameter("@invoice", payPalTransactionResponse.Invoice, SqlDbType.NVarChar)); cmd.Parameters.Add(NewParameter("@memo", payPalTransactionResponse.Memo, SqlDbType.NVarChar)); cmd.Parameters.Add(NewParameter("@tax", payPalTransactionResponse.Tax, SqlDbType.Decimal)); cmd.Parameters.Add(NewParameter("@business", payPalTransactionResponse.Business, SqlDbType.NVarChar)); cmd.Parameters.Add(NewParameter("@item_name", payPalTransactionResponse.Item_name, SqlDbType.NVarChar)); cmd.Parameters.Add(NewParameter("@item_number", payPalTransactionResponse.Item_number, SqlDbType.NVarChar)); cmd.Parameters.Add(NewParameter("@quantity", payPalTransactionResponse.Quantity, SqlDbType.Int)); cmd.Parameters.Add(NewParameter("@receiver_email", payPalTransactionResponse.Receiver_email, SqlDbType.NVarChar)); cmd.Parameters.Add(NewParameter("@receiver_id", payPalTransactionResponse.Receiver_id, SqlDbType.NVarChar)); cmd.Parameters.Add(NewParameter("@address_city", payPalTransactionResponse.Address_city, SqlDbType.NVarChar)); cmd.Parameters.Add(NewParameter("@address_country", payPalTransactionResponse.Address_country, SqlDbType.NVarChar)); cmd.Parameters.Add(NewParameter("@address_country_code", payPalTransactionResponse.Address_country_code, SqlDbType.NVarChar)); cmd.Parameters.Add(NewParameter("@address_name", payPalTransactionResponse.Address_name, SqlDbType.NVarChar)); cmd.Parameters.Add(NewParameter("@address_state", payPalTransactionResponse.Address_state, SqlDbType.NVarChar)); cmd.Parameters.Add(NewParameter("@address_status", payPalTransactionResponse.Address_status, SqlDbType.NVarChar)); cmd.Parameters.Add(NewParameter("@address_street", payPalTransactionResponse.Address_street, SqlDbType.NVarChar)); cmd.Parameters.Add(NewParameter("@address_zip", payPalTransactionResponse.Address_zip, SqlDbType.NVarChar)); cmd.Parameters.Add(NewParameter("@first_name", payPalTransactionResponse.First_name, SqlDbType.NVarChar)); cmd.Parameters.Add(NewParameter("@last_name", payPalTransactionResponse.Last_name, SqlDbType.NVarChar)); cmd.Parameters.Add(NewParameter("@payer_id", payPalTransactionResponse.Payer_id, SqlDbType.NVarChar)); cmd.Parameters.Add(NewParameter("@payer_status", payPalTransactionResponse.Payer_status, SqlDbType.NVarChar)); cmd.Parameters.Add(NewParameter("@residence_country", payPalTransactionResponse.Residence_country, SqlDbType.NVarChar)); cmd.Parameters.Add(NewParameter("@exchange_rate", payPalTransactionResponse.Exchange_rate, SqlDbType.Decimal)); cmd.Parameters.Add(NewParameter("@mc_fee", payPalTransactionResponse.Mc_fee, SqlDbType.Decimal)); cmd.Parameters.Add(NewParameter("@mc_gross", payPalTransactionResponse.Mc_gross, SqlDbType.Decimal)); cmd.Parameters.Add(NewParameter("@mc_handling#", payPalTransactionResponse.Mc_handlingamount, SqlDbType.Decimal)); cmd.Parameters.Add(NewParameter("@mc_shipping#", payPalTransactionResponse.Mc_shippingamount, SqlDbType.Decimal)); cmd.Parameters.Add(NewParameter("@payment_fee", payPalTransactionResponse.Payment_fee, SqlDbType.Decimal)); cmd.Parameters.Add(NewParameter("@payment_gross", payPalTransactionResponse.Payment_gross, SqlDbType.Decimal)); cmd.Parameters.Add(NewParameter("@settle_amount", payPalTransactionResponse.Settle_amount, SqlDbType.Decimal)); cmd.Parameters.Add(NewParameter("@settle_currency", payPalTransactionResponse.Settle_currency, SqlDbType.NVarChar)); cmd.Parameters.Add(NewParameter("@subscr_date", payPalTransactionResponse.Subscr_date, SqlDbType.DateTime)); cmd.Parameters.Add(NewParameter("@subscr_effective", payPalTransactionResponse.Subscr_effective, SqlDbType.DateTime)); cmd.Parameters.Add(NewParameter("@period1", payPalTransactionResponse.Period1, SqlDbType.NVarChar)); cmd.Parameters.Add(NewParameter("@period2", payPalTransactionResponse.Period2, SqlDbType.NVarChar)); cmd.Parameters.Add(NewParameter("@period3", payPalTransactionResponse.Period3, SqlDbType.NVarChar)); cmd.Parameters.Add(NewParameter("@amount1", payPalTransactionResponse.Amount1, SqlDbType.Decimal)); cmd.Parameters.Add(NewParameter("@amount2", payPalTransactionResponse.Amount2, SqlDbType.Decimal)); cmd.Parameters.Add(NewParameter("@amount3", payPalTransactionResponse.Amount3, SqlDbType.Decimal)); cmd.Parameters.Add(NewParameter("@mc_amount1", payPalTransactionResponse.Mc_amount1, SqlDbType.Decimal)); cmd.Parameters.Add(NewParameter("@mc_amount2", payPalTransactionResponse.Mc_amount2, SqlDbType.Decimal)); cmd.Parameters.Add(NewParameter("@mc_amount3", payPalTransactionResponse.Mc_amount3, SqlDbType.Decimal)); cmd.Parameters.Add(NewParameter("@mc_currency", payPalTransactionResponse.Mc_currency, SqlDbType.NVarChar)); cmd.Parameters.Add(NewParameter("@recurring", payPalTransactionResponse.Recurring, SqlDbType.Bit)); cmd.Parameters.Add(NewParameter("@reattempt", payPalTransactionResponse.Reattempt, SqlDbType.Bit)); cmd.Parameters.Add(NewParameter("@retry_at", payPalTransactionResponse.Retry_at, SqlDbType.DateTime)); cmd.Parameters.Add(NewParameter("@recur_times", payPalTransactionResponse.Recur_times, SqlDbType.Int)); cmd.Parameters.Add(NewParameter("@username", payPalTransactionResponse.Username, SqlDbType.NVarChar)); cmd.Parameters.Add(NewParameter("@password", payPalTransactionResponse.Password, SqlDbType.NVarChar)); cmd.Parameters.Add(NewParameter("@subscr_id", payPalTransactionResponse.Subscr_id, SqlDbType.NVarChar)); cmd.Parameters.Add(NewParameter("@custom", payPalTransactionResponse.Custom, SqlDbType.NVarChar)); cmd.ExecuteNonQuery(); scope.Complete(); } } catch (Exception ex) { return new Result(ex.Message); } finally { DatabaseManager.DatabaseEngine.ReleaseConnection(); } return new Result(); }
public PayPalTransactionResponse SelectPayPalTransactionResponse(Guid id) { try { PayPalTransactionResponse entity; using (TransactionScope scope = new TransactionScope()) { SqlConnection conn = (SqlConnection)DatabaseManager.DatabaseEngine.GetConnection(); SqlCommand cmd = new SqlCommand("PayPalTransactionResponse_Select", conn); cmd.CommandType = CommandType.StoredProcedure; cmd.Parameters.Add(new SqlParameter("@TransactionID", id)); using (SqlDataReader reader = cmd.ExecuteReader()) { if (!reader.Read()) entity = null; else entity = new PayPalTransactionResponse(reader); reader.Close(); } scope.Complete(); } return entity; } finally { DatabaseManager.DatabaseEngine.ReleaseConnection(); } }
public PayPalTransactionResponse Clone() { PayPalTransactionResponse copy = new PayPalTransactionResponse(); copy.transactionID = transactionID; copy.txn_id = txn_id; copy.txn_type = txn_type; copy.auth_amount = auth_amount; copy.auth_id = auth_id; copy.auth_exp = auth_exp; copy.auth_status = auth_status; copy.mc_gross_x = mc_gross_x; copy.mc_handling_x = mc_handling_x; copy.num_cart_items = num_cart_items; copy.parent_txn_id = parent_txn_id; copy.payment_date = payment_date; copy.payment_status = payment_status; copy.payment_type = payment_type; copy.pending_reason = pending_reason; copy.reason_code = reason_code; copy.remaining_settle = remaining_settle; copy.transaction_entity = transaction_entity; copy.invoice = invoice; copy.memo = memo; copy.tax = tax; copy.business = business; copy.item_name = item_name; copy.item_number = item_number; copy.quantity = quantity; copy.receiver_email = receiver_email; copy.receiver_id = receiver_id; copy.address_city = address_city; copy.address_country = address_country; copy.address_country_code = address_country_code; copy.address_name = address_name; copy.address_state = address_state; copy.address_status = address_status; copy.address_street = address_street; copy.address_zip = address_zip; copy.first_name = first_name; copy.last_name = last_name; copy.payer_id = payer_id; copy.payer_status = payer_status; copy.residence_country = residence_country; copy.exchange_rate = exchange_rate; copy.mc_fee = mc_fee; copy.mc_gross = mc_gross; copy.mc_handlingamount = mc_handlingamount; copy.mc_shippingamount = mc_shippingamount; copy.payment_fee = payment_fee; copy.payment_gross = payment_gross; copy.settle_amount = settle_amount; copy.settle_currency = settle_currency; copy.subscr_date = subscr_date; copy.subscr_effective = subscr_effective; copy.period1 = period1; copy.period2 = period2; copy.period3 = period3; copy.amount1 = amount1; copy.amount2 = amount2; copy.amount3 = amount3; copy.mc_amount1 = mc_amount1; copy.mc_amount2 = mc_amount2; copy.mc_amount3 = mc_amount3; copy.mc_currency = mc_currency; copy.recurring = recurring; copy.reattempt = reattempt; copy.retry_at = retry_at; copy.recur_times = recur_times; copy.username = username; copy.password = password; copy.subscr_id = subscr_id; copy.custom = custom; return copy; }