2011-12-09 9 views
5

私はすべてPayPal's documentationをソートしていますが、そのすべてがASPには適用されますが、MVCでは(そのほかに便利な統合ウィザードを含めて)適用されていません。私はoft-参照guide by Rick Strahlを見たことがありますが、ASP用でもあり、WebformsでMVCに変換する経験はありません。MVC3でのPaypal APIリクエスト

私は1つの部分に固執しており、別の部分についてセキュリティ上の懸念があります。

最初に、実際にPayPal APIにリクエストをどのように提出しますか? documentationには、パスワードを含むフォームを使用するよう指示されています。

<form method=post action=https://api-3t.sandbox.paypal.com/nvp> 
    <input type=hidden name=USER value=API_username> 
    <input type=hidden name=PWD value=API_password> 
    <input type=hidden name=SIGNATURE value=API_signature> 
    <input type=hidden name=VERSION value=XX.0> 
    <input type=hidden name=PAYMENTREQUEST_0_PAYMENTACTION 
     value=Sale> 
    <input name=PAYMENTREQUEST_0_AMT value=19.95> 
    <input type=hidden name=RETURNURL 
     value=https://www.YourReturnURL.com> 
    <input type=hidden name=CANCELURL 
     value=https://www.YourCancelURL.com> 
    <input type=submit name=METHOD value=SetExpressCheckout> 
</form> 

確かにこのフォームは表示されません。あなたのソースをチェックするユーザーは、ログイン情報を盗む可能性があります。私はこれをコントローラから行う必要があると仮定しますが、コントローラからこれを作成する方法はわかりません。 HttpWebRequestとWebClientは有望ですが、フォームを実際に追加する方法はわかりません。

2番目:このフォームとAPIコールをユーザーが見ることができないコントローラの内側から呼び出しても、ソースコードにアクセスできる人(ウェブホストや他の開発者など)はパスワードを参照してください。これは良いセキュリティのようには見えません。ここでの練習は何ですか?どのようにこれを安全にすることができますか?

探して来る人のために

EDIT 、これは私が最終的に最初の要求を提出する方法である(読みやすくするための1つのブロックにコードを凝縮)

public static string GetResponse(RequestContext context, decimal price) 
    { 
     HttpWebRequest request = (HttpWebRequest)WebRequest.Create("https://api-3t.sandbox.paypal.com/nvp"); 
     //HttpWebRequest request = (HttpWebRequest)WebRequest.Create("https://api-3t.sandbox.paypal.com/nvp"); 

     request.Method = "POST"; 

     UrlHelper url = new UrlHelper(context); 
     string urlBase = string.Format("{0}://{1}", context.HttpContext.Request.Url.Scheme, context.HttpContext.Request.Url.Authority); 

     string formContent = "USER=" + System.Configuration.ConfigurationManager.AppSettings["paypalUser"] + 
       "&PWD=" + System.Configuration.ConfigurationManager.AppSettings["paypalPassword"] + 
       "&SIGNATURE=" + System.Configuration.ConfigurationManager.AppSettings["paypalSignature"] + 
       "&VERSION=84.0" + 
       "&PAYMENTREQUEST_0_PAYMENTACTION=Sale" + 
       "&PAYMENTREQUEST_0_AMT=" + String.Format("{0:0.00}", price) + 
       "&RETURNURL=" + urlBase + url.Action("Confirm", "Checkout") + 
       "&CANCELURL=" + urlBase + url.Action("Canceled", "Checkout") + 
       "&METHOD=SetExpressCheckout"; 

     byte[] byteArray = Encoding.UTF8.GetBytes(formContent); 
     request.ContentType = "application/x-www-form-urlencoded"; 
     request.ContentLength = byteArray.Length; 
     Stream dataStream = request.GetRequestStream(); 
     dataStream.Write(byteArray, 0, byteArray.Length); 
     dataStream.Close(); 
     WebResponse response = request.GetResponse(); 
     dataStream = response.GetResponseStream(); 
     StreamReader reader = new StreamReader(dataStream); 
     string responseFromServer = HttpUtility.UrlDecode(reader.ReadToEnd()); 

     reader.Close(); 
     dataStream.Close(); 
     response.Close(); 

     return responseFromServer; 
    } 

答えて

3

私の知る限り、ペイパルはまた、Webサービスを提供します。.. 。単にデータを投稿するのではなく。

コントローラからPOSTリクエストを作成して、機密データをユーザから隠すことができます(すべての非表示値)。

ここでは、コードからあなたのデータを掲示する例を参照することができます:あなたの第二の懸念についてhttp://msdn.microsoft.com/en-us/library/debx8sh9.aspx

を、あなただけのランタイム上でweb.configファイルにencripted小文字が区別され、これらのパラメータ、およびその方法を持つことができ、あなたが持っていますこれらのパラメータは読み取り可能です。

PayPalでは、統合をテストするためのサンドボックスも提供されています。その時点で、エンコードなしでこの値を持つことができます。アプリをプロダクションに移行したら、テストパラメータをエンコードされた制作認証情報で置き換えます。

+0

ですが、私はまだそれにフォーム(または任意のデータ)を追加する方法がわからないです。ストリームに文字列を書いているだけでしょうか?申し訳ありませんが、これまでにこれをやったことはありません。また、web.configの情報をどのように暗号化するのですか?これまでに聞いたことはありませんでしたか? – Tyrsius

+0

はい、基本的に、フィールド名と値を連結し、それをバイト配列に変換します。この例の 'postdata'変数を参照してください。だから、あなたのビューでは、単にユーザーデータ(量など)をキャプチャするためにフィールドを配置し、コントローラには他のフィールドを追加します。ここでは、Webconfig値の暗号化に関する情報を確認できます。http://weblogs.asp.net/scottgu/archive/2006/01/09/434893.aspx – Romias

0

Ashok Padmanabhanさんへの返信を参照してください。

私は持っていますが、代わりにこのセクションを過ぎて、IPN処理に重点を置いているようです。私もビデオからコードを見つけようとしましたが、できませんでした

これは私がGoogleにあなたに求めたものでした。 Rob ConneryによるMvcStoreFrontのコード。そして、ここにあります。link

私の以前の回答は、ソースコードを入手したとしても、そのことから多くのことを学ぶことはできないと思っています。少なくとも私にとっては。私は他の人たちのために同じことを仮定しています。なぜなら、MVCのバージョンが違っていて、ビデオのコードとソースコードの最終コードの違いによって私が遭遇したさまざまな複雑さがあるからです。

私は自分自身でPayPalを実装するのに苦労しています。私はIPNとPDTに希望をあきらめました。通常の返品URLの統合に取り組んでいます。私はweb.configのコードを暗号化するというRomiasの考えに行くと思います。(私はまだこの方法を十分に理解していないようですが、間もなく希望します)。

ホープこれは私がWebRequestクラスのドキュメントを見て、より建設的な答え:)

関連する問題