views:

231

answers:

2

I'm in the middle of developing an e-commerce site that is using Paypal as it's payment gateway. All I want to do is run some code before the user heads off to Paypal to pay for their order, but I have no idea how to do it.

The user should click a submit button, changes are made (in this case, the status of the order), and then the user is redirected to the payment gateway. Eg:

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult GoToPaypal(FormCollection collection)
{
    //change order status

    //send user to paypal where they pay for their order
}

So my question is how do you do application stuff and then redirect to paypal's payment gateway? Example HTML and C# would be lovely :)

Note: This guy seems to have the same issue - (and probably explains it better).

+1  A: 

You mean redirect to paypal, after you're done doing what you want to do?

// run some code
// 
// go to paypal
return RedirectResult("http://paypal.com/blah");
Robert Harvey
Well, yes going to the paypal payment page with the required data; total amount, customer name, etc. Normally you would have this in the HTML form itself. Can I add this information on RedirectResult?
ajbeaven
I don't know how paypal works. I downloaded the developer guide at https://developer.paypal.com/en_US/pdf/PP_APIReference.pdf, but it's a bit of a study. If you tell me what kind of information you need to pass, I can tell you how to do it.
Robert Harvey
All I need to pass is a username (as custom data) and the total cost of the order. However, just before they go to PayPal, I need to change the order status - that is the '//do what I want to do' part.
ajbeaven
Is the order status something that you're storing yourself, or is it part of the PayPal link?
Robert Harvey
The order status is stored myself. My application need to change this.
ajbeaven
Your application can make the change in the code above, where it says `// run some code.` I can post an example of what that code might look like, but it's your application, so my code would just be a guess.
Robert Harvey
The problem isn't changing the order status, I can do that easily. My question is how do you do application stuff and then redirect to paypal's payment gateway?
ajbeaven
+2  A: 

You could POST to paypal from your action method but it will be difficult to show the user the response. In addition, you want to take the users to the paypal website without using a GET request (GET exposes the parameters in the url string and Paypal probably does not accept a GET request).


From what I understand, you have a form with some fields that posts to PayPal. Before the form is posted to Paypal, you want to capture the fields on the form, do some processing with it and then let them post to paypal.

One way of doing this is with jQuery. You wireup the submit event

http://api.jquery.com/submit/

When submit is clicked, in the event handler for the submit you created above, make an ajax call with the form fields you need to your MVC action. http://api.jquery.com/jQuery.post/

Do the processing and send back a response.

When the page receives the ajax response, change form fields if required that are received from the ajax response.

Finally Use jQuery to submit the form.

==

Raj Kaimal
So there's no way to do it without javascript enabled? I've used other online payment systems where a GET request is used - isn't that what PayPal does with it's ExpressCheckout and DirectPayment products? Why not in this case?
ajbeaven
I don't know about Paypal .. If they do accept get requests, then you can make GET request to your action and redirect the user to Paypal - avoiding JavaScript altogether
Raj Kaimal
Just not overly keen to implement Direct Payment. Oh well, cheers for your help!
ajbeaven
See this post: http://www.west-wind.com/presentations/PayPalIntegration/PayPalIntegration.asp
Raj Kaimal