/** * Generate Stripe-hosted onboarding link for worker's connected account. */ response = { "OK": false }; try { requestData = deserializeJSON(toString(getHttpRequestData().content)); userID = val(requestData.UserID ?: 0); if (userID == 0 && structKeyExists(request, "UserID")) { userID = val(request.UserID); } if (userID == 0) { response["ERROR"] = "missing_params"; response["MESSAGE"] = "UserID is required."; writeOutput(serializeJSON(response)); abort; } qUser = queryTimed(" SELECT StripeConnectedAccountID FROM Users WHERE ID = :userID ", { userID: userID }, { datasource: "payfrit" }); if (qUser.recordCount == 0) { response["ERROR"] = "user_not_found"; writeOutput(serializeJSON(response)); abort; } accountID = qUser.StripeConnectedAccountID ?: ""; if (len(trim(accountID)) == 0) { response["ERROR"] = "no_stripe_account"; response["MESSAGE"] = "Create a Stripe account first."; writeOutput(serializeJSON(response)); abort; } // Create Account Link for onboarding stripeSecretKey = application.stripeSecretKey ?: ""; httpService = new http(); httpService.setMethod("POST"); httpService.setUrl("https://api.stripe.com/v1/account_links"); httpService.setUsername(stripeSecretKey); httpService.setPassword(""); httpService.addParam(type="formfield", name="account", value=accountID); baseUrl = application.baseUrl; httpService.addParam(type="formfield", name="refresh_url", value=baseUrl & "/works/stripe-return.cfm?status=refresh"); httpService.addParam(type="formfield", name="return_url", value=baseUrl & "/works/stripe-return.cfm?status=complete"); httpService.addParam(type="formfield", name="type", value="account_onboarding"); result = httpService.send().getPrefix(); linkData = deserializeJSON(result.fileContent); if (structKeyExists(linkData, "error")) { response["ERROR"] = linkData.error.message; writeOutput(serializeJSON(response)); abort; } response["OK"] = true; response["ONBOARDING_URL"] = linkData.url; } catch (any e) { response["ERROR"] = e.message; } writeOutput(serializeJSON(response));