paypal集成到网站php与js的实现教程

paypal支持全球收款,在国外的市场非常大,如果你的客户为国外用户,这个是必不可少的,今天我们来申请一个paypal账号,并通过js和php来接入到我们的网站业务中,让用户可以使用paypal来支付购买商品。

一、申请paypal

首先申请一个paypal账号,申请地址:https://www.paypal.com/c2/webapps/mpp/account-selection

paypal集成到网站php与js的实现教程

选择个人或企业账户,这里为了演示我选了个人

paypal集成到网站php与js的实现教程

选择中国

paypal集成到网站php与js的实现教程

输入自己手机号码

paypal集成到网站php与js的实现教程

输入手机验证码

paypal集成到网站php与js的实现教程

设置邮箱姓名及登录密码

paypal集成到网站php与js的实现教程

输入自己的身份证号码及身份证上的地址

填完之后进入paypal的开发者中心页面,地址:https://developer.paypal.com/developer/applications/

paypal集成到网站php与js的实现教程

我们可以看到有两个环境,一个是sandbox沙箱环境,是给开发者开发调试的,还有个一个live是生产版本,我们选择sandbox,点击creat app,我们来常见一个app

paypal集成到网站php与js的实现教程

创建完成后,我们可以看到client-id及秘钥

paypal集成到网站php与js的实现教程

好了,我们下一步就编写代码吧

二、使用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:*" ,回车

下载成功后,我们可以在目录中看到

paypal集成到网站php与js的实现教程

在当前目录下再新建四个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%

{{collectdata}}

网友评论0