親愛なるメンターとの達人、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¬ify_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に投稿する場合は、この応答にのみ使用可能です。 sandbox.paypal.comに投稿しても、「送信済み」または「ハンドシェイク」は表示されません。私はサービスプロバイダーがリモート/ホストしているウェブサイトを使用しているため、48時間後までウェブログは利用できません。私のローカルWebサーバ上に通常持っているすてきなデバッグ機能は利用できません。(ペイパルによって送信された生データを盗聴する方法や、リモートマシン上で認識している返信方法はありません)
これは純粋です。シミュレータは、正常に機能している限り、検証されたIPNを返します。残念ながら、シミュレータが正しく機能しないことがあります。あなたのスクリーンショットに基づいて、あなたのスクリプトがPOSTをPayPalに正しく戻している限り、そのシミュレーションは検証されたIPNを返しているはずです。 –
コードはPOSTのためにあり、Paypalから提供されたコードからまっすぐです。受信フォームを取得し、 "&cmd = _notify-validate"を追加して、それをポストしてください。これは、私が遭遇した最もシンプルなコーディングのうち、望ましい結果を生み出すものではありません。私たちは何年もPaypalを使用してきましたが、これは支払いシステムから顧客の電子メールを取得しようとする最初の試みです。 – Confused