2016-08-30 16 views
-1

ローカルサーバーでサンドボックスアカウントを使用してクレジットカードの支払いをしようとすると、このエラーが発生します。私はこれをどのように処理するか分かりません。ここで私が受信したエラーは次のとおりです。DUPLICATE_REQUEST_IDクレジットカードでの支払いを受け入れるとき

int(400) 
string(212) "{"name":"DUPLICATE_REQUEST_ID","message":"PayPal-Request-Id header was already used.","information_link":"https://developer.paypal.com/webapps/developer/docs/api/#DUPLICATE_REQUEST_ID","debug_id":"2845e6fe9b1b5"}" 
exception 'PayPal\Exception\PayPalConnectionException' with message 'Got Http response code 400 when accessing https://api.sandbox.paypal.com/v1/payments/payment.' in D:\xampp\htdocs\paypal1\lib\PayPal\Core\PayPalHttpConnection.php:177 
Stack trace: 
#0 D:\xampp\htdocs\paypal1\lib\PayPal\Transport\PayPalRestCall.php(73): PayPal\Core\PayPalHttpConnection->execute('{"intent":"sale...') 
#1 D:\xampp\htdocs\paypal1\lib\PayPal\Common\PayPalResourceModel.php(102): PayPal\Transport\PayPalRestCall->execute(Array, '/v1/payments/pa...', 'POST', '{"intent":"sale...', NULL) 
#2 D:\xampp\htdocs\paypal1\lib\PayPal\Api\Payment.php(579): PayPal\Common\PayPalResourceModel::executeCall('/v1/payments/pa...', 'POST', '{"intent":"sale...', NULL, Object(PayPal\Rest\ApiContext), NULL) 
#3 D:\xampp\htdocs\paypal1\sample\index.php(66): PayPal\Api\Payment->create(Object(PayPal\Rest\ApiContext)) 
#4 {main} 

ここに私のインデックスファイルされる:

<?php 
    require 'bootstrap.php'; 
    use PayPal\Api\Amount; 
    use PayPal\Api\CreditCard; 
    use PayPal\Api\Details; 
    use PayPal\Api\FundingInstrument; 
    use PayPal\Api\Item; 
    use PayPal\Api\ItemList; 
    use PayPal\Api\Payer; 
    use PayPal\Api\Payment; 
    use PayPal\Api\Transaction; 

    $card = new CreditCard(); 
    $card->setType("visa") 
     ->setNumber("43111*******44663") 
     ->setExpireMonth("09") 
     ->setExpireYear("2021") 
     ->setCvv2("012") 
     ->setFirstName("My") 
     ->setLastName("Name"); 

    $fi = new FundingInstrument(); 
    $fi->setCreditCard($card); 

    $payer = new Payer(); 
    $payer->setPaymentMethod("credit_card") 
     ->setFundingInstruments(array($fi)); 

    $product = "rambo dfdf"; 
    $price = 305; 
    $shipping = 2.00; 
    $total = $price + $shipping; 

    $item = new Item(); 
    $item->setName($product) 
    ->setCurrency('USD') 
    ->setQuantity(1) 
    ->setPrice($price); 

    $itemList = new ItemList(); 
    $itemList->setItems([$item]); 

    $details = new Details(); 
    $details->setShipping($shipping) 
    ->setSubtotal($price); 

    $amount = new Amount(); 
    $amount->setCurrency('USD') 
    ->setTotal($total) 
    ->setDetails($details); 

    $transaction = new Transaction(); 
    $transaction->setAmount($amount) 
     ->setItemList($itemList) 
     ->setDescription("Payment description") 
     ->setInvoiceNumber(uniqid()); 

    $payment = new Payment(); 
    $payment->setIntent("sale") 
     ->setPayer($payer) 
     ->setTransactions(array($transaction)); 

    $request = clone $payment; 

    try { 
     $payment->create($apiContext); 
    } catch (PayPal\Exception\PayPalConnectionException $ex) { 
     echo "<pre>"; 
     var_dump($ex->getCode()); // Prints the Error Code 
     var_dump($ex->getData()); // Prints the detailed error message 
     die($ex); 
     echo "</pre>"; 
    } catch (Exception $ex) { 
     echo "<pre>"; 
     die($ex); 
     echo "</pre>"; 
    } 

    return $payment; 

ここでは私のbootstrap.phpのファイルされる:

<?php 
/* 
* Sample bootstrap file. 
*/ 

// Include the composer Autoloader 
// The location of your project's vendor autoloader. 
$composerAutoload = dirname(dirname(dirname(__DIR__))) . '/autoload.php'; 
if (!file_exists($composerAutoload)) { 
    //If the project is used as its own project, it would use rest-api-sdk-php composer autoloader. 
    $composerAutoload = dirname(__DIR__) . '/vendor/autoload.php'; 


    if (!file_exists($composerAutoload)) { 
     echo "The 'vendor' folder is missing. You must run 'composer update' to resolve application dependencies.\nPlease see the README for more information.\n"; 
     exit(1); 
    } 
} 
require $composerAutoload; 
require __DIR__ . '/common.php'; 

use PayPal\Auth\OAuthTokenCredential; 
use PayPal\Rest\ApiContext; 

// Suppress DateTime warnings, if not set already 
date_default_timezone_set(@date_default_timezone_get()); 

// Adding Error Reporting for understanding errors properly 
error_reporting(E_ALL); 
ini_set('display_errors', '1'); 

// Replace these values by entering your own ClientId and Secret by visiting https://developer.paypal.com/webapps/developer/applications/myapps 
$clientId = '*******************************'; 
$clientSecret = '****************************'; 

/** 
* All default curl options are stored in the array inside the PayPalHttpConfig class. To make changes to those settings 
* for your specific environments, feel free to add them using the code shown below 
* Uncomment below line to override any default curl options. 
*/ 
//PayPalHttpConfig::$defaultCurlOptions[CURLOPT_SSLVERSION] = CURL_SSLVERSION_TLSv1_2; 


/** @var \Paypal\Rest\ApiContext $apiContext */ 
$apiContext = getApiContext($clientId, $clientSecret); 

return $apiContext; 
/** 
* Helper method for getting an APIContext for all calls 
* @param string $clientId Client ID 
* @param string $clientSecret Client Secret 
* @return PayPal\Rest\ApiContext 
*/ 
function getApiContext($clientId, $clientSecret) 
{ 

    // #### SDK configuration 
    // Register the sdk_config.ini file in current directory 
    // as the configuration source. 
    /* 
    if(!defined("PP_CONFIG_PATH")) { 
     define("PP_CONFIG_PATH", __DIR__); 
    } 
    */ 


    // ### Api context 
    // Use an ApiContext object to authenticate 
    // API calls. The clientId and clientSecret for the 
    // OAuthTokenCredential class can be retrieved from 
    // developer.paypal.com 

    $apiContext = new ApiContext(
     new OAuthTokenCredential(
      $clientId, 
      $clientSecret 
     ) 
    ); 

    // Comment this line out and uncomment the PP_CONFIG_PATH 
    // 'define' block if you want to use static file 
    // based configuration 

    $apiContext->setConfig(
     array(
      'mode' => 'sandbox', 
      'log.LogEnabled' => true, 
      'log.FileName' => '../PayPal.log', 
      'log.LogLevel' => 'DEBUG', // PLEASE USE `INFO` LEVEL FOR LOGGING IN LIVE ENVIRONMENTS 
      'cache.enabled' => true, 
      // 'http.CURLOPT_CONNECTTIMEOUT' => 30 
      // 'http.headers.PayPal-Partner-Attribution-Id' => '123123123' 
      //'log.AdapterFactory' => '\PayPal\Log\DefaultLogFactory' // Factory class implementing \PayPal\Log\PayPalLogFactory 
     ) 
    ); 

    // Partner Attribution Id 
    // Use this header if you are a PayPal partner. Specify a unique BN Code to receive revenue attribution. 
    // To learn more or to request a BN Code, contact your Partner Manager or visit the PayPal Partner Portal 
    // $apiContext->addRequestHeader('PayPal-Partner-Attribution-Id', '123123123'); 

    return $apiContext; 
} 

答えて

0

を置き換えることによって、リクエストIDをリセットしてください
$payment->create($apiContext); 

$apiContext->resetRequestId();  
$payment->create($apiContext); 
+0

いいえ、ブラウザでも同じエラーが表示されます –

関連する問題