通过API使用PayPal捐赠时能否设置收货地址?
关于PayPal捐赠API设置收货地址的解决方案
首先明确说:捐赠场景下完全可以让PayPal收集或预先设置收货地址,你遇到的问题核心是代码里的一个参数限制了地址收集。
咱们先看你现有代码里的关键行:
$param .= '&no_note=1&no_shipping=1&rm=1';
这里的no_shipping=1是告诉PayPal:不要向用户收集收货地址信息,这就是你拿不到地址的直接原因。
调整方案:
开启地址收集
把no_shipping=1改成no_shipping=0(允许用户选择是否填写地址),或者直接删除这个参数,PayPal会在捐赠流程中默认展示地址填写环节。如果需要强制用户必须填写地址才能完成捐赠,就改成no_shipping=2。预先填充用户地址(可选)
如果你已经在自己的系统里获取了用户的地址,可以把这些信息预先传递给PayPal,避免用户重复填写,可用的参数包括:first_name:用户名last_name:用户姓氏address_street:街道地址(支持两行,用%0A换行)address_city:城市address_state:州/省(德国可以填州代码,比如BE代表柏林)address_zip:邮编address_country:国家代码(比如DE)
修改后的代码示例:
$param = ''; $param .= '&business=XXXX'; $param .= '&lc=DE'; $param .= '&item_name=My Company'; $param .= '&item_number=' . $spendenConfig['itemnumber']; $param .= '&amount=' . $spendenConfig['amount']; $param .= '&currency_code=EUR'; // 修改no_shipping参数为0,开启地址收集 $param .= '&no_note=1&no_shipping=0&rm=1'; // 可选:预先填充地址信息 $param .= '&first_name=Max&last_name=Mustermann'; $param .= '&address_street=Musterstrasse 123%0AAppartment 45'; $param .= '&address_city=Berlin'; $param .= '&address_zip=12345'; $param .= '&address_country=DE'; $param .= '&return=' . $paypalReturnUrl; $param .= '&cancel_return=' . $this->PAYPAL_CANCEL_URL; $param .= '&bn=PP-DonationsBF:btn_donateCC_LG.gif:NonHosted&status=success'; header('Location: https://www.paypal.com/cgi-bin/webscr?cmd=_donations' . $param);
获取地址信息用于开收据:
当用户完成捐赠后,PayPal会通过return URL的回调参数(或者IPN通知)把地址信息返回给你,你可以在回调页面中获取这些参数(比如$_GET['address_street']、$_GET['address_city']等),用来生成捐赠收据。
内容的提问来源于stack exchange,提问作者Kerstin
相关产品推荐
相关产品推荐

