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