给你代码:自建外贸站之PayPal支付集成

给你代码:自建外贸站之PayPal支付集成

自建外贸电商网站平台有个绕不过去也是非常重要的一环:收款。收款是商业变现必不可少的环节,而PayPal是全球最大的跨境收款工具之一。以下摘自PayPal官网提供的2019年第二季度数据:

GAAP EPS of $0.69, increasing 58%; non-GAAP EPS of $0.86, increasing 47%Cash flow from operations of $1.2 billion; Free cash flow of $1.0 billion 9.0 million net new active accounts added, bringing total active accounts to 286 million, up 17%

PayPal目前有超过2.86亿个活跃用户,增幅达到17%,PayPal目前在美国500强网络零售商支付手段中占82%。除此之外,PayPal在欧洲的支付市场占有率也有不俗表现,总体占比72%以上,以下为欧洲各个国家受欢迎的前三支付方式:

据路透伦敦7月16日报,美国支付公司PayPal将在英国以及其他31个欧洲国家推出国际汇款服务Xoom,进一步在欧洲市场扩张。这是使用PayPal来进行在线支付的一个非常令人信服的理由。

本期目的主要介绍如何在你的独立站点上加入PayPal支付功能,以最简单的方式让客户打款到你的PayPal账户。

首先,你需要注册一个PayPal帐户,注册地址:https://developer.paypal.com。帐户类型分为Personal(个人)、Premier(高级)和Business(商业),Personal的不能使用IPN和PDT等商家工具,即不能获取交易信息,但是Personal帐户收款无需手续费;Premier和Business当然就提供了IPN和PDT功能,能够在客户支付成功后,将交易信息通知给设定好的网站接收地址,用来对关联的订单做状态更新等操作。

在你的产品页面加入以下代码,这个页面用来构造订单支付请求信息,并自动导航到PayPal进行支付

<form method="post" action="https://www.paypal.com/cgi-bin/webscr">
<input name="cmd" value="_xclick" type="hidden"><!-- 告诉paypal该表单是立即购买 -->
<input name="business" value="remit@kunquer.com" type="hidden"> <!--你的PayPal帐号 -->
<input name="item_name" value="#201909131428" type="hidden"> <!--商品名称,这里可以显示平台对应的订单号 -->
<input name="quantity" value="1" type="hidden"> <!--数量,如果是订单,填1即可 -->
<input name="amount" value="1024.00" type="hidden"> <!--价格,单位:美元 -->
<input name="shipping" value="0" type="hidden"> <!--运费 -->
<input name="currency_code" value="USD" type="hidden"> <!--币种 -->
<input name="return" value="http://www.yoursite.com/paypal/success" type="hidden"> <!--支付成功后网页跳转地址 -->
<input name="notify_url" value="http://www.yoursite.com/paypal/notify" type="hidden"> <!--网站接收PayPal支付信息的处理地址 -->
<input name="invoice" value="201909131428" type="hidden"> <!--放入你平台的订单号, PayPal会在通知notify_url中原样返回 -->
<input name="custom" value="" type="hidden"> <!--自定义变量,PayPal同样会原样返回 -->
<input name="no_note" value="1" type="hidden">
<input name="no_shipping" value="1" type="hidden">
<input name="lc" value="US" type="hidden"> <!--支付页面语言设置 -->
<script>
window.onload = () => document.getElementsByTagName('form')[0].submit();
</script>

在notify_url处理地址,需要对PayPal发送过来的支付信息进行验证,并处理与之关联的平台订单状态。PayPal发送过来的数据形式如下:

mc_gross=1024.00&invoice=201805281150314947&protection_eligibility=Ineligible&payer_id=S5R635QDMW36Y&payment_date=20%3A51%3A38+May+27%2C+2018+PDT&payment_status=Completed&charset=windows-1252&first_name=Christoph&mc_fee=5.36&notify_version=3.9&custom=27680&payer_status=verified&business=remit%40kunquer.com&quantity=1&verify_sign=ACyAdpffsWCvO3dHmFiMc1UQQOzvAq.NKRDZKJCihSoDFIbNDoGPaV.S&payer_email=wasshuber%40lybrary.com&txn_id=1R802757L17399041&payment_type=instant&payer_business_name=Lybrary.com&last_name=Wasshuber&receiver_email=orders%40robotdigg.com&payment_fee=5.36&shipping_discount=0.00&insurance_amount=0.00&receiver_id=DJ94DHNNKUXA8&txn_type=web_accept&item_name=Order%23201805281150314947&discount=0.00&mc_currency=USD&item_number=&residence_country=US&shipping_method=Default&transaction_subject=&payment_gross=136.80&shipping=0.00&ipn_track_id=5f078b05abd91

为了防止有人恶意伪造数据来访问notify_url,我们需要把接收的信息发给PayPal进行验证确认,PayPal会将验证结果返回,只有当返回信息含有VERIFIED才表示这个信息发送方确实来自PayPal:

$params = 'cmd=_notify-validate';
foreach($_POST as $k => $v) {
$value = urlencode($v);
$params .= '&'.$k.'='.$v;
}
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://www.paypal.com/cgi-bin/webscr');
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, 15);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, 'cmd=_notify-validate&'.$params);
$response = curl_exec($ch);
curl_close($ch);
if(false !== strpos($response, 'VERIFIED')) { // 验证数据发送方来自PayPal
if(isset($request['payment_status']) && 'Completed' == $request['payment_status']) { // 支付成功
// @ 订单处理逻辑,一般需要将平台关联订单状态更新为“已支付”,并通知仓库安排打包发货等后续事宜
// 请注意!!!在更新订单状态前还有一步需要确认$_POST中的invoice字段(即支付金额)是否与平台关联订单
// 应付金额是否一致,因为会存在客户支付部分款,PayPal也会推送支付成功的情况存在
}
}

这是最简单常见的PayPal支付集成方式,下期我们将采用PayPal标准SDK来构建一个真实案例,包括注册细节,支付选项设置,支付日志留存,二次校验等,一起探讨PayPal支付集成最佳实践。

© 2019 爱讯头条 秀色女神

京ICP证140141号 邮箱: joy611@126.com