【问题标题】:Sandbox Paypal Money Deduction Issues沙盒 Paypal 扣款问题
【发布时间】:2013-01-28 12:53:51
【问题描述】:

我的代码:

function paiement_echec()
    {
    echo "payment cancelled by the user";
    }

function paiement_succes()
{
  // Obtain the token from PayPal.
  if(!array_key_exists('token', $_REQUEST)) 
         exit('Token is not received.');
  // Set request-specific fields.
  $token = urlencode(htmlspecialchars($_REQUEST['token']));
  // Add request-specific fields to the request string.
  $nvpStr = "&TOKEN=$token";
  // Execute the API operation; see the PPHttpPost function above.
  $httpParsedResponseAr = $this->PPHttpPost('GetExpressCheckoutDetails', $nvpStr);
  if("SUCCESS" == strtoupper($httpParsedResponseAr["ACK"]) || "SUCCESSWITHWARNING" == strtoupper($httpParsedResponseAr["ACK"])) 
      {
          //print_r($httpParsedResponseAr);
          $payerID = urlencode($httpParsedResponseAr["PAYERID"]);
          //$token = urlencode("token");
          $paymentType = urlencode('Sale');         // or 'Sale' or 'Order'
          $paymentAmount = urlencode("4.39");
          $currencyID = urlencode("USD");                       // or other currency code ('GBP', 'EUR', 'JPY', 'CAD', 'AUD')
 
// Add request-specific fields to the request string.
          $nvpStr = "&TOKEN=$token&PAYERID=$payerID&PAYMENTACTION=$paymentType&AMT=$paymentAmount&CURRENCYCODE=$currencyID";
          $httpParsedResponseAr = $this->PPHttpPost('DoExpressCheckoutPayment', $nvpStr);
           if("SUCCESS" == strtoupper($httpParsedResponseAr["ACK"]) || "SUCCESSWITHWARNING" == strtoupper($httpParsedResponseAr["ACK"])) 
           {
             $this->load->model('payment_model');
             $this->payment_model->paypal_payment();
             $msg = "<label>Thank you !! your payment is successfully done</label>
              <a href='".base_url()."envoie_de_photos/envoyer_vos_photos"."'>Go To Photo Uploading</a>";
             echo $msg;
           }
          else  
            {
                 exit('GetExpressCheckoutDetails failed: ' . print_r($httpParsedResponseAr, true));
             //echo "Payment failed for unknown reason";
            }
      } 
  else  
      {
        //exit('GetExpressCheckoutDetails failed: ' . print_r($httpParsedResponseAr, true));
        echo "Payment failed for unknown reason";
      }
}


function pay_by_paypal()
{
  
        $environment = 'sandbox';
        $_SESSION['item_name']=$this->input->post('item_name');
        $_SESSION['amount']=$this->input->post('amount');
        $_SESSION['currency_code']=$this->input->post('currency_code');
        $_SESSION['no_of_photo']=$this->input->post('no_of_photo');
        
        $qty=urlencode("1");
        $product_name=urldecode($_SESSION['item_name']);
        $price=urlencode($_SESSION['amount']);
        //$currencyID = urlencode($_SESSION['currency_code']);
        $currencyID = urlencode("USD");

        
  
// or other currency code ('GBP', 'EUR', 'JPY', 'CAD', 'AUD')
     $paymentType = urlencode('Order'); 
     $nvpStr=""; 
     $returnURL = (base_url()."paiement/paiement_succes");
     $cancelURL = (base_url()."paiement/paiement_echec");  
     $i=0;
     $total_amount=0;
     
     $str = "&METHOD=SetExpressCheckout
&RETURNURL=$returnURL
&CANCELURL=$cancelURL
&L_PAYMENTREQUEST_0_NAME0=$product_name
&L_PAYMENTREQUEST_0_NUMBER0=$qty
&L_PAYMENTREQUEST_0_AMT0=$price
&L_PAYMENTREQUEST_0_DESC0=$product_name
&PAYMENTREQUEST_0_AMT=$price
&PAYMENTREQUEST_0_PAYMENTACTION=$paymentType
&PAYMENTREQUEST_0_CURRENCYCODE=$currencyID"; 
     $nvpStr=$nvpStr.$str;
$httpParsedResponseAr = $this->PPHttpPost('SetExpressCheckout', $nvpStr);
     
if("SUCCESS" == strtoupper($httpParsedResponseAr["ACK"]) || "SUCCESSWITHWARNING" == strtoupper($httpParsedResponseAr["ACK"]))
    {
    // Redirect to paypal.com.
    $token = urldecode($httpParsedResponseAr["TOKEN"]);
    $payPalURL = "https://www.$environment.paypal.com/webscr&cmd=_express-checkout&token=$token";
    if("sandbox" === $environment) 
            {
        $payPalURL = "https://www.$environment.paypal.com/webscr&cmd=_express-checkout&token=$token";
    }
    header("Location: $payPalURL");
    exit;
} 
else  
    {
    exit('SetExpressCheckout failed: ' . print_r($httpParsedResponseAr, true));
}
  
}

/** SetExpressCheckout NVP example; last modified 08MAY23.
 *
 *  Initiate an Express Checkout transaction. 
*/


/**
 * Send HTTP POST Request
 *
 * @param   string  The API method name
 * @param   string  The POST Message fields in &name=value pair format
 * @return  array   Parsed HTTP Response body
 */
private function PPHttpPost($methodName_, $nvpStr_) {
    //global $environment;
        $environment = 'sandbox';   // or 'beta-sandbox' or 'live'
    // Set up your API credentials, PayPal end point, and API version.
    $API_UserName = urlencode('saswat_1360720799_biz_api1.gmail.com');
    $API_Password = urlencode('1360720821');
    $API_Signature = urlencode('ApDCeFez-N1Gd1-O3ubTGdpyiow4AlNlRemm8XJFcbsA.WbSMtlMSqHf');
    $API_Endpoint = "https://api-3t.paypal.com/nvp";
    if("sandbox" === $environment) {
        $API_Endpoint = "https://api-3t.$environment.paypal.com/nvp";
    }
    $version = urlencode('65.0');

    // Set the curl parameters.
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $API_Endpoint);
    curl_setopt($ch, CURLOPT_VERBOSE, 1);

    // Turn off the server and peer verification (TrustManager Concept).
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);

    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_POST, 1);

    // Set the API operation, version, and API signature in the request.
    $nvpreq = "METHOD=$methodName_&VERSION=$version&PWD=$API_Password&USER=$API_UserName&SIGNATURE=$API_Signature$nvpStr_";

    // Set the request as a POST FIELD for curl.
    curl_setopt($ch, CURLOPT_POSTFIELDS, $nvpreq);

    // Get response from the server.
    $httpResponse = curl_exec($ch);

    if(!$httpResponse) {
        exit("$methodName_ failed: ".curl_error($ch).'('.curl_errno($ch).')');
    }

    // Extract the response details.
    $httpResponseAr = explode("&", $httpResponse);

    $httpParsedResponseAr = array();
    foreach ($httpResponseAr as $i => $value) {
        $tmpAr = explode("=", $value);
        if(sizeof($tmpAr) > 1) {
            $httpParsedResponseAr[$tmpAr[0]] = $tmpAr[1];
        }
    }

    if((0 == sizeof($httpParsedResponseAr)) || !array_key_exists('ACK', $httpParsedResponseAr)) {
        exit("Invalid HTTP Response for POST request($nvpreq) to $API_Endpoint.");
    }

    return $httpParsedResponseAr;
}

我在 Paypal 沙盒中有三个帐户:两个企业帐户和一个个人帐户。我所有的 Paypal 帐户都将美元作为默认货币。

在上面的代码中,我使用欧元作为货币。

当我进行交易时,如果我从我的个人(买家)账户中以欧元付款,那么我的买家账户中的钱会被扣除(等值的美元金额会从我的买家账户中扣除)。这完全没问题,没有问题。

问题是我的企业或(卖家)帐户中没有添加任何金额。

我在 Stack Overflow 上发现了一篇帖子,内容如下:

如果交易的货币代码和卖家账户没有 匹配,然后钱不会被添加到卖家帐户中

我把欧元换成了美元,(因为我的沙盒卖家测试账户是美元),发现兑换成美元后,我的钱就会被添加到我的卖家账户中。

这只是沙盒的问题,还是也适用于 live paypal?

我有一个网站,买家可以用英镑、欧元、马币、新加坡元、澳元付款。

如果交易需要以特定货币进行,即卖家账户设置的货币,则无需使用不同的货币。

由于 SetExpressCheckOut 中传入的 currencyCode 应该与 DoExpressCheckout 匹配,而且我遇到了问题,因此 currencyCode 需要与沙盒卖家账户的相同,所以即使买家选择 GBP,我也必须将其发送到设置ExpressCheckout为卖家账户的currencyCode。

【问题讨论】:

    标签: codeigniter paypal


    【解决方案1】:

    您应该通过相关企业帐户的控制面板添加您希望接收付款的货币。

    转到Profile -> My Settings -> 财务信息选项卡和Currency Balances。从那里选择一种货币并将其添加到列表中。然后,您收到的付款将保留在相应的货币余额中,直到您将其转换为您想要的任何形式。

    【讨论】:

    • 这件事看起来很有趣........但是你要说的是,这是原始的贝宝卖家帐户,还是只是沙盒贝宝...... ..我无法使用原始贝宝帐户检查它,因为我没有任何..
    • @Saswat 他们在这件事上是相同的。您可以查看paypal's developer instructions 了解此特定问题。
    【解决方案2】:

    默认情况下,以您不持有的货币进行的交易将被保留,直到您决定如何处理它们。如果您登录有问题的卖家账户,您应该会在您的历史记录下看到该交易。您应该能够从那里接受或拒绝它。

    有两种解决方法:

    • 如 Alderis 所述,将欧元作为货币余额添加到您的卖家账户中。
    • 自动接受以您不持有的货币进行的所有交易并将其转换为美元。为此,请登录卖家账户,点击Profile,然后点击Payment Receiving Preferences(在Selling preferences列中),然后将以我不持有的货币发送给我的付款设置为否,接受并将其转换为美元,然后点击保存

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-08-07
      • 2021-07-16
      • 2011-10-10
      • 2016-10-27
      • 2016-07-18
      • 2017-08-30
      • 2011-09-11
      • 2015-07-20
      相关资源
      最近更新 更多