2016-10-14 7 views
0

現在のプロジェクト:私はthis exampleを使用していますペイパル処理 - TransactionIdの、CorrelationIdををつかむ必要があり、タイムスタンプ

  • ASP.NET 4.5.2
  • MVC 5
  • ペイパルAPI

私がタイトルに3つの値を返す他の方法を知らないので、自分自身でPayPalトランザクションを構築してください(そして、私のコードは事実上同じです)。

私の主な問題は、私が利用している例が、はるかに古いWebフォームアプリケーションで使用していたものよりはるかに簡潔でコンパクトであることです。そのため、どこで、どのように私が必要とする3つの値。

私の最初の考えは右のACKの後にそうすることで、確かに私はCorrelationIdをだけでなく、タイムスタンプを取得することができたが、これはPayPalのサイトにオフcartedされているユーザにだったので(でサンドボックスこのケース - ifに含まれているreturn new PayPalRedirectを参照)、TransactionIdは空白です。この例では、PayPalは最初にPayPalにユーザーを送ったアクションに戻ることなく、ユーザーをSuccessページに明示的にリダイレクトします。TokenPayerId以外のGET値はURLに表示されません、TransactionIdを私に提供できるものはずっと少なくなっています。

提案?

私はまた、次の例を見てきました:

  • For ASP.NET Coreは、特にによるappsettings.jsonに私の現在のプロジェクトに適応する方法がわからないでしたが、それは非常によくやったに見えました。値がどのようにリストに集計されたかは本当に気に入っていました。
  • For MVC 4しかし、私はACKsuccessまたはsuccesswithwarningを特定するために使用されていたので見つけることができませんでした。

私はまた、PayPalのコンテンツがフル回転での消火ホースから飲むしようとしているようであることが判明している - だけでなく、コンテンツが(FTW、Webフォームのコード!)絶望的に時代遅れだったが、また非常に多くありましたどの例が最も適しているかを判断するのに数日を要した別の例があります。

ご協力いただければ幸いです。


編集:リンクされたコードを修正することで私の最初の試みは、この部分があります:using()含む

values = Submit(values); 
var ack = values["ACK"].ToLower(); 
if(ack == "success" || ack == "successwithwarning") { 
    using(_db = new ApplicationDbContext()) { 
    var updateOrder = await _db.Orders.FirstOrDefaultAsync(x => x.OrderId == order.OrderId); 
    if(updateOrder != null) { 
     updateOrder.OrderProcessed = false; 
     updateOrder.PayPalCorrelationId = values["CORRELATIONID"]; 
     updateOrder.PayPalTransactionId = values["TRANSACTIONID"]; 
     updateOrder.PayPalTimeStamp = values["TIMESTAMP"]; 
     updateOrder.IPAddress = HttpContext.Current.Request.UserHostAddress; 
     _db.Entry(updateOrder).State = EntityState.Modified; 
     await _db.SaveChangesAsync(); 
    } 
    } 
    return new PayPalRedirect { 
    Token = values["TOKEN"], 
    Url = $"https://{PayPalSettings.CgiDomain}/cgi-bin/webscr?cmd=_express-checkout&token={values["TOKEN"]}" 
    }; 
} 

内のすべてとは私の追加されたコンテンツです。私が言及したように、CorrelationIdTimeStampはうまくいきますが、私はまだTransactionIdを手に入れました。


編集2:

多くの問題 - サンドボックスのサイトから「成功」しているトランザクションが(にreturnurlが呼び出さなっている)でも、私のファシリテーターと買い手のアカウントに適切に反映されていません私は買い手のPayPal口座から直接支払いを行います(クレジットカードを使用しない)。私は、Devアカウント全体(アカウント - >プロフィール - >残高またはアカウント - >通知)またはサンドボックスフロントエンドの購入者アカウントを介して、買い手のアカウントでトランザクションを見るはずです。それでも、私をReturnUrlパスに戻す複数のトランザクションはありますが、どちらのトランザクションもありません。


編集3:

さて、これは本当に、本当に奇妙です。私は細かい歯のついた櫛ですべての設定を行って、意図的に何かがすべきであることを確認するためにエラーを導入しました。私の通知には何も表示されず、別のアカウント(ファシリテーターとバイヤー)間で金額が移動しないということを除いて、プロセス全体がスムーズに進行していることが判明しました。すべての取引が/dev/nullになっているようですが、プロセスは成功しています。


編集4:ヒント!

買い手が取引を承認するサンドボックスでは、「完了する前に取引を確認できます」などの小さなメモがあります。追加のページが表示されないことを示唆していますユーザーは不注意に成功ページに戻されています。なぜ成功のページ?全く分からない。しかし、それは起こっている。

答えて

1

あなたはプロセスの最初の部分をやっているようです。

エクスプレスチェックアウトは3回のAPIコールで構成されています:SECがトークンを生成し、ユーザーのサインでPayPalにリダイレクト

  • SetExpressCheckoutの
  • GetExpressCheckoutDetails
  • DoExpressCheckoutPayment

と支払に同意する前に取引を見直します。これらは、あなたのSECの要求に含まにreturnurlに送られ、そして彼らが署名したので、あなたは現在入手可能で、すべての買い手の詳細情報を得るためにGECDを呼ぶだろう場所ですされている

そのデータを使用して、最終的なDECP要求を完了することができます。この最終コールが正常に完了するまで、お金は実際に処理されません。

+0

ええ、週末にはそれも分かりました。 PayPalを行う方法は非常に多様ですので、あまり例がありません。私はそれを二乗してしまいましたが、実際に答えを取ったときのあなたの答えを正しいものとしてマークし、頭に問題を釘付けにします。私は、(同じ位置に他の貧しい魂のための)完全なソリューションを投稿し、それにリンクします。 –

関連する問題