4

私はpaypalをIPNと統合しています(私はこれを多くのWebサイトで行ったことがあり、これまでこの問題が発生したことはありません)。PHPPaypalIPN統合クラス-MicahCarrickを使用しています。

サンドボックスアカウントでテストしています。私がpaypalから受け取っているすべてのデータは大丈夫です。ただし、常にIPN検証は失敗します。

私は多くのプロジェクトで同じクラスを使用しましたが、この問題が発生したことはありません。この問題の原因は何でしょうか。

これは私がログファイルで取得しているものです:

[10/29/2012 5:02 AM] - FAIL: IPN Validation Failed.
IPN POST Vars from Paypal:
mc_gross=10.00, protection_eligibility=Eligible, address_status=confirmed, payer_id=LZ3J5RXT7ZRSW, tax=0.00, address_street=1 Main St, payment_date=03:02:41 Oct 29, 2012 PDT, payment_status=Completed, charset=windows-1252, address_zip=95131, first_name=AProfessionals, mc_fee=0.59, address_country_code=US, address_name=AProfessionals Inc, notify_version=3.7, custom=, payer_status=verified, business=brian_1351496665_biz@a1professionals.com, address_country=United States, address_city=San Jose, quantity=1, verify_sign=AV0bkFkV43dlmXuqlWjyHTfWE.SBANTBgLiHNABcsVQsMvyhdLQg8mTi, payer_email=harry_1351496900_per@a1professionals.com, txn_id=9ES74523RB953760X, payment_type=instant, last_name=Inc, address_state=CA, receiver_email=brian_1351496665_biz@a1professionals.com, payment_fee=0.59, receiver_id=NEV59MNUMBET6, txn_type=web_accept, item_name=Paypal Test Transaction, mc_currency=USD, item_number=, residence_country=US, test_ipn=1, handling_amount=0.00, transaction_subject=Paypal Test Transaction, payment_gross=10.00, shipping=0.00, ipn_track_id=74d5b2446aded,

IPN Response from Paypal Server:
HTTP/1.0 302 Found
Location: https://www.sandbox.paypal.com
Server: BigIP
Connection: close
Content-Length: 0
4

2 に答える 2

3

私の経験から、これらはIPNが検証に失敗する3つの一般的な理由です

1)cmd=_notify-validate先頭に追加するのではなく、追加されています...これにより、問題が発生する場合があります。したがって、代わりに:

  $post_string = '';    
  foreach ($_POST as $field=>$value) { 
     $this->ipn_data["$field"] = $value;
     $post_string .= $field.'='.urlencode(stripslashes($value)).'&'; 
  }
  $post_string.="cmd=_notify-validate"; // append ipn command

このページのコードに従ってください: https://www.x.com/developers/PayPal/documentation-tools/code-sample/216623

// read the post from PayPal system and add 'cmd'
$req = 'cmd=_notify-validate';
if(function_exists('get_magic_quotes_gpc')) {
   $get_magic_quotes_exists = true;
} 
foreach ($myPost as $key => $value) {        
   if($get_magic_quotes_exists == true && get_magic_quotes_gpc() == 1) { 
        $value = urlencode(stripslashes($value)); 
   } else {
        $value = urlencode($value);
   }
   $req .= "&$key=$value";
}

2) 住所は複数行です。

// read post data from PayPal and add 'cmd'
$req = 'cmd=_notify-validate';
foreach ($_POST as $key => $value)
{
    // put line feeds back to CR+LF as that's how PayPal sends them out
    // otherwise multi-line data will be rejected as INVALID
     $value = str_replace("\n", "\r\n", $value);
        $this->ipn_data_arr[$key] = $value;
        $req .= '&'.$key.'='.urlencode(stripslashes($value)); 
    }

Paypalアカウントにアクセスして、1行から2行に変更し、アカウントを使用して取引することで、これを自分でテストできます. $value = str_replace("\n", "\r\n", $value);なぜpaypalのサンプルコードにその行がなかったのか不思議に思うことなく、2行が悲劇的に失敗します...

3)ユーザーの名前、住所などに英語以外の文字が含まれている(おそらくあなたには当てはまりませんが、私たちはこのトピックについて話しているので)

参照: http://blog.tentaclesoftware.com/archive/2010/04/09/87.aspx 主なポイントは次のとおりです。

Log into PayPal
Click the ‘Profile’ link in the menu bar under ‘My Account’
Click the ‘Language Encoding’ link under the ‘Selling Preferences’ column
Click ‘More Options’
Set ‘Encoding’ to ‘UTF-8’
Click ‘Save’

3つすべてに共通のテーマがあることに気付いた場合:データの順序、データのエンコードなど、小さなことが1つでもわずかに異なると失敗します。そうでない場合は、次の 3 つの理由を考えてみてください。そのデータが問題を引き起こす可能性が高いフィールドを探して確認します...非標準文字、非表示のメタデータなど

于 2013-01-12T03:14:39.780 に答える