Set up the public payment-link site
A payment link opens a page that anyone can reach without logging in. In Salesforce that is a public Experience Cloud site — or public pages in an existing site — whose guest user is allowed to run the REDA Pay screens and to read exactly the order behind the link, nothing else. This article builds that site, grants the guest user what it needs, and connects it to your processing account.
- REDA Pay is configured and the processing account is branded — the public page shows that branding.
- You hold REDA Pay - Admin User and the Salesforce permissions to create Experience Cloud sites, edit profiles and create sharing rules.
- You know whether you will reuse an existing public site (for example a vendor or applicant site) or create one.
Part 1 — The site and its pages
- Setup → Digital Experiences → All Sites → New (if you are creating a site). Choose a template such as Build Your Own, name it, give it a path such as
pay, and create it. Or open your existing public site. - In Experience Builder, create four pages, as in the portal set-up, but on a site or pages that guests can see:
| Page | Component | Settings |
|---|---|---|
| Link entry (for example Process Order Link) | NewPayOrder | Is Portal on; Portal Payment Page, Portal Success Page, Portal Error Page = the API names of the next three; Portal Return URL = your website or the site home |
| Payment screen | NewPayOrderRequest | none |
| Success page | NewPayOrderResult | Is Success on |
| Error page | NewPayOrderResult | Is Success off |
- If vendors will enter bank details through a link (see Request bank details from a vendor), add the same set with NewPayMethod (and Portal Method Input Page), NewPayMethodRequest and NewPayMethodResult.
- Make the pages public: in each page's properties, set page access to Public, and under Settings → General → Public Access select Guest users can see and interact with the site without logging in.
- Publish.
Write down the full address of the link entry page, for example https://yourcompany.my.site.com/pay/s/process-order-link.
The entry page carries the whole configuration; the request page just renders the screen.
Part 2 — The guest user
Every public site has a guest user and a guest profile; an anonymous payer is that user while on your page. Give it the REDA Pay access: assign REDA Pay - Public Site User to the guest user, or put the same settings on the guest profile. It grants read on Pay Orders, Pay Customers, Pay Profiles, Processing Accounts and Fee Setups, create on Pay Methods and Pay Transactions, the Apex classes behind the screens, and read access to the REDA Pay Process Config and REDA Pay Setup custom metadata types. Each step, with the alternatives, is in Payment-link guest access: permissions and sharing.
Part 3 — Guest sharing rules
A permission set says what kind of record the guest may read; sharing rules say which records. The guest must see an order only while its link is active, and a customer only while they have a live link. Create these under Setup → Sharing Settings, choosing Guest user access, based on criteria and the site's guest user as the target, all Read Only:
| Object | Criteria | Why |
|---|---|---|
| Pay Order | Has Active Link equals True | The payer can open the order behind a live link, and nothing else |
| Pay Customer | Order Link Expiration Date Time not equal to blank | The payer can read the customer of a live link |
| Pay Profile | Is Active equals True | Needed to render the screen |
| Processing Account | Is Active equals True | Needed to render the screen and branding; Fee Setups follow the account |
REDA Pay turns Has Active Link off when the order is paid or revoked, and about a minute after the link expires, so the order disappears from the guest's view by itself.
The guest sees an order only while its link is active.
Part 4 — Connect the processing account
On each Processing Account that will issue links:
- Link Site Public URL: the full address of the link entry page from Part 1.
- Link Expiration (Minutes): how long links live, counted from creation. Fill it in — a link created while it is blank never activates.
- Optionally Payment Session Duration (Minutes) for guests, and Enforce Geolocation for Link and Guest if you want payers' locations recorded.
See Configure a processing account.
Part 5 — Test
- Create a test link for a demo customer: Create and send a payment link.
- Open Link URL in a private browser window. The branded payment screen appears with the amount locked and the notes shown. Try it at phone width too.
- Cancel without paying, then revoke the test order.
- Open the same address with a character removed: "Invalid request: Bad request Parameters." proves that a guest cannot reach anything but a live link.
Mistakes to avoid
| Mistake | What the payer sees | Fix |
|---|---|---|
| Pages not public | A login page | Set page access to Public and allow guest access |
| Guest user without the permission set | An access error on the page | Assign REDA Pay - Public Site User to the guest user |
| Sharing rules missing | "Invalid request: Bad request Parameters." on every link | Create the four rules |
| Link Site Public URL points at the request page | The screen cannot start | Point it at the entry page (the one with NewPayOrder) |
| Link Expiration (Minutes) blank | "Invalid request" immediately | Fill it in |
| Site not published after changes | The old page | Publish |
FAQ
Yes: login-required pages for customers and public pages for links can live in one site. Keep the components on separate pages, because the guest and the logged-in flows need different settings.
The guest can read only orders with an active link and the customers behind them, can create a method and a transaction for that order, and nothing else. The order identifier in the address is encrypted.
Each site has its own; assign the permission set and the sharing rules to the guest user of the site that hosts the pages.