paypal支持全球收款,在国外的市场非常大,如果你的客户为国外用户,这个是必不可少的,今天我们来申请一个paypal账号,并通过js和php来接入到我们的网站业务中,让用户可以使用paypal来支付购买商品。
一、申请paypal
首先申请一个paypal账号,申请地址:https://www.paypal.com/c2/webapps/mpp/account-selection
选择个人或企业账户,这里为了演示我选了个人
选择中国
输入自己手机号码
输入手机验证码
设置邮箱姓名及登录密码
输入自己的身份证号码及身份证上的地址
填完之后进入paypal的开发者中心页面,地址:https://developer.paypal.com/developer/applications/
我们可以看到有两个环境,一个是sandbox沙箱环境,是给开发者开发调试的,还有个一个live是生产版本,我们选择sandbox,点击creat app,我们来常见一个app
创建完成后,我们可以看到client-id及秘钥
好了,我们下一步就编写代码吧
二、使用js编写收款及回调通知
paypal为了方便商户网站集成paypay支付,推出了一个Smart Payment Buttons,只需要几段js代码就完成了paypal的支付接入,让我先看看沙箱环境下的支付接入代码吧:<!DOCTYPE html> <head> <meta name="viewport" content="width=device-width, initial-scale=1"> <!-- Ensures optimal rendering on mobile devices. --> <meta http-equiv="X-UA-Compatible" content="IE=edge" /> <!-- Optimal Internet Explorer compatibility --> </head> <body> <script src="https://www.paypal.com/sdk/js?client-id=AYzWHRsN8oi4phBwL1VGT6F3AE80VlleicXEG03vtrZOXJE5MWyn-3_C3hTJGe0Ps9q5rVm_DfEXPZhw"> //这里的client-id要替换你在沙箱里新建app时的app的client-id. </script> <div id="paypal-button-container"></div> <script> paypal.Buttons({ createOrder: function(data, actions) { //设置交易数据. return actions.order.create({ purchase_units: [{ amount: { value: '0.01' } }] }); }, onApprove: function(data, actions) { //交易成功后触发 return actions.order.capture().then(function(details) { console.log(data); console.log(details); // This function shows a transaction success message to your buyer. alert('交易完成 ' + details.payer.name.given_name); }); } }).render('#paypal-button-container'); </script> </body> </html>是不是很简单,设置收款金额,收款成功后直接执行回调函数,这里可以通过ajax去更新订单信息
如果是发布到线上live的话我们要进行修改。
<!DOCTYPE html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1"> <!-- Ensures optimal rendering on mobile devices. -->
<meta http-equiv="X-UA-Compatible" content="IE=edge" /> <!-- Optimal Internet Explorer compatibility -->
</head>
<body>
<script
<script
src="https://www.paypal.com/sdk/js?client-id=LIVE_CLIENT_ID"> //更换live下的app的client_id
</script>
<div id="paypal-button-container"></div>
<script>
// 设置clientid及秘钥
var PAYPAL_CLIENT = 'PAYPAL_LIVE_CLIENT';
var PAYPAL_SECRET = 'PAYPAL_LIVE_SECRET';
// Point your server to the PayPal API
var PAYPAL_ORDER_API = 'https://api-m.paypal.com/v2/checkout/orders/';
paypal.Buttons({
createOrder: function(data, actions) {
//设置交易数据.
return actions.order.create({
purchase_units: [{
amount: {
value: '0.01'
}
}]
});
},
onApprove: function(data, actions) {
//交易成功后触发
return actions.order.capture().then(function(details) {
console.log(data);
console.log(details);
// This function shows a transaction success message to your buyer.
alert('交易完成 ' + details.payer.name.given_name);
});
}
}).render('#paypal-button-container');
</script>
</body>
</html>
好了,这里有个问题,现在所有的数据都放在前端,全部给暴露了,要是客户懂代码,直接在浏览器找到回调地址,直接更新地址不就麻烦了吗,那么还有一个方法就是通过后端来生成支付按钮并回调
三、使用php编写收款及回调通知
我们这里选择composer 安装,打开cmd,输入composer require "paypal/rest-api-sdk-php:*" ,回车
下载成功后,我们可以在目录中看到
在当前目录下再新建四个php文件,common.php、payment.php、notify.php、cancel.php
首先是common.php,这里主要设置clientid及秘钥等信息的,代码如下:
<?php require_once('vendor/autoload.php'); use PayPal\Rest\ApiContext; use PayPal\Auth\OAuthTokenCredential; // 下面为申请app获得的clientId和clientSecret,必填项,否则无法生成token。 $clientId = 'AYzWHRsN8oi4phBwL1VGT6F3AE80VlleicXEG03vtrZOXJE5MWyn-3_C3hTJGe0Ps9q5rVm_DfEXPZhw'; $clientSecret = 'EMc6umgnl-stAMQqGP25jLmhKMSrWf3wPkm-nJ5uzp2d7TUuXrfLdfKVzcjzgYt3n5gRgvN1uttZOyE4'; $apiContext = new ApiContext( new OAuthTokenCredential( $clientId, $clientSecret ) ); $apiContext->setConfig( array( 'mode' => 'sandbox', 'log.LogEnabled' => false, 'log.FileName' => 'PayPal.log', 'log.LogLevel' => 'DEBUG', 'cache.enabled' => false ) );
然后是payment.php,这个是设置商品信息及价格参数生成支付链接的,代码如下:
<?php require_once("common.php"); use PayPal\Api\Amount; use PayPal\Api\Details; use PayPal\Api\Item; use PayPal\Api\ItemList; use PayPal\Api\Payer; use PayPal\Api\Payment; use PayPal\Api\RedirectUrls; use PayPal\Api\Transaction; function isHTTPS() { if (defined('HTTPS') && HTTPS) return true; if (!isset($_SERVER)) return FALSE; if (!isset($_SERVER['HTTPS'])) return FALSE; if ($_SERVER['HTTPS'] === 1) { //Apache return TRUE; } elseif ($_SERVER['HTTPS'] === 'on') { //IIS return TRUE; } elseif ($_SERVER['SERVER_PORT'] == 443) { //其他 return TRUE; } return FALSE; } function getscheme(){ return (isHTTPS() ? 'https://' : 'http://'); } // Create new payer and method $payer = new Payer(); $payer->setPaymentMethod("paypal"); // Set redirect URLs $basepath=dirname(getscheme().$_SERVER['SERVER_NAME'].$_SERVER["REQUEST_URI"]); $redirectUrls = new RedirectUrls(); $redirectUrls->setReturnUrl("{$basepath}/notify.php?success=true") ->setCancelUrl("{$basepath}/cancel.php?success=false"); // Set payment amount $amount = new Amount(); $amount->setCurrency("USD") ->setTotal(10); // Set transaction object $transaction = new Transaction(); $transaction->setAmount($amount) ->setDescription("Paym...
点击查看剩余70%
网友评论0