PHP实现PayPal支付对接
博主搭建成功链接:
充值中心
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支付对接相关推荐
- paypal支付对接相关问题总结
最近在做对接paypal支付的项目.项目的开发时间紧,但paypal开发者文档内容又很多,并且是英文的,这无疑增加了开发难度.有句古话,欲速则不达.因为对开发者文档理解不够,浪费了不少时间.接入心得总 ...
- PayPal支付对接
开发时间:2019-04-30 我的目标:在我们公司的海外网站上,接入PayPal支付,美国用户在线完成付款. 准备: (1)准备:公司注册信息(执照,注册号,法人等),法人信息(身份证,住址等) ( ...
- paypal 按钮支付对接及回调地址配置
因为公司要接入 paypal 支付方式,自己捣鼓搞了好久,都没弄好. 本次使用的是最简单的按钮配置,支付方式配置其实支持有很多种. 账号注册 这个就不讲了可以参考:这篇最详细 如果不想现在过去就用鼠标 ...
- paypal html5 支付,uniapp 对接 paypal支付 (h5,app端)
由于工作需要,需要对接国外的PayPal支付,前端框架用的又是UNIAPP,众所周知UNIAPP国内的生态环境还可以,但是到了国外嘛 嘿嘿 懂得都懂. uniapp app对接Paypal支付 作 ...
- paypal tp 对接_php对接“paypal/Checkout-PHP-SDK“支付流程
前言 公司一个网站项目有国外的用户给我们发邮件希望能用paypal支付,于是交给了我,我们这个项目两年前是有对接paypal通道的,但是一直没有开放,测试测了并不能完成付款流程. 看paypal官方是 ...
- java对接PayPal支付-自动续费功能
一. java对接PayPal支付(v2). 讲了PayPal v2:checkout-sdk 的对接过程 二. java对接PayPal支付 (添加物流跟踪信息). 讲了PayPal添加物流信息 的 ...
- java对接PayPal支付(v2)
java对接PayPal支付 我们公司最近开通了网上支付功能,国内选择对接支付宝和微信,国外选择对接paypal, 今天我先将paypal对接方式记录下来,后面会记录微信和支付宝(本人比较懒,微信和支 ...
- PayPal支付系统对接
第一步:在paypal官网申请注册一个paypal 商户号. https://www.paypal.com/signin 第二步:在paypal的开发者管理页面创建自己需要的APP,一般企业大多会创建 ...
- java 对接 paypal支付
码字不易,开源更不易,点赞收藏关注,多多支持 开源地址 paypal-demo: java 对接 paypal 的案例,下载项目,注册paypal账号,拿到秘钥,即可使用 效果图 准备环境 1.注册 ...
- PHP 对接paypal支付平台
对接paypal支付平台 [前言]:最近公司需要做一款海外股票的app,其中有需要购买会员权益的一个模块,这里需要国际类型的支付.支付宝及微信在国内比较活跃,国外的话可能不太理想,所以就用了paypa ...
最新文章
- Bootstrap select 多选并获取选中的值
- 【笔记】与Android酱的第一周
- 如何使用JavaScript漂亮地打印JSON?
- 《数据库原理与应用》(第三版)第9章 事务与并发控制 基础 习题参考答案
- [转]在VS中为C/C++源代码文件生成对应的汇编代码文件(.asm)
- cam350 不能打开光绘文件_电子设计工程CAM350光绘工艺的一般流程
- matlab guide 将matlab处理过的图片保存
- 动态规划——最大子数组和(Leetcode 53)
- ASP基础教程之ASP AdRotator 组件的使用
- 集合Collection以及泛型
- 对话|俞栋:在人工智能的很多应用场景,语音识别是一个入口
- HaspMap的新奇用法
- 抖音新特效:蚂蚁呀嘿安卓教程
- 最新b站后端源码,仅学习使用,请勿用于商业用途,如拿去非法使用与本人无关!
- 不会安装Maya的同学看过来,安装步骤详解
- Python学习笔记-基础篇
- LeetCode刷题-中心对称数
- 简单使用Easy Touch5摇杆控制物体移动
- redis安装教程和redis集群搭建--主从复制(读写分离)、中间人模式(主仆兼具、去中心化)、反客为主、哨兵模式,从实战出发的保姆级别教程
- 易扩展,易复用,封装axios