/** {@inheritDoc} */
  @Override
  protected void doExecute() throws Exception {
    // Collect parameters.
    final Map<String, String> params = new HashMap<String, String>();
    params.put("_csrf", loginJson.getJSONObject("data").getString("_csrf"));
    params.put("_eventId_submit", "");
    params.put("bp_ks1", "");
    params.put("bp_ks2", "");
    params.put("bp_ks3", "");
    params.put("bp_mid", "");
    params.put("execution", loginJson.getJSONObject("data").getString("flowExecutionKey"));
    params.put("token", getPaypalToken());

    // Send the XHR.
    final WebResponse r =
        new XHR()
            .url(loginJson.getJSONObject("data").getString("flowExecutionUrl"))
            .POST()
            .postParams(params)
            .fire();

    // Create flow control link that points back to the DW system.
    final JSONObject json2 = new JSONObject(r.getContentAsString());
    final HtmlElement a = HtmlPageUtils.createHtmlElement("a", Context.getPage().getBody());
    a.setAttribute(
        "href", json2.getJSONObject("data").getJSONObject("flowControl").getString("location"));

    // Click that link.
    loadPageByClick(a);
  }
 /**
  * Parse PayPal token from URL.
  *
  * @return PayPal token
  */
 private static String getPaypalToken() {
   final String token =
       AjaxUtils.parseUrlParams(Context.getPage().getUrl().getQuery()).get("token");
   Assert.assertNotNull("Could not find PayPal token", token);
   return token;
 }