protected void Page_Load(object sender, EventArgs e)
{
if (Request.QueryString.Count != 0)
{
if (Request.QueryString["token"] != null)
{
if (Request.QueryString["token"] == "")
{
lMsg.Text = "Transction has been canceled";
}
else lMsg.Text= RecuringPayments();
}
else
{
ExpressCheckOut();
}
}
}
#region Paypal Express Checkout And Create Recuring Profile
public void ExpressCheckOut()
{
NameValueCollection formdata = Request.QueryString ;
LOGIN_USER user = null;
CreateUser(formdata, ref user, "P");
PayPalTenderRecuring(user);
}
private static void CreateUser(NameValueCollection formdata, ref LOGIN_USER user, string Tender)
{
using (var db = new WooskieDBInstance().WooskieDB)
{
try
{
db.Connection.Open();
db.Transaction = db.Connection.BeginTransaction();
user = new LOGIN_USER();
user.USERNAME = formdata.Get(8);
user.STATUS = 0;
user.CreateDate = DateTime.UtcNow;
user.PASS = WooskieLibrary.Business.ConvertUtil.generatePassword(6);
user.Person = new Wooskie.Business.Person
{
EMAIL_ADDRESS = formdata.Get(7),
FIRSTNAME = formdata.Get(0),
LASTNAME = formdata.Get(1),
PERSONTYPEID = 2,
COMPANY_NAME = formdata.Get(0) + ' ' + formdata.Get(1),
ISACTIVE = false,
PERSON_ADDRESS = new PERSON_ADDRESS
{
ADDRESS1 = formdata[2],
ADDRESS2 = formdata[3],
CITY = formdata[4],
COUNTRY = formdata[9],
STATE = formdata[5],
ZIPCODE = formdata["ctl00$MainContent$txtZipcode"],
},
CLIENT_BILLING_INFO = new CLIENT_BILLING_INFO
{
BILLING_EMAIL = formdata[17],
PAYMENT_TYPE = Tender.Equals("P") ? 2 : Convert.ToInt32(formdata[11]),
CARD_NO = formdata[13],
CVV2 = GetBytes(formdata["ctl00$MainContent$txtCVV"]),
EXPIRED = formdata["ctl00$MainContent$ddlExpMonth"] + formdata["ctl00$MainContent$ddlExpYear"].Substring(2, 2)
}
};
db.LOGIN_USERs.InsertOnSubmit(user);
db.SubmitChanges();
db.Transaction.Commit();
}
catch
{
db.Transaction.Rollback();
}
}
}
private void PayPalTenderRecuring(LOGIN_USER Luser)
{
UserInfo User = new UserInfo(
ConfigurationManager.AppSettings["USER"],
ConfigurationManager.AppSettings["VENDOR"],
"PayPal", ConfigurationManager.AppSettings["PWD"]
);
PayflowConnectionData Connection = new PayflowConnectionData();
Invoice Inv = new Invoice();
Currency Amt = new Currency(new decimal(1), "USD");
Inv.Amt = Amt;
Inv.InvNum = "INV" + WooskieLibrary.Business.ConvertUtil.generateInvoiceNo();
Inv.CustRef = Luser.Person.EMAIL_ADDRESS;
Inv.Comment1 = "Order Number: " + Inv.InvNum;
Inv.Comment2 = "Customer Email: " + Luser.Person.EMAIL_ADDRESS;
BillTo Bill = new BillTo();
Bill.BillToStreet = Luser.Person.PERSON_ADDRESS.ADDRESS1 + ',' + Luser.Person.PERSON_ADDRESS.ADDRESS2;
Bill.BillToZip = Luser.Person.PERSON_ADDRESS.ZIPCODE;
Bill.BillToCountry = Luser.Person.PERSON_ADDRESS.COUNTRY;
Inv.BillTo = Bill;
CustomerInfo CustInfo = new CustomerInfo();
CustInfo.CustCode = "TEST";
CustInfo.CustId = "CustId";
Inv.CustomerInfo = CustInfo;
string msg = "";
ExpressCheckoutRequest currRequest = new ECSetRequest("http://localhost:9275/PaypalCheckout", "http://localhost:9275/PaypalCheckout");
PayPalTender currTender = new PayPalTender(currRequest);
SaleTransaction currTransaction = new SaleTransaction(User, Connection, Inv, currTender, PayflowUtility.RequestId);
Response Resp = currTransaction.SubmitTransaction();
if (Resp != null)
{
TransactionResponse TrxnResponse = Resp.TransactionResponse;
ExpressCheckoutResponse eResponse = Resp.ExpressCheckoutSetResponse;
if ((TrxnResponse != null) && (eResponse != null))
{
if (TrxnResponse.Result == 0)
{
HttpContext.Current.Session["PaypalToken"] = eResponse.Token;
HttpContext.Current.Session["Luser"] = Luser;
HttpContext.Current.Response.Redirect("https://www.paypal.com/cgi-bin/webscr?cmd=_express-checkout&token=" + eResponse.Token);
msg = String.Empty;
}
else
msg = TrxnResponse.RespMsg;
}
else
msg = Resp.ResponseString;
}
msg = "transaction error";
}
string RecuringPayments()
{
string PayerID = Request.QueryString["PayerID"];
LOGIN_USER Luser = (LOGIN_USER)HttpContext.Current.Session["Luser"];
UserInfo User = new UserInfo(
ConfigurationManager.AppSettings["USER"],
ConfigurationManager.AppSettings["VENDOR"],
"PayPal", ConfigurationManager.AppSettings["PWD"]
);
PayflowConnectionData Connection = new PayflowConnectionData();
Invoice Inv = new Invoice();
Currency Amt = new Currency(new decimal(1), "USD");
Inv.Amt = Amt;
Inv.InvNum = "INV" + WooskieLibrary.Business.ConvertUtil.generateInvoiceNo();
Inv.CustRef = Luser.Person.EMAIL_ADDRESS;
Inv.Comment1 = "Order Number: " + Inv.InvNum;
Inv.Comment2 = "Customer Email: " + Luser.Person.EMAIL_ADDRESS;
BillTo Bill = new BillTo();
Bill.BillToStreet = Luser.Person.PERSON_ADDRESS.ADDRESS1 + ',' + Luser.Person.PERSON_ADDRESS.ADDRESS2;
Bill.BillToZip = Luser.Person.PERSON_ADDRESS.ZIPCODE;
Bill.BillToCountry = Luser.Person.PERSON_ADDRESS.COUNTRY;
Inv.BillTo = Bill;
CustomerInfo CustInfo = new CustomerInfo();
CustInfo.CustCode = Luser.USERNAME;
CustInfo.CustId = "CustId" + Luser.USERID;
Inv.CustomerInfo = CustInfo;
ExpressCheckoutRequest currRequest = new ECDoRequest(HttpContext.Current.Session["PaypalToken"].ToString(),PayerID);
PayPalTender currTender = new PayPalTender(currRequest);
SaleTransaction currTransaction = new SaleTransaction(User, Connection, Inv, currTender, PayflowUtility.RequestId);
Response Resp = currTransaction.SubmitTransaction();
if (Resp != null)
{
TransactionResponse TrxnResponse = Resp.TransactionResponse;
ECDoResponse eResponse = Resp.ExpressCheckoutDoResponse;
if ((TrxnResponse != null) && (eResponse != null))
{
if (TrxnResponse.Result == 0)
{
RecurringInfo RecurInfo = new RecurringInfo();
RecurInfo.Start = DateTime.Now.ToString("MMddyyyy");
RecurInfo.ProfileName = "Requring_Profile@" + Luser.USERNAME;
RecurInfo.PayPeriod = "MONT";
RecurInfo.Term = 12;
RecurringAddTransaction RecurringTrans = new RecurringAddTransaction(User, Connection, Inv, currTender, RecurInfo, PayflowUtility.RequestId);
RecurringTrans.OrigId = eResponse.BAId;
Response RecurringResp = RecurringTrans.SubmitTransaction();
if (RecurringResp != null)
{
TrxnResponse = RecurringResp.TransactionResponse;
RecurringResponse RecurResponse = RecurringResp.RecurringResponse;
if ((TrxnResponse != null) && (RecurResponse != null))
{
if (TrxnResponse.Result == 0)
{
SendMailToClient(Luser.Person.EMAIL_ADDRESS);
return String.Empty;
}
else
{
return TrxnResponse.Result + " " + TrxnResponse.RespMsg + RecurResponse.TrxRespMsg;
}
}
else
return Resp.ResponseString;
}
return "transaction error";
}
else
return TrxnResponse.RespMsg;
}
else
return Resp.ResponseString;
}
return "transaction error";
}
private void SendMailToClient(string p)
{
SmtpClient client = new SmtpClient("184.173.9.173");
client.Credentials = new System.Net.NetworkCredential("user", "password");
MailAddress mailFrom = new MailAddress("mymail@server.com");
MailAddress mailTo = new MailAddress("yourmail@server.com");
MailAddress mailReply = new MailAddress("mymail@server.com");
MailMessage message = new MailMessage(mailFrom, mailTo);
message.Body = "This is a test message.";
message.Subject = "test message";
message.SubjectEncoding = System.Text.Encoding.UTF8;
message.BodyEncoding = System.Text.Encoding.UTF8;
client.Send(message);
}
static byte[] GetBytes(string str)
{
byte[] bytes = new byte[str.Length * sizeof(char)];
System.Buffer.BlockCopy(str.ToCharArray(), 0, bytes, 0, bytes.Length);
return bytes;
}
static string GetString(byte[] bytes)
{
char[] chars = new char[bytes.Length / sizeof(char)];
System.Buffer.BlockCopy(bytes, 0, chars, 0, bytes.Length);
return new string(chars);
}
#endregion
}