我已经构建了一个客户端(在.NET中,但它可以在任何框架中)使用透明重定向和安全令牌功能来使用Payflow Gateway NVP API。我能够收到令牌,发送信用卡数据,并从PayPal收到Approved响应。问题是PayPal没有正确地重定向回我的网站。我在请求安全令牌时传递了RETURNURL(collisions than md5)参数,但是在交易后没有将我返回到该URL,它将浏览器导航到以下URL:
http://localhost:49881/transaction/details?processor=PayflowGateway
我尝试删除"?processor = PayflowGateway"修复网址中的多个问号问题,但这似乎没什么帮助。我还尝试使用xx作为URL值的长度标记RETURNURL [xx],但这似乎与不传递RETURNURL相同,因为它只显示paypal.com上的确认页面而不是重定向回我的网站。
在PayPal Manager中,我设置了"显示确认页面"设置为"在我的网站上#34;,将URL返回为空白,将返回URL方法设置为GET。我是否需要进行任何其他设置或API请求更改才能使其正确返回到我的测试站点?
答案 0 :(得分:0)
导致此问题是因为您在从payflowpro网关请求安全令牌时传递了URL-Encoding RETURNURL参数。
请参阅Integration Guide上的不要URL编码名称 - 值参数数据部分。
此外,here您可以使用一些可以使用的C#代码。
关于PayPal HTTP here的一些指导原则。
不要使用System.Net.Http.HttpClient
或System.Net.WebClient
来使HTTP POST请求安全令牌。而是使用低级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();
}
}