PayPal送货-购物车中有多种产品-购物车上传

时间:2018-09-10 15:41:20

标签: php paypal paypal-ipn

我已将PayPal付款解决方案集成到自定义Web电子商务应用程序中。
自18年8月下旬以来,此功能一直按预期运行。

因此,在我的控制器中,用户点击/单击“立即付款”并选择了PayPal支付网关后,该代码即可获取当前用户的购物车内容并像这样发送:

    $cartrow = $shop->getCartContent(); //Get the cart content
    $query = array();
    $query['notify_url'] = SITEURL.'/gateways/paypal/ipn.php';
    $query['cmd'] = '_cart';
    $query['upload'] = '1';
    $query['business'] = 'BUSINESS EMAIL HERE';
    $query['image_url'] = SITEURL.'/'.THEME.'/assets/images/logo-paypal-head.png';
    $query['return'] = SITEURL.'/order/payment-complete/';
    $query['cancel_return'] = SITEURL.'/order/payment-failed/';
    $query['currency_code'] = 'EUR';
    $query['custom'] = 'STS_'.$user->usr_sesid; //Used for IPN identification
    $query['rm'] = '2';
    $query['shipping_1'] = $shipping_cost;
    $x = 0;
    foreach ($cartrow as $crow):
      $x++;
      $query['item_name_'.$x] = cleanItOut($crow->pr_title);
      $query['item_number_'.$x] = $crow->pr_id;
      $query['quantity_'.$x] = $crow->total;
      $query['amount_'.$x] = $crow->price / $crow->total;
    endforeach;
    $query_string = http_build_query($query);
    $pp_url = 'https://www.paypal.com/cgi-bin/webscr?' . $query_string;
    $json['status'] = 'success';
    $json['pp_url'] = $pp_url;
    print json_encode($json);

请注意:

$query['shipping_1'] = $shipping_cost;

这是在应用程序中之前计算的统一费率。
欧盟国家/地区:6欧元
对于欧盟和美国以外的欧洲国家/地区:9欧元
世界其他地区:14欧元

自9月以来的问题是,贝宝(PayPal)的购买明细中的第一个产品价格等于产品价格+运费。总金额是正确的。

因此,如果购物车是这样的:
产品#1:10欧元
产品#2:15欧元
总计:25 EUR
运送:6欧元
总计:31 EUR

向购买者的购买详细信息最终在PayPal中变为:
产品1:16欧元
产品#2:15欧元
金额:25欧元
运费:6欧元
购买总额:31 EUR

当尝试将shipping_1设置为shipping时,在PayPal Checkout中,运送设置为零。
我得到shipping_1已连接到item_name_1item_number_1quantity_1amount_1值,但是在PayPal集成的“购物车上载”选项中不能使用运输变量。
See PayPal shipping in Individual items variables of documentation.

另外根据PayPal documentation of shopping cart with Cart Upload option shipping_1是将送货发送到PayPal的正确方法,但是您必须将item_name_1amount_1用作其中所有内容的一项购物车。

我最后尝试做的事情是对购物车中的所有物品进行计数,并将shipping_1变量移动到foreach循环中,如下所示:

    foreach ($cartrow as $crow):
      $x++;
      $query['shipping_x'] = $shipping_cost / $crow->total_products;
      $query['item_name_'.$x] = cleanItOut($crow->pr_title);
      $query['item_number_'.$x] = $crow->pr_id;
      $query['quantity_'.$x] = $crow->total;
      $query['amount_'.$x] = $crow->price / $crow->total;
    endforeach;

通过这种方式,运输在产品之间平均分配,但仍然不是最佳解决方案,因为用户/买方不会看到之前在其购物车中显示的价格。

我想念什么吗?
有没有记载的变量或我不知道的“ hack”?

亲切的问候。

0 个答案:

没有答案