PHP语言开发Paypal支付demo的具体实现

简介:

一、开发前准备

https://developer.paypal.com/  到paypal的开发者官网注册开发者账号。

用账号登录之后、点击导航上面的 dashboard、进入dashboard面版。如下截图、后续的操作都是在这个面板中操作。

\

上面截图中菜单 Sandbox下面的Accounts里面能看到你的 sandbox测试的买家账号和卖家账号。2个测试账号里面都有profile选项里面有changepassword可以设置虚拟账号的密码。

上面截图中菜单Sandbox下面的Transactions就是你的交易记录。

点击截图页面右上角的 Create App按钮。创建一个应用。创建好后、会给你提供一个Client ID 和 Secret。这两个可以配置为php常量后面开发中会用到。

二、进入支付Demo开发

随便在本地建立一个开发代码根目录、先建立一个index.html里面就放一个简单的产品名称和产品价格两个input项即可、代码和截图如下:

 
 
  1. DOCTYPE html> 
  2. <html lang="en"
  3.     <head> 
  4.         <meta charset="utf-8"
  5.         <title>支付页面title> 
  6.     head> 
  7.     <body> 
  8.         <div> 
  9.             <form action="checkout.php" method="post" autocomplete="off"
  10.                 <label for="item"
  11.                     产品名称 
  12.                     <input type="text" name="product"
  13.                 label> 
  14.                 <br> 
  15.                 <label for="amount"
  16.                     价格 
  17.                     <input type="text" name="price"
  18.                 label> 
  19.                 <br> 
  20.                 <input type="submit" value="去付款"
  21.             form> 
  22.         div> 
  23.     body> 
  24. html> 

\

输入产品名称 和 价格。点击去付款就会到paypal的付款页面。用你的sandbox测试买家账号去付款。就会发现付款成功。然后登陆你的测试卖家账号。会发现卖家账号已经收到付款。当然这里会扣除paypal收取的手续费。手续费收的是卖家的。

下面来具体看看php是怎么实现的。首先先要把paypal提供的 php-sdk给弄到你的代码目录中来。这里介绍使用php的包管理器composer来获取最新sdk、当然你可以可以从github等其他渠道获取最新的paypal php-sdk。

默认你的电脑已经安装composer了。如果没有自己去度娘或者google下composer安装。

然后在你的代码根目录写一个composer.json文件来获取包内容。json文件代码如下:

{
   
"require" : { "paypal/rest-api-sdk-php" : "1.5.1"
    }
}

这里如果是 linux/unix系统就直接再根目录执行composer install来获取包内容。

安装好之后。根目录下面会产生一个vendor目录。里面有composer 和 paypal两个子目录。composer里面实现了自动加载、paypal则是你的sdk内容。

接 下来我们来写一个公共文件(这里默认用 app/start.php、你的项目中可以自定义)、其实里面就只是实现了 sdk的autoload.php自动加载 和 创建刚才上面的的client id  和 secret生成的paypal支付对象实例。start.php代码如下:

php

require "vendor/autoload.php"; //载入sdk的自动加载文件 define('SITE_URL', 'http://www.paydemo.com'); //网站url自行定义 //创建支付对象实例 $paypal = new \PayPal\Rest\ApiContext( new \PayPal\Auth\OAuthTokenCredential( '你的Client ID' '你的secret'
    )
);

接下来就来实现表单中提交的处理文件 checkout.php。代码内容如下:

php

/**
* @author xxxxxxxx
* @brief 简介:
* @date 15/9/2
* @time 下午5:00
*/
use \PayPal\Api\Payer;
use \PayPal\Api\Item;
use \PayPal\Api\ItemList;
use \PayPal\Api\Details;
use \PayPal\Api\Amount;
use \PayPal\Api\Transaction;
use \PayPal\Api\RedirectUrls;
use \PayPal\Api\Payment;
use \PayPal\Exception\PayPalConnectionException;

require "app/start.php"; if (!isset($_POST['product'], $_POST['price'])) { die("lose some params"); } $product = $_POST['product']; $price = $_POST['price']; $shipping = 2.00; //运费 $total = $price + $shipping; $payer = new Payer(); $payer->setPaymentMethod('paypal'); $item = new Item(); $item->setName($product) ->setCurrency('USD') ->setQuantity(1) ->setPrice($price); $itemList = new ItemList(); $itemList->setItems([$item]); $details = new Details(); $details->setShipping($shipping) ->setSubtotal($price); $amount = new Amount(); $amount->setCurrency('USD') ->setTotal($total) ->setDetails($details); $transaction = new Transaction(); $transaction->setAmount($amount) ->setItemList($itemList) ->setDescription("支付描述内容") ->setInvoiceNumber(uniqid()); $redirectUrls = new RedirectUrls(); $redirectUrls->setReturnUrl(SITE_URL . '/pay.php?success=true') ->setCancelUrl(SITE_URL . '/pay.php?success=false'); $payment = new Payment(); $payment->setIntent('sale') ->setPayer($payer) ->setRedirectUrls($redirectUrls) ->setTransactions([$transaction]); try { $payment->create($paypal); } catch (PayPalConnectionException $e) { echo $e->getData(); die(); } $approvalUrl = $payment->getApprovalLink(); header("Location: {$approvalUrl}");

checkout.php通过表单提交上来的参数对支付具体细节和参数进行初始化和设置。这里只列出了常用的部分。paypal提供了很多参数设置。具体更丰富的可以自己参考paypal官方开发者文档。

checkout.php设置完参数之后。会生成一个支付链接。用header跳转到这个支付链接(就是paypal的支付页面)到这个支付页面上面就可以用你的sandbox提供的buyer账号去支付了。截图如下:

\

用buyer账号支付完成之后。去看看你的sandbox的商家账户余额吧。就会发现已经收到了扣除手续费外的钱了。

这里支付成功 或者 失败后还有一个回调的处理。回调处理的php文件再上面的checkout.php里面的setReturnUrl处设置。这里设置的是/pay.php?success=true

接下来我们来看看pay.php是怎么简单处理回调的。先贴上pay.php的代码:

php

require 'app/start.php';

use PayPal\Api\Payment;
use PayPal\Api\PaymentExecution;

if(!isset($_GET['success'], $_GET['paymentId'], $_GET['PayerID'])){
   
die();
}

if((bool)$_GET['success']=== 'false'){

   
echo 'Transaction cancelled!';
   
die();
}

$paymentID = $_GET['paymentId'];
$payerId = $_GET['PayerID'];

$payment = Payment::get($paymentID, $paypal);

$execute = new PaymentExecution();
$execute->setPayerId($payerId);

try{
   
$result = $payment->execute($execute, $paypal);
}
catch(Exception $e){
   
die($e);
}
echo '支付成功!感谢支持!';

好了。到这里一个简单的paypal支付的demo其实已经走通了。懂得支付原理之后、想要再你自己的项目里面进行更丰富的扩展、就去paypal的官方文档查看更多具体的开发项设置。包括交易明细的获取等等都是可以实现的。这里就不具体讲下去了。


来源:51CTO

相关文章
|
2天前
|
数据挖掘 编译器 PHP
PHP 8新特性解析及其对现代Web开发的影响
随着PHP 8的发布,这一广泛使用的服务器端脚本语言带来了一系列创新特性,旨在提升性能、增强语法的易用性以及支持最新的编程范式。本文将深入探讨PHP 8中的JIT编译器、联合类型、匹配表达式等关键特性,并通过实际案例分析它们如何优化代码结构、提高执行效率,并简化日常开发工作,从而全面评估PHP 8对现代Web开发实践的深远影响。
|
1天前
|
安全 算法 编译器
PHP 8的新特性及其对现代Web开发的影响
随着PHP 8的发布,这个广泛使用的服务器端脚本语言带来了一系列令人兴奋的更新和改进。本文将深入探讨PHP 8中引入的关键新特性,以及这些变化如何影响现代Web开发实践。我们将通过实际案例和性能数据来分析这些新特性的实际应用,为开发者提供升级和采纳新版本的见解。
|
1天前
|
安全 算法 编译器
PHP 8新特性及其对现代Web开发的影响
随着PHP 8的发布,这一广泛使用的编程语言带来了一系列激动人心的新特性,旨在提高性能、增加语言表现力并简化代码。本文将深入探讨PHP 8中引入的关键改进,包括JIT编译器、联合类型、匹配表达式、命名参数、错误处理机制等,以及这些新特性如何影响现代Web开发实践。我们将通过实际示例和案例分析,展示开发者如何利用这些新工具来构建更高效、可维护和安全的应用程序。
|
1天前
|
存储 安全 编译器
探索PHP 8的新特性及其对现代Web开发的影响
在PHP 8的发布中,开发者社区迎来了一场革新。这一版本不仅提升了语言的性能,还引入了多项新特性,旨在简化代码编写、增强类型安全和提升开发者体验。本文将深入探讨PHP 8的关键改进点,包括JIT编译器、联合类型、命名参数、匹配表达式等,并分析这些变化如何塑造未来的Web开发趋势。通过实际案例和技术解析,我们将展现PHP 8如何为现代Web应用开发带来前所未有的便利与高效。
|
6天前
|
安全 编译器 PHP
PHP 8:探索新特性及其对现代Web开发的影响
本文将深入探讨PHP 8版本中引入的新特性,以及这些更新如何影响现代Web开发的实践。我们将通过实际的代码示例和性能分析,展示PHP 8如何提升开发效率、加强安全性和增强应用性能,从而为开发者提供更优的编程体验。 【7月更文挑战第18天】
15 6
|
4天前
|
安全 Java 编译器
深入PHP 7新特性:性能优化与现代开发实践
【7月更文挑战第20天】本文将带领读者探索PHP 7带来的革新特性,重点讨论如何通过这些新功能来优化性能并适应现代开发需求。我们将从语言层面的改进谈起,逐步过渡到实际应用案例,旨在为开发者提供实用指南和最佳实践,以便充分利用PHP 7的强大功能。
|
6天前
|
数据库
基于PHP+MYSQL开发制作的趣味测试网站源码
基于PHP+MYSQL开发制作的趣味测试网站源码。可在后台提前设置好缘分, 自己手动在数据库里修改数据,数据库里有就会优先查询数据库的信息, 没设置的话第一次查询缘分都是非常好的 95-99,第二次查就比较差 , 所以如果要你女朋友查询你的名字觉得很好 那就得是她第一反应是查和你的缘分, 如果查的是别人,那不好意思,第二个可能是你。
21 3
|
5天前
|
安全 编译器 API
探索PHP 8的新特性及其对现代Web开发的影响
随着PHP 8的发布,这一广泛使用的服务器端脚本语言迎来了重大升级。本文将深入探讨PHP 8引入的关键新特性,包括JIT编译器、联合类型、命名参数、匹配表达式等,以及这些特性如何提升性能、增强类型安全和改善开发者体验。同时,我们将分析这些变化对于现代Web开发实践的具体影响,以及它们如何塑造了PHP的未来发展方向。
9 1
|
5天前
|
安全 编译器 测试技术
PHP 8新特性解析及其对现代Web开发的影响
本文将深入探讨PHP 8中引入的关键新特性,包括JIT编译器、联合类型、命名参数、匹配表达式等,并分析这些变化如何优化现代Web开发流程。通过实例演示和性能比较,揭示升级至PHP 8的益处与挑战,为开发者提供升级决策的参考依据。
9 0
|
9天前
|
算法 安全 编译器
PHP 8的新特性及其对现代Web开发的影响
在数字时代的浪潮中,PHP作为一门历史悠久的服务器端脚本语言,一直在不断地进化以适应新的编程挑战。本文将深入探讨PHP 8的最新特性,包括JIT编译器、联合类型、命名参数、匹配表达式等,并分析这些新特性如何优化代码、提升性能和增强安全性。通过实际案例,我们还将展示PHP 8如何影响现代Web开发的实践,以及开发者如何利用这些新工具来构建更快、更可靠、更易于维护的应用。