I have built a system with Paypal for a client however the client has now asked once a customer has made an order if an email can be sent to them and also the warehouse so they can start packaging it.
Just to make sure could this be achieved by adding another value in the html code like this:
<input type="hidden" name="business" value="email#address1.co.uk" value="email#address2.co.uk">
<input type="hidden" name="currency_code" value="GBP">
<input type="hidden" name="item_name" value="Personal Built Board 27 Inch">
<input type="hidden" name="amount" value="44.50">
.... and so on
PayPal is a payments service, not an email service: the business identifies the recipient of the transaction (order, and eventually payment), and only incidentally who gets sent the email. You need to identify the (single) counterparty to the transaction in this 'business' field.
Also, PayPal recommends against using their emails for fulfillment activity, as there are too many ways for it to go wrong (emails can get spam filtered, misfiled, spoofed, etc).
The best practice for this sort of thing is to integrate PayPal's IPN service for secure notification of order placements. Your sytem would, upon receiving and verifying the IPN, send whatever notifications are required to various people or systems to initiate fulfillment (e.g., you send 2 different emails from the one IPN, if emails are what you want to use internally).
Yes, it is possible, but you have to change the syntax like below.
Use [ ] in the field name to send multiple values:
<input type="hidden" name="your_field_name[]" value="1" />
<input type="hidden" name="your_field_name[]" value="2" />
<input type="hidden" name="your_field_name[]" value="3" />
You will get an array of values in the your_field_name field.
Refer this.
Related
I am creating an e-shop builder, i.e. a site where a user creates their site and e-shop. The products are entered into my custom CMS by the person who builds the e-shop. I ask the shop builder to link the shop to their PayPal account by entering their e-mail.
I am currently trying to create a checkout button for my cart.
Problem is, multiple products might have different tax rates, for instance alcoholic beverages might have a 13% tax rate whereas other products have 23%. Is there a way to incorporate this in the post request?
Ideally what I would like to do is this:
<form action="https://www.sandbox.paypal.com/cgi-bin/webscr" method="post" target="_top">
<input type="hidden" name="item_name_1" value="Some product">
<input type="hidden" name="item_number_1" value="1">
<input type="hidden" name="amount_1" value="20.00" />
<input type="hidden" name="tax_rate_1" value="23">
<input type="hidden" name="item_name_2" value="Some alcoholic product">
<input type="hidden" name="item_number_2" value="1">
<input type="hidden" name="amount_2" value="15.00" />
<input type="hidden" name="tax_rate_2" value="13">
<!-- other fields omitted for brevity -->
</form>
The tax_rate_1 and tax_rate_2 fields are hypothetical, I don't know if something like this is possible.
If I RTFM'ed correctly, setting per-item tax rates should be possible if you register the products yourself in the PayPal website interface. This is exactly what I am trying to avoid, because the products are entered by the end user on my CMS.
If what I want isn't possible with a Website Payments Standard button, I would also welcome other ideas on how to forward such orders to PayPal. I am trying to avoid the Express Checkout payment product because if I understand correctly I won't have full control of the cart. I want to have a custom cart and later be able to offer more payment options besides PayPal.
Please help in any way you can! I am a total noob with PayPal.
To answer my own question, what I want is indeed possible and is described in the manual. In my situation where I have built a custom shopping cart, I want to use the Cart upload command of the Website Payments Standard product.
To do a "cart upload" I've set the following fields:
<input type="hidden" name="cmd" value="_cart">
<input type="hidden" name="upload" value="1">
The variables are tax_1, tax_2, etc. They need to be specified as currency, not percentage.
I must be going crazy, or I'm completely lost when it comes to understanding what is doable when it comes to PayPal buttons on my site - either way I must apologise if this seems obtuse.
I'm building a custom CMS for my clients, and I'm trying to let them utilize PayPal on their sites by simply entering in either their merchant ID, or their PayPal e-mail address, and then let CMS will do the rest. Ideally:
Client enters merchant ID / PayPal e-mail address into CMS backend
CMS generates "Buy Now" button for client's buyers to click on
Buyer pays on PayPal's site
Buyer gets redirected to client's site
My headache disappears
This seems to be easier said than done. I've read the developer documentation on generating your own buttons, and used that Javascript-based button generator to create a button with an IPN callback, but that's not going to redirect the buyers back to my clients' websites.
Thus my questions: is it at all possible to achieve what I'm looking to do with just my clients' merchant ID's? Is it possible to do it without them having to configure anything additional in their PayPal account settings to avoid set-up issues? Should I be looking at a different PayPal processing mechanism instead of the "Buy Now" button?
I should probably mention that I have a free PayPal account, not a Premium or Business account, but that should be irrelevant to this situation as it's not me that's trying to get paid.
Thanks in advance, and any help is GREATLY appreciated!
create a hidden field named 'return' in your form and put your return URL as the 'value'
A thank you to Billy for his answer, and while researching this topic some more, I've discovered that what I'm looking to do CANNOT be done with the current payment standards buttons on a standard free PayPal account. You can't achieve automatic redirection back to your site from PayPal with the Buy Now button.
As Billy mentioned, you can add return URLs that will give the user the option to click on a link that will return them to your site afterwards (PayPal will add these links to their side of operations themselves). To do this you would need to add the appropriate hidden fields to your PayPal form.
This worked for me:
<form method="post" action="https://www.paypal.com/cgi-bin/webscr">
<input type="hidden" name="button" value="buynow">
<input type="hidden" name="item_name" value="Item 1">
<input type="hidden" name="amount" value="1234.56">
<input type="hidden" name="currency_code" value="USD">
<input type="hidden" name="quantity" value="1">
<input type="hidden" name="env" value="www">
<input type="hidden" name="cmd" value="_xclick">
<input type="hidden" name="return" value="http://www.site.com/success">
<input type="hidden" name="cancel_return" value="http://www.site.com/error">
<input type="hidden" name="business" value="your#email.com">
</form>
I hope this helps someone avoid headache and unnecessary documentation scouring!
I've got an application using Paypal's IPN interface, pointing at the sandbox site while it's in development.
I've got it handling the success cases correctly, along with the failure cases I accidentally generated during account setup ;-) What I can't find though is how to simulate a transaction being denied, refunded or reversed (other than producing an entirely fake IPN through the test tool, but that won't tie up with transactions at my end so isn't a great test). I've tried enabling the negative testing but that didn't seem to do anything different.
Are these outcomes possible to test using the sandbox and if so, what do I need to set up to create them? Thanks :-)
EDIT: Here's the form code that's submitted for a test transaction.
<form id="payForm" method="post"
action="https://www.sandbox.paypal.com/cgi-bin/webscr">
<input type="hidden" name="cmd" value="_xclick" />
<input type="hidden" name="business"
value="greg_1362574680_biz#gregwebb.co.uk" />
<input type="hidden" name="item_number" value="1_25_2013-03-2221:02:02.063" />
<input type="hidden" name="item_name"
value="ISM Print Subscription - One Year" />
<input type="hidden" name="amount" value="20.00" />
<input type="hidden" name="no_shipping" value="1" />
<input type="hidden" name="return"
value="http://ism.gregwebb.co.uk/?p=PaymentReceived" />
<input type="hidden" name="rm" value="" />
<input type="hidden" name="notify_url"
value="http://ism.gregwebb.co.uk/Payment/Paypal/IPNRecv.aspx" />
<input type="hidden" name="cancel_return"
value="http://ism.gregwebb.co.uk/?p=PaymentCancelled" />
<input type="hidden" name="currency_code" value="GBP" />
<input type="hidden" name="custom" value="1_25_2013-03-2221:02:02.063" />
</form>
You can enable payment review on your test account to allow you to test this. You can also use specific values to trigger specific conditions when processing transactions. You would need to use Negative Testing. You can find more on sandbox and negative testing here.
By default, the Sandbox mimics the live PayPal site as closely as possible. This means means an error condition can be replicated only by creating the exact conditions and sequences of events to raise the error. The Sandbox is a positive test environment in that it's well-suited for testing your program logic as it follows an error-free path. However, you can also do negative testing with the Sandbox, meaning you can force flows through the different error conditions you expect to encounter.
Use negative testing to test against the following kinds of errors:
Errors that result from calling a PayPal API.
Address verification and credit card validation errors that occur through Virtual Terminal, or by calling DoDirectPayment.
NOTE: Negative testing is only available for Version 2.4 and later of the Classic PayPal APIs.
You raise error conditions by setting erroneous values in the fields you pass to an API operation. By setting different input values to erroneous states, you can trigger the API to respond to specific error conditions. Negative testing is available only in the Sandbox; you cannot force or simulate error conditions on the live PayPal site.
To enable negative testing:
Navigate to the Profile > Settings page of your test merchant's Business account.
Set Negative Testing to On.
This sets the Sandbox into the negative testing state for transactions that include the merchant. Without this configuration, the Sandbox does not raise error conditions, unless the error would be raised in the default positive test environment.
I have been making a hotel booking software that calculates, for given dates and specifications, a price for staying at a hotel. I'm looking to use Paypal for accepting the payment, but having browsed their website, can't find a solution that seems to be compatible with this.
Since the price is dynamic, it's not like a normal one-price product which Paypal seems to handle best. I need a method where I can send the cost to Paypal, have Paypal charge the customer, then have Paypal send a confirmation back to the website that the payment has processed correctly at which point the booking is complete.
I presume Paypal is capable of handling a dynamically priced item like this. Could anyone point me in the direction of where I should be looking?
I just completed this process in my current website: bpremium.com, basically I built a webservice api for the payment process where it can send commands over javascript until it gets to the last stage, which is where you build the form you send to paypal.
in order to record the payment, you setup another webservice for the notify url and this will catch all the $_POST data and process it into your database.
<form id="form-payment-paypal" action="https://www.paypal.com/cgi-bin/webscr">
<input type="hidden" name="cmd" value="_xclick" />
<input type="hidden" name="bn" value="PP-BuyNowBF" />
<input type="hidden" name="charset" value="utf-8" />
<input type="hidden" name="business" value="YOUR_ACCOUNT_EMAIL_ADDRESS" />
<input type="hidden" name="item_name" value="THE PRODUCT NAME" />
<input type="hidden" name="item_number" value="YOUR_RECOGNISABLE_SALE_ID?>" />
<input type="hidden" name="currency_code" value="EUR" />
<input type="hidden" name="lc" value="THE LANGUAGE CODE: es_ES, en_GB, etc" />
<input type="hidden" name="amount" value="<?=$amount+($amount*0.04)?>" />
<input type="hidden" name="return" value="/payment/complete/" />
<input type="hidden" name="notify_url" value="/webservice/payment/notify/paypal/" />
<p class="ac span300">
<input type="submit" class="form-style-bt" value="PAY" />
</p>
</form>
that is basically what we use, you can see we put the $amount + $amount*0.04 because you needed to add a 4% surcharge in spain, where I am. perhaps thats different in your code.
I think the rest of it is pretty self explanatory.
on the /webservice/ url, you need to record everything into your database, it sends you the information whether it succeeded or failed, but it's not a call to your website, you won't see this page, it's a "back channel" call to your website, so it's not your landing page, it's simple the url paypal sends all the raw data to, you're supposed to record it, process it and perhaps send out emails, etc.
then if the user returns to your website, you land on the /payment/complete page, so this page could show the result, whether everything is ok, or something failed.
hope it helps.
Paypal's Direct Integration can handle pricing like this. I'd imagine some of their less involved solutions will too, but I know that DI does.
Edit:
ExpressCheckout appears to also:
https://cms.paypal.com/us/cgi-bin/?cmd=_render-content&content_ID=developer/e_howto_api_nvp_r_SetExpressCheckout
I'm trying to setup a registration form for some workshops that last a week. Basically, they can sign up for the workshops individually or the whole week. Depending on what they select, the price will change. I get how to send this information to paypal, however I also want to submit information to my own DB. How would I submit to paypal and file the info into my DB at the same time?
I also want to have a variable that is returned that verifies they have paid so I can mark it in my DB.
Would I just have another page that would put all this info into the DB (once submitted) then also put the info into hidden form fields and then automatically submit to paypal?
Thanks in advance! :)
"When payment is successful your user is returned to your self which is when you can record the payment in the db."
That's exactly what you shouldn't be doing.
Depending on a buyer to return to your website in order to update an order status is the worst thing you can do.
PayPal IPN was designed with especially this use case in mind.
Simply add in
This will ensure PayPal will POST to you whenever the payment has completed. Even if your buyer has already closed his/her browser.
You can use the 'custom' fields to link an IPN POST to a transaction made on your site. For example:
will ensure you get an IPN POST with $_POST['custom'] of '1122334455'. From there, it's simply a matter of making a db call to update the order status to 'paid', or whatever you use to mark it as payment received.
Oh, and don't forget to post the data back to https://www.paypal.com/cgi-bin/webscr?cmd=_notify-validate to validate the IPN POST. More info is available at https://www.paypal.com/ipn/
So I guess you are probably using Website payment standard.
If so the process is like this:.
Users signs up for a particular workshop using your form (select prices, time etc etc)
On submit you process the form (check validation etc)
If you happy with this then you generate a from that is automatically posted to paypal that looks like this:
<body onLoad="document.forms['paypal_auto_form'].submit();">
<p>Please wait</p>
<form method="post" action="https://www.paypal.com/cgi-bin/webscr" name="paypal_auto_form"/>
<input type="hidden" name="rm" value="2" />
<input type="hidden" name="cmd" value="_xclick" />
<input type="hidden" name="currency_code" value="AUD" />
<input type="hidden" name="quantity" value="1" />
<input type="hidden" name="business" value="PAYPAL#EMAIL.COM" />
<input type="hidden" name="return" value="http://domain.com/paypal/success" />
<input type="hidden" name="cancel_return" value="http://domain.com/paypal/cancel" />
<input type="hidden" name="notify_url" value="http://domain.com/paypal/ipn" />
<input type="hidden" name="custom" value="1234567890" />
<input type="hidden" name="item_name" value="Paypal Test Transaction" />
<input type="hidden" name="item_number" value="6941" />
<input type="hidden" name="amount" value="197" />
<p><input type="submit" name="pp_submit" value="Pay Now!" /></p></form>
</body>
The values you of course customize to what you want. Look at Appendix A of the paypal documentation for the variables. You can also add your own log with cpp_header_image or something like that.
The users is taken to paypal to process payments
When payment is successful your user is returned to your self which is when you can record the payment in the db. You might use some for of key or cookie variable to track the payment they have made.
You probably want to use the IPN to double check that it was successfully paid.
If all this is too hard just use http://wufoo.com/ and add the payment module to the form.