网页版 Apple Pay - 商户验证问题

问题描述 投票:0回答:1

背景: 我正在我们的网站上实施 Apple Pay,并使用 Authorize.NET 作为支付处理器。我正在使用.NET框架4.8。 我们完成了一些初始设置,例如获取商家 ID、为我们的产品和测试网站添加和验证商家域。我们获得了商家身份证书并将其安装在我们的测试服务器上。

问题: 我在调用验证网址以获取商家会话对象时遇到以下问题。我按照https://tech.justeattakeaway.com/2016/10/10/bringing-apple-pay-to-the-web/文章进行实施。

代码的主要摘录如下。它在“httpClient.SendAsync”调用时失败。对我来说这看起来像是 TLS 问题,但我已经将其设置为 1.2,并且我们的测试服务器也启用了 TLS1.2。因此,我不确定我在这里到底缺少什么。任何帮助将不胜感激。谢谢你。

var validationURL = "https://apple-pay-gateway.apple.com/paymentservices/startSession";
                if (!Uri.TryCreate(validationURL, UriKind.Absolute, out Uri requestUri))
                {
                    throw new UserInputException("An error occurred while serving your request. Please try again later");
                }

                MerchantCertificate mc = new MerchantCertificate(new ApplePayOptions() { UseCertificateStore = true, MerchantCertificateThumbprint = "‎5cdf3xxxxxxxxx345345" });
                ApplePayClient applePayClient = new ApplePayClient(mc.GetCertificate());
                var extension = applePayClient._certificate.Extensions["1.2.840.113635.100.6.32"];
                var merchantId = System.Text.Encoding.ASCII.GetString(extension.RawData).Substring(2);

                var request = new MerchantSessionRequest()
                {
                    DisplayName = "My Store",
                    Initiative = "web",
                    MerchantIdentifier = merchantId,
                    InitiativeContext = "example.com"
                };

Task<HttpResponseMessage> sessionReq = applePayClient.GetMerchantSessionAsync(requestUri, request);



public async Task<HttpResponseMessage> GetMerchantSessionAsync(Uri requestUri, MerchantSessionRequest request)
        {
            var handler = new HttpClientHandler();
            handler.ClientCertificates.Add(_certificate);

            var httpClient = new HttpClient(handler, true);
            //Set security protocol to TLS 1.2 only (REQUIRED by Apple Pay)
            ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;

            //Post the validation data object to the Apple Pay web service through secure channel
            var requestData = CreateContentRequest<MerchantSessionRequest>(HttpMethod.Post, requestUri, request, ContentType);
            var response = await httpClient.SendAsync(requestData);
            return response;
        }

   private static HttpRequestMessage CreateContentRequest<TReq>(HttpMethod method, Uri requestUri, TReq content, string contentType)
        {
            var r = CreateRequest(method, requestUri);
            r.Content = new StringContent(JsonConvert.SerializeObject(content, JsonSettings), Encoding.UTF8, contentType);
            return r;
        }

        private static HttpRequestMessage CreateRequest(HttpMethod method, Uri requestUri)
        {
            var r = new HttpRequestMessage(method, requestUri);
            r.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue(ContentType));
            return r;
        }

编辑:以下是我从邮递员调用相同内容时的结果。我已经在 Postman 中添加了客户端证书并配置了 apple pay 域。

c# .net applepay applepayjs
1个回答
0
投票

我很确定问题出在

var merchantId = System.Text.Encoding.ASCII.GetString(extension.RawData).Substring(2);

在您的示例中,merchantId 将包含与 Apple 注册的商家 ID 不同的内容。尝试将其硬编码到在Apple注册的商家ID,它应该可以工作。

请参阅请求对象的示例:https://developer.apple.com/documentation/apple_pay_on_the_web/apple_pay_js_api/requesting_an_apple_pay_ payment_session

© www.soinside.com 2019 - 2024. All rights reserved.