1

トランスペアレント リダイレクト機能とセキュア トークン機能を使用して Payflow Gateway NVP API を使用するクライアントを (.NET で作成しましたが、任意のフレームワークで作成できます) 作成しました。トークンを受け取り、クレジット カード データを送信し、PayPal から承認済みの応答を受け取ることができます。問題は、PayPal が私のサイトに正しくリダイレ​​クトされないことです。セキュア トークンを要求するときに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=承認済み&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 を空白に、リターン URL メソッドを GET に設定しました。これをテスト サイトに正しく戻すために必要な設定や API 要求の変更は他にありますか?

4

1 に答える 1

0

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

統合ガイドの「名前と値のパラメーター データを URL エンコードしない」セクションを参照してください。

また、ここでは、使用できるいくつかの C# コードを動作させることができます。

また、PayPal HTTP に関するガイドラインはこちら.

セキュア トークンを要求するために HTTP POST を使用しSystem.Net.Http.HttpClientたり、作成したりしないでください。System.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();
    }
}
于 2016-08-25T04:58:00.557 に答える