PayPal WPS has to send IPN to your Drupal website(application) in order for Drupal to process and store payment for the order. When IPN is received and payment transaction is registered in db you can then run some logic (via Rules) to set the order status accordingly and do other things.
You are not receiving IPN from PayPal because your website is on the local host. You have to host your website on live domain(sub domain, domain sub folder , etc.) so that PayPal server can ping yours and send you data.
Read your question a few more times, and here's more thoughts:
You may be messing up PayPal WPS module's logic by using that hook in a wrong way. Why not assign the role via Rules?