2016-03-24 9 views
1

私はトランスペアレントリダイレクトとセキュアトークン機能を使用してPayflow Gateway NVP APIを使用するクライアントを(.NETでは作成できますが、 。私はトークンを受け取り、クレジットカードのデータを送信し、PayPalから承認された応答を受け取ることができます。問題は、PayPalが適切に私のサイトにリダイレクトしていないことです。セキュアトークンを要求するとき、私はにreturnurl(http://localhost:49881/transaction/details?processor=PayflowGateway)パラメータを渡すが、その代わりにトランザクションの後にそのURLに私を返すので、それは以下のURLに自分のブラウザをナビゲート:私が持っているセキュアトークンとトランスペアレントリダイレクトを使用したPayflow Gateway - 返品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内の複数の疑問符の問題を修正しようとしましたが、それは役に立たないようです。私はまた、URL値の長さであるxxを使ってRETURNURL [xx]にタグを付けることを試みましたが、それは、リダイレクトする代わりにpaypal.comに確認ページを表示するだけで、RETURNURLを渡さないのと同じようです私のサイトに。

PayPal Managerでは、「確認ページを表示する」設定を「自分のウェブサイトで」に設定し、空白に戻すURLを返し、GETに戻るURLメソッドを設定します。これをテストサイトに適切に返すために必要な設定やAPIリクエストの変更はありますか?

答えて

0

この問題は、payflowproゲートウェイからセキュアトークンを要求するときに渡されたRETURNURLパラメータをURLエンコードするために発生します。

Integration Guide」に「」という名前の値のパラメータデータをURLエンコードしないでください。を参照してください。

また、hereでは、使用できるC#コードをいくつか手に入れることができます。

PayPal HTTP hereに関するいくつかのガイドライン。

HTTP POSTでセキュアトークンを要求するように、System.Net.Http.HttpClientSystem.Net.WebClientを使用しないでください。代わりに、低レベル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(); 
    } 
} 
関連する問題