繁体   English   中英

支付朋友快递结帐PHP

[英]pay pal express checkout php

我一直在使用paypal api进行exprescheckout。 问题:我无法调用L_PAYMENTREQUEST_n_方法。 PAYMENTREQUEST_0_有效。 但我只能将其用于价格或商品价格。 对于描述和数量,我需要使用L_PAYMENTREQUEST_n_方法。

感谢任何帮助

<?php
// EXpress Checkout Paypal
$paketdata = array(
    array(

"name" => "Premium",
"desc" => "Mein Beschreibung",
"preis" => '9.96',
"count" => '2'
        )
);


$endpreis = "18.97";
$desc = 'meine beschreibung name';
$paypal ="#";
$user = "paypalap@email.com";
$password = "passwd1234";
$signature ="fhhasHDJKHSAHJAL74327327dbsasahbsdcsadb7434";
$version = "93";
$currency = "EUR";

$params = array(
    'METHOD' => 'SetExpressCheckout',
    'USER' => $user,
    'SIGNATURE' => $signature,
    'PWD' => $password,
    'RETURNURL' => 'https://localhost/env/paypal/geschafft.php',
    'CANCELURL' => 'https://localhost/env/paypal/cancel.php',
    'VERSION' => $version,

    'PAYMENTREQUEST_0_AMT' => $endpreis,
    'PAYMENTREQUEST_0_CURRENCYCODE' => $currency,
   );

    foreach ($paketdata as $k => $paket){
    $params['L_PAYMENTREQUEST_0_NAME$k'] = $paket['name'];
    $params['L_PAYMENTREQUEST_0_DESC$k'] = '';
    $params['L_PAYMENTREQUEST_0_ITEMAMT$k'] = $paket['preis'];
  }

    $params = http_build_query($params);
    $endpoint = 'https://api-3t.sandbox.paypal.com/nvp';
    $curl = curl_init();
    curl_setopt_array($curl, array(
        CURLOPT_URL => $endpoint,
        CURLOPT_POST => 1,
        CURLOPT_POSTFIELDS => $params,
        CURLOPT_RETURNTRANSFER => 1,
        CURLOPT_SSL_VERIFYPEER => false,
        CURLOPT_SSL_VERIFYHOST => false,
        CURLOPT_VERBOSE => 1
    ));
    $response = curl_exec($curl);
    $responseArray = array();
    parse_str($response, $responseArray);

    if (curl_errno($curl)) {
    var_dump(curl_errno($curl));
    curl_close($curl);
    die();
    }else{
        if ($responseArray['ACK'] == 'Success') {

    }else{      
        curl_close($curl);
        }
}
    curl_close($curl);
    $paypal = 'https://www.sandbox.paypal.com/webscr?cmd=_express-checkout&useraction=commit&token=' . $responseArray['TOKEN']; 
    echo '<pre>';
    print_r($paket);
    echo '</pre>';
    print_r($paypal)
?>


<a href="<?php echo urldecode($paypal) ?>">PAyPal</a>

您的要求是这样发出的...

Array
(
    [METHOD] => SetExpressCheckout
    [USER] => paypalap@email.com
    [SIGNATURE] => fhhasHDJKHSAHJAL74327327dbsasahbsdcsadb7434
    [PWD] => passwd1234
    [RETURNURL] => https://localhost/env/paypal/geschafft.php
    [CANCELURL] => https://localhost/env/paypal/cancel.php
    [VERSION] => 93
    [PAYMENTREQUEST_0_AMT] => 18.97
    [PAYMENTREQUEST_0_CURRENCYCODE] => EUR
    [L_PAYMENTREQUEST_0_NAME$k] => Premium
    [L_PAYMENTREQUEST_0_DESC$k] => 
    [L_PAYMENTREQUEST_0_ITEMAMT$k] => 9.96
)

您需要在参数名称周围使用双引号,以便像这样直接在内部使用$ k,因此您需要这样做...

foreach ($paketdata as $k => $paket){
    $params["L_PAYMENTREQUEST_0_NAME$k"] = $paket['name'];
    $params["L_PAYMENTREQUEST_0_DESC$k"] = '';
    $params["L_PAYMENTREQUEST_0_ITEMAMT$k"] = $paket['preis'];
}

然后,这种变化给了我,应该可以了。

Array
(
    [METHOD] => SetExpressCheckout
    [USER] => paypalap@email.com
    [SIGNATURE] => fhhasHDJKHSAHJAL74327327dbsasahbsdcsadb7434
    [PWD] => passwd1234
    [RETURNURL] => https://localhost/env/paypal/geschafft.php
    [CANCELURL] => https://localhost/env/paypal/cancel.php
    [VERSION] => 93
    [PAYMENTREQUEST_0_AMT] => 18.97
    [PAYMENTREQUEST_0_CURRENCYCODE] => EUR
    [L_PAYMENTREQUEST_0_NAME0] => Premium
    [L_PAYMENTREQUEST_0_DESC0] => 
    [L_PAYMENTREQUEST_0_ITEMAMT0] => 9.96
)

但是,另一方面,您不想在返回中使用localhost并取消URL。 PayPal的服务器是重定向到该URL的服务器,因此当时的localhost是他们自己的服务器,这当然不会做您想要的事情。

您需要使用公用IP地址或设置一个解析为您可以使用的IP的域。

实际上,这很有趣,我只是在这里尝试在本地主机的前面使用http://,而Stack不会因为这个原因而让我发布带有链接的链接……它们会链接到自己。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM