Xero Authentication in WordPress - api

I have a client that wants to be able to create xero invoices from a custom backend plugin that I have created in WordPress. I understand the xero api docs and what data to pass to the api to create a new invoice but I have to somehow authenticate the user so that they can send data to the api. So far I have created my xero app with a client id and client secret which I believe is required to help authenticate the api request.
But how can I authenticate the api request?
If I do simple request like this it fails:
jQuery(document).ready(function ($) {
$.ajax({
url: 'https://api.xero.com/connections',
error = (res) => {
console.log(res);
},
success = (res) => {
console.log(res);
}
});
});

I'd first recommend using the official xero PHP sdk, however I'm not sure if you are able to import packages to Wordpress like this. I've done some wordpress but I know there are some limitations with importing certain external libraries.
https://github.com/XeroAPI/xero-php-oauth2
However as an alternate solution, theres a recent blogpost on using a raw OAuth2.0 library to connect to XeroAPI manually though. This might set you on the right direction!
https://medium.com/#sid.maestre/use-php-to-connect-with-xero-31945bccd037

Related

Paypal createSubscription() Error in vuejs

I am using laravel as a backend and vuejs as a front end. I have created plan an product using the paypal end points on the backend. When I put the paypal button inside vue and click it. It throws me this error.
paypal.Buttons({
createSubscription: function(data, actions) {
return actions.subscription.create({
plan_id: "plan-id"
});
},
onApprove: function(data, actions) {
alert(
"You have successfully created subscription " + data.subscriptionID
);
}
})
.render("#paypal-button-container");
Make sure you use direct HTTPS API calls to implement the Subscriptions API.
The PayPal-PHP-SDK 's use of billing plans is old and not compatible with the latest versions of the subscriptions API. You should not use the PayPal-PHP-SDK for anything, it is obsolete at this point (use the Checkout-PHP-SDK for regular, non-Subscription payments, and direct HTTPS API calls for the Subscriptions API).
You can test this with command-line curl or Postman calls first, to make sure it works, and then implement the necessary PHP function to do a direct HTTPS API call with the oauth token

Why can't add headers to axios.get?

I'm using axios and vue.js to play with the Fortnite Tracker API.
In their documentation it's clearly said that we need to include the "TRN-Api-Key" in header.
I tested with Postman and It works.
And this is my axios function to make the request:
let url = `https://api.fortnitetracker.com/v1/profile/${this.platform}/${this.username}`;
// username and platform are from my Vue Component.
axios.get(url, {
headers: {
"TRN-Api-Key": "xxxxxxxx-xxxx-xxxx-xxxx-xxxx" // of course from my account on their website.
}
})
.then(response => console.log(response.data))
I expect the output in json like in Postman but I had a 404 Error: "Network Error".
And in the Browser Network Debug I can't see the request header 'TRN-Api-Key'.
[EDIT]
If your app is running on a server you can write a short PHP-Script and use curl in it to access the API (I think it's even possible to generate PHPcode from Postman).
Just address this script with axios and submit your platform and usernameproperties to build the right url.
Or have a look at this post alternatively. Maybe the use of an other API like #kecinotrab provided in the acceptet answer will help you too.

How to obtain a LinkedIn token via Titanium

I want to log in to my application via LinkedIn. This can be done via a call to Cloud.SocialIntegrations.externalAccountLogin() .
However, the function above needs a 'token' parameter. The 'token' is provided by LinkedIn by following the oauth flow(retrieve an authorization code, exchange of the Authorization Code for a Request Token).
Is there an easy way in titanium to obtain this token? I have investigated aaronksaunders's(https://github.com/aaronksaunders/clearlyinnovative.linkedIn) code, and searched on gitt.io. Or do we need to write all of this boilerplate code ourselves?
NOTE: At the moment, I don't want to proxy the call via a server(I prefer not to set up an SSL certificate, etc) and I don't have an appcelerator team or enterprise plan, so I can't use their node(arrow) backend to proxy these calls.
Additional question: is it sufficient to configure the iOS Bundle Identifiers(on the LinkedIn app settings page)? And do I need to use this 'iOS settings' application Id(also on the LinkedIn app settings page)?
I have successfully finished my flow. Everything is explained in this blog post from Ramkumar M: http://shareourideas.com/2012/12/18/linkedin-connect-for-appcelerator-titanium/. The result is achieved by using a modified commonjs module version of the social.js library: https://gist.github.com/rampicos/4320296
This library has a very clean api, the whole flow is nothing more than:
var social = require('social');
var linkedin = social.create({
consumerSecret : CONSUMER_SECRET,
consumerKey : CONSUMER_KEY,
site: 'linkedin'
});
linkedin.authorize(function(){
//callback
});
I don't use the
Cloud.SocialIntegrations.externalAccountLogin()
because the login is done by the social.js library.
LinkedIn app: I have only configured the iOS bundle identifiers.

Laravel API Authentication

I am building an API using Laravel which will be used by both my Mobile and Web Applications. I am confused regarding authentication.
Basically the web application will be used by users both in logged in state and visitor state.
How would authentication work in that case? If the API uses username/password to authenticate a user what about visitors?
Also, how do I make sure its the webapp and mobile app thats making a request to the API? How do I ensure that someone doesn't programatically doesn't access the API and its only my apps that can request access to data?
You have a routes file, and you will be able to apply a filter (Laravel 4) / middleware (Laravel 5) to those routes to protect them. Assuming that you are using L5 -
Route::group('api/v1', function() {
Route::group(['middleware' => 'api.auth'], function() {
Route::get('protected', function() {
return response()->json(['Authenticated Response'], 200);
});
});
Route::get('guest', function() {
return response()->json(['Guest Response'], 200);
});
});
Then you would need to create a middleware for api.auth - See http://laravel.com/docs/5.1/routing#route-group-middleware and http://laravel.com/docs/5.1/middleware
So what happens now is when you try to visit /api/v1/protected, Laravel will run the api.auth middleware before it lets the user go any further.
api/v1/guest will of course be able to be accessed by authenticated users and guest users because there is no middleware applied.

Tweeting from within meteor application

I am trying to build an app with Meteor that involves the user signing in with twitter, facebook, or google+, and then posting to those accounts from within the application.
First I'm trying to get twitter to work. I have my twitter sign in working, with the permission to tweet on their behalf working, but how to I actually send a tweet?
I think I need this: https://dev.twitter.com/docs/api/1.1/post/statuses/update but I can't figure out how the authentication works with Meteor.
Are there any examples that can help me here? Or tutorials?
You need an API to help you a bit unless you want to do it manually using REST with Meteor.http. I'd recommend you get meteorite: https://github.com/oortcloud/meteorite
Its installed like a node module via npm install -g meteorite
Meteorite is a wrapper for meteor that lets you use the community packages over at http://atmosphere.meteor.com
The twitter package you could use is twitter-api installed via mrt add twitter-api : https://github.com/Sewdn/meteor-twitter-api
Once added using the server api you can add a tweet via:
Server JS
var twitter = new Twitter();
Meteor.methods({
postTweet: function (text) {
if(Meteor.user())
twitter.postTweet(text),
return true;
}
});
Client JS
//Use this in your click handler where you want to post a tweet:
Meteor.call("postTweet", "This is Twweeeeeetttt!", function(err,result) {
if(!err) {
alert("Tweet posted");
}
});
The api takes care of the user's oauth tokens so you don't have to worry too much