CARVIEW |
Select Language
HTTP/2 200
date: Sat, 11 Oct 2025 23:07:12 GMT
content-type: text/html; charset=utf-8
cache-control: max-age=0, private, must-revalidate
content-security-policy: default-src 'none'; base-uri 'self'; child-src github.githubassets.com github.com/assets-cdn/worker/ github.com/assets/ gist.github.com/assets-cdn/worker/; connect-src 'self' uploads.github.com www.githubstatus.com collector.github.com raw.githubusercontent.com api.github.com github-cloud.s3.amazonaws.com github-production-repository-file-5c1aeb.s3.amazonaws.com github-production-upload-manifest-file-7fdce7.s3.amazonaws.com github-production-user-asset-6210df.s3.amazonaws.com *.rel.tunnels.api.visualstudio.com wss://*.rel.tunnels.api.visualstudio.com github.githubassets.com objects-origin.githubusercontent.com copilot-proxy.githubusercontent.com proxy.individual.githubcopilot.com proxy.business.githubcopilot.com proxy.enterprise.githubcopilot.com *.actions.githubusercontent.com wss://*.actions.githubusercontent.com productionresultssa0.blob.core.windows.net/ productionresultssa1.blob.core.windows.net/ productionresultssa2.blob.core.windows.net/ productionresultssa3.blob.core.windows.net/ productionresultssa4.blob.core.windows.net/ productionresultssa5.blob.core.windows.net/ productionresultssa6.blob.core.windows.net/ productionresultssa7.blob.core.windows.net/ productionresultssa8.blob.core.windows.net/ productionresultssa9.blob.core.windows.net/ productionresultssa10.blob.core.windows.net/ productionresultssa11.blob.core.windows.net/ productionresultssa12.blob.core.windows.net/ productionresultssa13.blob.core.windows.net/ productionresultssa14.blob.core.windows.net/ productionresultssa15.blob.core.windows.net/ productionresultssa16.blob.core.windows.net/ productionresultssa17.blob.core.windows.net/ productionresultssa18.blob.core.windows.net/ productionresultssa19.blob.core.windows.net/ github-production-repository-image-32fea6.s3.amazonaws.com github-production-release-asset-2e65be.s3.amazonaws.com insights.github.com wss://alive.github.com wss://alive-staging.github.com api.githubcopilot.com api.individual.githubcopilot.com api.business.githubcopilot.com api.enterprise.githubcopilot.com; font-src github.githubassets.com; form-action 'self' github.com gist.github.com copilot-workspace.githubnext.com objects-origin.githubusercontent.com; frame-ancestors 'none'; frame-src viewscreen.githubusercontent.com notebooks.githubusercontent.com; img-src 'self' data: blob: github.githubassets.com media.githubusercontent.com camo.githubusercontent.com identicons.github.com avatars.githubusercontent.com private-avatars.githubusercontent.com github-cloud.s3.amazonaws.com objects.githubusercontent.com release-assets.githubusercontent.com secured-user-images.githubusercontent.com/ user-images.githubusercontent.com/ private-user-images.githubusercontent.com opengraph.githubassets.com marketplace-screenshots.githubusercontent.com/ copilotprodattachments.blob.core.windows.net/github-production-copilot-attachments/ github-production-user-asset-6210df.s3.amazonaws.com customer-stories-feed.github.com spotlights-feed.github.com objects-origin.githubusercontent.com *.githubusercontent.com; manifest-src 'self'; media-src github.com user-images.githubusercontent.com/ secured-user-images.githubusercontent.com/ private-user-images.githubusercontent.com github-production-user-asset-6210df.s3.amazonaws.com gist.github.com; script-src github.githubassets.com; style-src 'unsafe-inline' github.githubassets.com; upgrade-insecure-requests; worker-src github.githubassets.com github.com/assets-cdn/worker/ github.com/assets/ gist.github.com/assets-cdn/worker/
link: ; rel=preload; as=fetch; crossorigin=use-credentials
referrer-policy: no-referrer-when-downgrade
server-timing: issue_layout-fragment;desc="issue_layout fragment";dur=291.429661,issue_conversation_content-fragment;desc="issue_conversation_content fragment";dur=794.267667,nginx;desc="NGINX";dur=0.669889,glb;desc="GLB";dur=138.491841
strict-transport-security: max-age=31536000; includeSubdomains; preload
vary: X-PJAX, X-PJAX-Container, Turbo-Visit, Turbo-Frame, X-Requested-With, Accept,Accept-Encoding, Accept, X-Requested-With
x-content-type-options: nosniff
x-frame-options: deny
x-voltron-version: aab62e3
x-xss-protection: 0
server: github.com
content-encoding: gzip
accept-ranges: bytes
set-cookie: _gh_sess=I1MEhka1u4iAw0rLibP28TCO%2Fu2rBOeiEvO642D%2F4hXgpEOZoPnkQAi8wbQsdWVnrah9EV%2BJBYGLTF2GjLYFiVwB6HW3uEKTOZKiQgZikxHTgI9l5KrhsPqhfengbzvCiltrbNkuODTqBkko1oKLU4UPXK90bT1UVlMV%2Bm70ZSWS8xjpyEg8qk0ya%2F7XLXQ7hwwue%2F5hUaLjU4qIIKh61T6J8ddaNwUg5v1946hWAP69aQlnXg47jy2BQ4vPolUqSZUlh0C8amrfYumMdN7W5Q%3D%3D--LK6NEx3%2F2J%2Bfcg%2BS--sjm%2BlV57scHublVDZp9rpA%3D%3D; Path=/; HttpOnly; Secure; SameSite=Lax
set-cookie: _octo=GH1.1.534138971.1760224031; Path=/; Domain=github.com; Expires=Sun, 11 Oct 2026 23:07:11 GMT; Secure; SameSite=Lax
set-cookie: logged_in=no; Path=/; Domain=github.com; Expires=Sun, 11 Oct 2026 23:07:11 GMT; HttpOnly; Secure; SameSite=Lax
x-github-request-id: 8A06:3FDFA5:AA3490:E17E13:68EAE31F
How would iDeal work? · Issue #251 · w3c/payment-handler · GitHub
No one assignedNo labelsNo typeNo projectsNo milestoneNone yetNo branches or pull requests
Skip to content
Navigation Menu
{{ message }}
-
Notifications
You must be signed in to change notification settings - Fork 41
Closed
Description
I’ve been playing around a bit with the Android/Chrome implementation and trying to imagine how the Dutch payment method iDeal could fit into Payment Handler. For those unfamiliar with it: it’s the most popular way of paying online in the Netherlands (57% market share) with over half of transactions being done on mobile (source: Currence, the company that owns iDeal).
The simplified way it currently works for ecommerce:
- The buyer checks out and selects their bank before clicking a ‘pay’ button.
- A transaction is requested (with the selected bank, a uniquely generated session identifier
entranceCode
,purchaseID
and themerchantReturnURL
) by the merchant on the iDeal network (gateway/acquiring bank). The response contains aissuerAuthenticationURL
,purchaseID
andtransactionID
. - The merchant redirect the buyer to this issuer URL.
- On mobile, the bank’s apps have an URL handler registered for the bank domains to continue the authorization process within the app.
- If the app is not installed or the buyer is on desktop, the regular internet banking environment is used.
- The buyer logs in and authorizes, or cancels, the transaction and is redirected to the
merchantReturnURL
which can be a website or native mobile app link. Theec
(entranceCode) andtrxid
(transactionID) fields are appended in the query string that allows the merchant to retrieve the initiated iDeal session for a purchase and the transaction status.
As it currently stands, it seems that Payment Handler could work with Dutch banking apps on Chrome/Android with no major changes to UX and use the same fields in the PaymentHandlerResponse details.
For service workers things are less clear for me:
- Service workers add no value, since all Dutch banks implement a form of two factor auth (SMS, card + reader device) and iDeal transactions require authentication for each transaction.
- I understand the reasoning for installation to filter out payment methods the buyer has, but IMO it is a step back from a buyer’s UX perspective compared to what there is today.
- If we must use a service worker, who would own/host it? With the way it works now it should probably be Currence and not one of the 61 payment gateways and 10 banks that participate in iDeal. But this would either confuse buyers with various deny any of these companies to innovate/experiment on their own
- Also how is a buyer expected to distinguish between a legit innovative gateway/bank that a merchant is using versus a malicious actor?
Hope this makes sense!
Metadata
Metadata
Assignees
Labels
No labels
Type
Projects
Milestone
Relationships
Development
Issue actions
You can’t perform that action at this time.