How to cancel buyer's agreement programmatically? (PayPal) - api

I want to cancel a buyer's recurring transaction entirely automatically (without manual logging into PayPal account neither for us nor for the customer) by our software.
https://developer.paypal.com/docs/api/ and https://developer.paypal.com/docs/api/payments.billing-agreements say that we can use /v1/payments/billing-agreements/<agreement_id>/cancel.
But it requires authorization. We do not want to ask the customer to authorize on his own. We want to do it from our side entirely automatically.
Is it possible to obtain an authorization token for this situation without customer's intervention? If yes, how?

The authorization is not required by the user in order for you to cancel the agreement, it is API authorization that you need to interact with your billing agreements programatically.
I would have thought that if you have access to the details of their billing agreement in your business Paypal account, you should have access to this information once you are authorized to communicate with the API and thus authorization to cancel any agreements that are active in your account.
The PayPal API credentials that you use to communicate with the API should be one associated with the PayPal account that has access to the agreement details.
Once you're there, you can retrieve the PayPal agreement by the Agreement ID and call Cancel on it using the SDK.
Find the SDK for the language that you wish to use (you didn't
specify a language in your question) and follow the quick start
guide. The quick start guides contain details on how to create API keys to access your account programatically.
Load the agreement details using the Agreement ID, examples for
each are linked here. It is possible to load all agreements for your account using the api too, so you can get all of the Agreement IDs and loop through them if you wish.
Call the cancel method on an agreement to cancel it
I hope this helps!

Related

Paypal API for recurring payment based on usage

I am currently upgrading an old system writing in JSF, which communicates with Paypal to create an "Acceptance term" for recurring payment, it generates a Token and when the client accepts the term, it creates an Agreement Id, later we use these to charge the client based on the services he used.
On the Paypal developer website, the Billing Agreement API is marked as deprecated, so I can´t work with it, they offer the Subscription as an alternative, but it doesn´t give the Agreement Id or the possibility to charge the user based on the usage, at least, not that I´ve seen.
Is there a way to create the Token and Agreement, or to use the Subscription (or other methods) to charge the user based on that?
eg. We offer a mobile plan for U$ 10, plus U$ 5 if the user sends more than 1000 messages, we first check if that happened, then we charge the user.
If the account is approved for reference transactions, and it sounds like it may be, you can use the Vault API which is in open beta, in conjunction with the orders API. See this example.

How do you pull customer data from Paypal?

What is the right procedure for pulling data about a customer (using OAuth to "Connect with Paypal" similar to the functionality that Stripe and Square provide) from Paypal?
The paypal documentation is confusing in two ways -
The OAuth scopes shown only have basic profile information like email, address, name, etc. and the link to the attributes page in the Account Information line item seems broken.
Other places mention that you have to sign onto the Paypal partner program to pull data on behalf of third parties.
So, for anyone that has gone through this - what is the right way to proceed/do I have to sign up to Paypal partner program? Is Permissions the right API to use?
I know broadly that connecting and fetching paypal account data is possible since, for example, Kabbage allows you to link your Paypal account and pulls data from it directly.
Connect with PayPal is so a user can click the CwPP button, sign into PayPal agreeing to give you access to certain profile information (based on the selected scopes) -- and then once they grant that permission and return, you're able to use the provided authorization code to access their profile information with its API.
In order to use CwPP in the live environment, your CwPP app has to be approved. You don't need to be in the PayPal partner program for this.

How does one associate a website user with a Paypal subscription?

I am implementing subscriptions to a premium service on a website using Paypal as the payment service. I have successfully created a Catalog Product and Billing Plan through the API, and I am able to get to the payment page on Paypal, but it's not clear how I'm supposed to persist a user identifier through the purchase process.
I assumed it would be something along the lines of passing a user id somewhere, but there's nothing in the Paypal documentation about this. I need to be able to let the user make a purchase and have the Paypal webhook send the confirmation to an endpoint on my site, and that's where I'd expect to get their user id to toggle the subscription on their account on my end.
Is there something I'm missing? There has to be a way to do this cause I'd imagine it's a pretty common use case. If anyone has information or has done this before, I'd love to hear. Thanks.
The only truly secure way I've found when using javascript SDK, is to securely generate a unique custom_id on your server side associated with the user.
Then when you create the buttons, the 'createSubscription' function takes custom_id as a parameter.
Then use a webhook to receive events from your subscription and the custom_id will be present in the body of all BILLING.SUBSCRIPTION events under resource.custom_id.
I am able to get to the payment page on PayPal,
You are vague about what you are doing here. There are multiple ways (and some ways have multiple versions) of accepting subscriptions via PayPal, so it is important that you provide full details about the method you are using.
The time to associate a created subscription ID with a user ID is when it is approved, in the onApprove function if you are using a Smart Payment Button: https://developer.paypal.com/docs/subscriptions/integrate/#4-create-a-subscription

Can the Yodlee API be used to retrieve the transactions on any credit card?

A client I work with wants to know if it's possible to use the Yodlee API to look up recent transactions on any credit card.
They'd like it to work without the user needing to be signed up with Yodlee, either directly at the site, or indirectly through a branded partner.
I assume this would be possible if the credit card company itself shared it's transaction data with Yodlee directly, and made it available to their API customers, but I haven't been able to figure this out from the docs available on their website, and haven't been able to reach anyone at Yodlee themselves to ask.
I work for Yodlee. Sorry to hear you're having a hard time getting a hold of us. To answer your question, yes the user has to explicitly authorize any application that leverages the Yodlee API and explicitly add access to their financial accounts for that application.
Best,
Grace
Yodlee screenscrapes websites to retrieve it's information.
Which means that they physically (but in an automated fashion) visit the website in a browser (IE8). Thus to pull any information down they have to visit the website, log in successfully, (optionally but more so on more banks; authenticate the computer) and then they can see all of the information that the user sees. Their API acts as a real time bridge between you (the end user using your website or app) and this browser.
So you have to either implement their very much so convoluted Yodlee API or use one of their generic hosted pages and direct the user to it where upon he/she enters the necessary information. You also have to have an agreement with them too. You also have to convince the user to do it :)

Using Stripe Connect to facilitate transactions between users?

Specific requirements for my app:
buyers must be able to use credit card
i want to collect a portion of each transaction (fee)
I was initially using Dwolla but realized that users would not be able to pay with credit cards. Now I'm looking at Stripe and see that they have Stripe Connect.
Would Stripe Connect fit the bill? A post here says that SC "would require the [recipients] to have business licenses". Is this true?
Also, looking at the API, I don't see how to direct the received funds to a recipient account. It seems like all you can do is "charge" the card. This seems like it would just put all of the funds in my account. All I want is a portion (fee) and then have the rest somehow deposited in the recipient's account. Is this possible, and if so, how do I specifiy the recipient in the API call?
It's best to view Stripe Connect as OAuth. Merchants can connect their Stripe accounts with you, and you can authenticate to Stripe with their details, and make charges on their behalf. You can take a fee off the top using the 'application_fee' param.
As to your first question, all users would have to sign up to and abide by Stripe's terms. They don't necessarily need to be businesses though - they could be sole proprietors.
You can find more docs on Connect here. https://stripe.com/docs/connect