paypal - 带有安全 token 和透明重定向的 Payflow Gateway - 返回 URL 问题

标签 paypal payment-gateway payflowpro payflowlink

我已经构建了一个客户端(在 .NET 中,但它可以在任何框架中)以使用透明重定向和安全 token 功能使用 Payflow Gateway NVP API。我能够接收 token ,发送信用卡数据,并从 PayPal 收到批准的响应。问题是 PayPal 没有正确重定向回我的网站。我在请求安全 token 时传递了一个 RETURNURL ( http://localhost:49881/transaction/details?processor=PayflowGateway ) 参数,但它没有在交易后返回该 URL,而是将我的浏览器导航到以下 URL:

https://pilot-payflowlink.paypal.com/http%3A%2F%2Flocalhost%3A49881%2Ftransaction%2Fdetails%3Fprocessor%3DPayflowGateway?POSTFPSMSG=No%20Rules%20Triggered&RESPMSG=Approved&ACCT=1111&COUNTRY=US&PROCCVV2=M&VISACARDLEVEL=12&CVV2MATCH=Y&CARDTYPE=0&PNREF=A70A8EB8B6A1&AVSDATA=XXN&SECURETOKEN=9eGKZsSldEU6mIdSEV5DB4wWd&PREFPSMSG=No%20Rules%20Triggered&SHIPTOCOUNTRY=US&AMT=14.75&SECURETOKENID=1850a8f2-f180-4474-aa31-35d736fd7921&TRANSTIME=2016-03-24%2007:58:48&HOSTCODE=A&COUNTRYTOSHIP=US&RESULT=0&BILLTOCOUNTRY=US&AUTHCODE=872PNI&EXPDATE=1218

我曾尝试删除“?processor=PayflowGateway”来修复 URL 中的多个问号问题,但这似乎没有帮助。我也尝试过用 xx 标记 RETURNURL[xx] 作为 URL 值的长度,但这似乎与根本不传递 RETURNURL 相同,因为它只是在 paypal.com 上显示确认页面而不是重定向回来到我的网站。

在 PayPal 管理器中,我将“显示确认页面”设置为“在我的网站上”,将返回 URL 设置为空白,并将返回 URL 方法设置为 GET。我是否需要更改任何其他设置或 API 请求才能使其正确返回到我的测试站点?

最佳答案

造成此问题的原因是您对从 payflowpro 网关请求安全 token 时传递的 RETURNURL 参数进行了 URL 编码。

请参阅 Integration Guide 上的不要对名称-值参数数据进行 URL 编码部分.

此外,here您可以获得一些可以使用的 C# 代码。

以及有关 PayPal HTTP 的一些指南 here .

请勿使用 System.Net.Http.HttpClientSystem.Net.WebClient 进行 HTTP POST 以请求安全 token 。而是使用低级别的 System.Net.WebRequest 能够写入未编码的 POST 数据。

例如:

private string RequestSecureToken(double amount)
{
    var secureTokenId = Guid.NewGuid().ToString();
    var requestId = Guid.NewGuid().ToString();
    var pairs = new Dictionary<string, string>()
    {
        {"PARTNER", "PayPal"},
        {"VENDOR", "VENDOR NAME"},
        {"USER", "USER NAME"},
        {"PWD", "PASSWORD"},
        {"TRXTYPE", "S"},
        {"AMT", amount.ToString()},
        {"CREATESECURETOKEN", "Y"},
        {"SECURETOKENID", secureTokenId},
        {"SILENTTRAN", "TRUE"},
        {"RETURNURL", "http://mycompany.com/success"},
        {"ERRORURL", "http://mycompany.com/error"}
    };
    string postData = string.Join("&", pairs.Select(p => string.Format("{0}[{2}]={1}", p.Key, p.Value, p.Value.Length)));
    HttpWebRequest request = (HttpWebRequest)WebRequest.Create("https://pilot-payflowpro.paypal.com");
    request.Method = "POST";
    request.ContentType = "text/namevalue";
    request.Headers.Add("X-VPS-CLIENT-TIMEOUT", "45");
    request.Headers.Add("X-VPS-REQUEST-ID", requestId);
    request.ContentLength = postData.Length;
    using (var writer = new StreamWriter(request.GetRequestStream()))
    {
        writer.Write(postData);
    }
    //Get the response
    var response = request.GetResponse();
    using (var reader = new StreamReader(response.GetResponseStream()))
    {
        return reader.ReadToEnd();
    }
}

关于paypal - 带有安全 token 和透明重定向的 Payflow Gateway - 返回 URL 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36203688/

相关文章:

html - BIG Paypal 运费问题

django - 亚马逊 FPS vs PayPal vs Google Checkout

Magento:Payflow Pro 使用 PaypalUK 模块?

Paypal Adaptive Payment IPN 费用信息

html - Paypal discount_rate_cart 和 tax_rate 冲突?

paypal - 如今在线支付网关如何运作?

android - 如何使用我的银行账户在 Android 应用程序中设置支付网关进行测试

paypal - Silent Post 是否适用于 Payflow Pro 定期付款?

php - 移动设备上的 PayPal Payflow Gateway 出错

firebase - Flutter Dynamic Links 获取附加参数