Wilson started his career at Charlton Athletic, and played regularly for the club's Under-18 side and reserve team until he was released in 2006. He joined Colchester United ahead of the 2006–07 season, but did not make any first-team appearances during his one-year stay with the club. During his time at Colchester he was loaned out to Conference South side Welling United, making four appearances during his one-month loan spell.
Wilson signed for Hertfordshire side Stevenage in August 2007, and featured regularly for the club for two seasons, playing in the club's successful FA Trophy campaign in May 2009. However, he suffered a dislocated ankle and broken leg in three places in August 2009, ruling him out for eight months, but returned to first-team action in April 2010 as Stevenage won promotion to the Football League for the first time in the club's history. He then played a key part during the club's 2010–11 campaign, helping Stevenage earn promotion to League One.
In July 2012, Wilson rejoined Charlton for an undisclosed fee. He stayed with the club for three seasons, making 96 appearances in the Championship. He signed with Bolton Wanderers in August 2015, but was loaned out to Peterborough United in January 2016, who were managed by former Stevenage boss Graham Westley. Bolton were relegated at the end of the 2015–16 season, before he featured 26 times throughout the 2016–17 campaign as they won promotion out of League One at the first attempt. He signed with Port Vale in July 2017.
Wilson began his career as a trainee with Charlton Athletic, and was a regular in the club's Under-18 team, where he played in defence. He progressed through the club's youth system, and featured in Charlton's reserve side throughout the club's 2005–06 campaign, making a total of 16 appearances for the reserve side as a second-year scholar. However, he failed to make any first-team appearances and was subsequently allowed to search for a new club. In February 2006, he played for Luton Town's reserve side in a match against Stevenage Borough reserves at Kenilworth Road, although no transfer materialised. He was officially released by Charlton in April 2006. A month later, Wilson went on trial at League Two side Shrewsbury Town, and played the whole match in Shrewsbury's 2–1 pre-season friendly home win against Rotherham United, although he was unsuccessful in his attempt to earn a professional contract with the club. In August 2006, Wilson signed a one-year deal with Colchester United. Similarly to his time at Charlton, Wilson featured regularly for the club's reserve side throughout the 2006–07 season, but failed to make any first-team appearances, making the substitute's bench once in a 1–0 loss to MK Dons in the League Cup. He was loaned out to Conference South side Welling United in December 2006. He made his debut for Welling in the club's 1–0 win away at Cambridge City, but was sent-off after just 27 minutes for violent conduct. He returned to first-team action in Welling's 0–0 draw with Basingstoke Town at Park View Road in the FA Trophy, and also played the whole match in Welling's 2–1 away win against Thurrock. Wilson played his last game for Welling in the club's 2–0 win at home to Fisher Athletic in early January 2007. He played a total of four times for Welling during his one-month loan spell at the club. On returning to Layer Road, Wilson was released at the end of the 2006–07 season, and failed to make a first-team appearance for Colchester. Ahead of the 2007–08 season, Wilson spent pre-season trialling at Brentford and Stockport County respectively, training with Stockport for a number of weeks and playing in several pre-season friendlies, but was ultimately not offered a contract.
On 16 August 2007, Wilson signed for Stevenage on a one-year contract. Manager Mark Stimson handed him his Stevenage debut just a day after signing for the club, coming on as an 86th-minute substitute in Stevenage's 3–0 win against Weymouth. Wilson played in a total of 27 games during his first season at Stevenage, with the majority of his appearances coming in the second half of 2007–08 season. The following season under the new management of Graham Westley, Wilson featured regularly in both the full back position and at right midfield. In August 2008, Wilson scored his first ever professional goal in Stevenage's 3–1 away win at Barrow, taking advantage of a goalkeeping error in the 75th minute of the match to seal Stevenage's first win of the 2008–09 campaign. He made assists in games against Burton Albion and Forest Green Rovers respectively. He was also sent-off for the first time in Stevenage colours in the club's 3–1 home defeat to Histon in November 2008, picking up the red card for "offensive language". Wilson returned to the first team at the start of December and remained in the first-team until the end of the season, assisting goals in important wins against Woking and Cambridge United as Stevenage finished in the final play-off spot. He subsequently played in both of Stevenage's Conference Premier play-off games against Cambridge United in April 2009, as the club lost 4–3 on aggregate. Wilson's versatility also came into use during the club's successful FA Trophy campaign during the same season, as he played in four different positions in six of Stevenage's FA Trophy fixtures. He was deployed at left midfield in Stevenage's 2–0 win against York City in the Final at Wembley Stadium.
Wilson started in Stevenage's first game of the 2009–10 season in a 1–1 draw against Tamworth, adopting a much more attacking midfield role on the right wing. In the following game, Wilson's through pass assisted Andy Drury's goal against Hayes & Yeading United, and Wilson continued his impressive start to the season by assisting Chris Beardsley's goal against Ebbsfleet United. In the same game, Wilson scored his first goal of the season, latching onto Ronnie Henry's ball before lashing the ball past the goalkeeper to give Stevenage a three-goal lead. Two weeks later, in Stevenage's 2–1 victory against Rushden & Diamonds, Wilson suffered a "career threatening injury" following a tackle from Michael Corcoran, which resulted in Wilson suffering a dislocated ankle and broken leg in three places. Wilson had a successful operation the following day and was expected to miss the rest of the 2009–10 season. Wilson returned earlier than expected, playing in a reserve match against Ipswich Town in March 2010, and he made his return to the first-team a week later against Luton Town, coming on as a 65th-minute substitute. Two days later, Wilson started his first game in just over eight months against AFC Wimbledon. He scored Stevenage's second goal, scoring on the half volley from Joel Byrom's chipped pass in Stevenage's 3–0 win at Kingsmeadow. He also played in the club's 2–0 win against Kidderminster Harriers at Aggborough in April 2010 – the game that secured Stevenage's place in Football League for the first time in the club's history. Wilson played a total of 13 matches during the season, scoring twice. At the end of the season, it was announced that Wilson had signed a contract to keep him at the club until July 2011.
Wilson played in Stevenage's first fixture of the 2010–11 season, playing 72 minutes in the club's 2–2 draw with Macclesfield Town. In September 2010, he was sent-off in a game against Cheltenham Town at Whaddon Road, receiving a red card for two bookable offences. He subsequently missed Stevenage's 0–0 draw against Torquay United as a result of the suspension. Shortly after, he signed a new contract with the club, keeping him at Stevenage until 2012. He returned to the first-team in Stevenage's win against Lincoln City, and provided two assists in Stevenage's 4–1 win away at Hereford United three days later. Wilson's fine form continued, as he was on hand to assist both of Stevenage's goals in a 2–1 win over Burton Albion – firstly being fouled in the area to earn Stevenage a penalty, and secondly crossing the ball into the box for Chris Holroyd to volley home. He scored his first goal of the 2010–11 season in Stevenage's 2–2 draw against Accrington Stanley in February 2011. A month later, Wilson scored both of Stevenage's goals in a 2–1 home win against Lincoln City, his second goal coming from 25 yards out after a neat interchange with John Mousinho. He scored his fourth goal of the season on 9 April, netting an injury-time equaliser in a 2–2 draw at Stockport County. Wilson scored his fifth goal of the season on 25 April, scoring the only goal of the game in Stevenage's 1–0 home win against Port Vale. He scored five goals in 50 appearances during the club's 2010–11 campaign, a season that witnessed Stevenage earn promotion to League One for the first time in their history.
Wilson was part of the starting eleven in Stevenage's first ever League One fixture at the start of the 2011–12 season, playing the whole game as the club drew 0–0 at home to Exeter City. In Stevenage's next game, Wilson provided the assist for Stacy Long's goal in a 4–3 extra-time defeat to Peterborough United in the League Cup. He also assisted Craig Reid in the club's 3–1 away win at Bournemouth on 16 August 2011. Three days later, on 19 August, Wilson signed a contract extension at the club. He added to his two previous assists by assisting Craig Reid's first goal in the club's 4–2 home win against Rochdale on 3 September. Wilson scored his first goal of the 2011–12 season in a 5–1 home win over Sheffield Wednesday, scoring Stevenage's fourth goal of the match just before half-time. In the same game, Wilson provided the run and pass to assist Darius Charles' second-half goal, Stevenage's fifth of the game. He added a second goal to his goal tally in Stevenage's League Trophy penalty loss against League Two side AFC Wimbledon — opening the scoring after seven minutes when Brett Johnson's clearance cannoned off of Wilson's leg and beat the stranded Seb Brown in the AFC Wimbledon goal. His fine form for the season continued, and he was pivotal in Stevenage's 2–1 home win against Sheffield United, assisting Mark Roberts' goal, before winning a penalty late-on, which was duly converted by Scott Laird. He also set-up Chris Beardsley's 38th-minute strike, to open the scoring, in an eventual 2–1 win against Tranmere Rovers at Broadhall Way. In the club's last game of 2011, on 31 December, Wilson scored the only goal of the game as Stevenage defeated Wycombe Wanderers 1–0 at Adams Park. The goal came in the 82nd minute of the match, with Wilson powerfully beating Nikki Bull from close-range following Luke Freeman's precise cross. He was also on hand to score two of Stevenage's five goals in a 5–1 victory against Rochdale at Spotland on 14 January 2012. Both of Wilson's goals came in the second-half; the first came shortly after the interval, when he ran onto Chris Beardsley's rolled pass to fire the ball into the net, with his second coming after he ran onto Mark Roberts' clearance to calmly beat Péter Kurucz in the Rochdale goal. Wilson scored one further goal during the campaign, scoring a diving header in injury-time in a 1–0 win over Oldham Athletic at Broadhall Way. It took Wilson's goal tally to six for the season, with the player being ever-present during the campaign under both Westley and new manager Gary Smith, playing in all 56 of the club's games, as Stevenage narrowly lost in the play-off semi-finals.
In the summer of 2012, Wilson was strongly linked to Peterborough United, as well as Charlton Athletic. Stevenage confirmed that they had received two bids for the player, both of which from Championship clubs. In July 2012, Wilson signed for Chris Powell's Charlton, the club he began his football career with, for an undisclosed fee. He made his debut for Charlton in the club's opening game of the 2012–13 season, a 1–1 draw with Leyton Orient in the League Cup at The Valley on 14 August, which Charlton went on to lose 4–3 on penalties after extra-time. During the match, Wilson gave away a penalty after fouling David Mooney, although Mooney missed the subsequent spot-kick. Wilson scored his first goal for the "Addicks" during his tenth league appearance, scoring from close range to restore parity in a 1–1 draw with Wolverhampton Wanderers at Molineux on 27 October. After a month out of first-team action, Wilson returned for Charlton's 2–2 home draw with Brighton & Hove Albion on 8 December, and scored the first goal of the match courtesy of a glancing header from Dale Stephens' cross. It turned out to be Wilson's last goal of the season, a campaign in which he made 32 appearances as Charlton finished in ninth position in the Championship, just three points behind the final play-off place.
He made a total of 49 appearances across the 2013–14 campaign as Charlton posted an 18th-place finish under new manager José Riga. He competed with Chris Solly and Joe Gomez at the start of the 2014–15 season, but speaking in November manager Bob Peeters dismissed reports that he was willing to allow Wilson to leave on loan. On 20 March 2015, Wilson joined Championship rivals Rotherham United on an emergency loan. Manager Steve Evans hinted that the loan move would allow him to evaluate whether or not to sign Wilson permanently in the summer. However he would play just three games for the "Millers" in a brief stay at the New York Stadium.
On 5 August 2015, Wilson signed for Bolton Wanderers on a two-year deal. Initially the club's first choice right-back, he was frozen out of the first team picture by manager Neil Lennon after putting in a poor performance during a 4–1 defeat at Huddersfield Town on 19 September. On 2 January 2016, Wilson joined League One side Peterborough United on a one-month loan. He said that re-uniting with former Stevenage manager Graham Westley was a factor in the move to the London Road Stadium. Wilson played just four times for the "Posh", starting as a substitute in their game with Sheffield United, and made his final appearance in the 2–2 draw with West Bromwich Albion in the FA Cup. He was recalled to the first team at the Macron Stadium by interim manager Jimmy Phillips for the final two games of the 2015–16 season following injuries to Oscar Threlkeld and Josh Vela and a suspension for Niall Maher.
Wilson regained his first team place at Bolton following an injury to Lewis Buxton in September, and then established himself at right-back under manager Phil Parkinson, who he said had a "good approach" to management. However he was ruled out of action for ten weeks with a hamstring injury he picked up during a 1–1 draw at Milton Keynes Dons on 4 February. The "Trotters" went on to secure promotion at the end of the 2016–17 campaign, though Wilson was released after the club decided not to offer him a new contract.
On 15 July 2017, Wilson signed a two-year contract with newly relegated League Two side Port Vale, after manager Michael Brown needed to replace departing right-back and club captain Ben Purkiss.
On 27 August 2009, Wilson was called up to play for the England C team, who represent England at non-league level, in a game against Hungary C in Budapest. However, he was forced to pull out of the team after suffering a dislocated ankle and broken leg just three days later.
Wilson is primarily a right-back, but is also adept at playing on the right-side of midfield, and can also fill in at left-back, central midfield or the left-hand side of midfield if needed.As of match played 2 September 2017
FA Trophy winner: 2009
Conference Premier champion: 2009–10
League Two play-off winner: 2011
EFL League One runner-up: 2016–17