Chúng tôi đã tìm ra nó.
Bằng cách nào đó, thuộc tính "SameSite" của cookie "ASP.NET_SessionId" mặc định là "Lax" và điều này khiến cookie phiên không được thêm vào yêu cầu được thực hiện bởi mã javascript của cổng thanh toán.
Chúng tôi đã thêm quy tắc sau vào tệp web.config để ghi đè giá trị này và đặt thành "Không".
<configuration>
<system.webServer>
<rewrite>
<outboundRules>
<rule name="Add SameSite" preCondition="No SameSite">
<match serverVariable="RESPONSE_Set_Cookie" pattern=".*" negate="false" />
<action type="Rewrite" value="{R:0}; SameSite=None" />
<conditions>
</conditions>
</rule>
<preConditions>
<preCondition name="No SameSite">
<add input="{RESPONSE_Set_Cookie}" pattern="." />
<add input="{RESPONSE_Set_Cookie}" pattern="; SameSite=None" negate="true" />
</preCondition>
</preConditions>
</outboundRules>
</rewrite>
</system.webServer>
</configuration>
CẬP NHẬT 1 : Chỉ cần thêm cấu hình ở trên đã giải quyết vấn đề cho các trình duyệt hiện đại nhưng chúng tôi nhận ra rằng chúng tôi vẫn gặp sự cố với các phiên bản cũ hơn của Micosoft Edge và Internet Explorer.
Vì vậy, chúng tôi cần thêm thuộc tính cookieSameSite = "Không" vào nút sessionState trong tệp web.config.
<sessionState cookieSameSite="None" />
Tuy nhiên, hãy cẩn thận với thay đổi cấu hình này, vì các phiên bản khung .net cũ hơn không hỗ trợ nó và khiến trang web của bạn hiển thị trang lỗi.
Tuy nhiên, chúng tôi vẫn gặp sự cố với trình duyệt trong iOS 12. Nhưng tôi nghĩ nó liên quan đến lỗi đã được xác nhận này
CẬP NHẬT 2 : xem câu trả lời của zemien để biết cách khắc phục có thể về sự cố iOS
CẬP NHẬT 3 : Bằng cách kết hợp các phát hiện của chúng tôi với các đề xuất trong câu trả lời của zemien, chúng tôi đã đưa ra các quy tắc viết lại sau đây. Chúng tôi đã sử dụng cấu hình này trong sản xuất. Nhưng hãy cẩn thận: nó đánh dấu tất cả các cookie có thuộc tính "SameSite: none" cho các trình duyệt tương thích và loại trừ thuộc tính SameSite, nếu tồn tại, cho các trình duyệt không tương thích. Nó có vẻ phức tạp nhưng tôi đã cố gắng giải thích thông qua các dòng bình luận.
Đây là cấu hình FINAL mà chúng tôi sử dụng trong sản xuất:
<configuration>
<system.webServer>
<rewrite>
<outboundRules>
<preConditions>
<!-- Browsers incompatible with SameSite=None -->
<preCondition name="IncompatibleWithSameSiteNone" logicalGrouping="MatchAny">
<add input="{HTTP_USER_AGENT}" pattern="(CPU iPhone OS 12)|(iPad; CPU OS 12)" />
<add input="{HTTP_USER_AGENT}" pattern="(Chrome/5)|(Chrome/6)" />
<add input="{HTTP_USER_AGENT}" pattern="( OS X 10_14).*(Version/).*((Safari)|(KHTML, like Gecko)$)" />
</preCondition>
<!-- Rest of the browsers are assumed to be compatible with SameSite=None -->
<preCondition name="CompatibleWithSameSiteNone" logicalGrouping="MatchAll">
<add input="{HTTP_USER_AGENT}" pattern="(CPU iPhone OS 12)|(iPad; CPU OS 12)" negate="true" />
<add input="{HTTP_USER_AGENT}" pattern="(Chrome/5)|(Chrome/6)" negate="true" />
<add input="{HTTP_USER_AGENT}" pattern="( OS X 10_14).*(Version/).*((Safari)|(KHTML, like Gecko)$)" negate="true" />
</preCondition>
</preConditions>
<!-- Rule 1: Remove SameSite part from cookie for incompatible browsers if exists -->
<rule name="Remove_SameSiteCookie_IfExists_ForLegacyBrowsers" preCondition="IncompatibleWithSameSiteNone">
<match serverVariable="RESPONSE_Set-Cookie" pattern="(.*)(SameSite=.*)" />
<action type="Rewrite" value="{R:1}" />
</rule>
<!-- Rule 2: Override SameSite's value to None if exists, for compatible browsers -->
<rule name="Override_SameSiteCookie_IfExists_ForModernBrowsers" preCondition="CompatibleWithSameSiteNone">
<match serverVariable="RESPONSE_Set-Cookie" pattern="(.*)(SameSite=.*)" />
<action type="Rewrite" value="{R:1}; SameSite=None" />
</rule>
<!-- Rule 3: Add SameSite attribute with the value None if it does not exists, for compatible browsers -->
<rule name="Add_SameSiteCookie_IfNotExists_ForModernBrowsers" preCondition="CompatibleWithSameSiteNone">
<match serverVariable="RESPONSE_Set-Cookie" pattern=".*"/>
<!-- Condition explanation: Cookie data contains some string value but does not contain SameSite attribute -->
<conditions logicalGrouping="MatchAll">
<add input="{R:0}" pattern="^(?!\s*$).+"/>
<add input="{R:0}" pattern="SameSite=.*" negate="true"/>
</conditions>
<action type="Rewrite" value="{R:0}; SameSite=None" />
</rule>
</outboundRules>
</rewrite>
</system.webServer>
</configuration>