2017-04-03 19 views
0

親愛なるメンターとの達人、VBScriptのASPとペイパルIPNの問題

私の質問は、それはここで他のIPNの質問に同様の基本ですが、私はVBScriptのに関連した答えを見るためには至っていないが(PHPが少しあるようです低レベルなので、適切に回答を投稿するためにもっと多くの作業が必要です)。
ASP/VBScriptのPayPalサンプルコードを使用してIPNリスナーを作成しています。 Paypalシミュレータを使用して、私は自分のスクリプトを呼び出します。私はPaypalからの "VERIFIED"レスポンスを得ることはできないようです。常に「INVALID」です。私はインターネット上で(文字セットのような)いくつかのことを読んで、進歩なしにこれらを試しました。文字セットを制御する場所が見当たらないので、特にシミュレータを介して、文字セットの違いに関する回答は古くなっているようです。投稿されたものがまだ/エンコードされているため、URLエンコーディングの問題は発生していません(GMT +の問題は、他のIPNの問題で説明されているようには見えません)。 私はhttps://www.paypal.com/cgi-bin/webscrに投稿しています(コードを参照)。それは私に握手を与えますが、サンドボックスへの投稿(コメントアウト)は握手にはなりません。もちろん、Paypalは私のウェブサイトと通信しているので、受信したすべてのフォーム値をテキストファイルに書き出すようにコードを修正しました。ちょうど "VERIFIED"応答を得ることはできません。 私はGitHubに用意されているコードが「準備ができました」と思っていました。何が恋しいの?

<%@LANGUAGE="VBScript"%> 
<% 
Dim Item_name, Item_number, Payment_status, Payment_amount 
Dim Txn_id, Receiver_email, Payer_email 
Dim objHttp, str 
' read post from PayPal system and add 'cmd' 

' post back to PayPal system to validate 
'set objHttp = Server.CreateObject("Msxml2.ServerXMLHTTP") 
'set objHttp = Server.CreateObject("Msxml2.ServerXMLHTTP.4.0") 
set objHttp = Server.CreateObject("Microsoft.XMLHTTP") 
str = Request.Form & "&cmd=_notify-validate" 
objHttp.open "POST", "https://www.paypal.com/cgi-bin/webscr", false 
'objHttp.open "POST", "https://www.sandbox.paypal.com/cgi-bin/webscr", false 
'objHttp.setRequestHeader "Content-Type", "application/x-www-form-urlencoded; charset=UTF-8" 
'objHttp.setRequestHeader "Content-type", "application/x-www-form-urlencoded" 
objHttp.setRequestHeader "Content-Type", "application/x-www-form-urlencoded" 

objHttp.Send str 
' assign posted variables to local variables 
'Dim responseText : responseText = objHttp.responseText 
Item_name = Request.Form("item_name") 
Item_number = Request.Form("item_number") 
Payment_status = Request.Form("payment_status") 
Payment_amount = Request.Form("mc_gross") 
Payment_currency = Request.Form("mc_currency") 
Txn_id = Request.Form("txn_id") 
Receiver_email = Request.Form("receiver_email") 
Payer_email = Request.Form("payer_email") 


Dim Folderpath, fs, fPayPal, fPP, FormArray, FormStr 
Set fs = CreateObject("Scripting.FileSystemObject") 
Folderpath=server.mappath(".\mdb") 
fPayPal=Folderpath &"\paypal.txt" 
'Payer_email = "[email protected]" 
Response.Write "File:" & fPayPal 
Set fPP = fs.CreateTextFile(fPayPal,True) 
fPP.WriteLine("PayPal") 
fPP.WriteLine(str) 
FormArray = Split(str, "&", -1, 1) 
for each FormStr in FormArray 
fPP.WriteLine(FormStr) 
Next 

' Check notification validation 
if (objHttp.status <> 200) then 
' HTTP error handling 
'Response.Write "Error:" 
fPP.WriteLine("Status <> 200") 
elseif (objHttp.responseText = "VERIFIED") then 
fPP.WriteLine("VERIFIED") 
fPP.WriteLine(Payer_email) 
' check that Payment_status=Completed 
' check that Txn_id has not been previously processed 
' check that Receiver_email is your Primary PayPal email 
' check that Payment_amount/Payment_currency are correct 
' process payment 
elseif (objHttp.responseText = "INVALID") then 
' log for manual investigation 
' Response.Write "INVALID" 
    fPP.WriteLine("INVALID") 
else 
' Response.Write "OTHER ERROR" 
    fPP.WriteLine("OTHER ERROR") 
end if 

set objHttp = nothing 
fPP.Close 
Set fs=nothing 
%> 

コメントアウトされているものは、githubの元のコードから試したことやコメントです。 Paypal IPN example code

結果は、コードによって書かれたpaypal.txtにあります。最後の行はpaypalへのPOST呼び出しによってresponseTextが "INVALID"に設定されているために書き込まれる "INVALID"です。

PayPal 
payment_type=instant&payment_date=Mon%20Apr%2003%202017%2010%3A12%3A36%20GMT-0400%20%28Eastern%20Daylight%20Time%29&payment_status=Completed&address_status=confirmed&payer_status=verified&first_name=John&last_name=Smith&[email protected]&payer_id=TESTBUYERID01&address_name=John%20Smith&address_country=United%20States&address_country_code=US&address_zip=95131&address_state=CA&address_city=San%20Jose&address_street=123%20any%20street&[email protected]&[email protected]&[email protected]&residence_country=US&item_name1=something&item_number1=AK-1234&tax=2.02&mc_currency=USD&mc_fee=0.44&mc_gross=12.34&mc_gross_1=12.34&mc_handling=2.06&mc_handling1=1.67&mc_shipping=3.02&mc_shipping1=1.02&txn_type=cart&txn_id=283858647&notify_version=2.1&custom=xyz123&invoice=abc1234&test_ipn=1&verify_sign=AFcWxV21C7fd0v3bYYYRCpSSRl31A4bCrzfIB.qeXiXSypZmZAhKwWUC&cmd=_notify-validate 
payment_type=instant 
payment_date=Mon%20Apr%2003%202017%2010%3A12%3A36%20GMT-0400%20%28Eastern%20Daylight%20Time%29 
payment_status=Completed 
address_status=confirmed 
payer_status=verified 
first_name=John 
last_name=Smith 
[email protected] 
payer_id=TESTBUYERID01 
address_name=John%20Smith 
address_country=United%20States 
address_country_code=US 
address_zip=95131 
address_state=CA 
address_city=San%20Jose 
address_street=123%20any%20street 
[email protected] 
[email protected] 
[email protected] 
residence_country=US 
item_name1=something 
item_number1=AK-1234 
tax=2.02 
mc_currency=USD 
mc_fee=0.44 
mc_gross=12.34 
mc_gross_1=12.34 
mc_handling=2.06 
mc_handling1=1.67 
mc_shipping=3.02 
mc_shipping1=1.02 
txn_type=cart 
txn_id=283858647 
notify_version=2.1 
custom=xyz123 
invoice=abc1234 
test_ipn=1 
verify_sign=AFcWxV21C7fd0v3bYYYRCpSSRl31A4bCrzfIB.qeXiXSypZmZAhKwWUC 
cmd=_notify-validate 
INVALID 

paypal simulator response

私はPayPalに投稿する場合は、この応答にのみ使用可能です。 sandbox.paypal.comに投稿しても、「送信済み」または「ハンドシェイク」は表示されません。私はサービスプロバイダーがリモート/ホストしているウェブサイトを使用しているため、48時間後までウェブログは利用できません。私のローカルWebサーバ上に通常持っているすてきなデバッグ機能は利用できません。(ペイパルによって送信された生データを盗聴する方法や、リモートマシン上で認識している返信方法はありません)

答えて

0

私はこれを文として見つけました: PayPal IPNシミュレータを使用すると、応答は常に無効になります。

私が知る限りの文書ではありません。もし誰かが確認できれば、このおかげで私は週末の試行錯誤を救ってくれるでしょう。

//更新 私はコミュニティと共有する2つのことを学びました。 2017年に使用する適切なURLは以下のとおりです。 objHttp.open "POST"、 "https://ipnpb.sandbox.paypal.com/cgi-bin/webscr"、偽 またはライブのために: objHttp.open "POST"、 "https://ipnpb.paypal.com/cgi-bin/webscr"、偽

私はに問題を信じて何NOWのサンドボックスURLはTLS 1.2 HTTPS接続のみを許可していることです(HTTPSを使用し、HTTPは使用しないでください)。ライブのpaypal URLは2017年6月にTLS 1.2が必要になります。
この問題は、objHttp.Send strで発生します。 PaypalサンドボックスURLがTLS 1.0とPaypalを使用しているサーバーのためにTLS 1.2を必要とするため接続を拒否するため、ASPに800c0005 500のエラーが生成されます。

あなたが「古い顧客」であれば、Godaddy(https://www.godaddy.com)のホスティングではTLS 1.2を使用できません。私たちは2009年にWindows Webホスティングを開始しました。現在のホスティングの下にあるサーバーを最新のものに更新するのではなく、サービスを支払っているときに、彼らは分数的に「古いサーバー」を購入したと考えています。今、私たちはアップグレードするために支払う必要があります。これは、通常の最新のサーバーをホスティングするための新規顧客の月々のコストが実際に現在のものよりも低くなっているにもかかわらずです。

コミュニティにご注意ください。私はこれに一週間を費やしました。 HTTPSハンドシェイクを見ることができないので、ユーザーはプロバイダの制限を知らないでしょう。

確認済みです。 TLS 1.2をサポートしている新しい(2017)サーバーに一度乗りました。 Godaddyは既存のアカウントやあなたが持っているウェブサイトの下にあるサーバーソフトウェア/ OSを更新しないため、新しいWebホスティングを開始する必要があります。

+0

これは純粋です。シミュレータは、正常に機能している限り、検証されたIPNを返します。残念ながら、シミュレータが正しく機能しないことがあります。あなたのスクリーンショットに基づいて、あなたのスクリプトがPOSTをPayPalに正しく戻している限り、そのシミュレーションは検証されたIPNを返しているはずです。 –

+0

コードはPOSTのためにあり、Paypalから提供されたコードからまっすぐです。受信フォームを取得し、 "&cmd = _notify-validate"を追加して、それをポストしてください。これは、私が遭遇した最もシンプルなコーディングのうち、望ましい結果を生み出すものではありません。私たちは何年もPaypalを使用してきましたが、これは支払いシステムから顧客の電子メールを取得しようとする最初の試みです。 – Confused