博主搭建成功链接:

充值中心

paypal用户账号密码(密码最后一位是个点):

sb-koedx14427358@personal.example.com

yXm2upL.

Paypal开发者模式注册地址:

PayPal Developer

注册成功后会有黑箱测试程序的clientId和clientSecret:

获取paypal的黑箱用户支付账户和商家账号:

获取账号对应的登录密码:(用户支付时使用,商家查询明细时使用)

知道了这些信息后,接线来就是码农的ShowTime:

百度出来的PHP都需要用到composer来加载依赖,博主这边使用了后已经将vendor的所有资源整合在一起了,通过文章的下载链接即可部署使用,无需安装composer.。如果你要使用composer来实现,只需要将composer.json文件改为以下内容即可:

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

然后运行:composer install 执行即可

博主使用的PHP中的CI框架,文件夹格式如下:

Paypal.php代码:

<?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;
use Illuminate\Http\Request;
use PayPal\Api\Refund;
use PayPal\Api\ExecutePayment;
use PayPal\Api\PaymentExecution;
use PayPal\Exception\PayPalConnectionException;
use PayPal\Api\Sale;
use PayPal\Rest\ApiContext;
use PayPal\Auth\OAuthTokenCredential;defined ( 'BASEPATH' ) or exit ( 'No direct script access allowed' );
require "vendor/autoload.php"; //载入sdk的自动加载文件class Paypal extends CI_Controller {const clientId     = 'AfP_eC9BY2YgnxxsimyfautHLoLL0g0nzB1nKv7PoenlbCIroaypXresiVIlZNe4pTAYD3DvIoU7UYid';const clientSecret = 'EBKB53uJ0lrCgspuFOMbODcwso1PiKVFWDFrG7tmWluFyzBktmC-3I7YgXlSLAp0g_IDHjeVld9UwAcd';const Currency     = 'USD';//币种const accept_url   = 'http://pay.tongfawuye.com/paypal/paypal_recharge';//回调地址const success_url   = 'http://pay.tongfawuye.com/demo/pay';//支付成功后返回地址protected $PayPal;function __construct(){parent::__construct(false);$this->load->model('Pay_log_model');$this->PayPal = new ApiContext(new OAuthTokenCredential(self::clientId,self::clientSecret));//黑箱模式下请屏蔽此行代码,生产环境放开即可//$this->PayPal->setConfig(['mode' => 'live']);}/*** 手机端网页支付*/public function paypal_detail(){$amount = (float)$this->input->get('amount');$phone = $this->input->get('phone');$address = $this->input->get('address');//插入支付日志$pay_log = array();$pay_log['pay_user'] = $phone;$pay_log['name'] = $address;$pay_log['amount'] = $amount;$pay_log['pay_mode'] = 3;$pay_log['add_time'] = time();$pay_log['add_time_ymd'] = date("Y-m-d H:i:s");$this->Pay_log_model->save($pay_log);$log_id = $pay_log['log_id'];$product     = $address;$description = $address;$paypal      = $this->PayPal;$total       = $amount;//总价$shipping = 0;$order = '1001'.date("YmdHis").$log_id;$payer = new Payer();$payer->setPaymentMethod("paypal");$item = new Item();$item->setName($product)->setCurrency(self::Currency)->setQuantity(1)->setPrice($total);$itemList = new ItemList();$itemList->setItems([$item]);$details = new Details();$details->setShipping($shipping)->setSubtotal($total);$amount = new Amount();$amount->setCurrency(self::Currency)->setTotal($total)->setDetails($details);$transaction = new Transaction();$transaction->setAmount($amount)->setItemList($itemList)->setDescription($description)->setInvoiceNumber(uniqid());$redirectUrls = new RedirectUrls();$redirectUrls->setReturnUrl(self::accept_url."?success=true&paymemtRecordID=$log_id&orderId=$order&amount=$total")->setCancelUrl(self::accept_url."?success=false&paymemtRecordID=$log_id&orderId=$order&amount=$total");//$redirectUrls->setReturnUrl(self::success_url)->setCancelUrl(self::cancel_url);$payment = new Payment();$payment->setIntent('sale')->setPayer($payer)->setRedirectUrls($redirectUrls)->setTransactions([$transaction]);try {$payment->create($paypal);} catch (PayPalConnectionException $e) {log_message('error', "POST:" . print_r($e, true));echo $e->getData();die();}$approvalUrl = $payment->getApprovalLink();header ( 'Location: '.$approvalUrl );}/*** 回调* @param Request $request* @return void*/public function paypal_recharge() {log_message('error', "GET:" . print_r($_GET, true));$tPaymentRecordId = trim($_GET['paymemtRecordID']);$appOrderNO       = trim($_GET['orderId']);//业务逻辑,查询订单表$success = trim($_GET['success']);if ($success == 'false' && !isset($_GET['paymentId']) && !isset($_GET['PayerID'])) {echo '取消付款';log_message('error', "paypal 取消付款");return;}$paymentId = trim($_GET['paymentId']);$PayerID   = trim($_GET['PayerID']);if (!isset($success, $paymentId, $PayerID)) {log_message('error', "paypal 支付失败");echo '支付失败';return;}if ((bool)$_GET['success'] === 'false') {$log = '支付失败,支付ID【' . $paymentId . '】,支付人ID【' . $PayerID . '】';log_message('error', "paypal 支付失败 $log");echo $log;return;}$payment = Payment::get($paymentId, $this->PayPal);$execute = new PaymentExecution();$execute->setPayerId($PayerID);try {$payment->execute($execute, $this->PayPal);} catch (\Exception $e) {$log = '支付失败,支付ID【' . $paymentId . '】,支付人ID【' . $PayerID . '】';log_message('error', "paypal 支付失败 $log");return;}$log = '支付成功,支付ID【' . $paymentId . '】,支付人ID【' . $PayerID . '】';log_message('error', "paypal 支付成功 $log");//支付成功的后续操作$pay_log = $this->Pay_log_model->get_info($tPaymentRecordId);if(!empty($pay_log)){if($pay_log['pay_status'] == 0){//修改支付状态$log_data = array('pay_status'=>1,'trade_no'=>$appOrderNO,'pay_trans_id'=>$paymentId,'pay_code'=>$success);$this->Pay_log_model->save($log_data, $tPaymentRecordId);}}//跳转支付成功后的地址,看业务header("Location: ".self::success_url);exit;}/*** 回调* @param Request $request* @return void*/public function paypal_recharge_notify() {log_message('error', "GET:" . print_r($_GET, true));echo("success");exit;}
}

页面上去访问链接即可跳转到paypal支付页面:http://localhost/paypal/paypal_detail?amount=XX&phone=XX&address=XX

至于数据库和model等的实现可以看我之前的文章:

PHP支付宝手机网页和PC网页支付对接_我是小木木的博客-CSDN博客

PHP微信支付JSAPI网页支付Native原生支付_我是小木木的博客-CSDN博客_php 微信native支付

vendor文件资源下载链接:

PHP对接PayPal支付composer生成的vendor所有文件夹-PHP文档类资源-CSDN下载

PHP实现PayPal支付对接相关推荐

  1. paypal支付对接相关问题总结

    最近在做对接paypal支付的项目.项目的开发时间紧,但paypal开发者文档内容又很多,并且是英文的,这无疑增加了开发难度.有句古话,欲速则不达.因为对开发者文档理解不够,浪费了不少时间.接入心得总 ...

  2. PayPal支付对接

    开发时间:2019-04-30 我的目标:在我们公司的海外网站上,接入PayPal支付,美国用户在线完成付款. 准备: (1)准备:公司注册信息(执照,注册号,法人等),法人信息(身份证,住址等) ( ...

  3. paypal 按钮支付对接及回调地址配置

    因为公司要接入 paypal 支付方式,自己捣鼓搞了好久,都没弄好. 本次使用的是最简单的按钮配置,支付方式配置其实支持有很多种. 账号注册 这个就不讲了可以参考:这篇最详细 如果不想现在过去就用鼠标 ...

  4. paypal html5 支付,uniapp 对接 paypal支付 (h5,app端)

    由于工作需要,需要对接国外的PayPal支付,前端框架用的又是UNIAPP,众所周知UNIAPP国内的生态环境还可以,但是到了国外嘛  嘿嘿  懂得都懂. uniapp app对接Paypal支付 作 ...

  5. paypal tp 对接_php对接“paypal/Checkout-PHP-SDK“支付流程

    前言 公司一个网站项目有国外的用户给我们发邮件希望能用paypal支付,于是交给了我,我们这个项目两年前是有对接paypal通道的,但是一直没有开放,测试测了并不能完成付款流程. 看paypal官方是 ...

  6. java对接PayPal支付-自动续费功能

    一. java对接PayPal支付(v2). 讲了PayPal v2:checkout-sdk 的对接过程 二. java对接PayPal支付 (添加物流跟踪信息). 讲了PayPal添加物流信息 的 ...

  7. java对接PayPal支付(v2)

    java对接PayPal支付 我们公司最近开通了网上支付功能,国内选择对接支付宝和微信,国外选择对接paypal, 今天我先将paypal对接方式记录下来,后面会记录微信和支付宝(本人比较懒,微信和支 ...

  8. PayPal支付系统对接

    第一步:在paypal官网申请注册一个paypal 商户号. https://www.paypal.com/signin 第二步:在paypal的开发者管理页面创建自己需要的APP,一般企业大多会创建 ...

  9. java 对接 paypal支付

    码字不易,开源更不易,点赞收藏关注,多多支持 开源地址  paypal-demo: java 对接 paypal 的案例,下载项目,注册paypal账号,拿到秘钥,即可使用 效果图 准备环境 1.注册 ...

  10. PHP 对接paypal支付平台

    对接paypal支付平台 [前言]:最近公司需要做一款海外股票的app,其中有需要购买会员权益的一个模块,这里需要国际类型的支付.支付宝及微信在国内比较活跃,国外的话可能不太理想,所以就用了paypa ...

最新文章

  1. Bootstrap select 多选并获取选中的值
  2. 【笔记】与Android酱的第一周
  3. 如何使用JavaScript漂亮地打印JSON?
  4. 《数据库原理与应用》(第三版)第9章 事务与并发控制 基础 习题参考答案
  5. [转]在VS中为C/C++源代码文件生成对应的汇编代码文件(.asm)
  6. cam350 不能打开光绘文件_电子设计工程CAM350光绘工艺的一般流程
  7. matlab guide 将matlab处理过的图片保存
  8. 动态规划——最大子数组和(Leetcode 53)
  9. ASP基础教程之ASP AdRotator 组件的使用
  10. 集合Collection以及泛型
  11. 对话|俞栋:在人工智能的很多应用场景,语音识别是一个入口
  12. HaspMap的新奇用法
  13. 抖音新特效:蚂蚁呀嘿安卓教程
  14. 最新b站后端源码,仅学习使用,请勿用于商业用途,如拿去非法使用与本人无关!
  15. 不会安装Maya的同学看过来,安装步骤详解
  16. Python学习笔记-基础篇
  17. LeetCode刷题-中心对称数
  18. 简单使用Easy Touch5摇杆控制物体移动
  19. redis安装教程和redis集群搭建--主从复制(读写分离)、中间人模式(主仆兼具、去中心化)、反客为主、哨兵模式,从实战出发的保姆级别教程
  20. 易扩展,易复用,封装axios

热门文章

  1. IDEA中JDBC连接MYSQL数据库步骤超详细总结
  2. Postman下载与安装操作步骤(只有两步骤下载)
  3. matlab读取yuv420文件,基于matlab的YUV420播放器程序
  4. 音频管理工具- Realtek 高清音频管理器
  5. Python函数练习题
  6. 2018c语言二级选择题题库,计算机二级office题库选择题及答案
  7. java中将字符串转换为URL能解析的编码
  8. TAOCP-Reading-计算机程序设计艺术阅读-1-0
  9. UML用例图怎么画 有手就会
  10. java下载天地图数据,天地图离线地图,可指定经纬度范围