1

PayPal ビジネス アカウントを持っています。API のユーザー名、パスワード、および署名を生成し、以前に作成した Web サイトからフォームの支払いフィールドを処理する PHP コードをコピーしました。

以前に作成された Web サイトでは、今日まですべてが正常に動作しています。しかし、この新しいウェブサイトでは、クレジット カード番号が有効である限り、名前を作成し、間違った有効期限を入力し、偽のカード セキュリティ コードを入力し、住所を作成しても、支払いは完了します。PayPal の残高が増加し、クレジット カードにも請求が表示されます。現在、サンドボックス環境は使用していません。

どうすればそれが可能になりますか?また、おそらく注目に値するのは、私のクレジット カードの保留中の取引に、無関係なビジネス「Sally Beauty Supply」として請求が表示されることです。私のコードのどこにもこれらの言葉を書いていません! American Express と Visa カードの両方を試しました。


これが私のコードです。で示されている場合を除き、すべて<REPLACED>が以前に作成された Web サイトからコピーされます。コードは少し簡略化されています。

$paypal = array(
    'version'   => '85.0',
    'endpoint'  => 'https://api-3t.paypal.com/nvp',
    'username'  => '<REPLACED>',
    'password'  => '<REPLACED>',
    'signature' => '<REPLACED>',
);

$request_params = array
                  (
                      'METHOD' => 'DoDirectPayment',
                      'USER' => $paypal['username'],
                      'PWD' => $paypal['password'],
                      'SIGNATURE' => $paypal['signature'],
                      'VERSION' => $paypal['version'],
                      'PAYMENTACTION' => 'Sale',
                      'IPADDRESS' => $_SERVER['REMOTE_ADDR'],
                      'ACCT' => $_POST['form_PaymentCardNumber'],
                      'EXPDATE' => $_POST['form_PaymentCardExpiryMonth'].$_POST['form_PaymentCardExpiryYear'],
                      'CVV2' => $_POST['form_PaymentCardCVV2'],
                      'FIRSTNAME' => $_POST['form_PaymentFirstName'],
                      'LASTNAME' => $_POST['form_PaymentLastName'],
                      'STREET' => $_POST['form_PaymentAddressLine1'],
                      'STREET2' => $_POST['form_PaymentAddressLine2'],
                      'CITY' => $_POST['form_PaymentCity'],
                      'STATE' => $_POST['form_PaymentStateProvince'],
                      'COUNTRYCODE' => $_POST['form_PaymentCountry'],
                      'ZIP' => $_POST['form_PaymentZipPostalCode'],
                      'AMT' => $_POST['form_PaymentAmount'],
                      'CURRENCYCODE' => 'USD',
                      'DESC' => "<REPLACED>"
                  );

$nvp_string = '';
foreach($request_params as $var=>$val)
{
   $nvp_string .= '&'.$var.'='.urlencode($val);
}

$curl = curl_init();
curl_setopt($curl, CURLOPT_VERBOSE, 1);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($curl, CURLOPT_TIMEOUT, 30);
curl_setopt($curl, CURLOPT_URL, $paypal['endpoint']);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, $nvp_string);
$result = curl_exec($curl);
curl_close($curl);

function NVPToArray($str)
{
   $proArray = array();
   while(strlen($str))
   {
      // name
      $keypos= strpos($str,'=');
      $keyval = substr($str,0,$keypos);
      // value
      $valuepos = strpos($str,'&') ? strpos($str,'&'): strlen($str);
      $valval = substr($str,$keypos+1,$valuepos-$keypos-1);
      // decoding the respose
      $proArray[$keyval] = urldecode($valval);
      $str = substr($str,$valuepos+1,strlen($str));
   }
   return $proArray;
}

$result = NVPToArray($result);

$paid = false;

if (strtoupper($result['ACK']) === 'SUCCESS' ||
    strtoupper($result['ACK']) === 'SUCCESSWITHWARNING')
{
    $paid = true;
}

'version' => '85.0'and/orをコピーしてはいけませんか'endpoint' => 'https://api-3t.paypal.com/nvp'? または、それは何ですか?

4

1 に答える 1

2

同じ種類の支払いサービスを使用している場合は、これで十分です。誤った情報で行われる支払いに関しては、これが発生する可能性があります。まず、提供された名前を確認するチェックはありません。唯一のチェックは、CSC および AVS チェックです。そのため、間違った名前や有効期限を入力しても、支払いは続行されます。たとえば、有効期限はプロセッサに渡され、カード発行銀行に渡されます。そのため、有効期限を確認する場合と確認しない場合があり、一致することを確認するための実際のチェックはありません。一部のカードが承認され、他のカードが拒否されるのを見てきました。

AVS および CSC チェックについては、ゲートウェイがそれらをプロセッサに送信し、プロセッサがそれらをカード発行銀行に送信することに注意してください。次に、応答がプロセッサー > ゲートウェイ > マーチャント Web サイトに送り返されます。再び銀行はこれらの取引を承認し、一致するかどうかを確認するだけで返送します。その後、応答に基づいてトランザクションを拒否するのはあなた次第です。銀行がそれらを拒否する唯一の方法は、カード所有者が AVS と CSC が一致する必要があることを示すセキュリティ チェックをアカウントに設定している場合です。一致しないという応答が返ってきたら、ロジックをシステムにコーディングして、これらのトランザクションを拒否/入金/無効にするか、PayPal または Payflow アカウントにフィルターを追加して設定し、これを自動的に行うことができます。あなたのために。

于 2013-06-20T14:18:24.363 に答える