PHP 对接paypal支付平台

article/2025/11/6 10:37:35

对接paypal支付平台

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

  • 准备工作
    1.首先在paypal平台创建账号:https://www.paypal.com/c2/webapps/mpp/account-selection
    个人或企业更具自己需求注册对应的账号。
    2.在打开此网址创建app及修改默认两个沙箱账号的密码。https://developer.paypal.com/developer/applications创建app选择business.example.com这个账号。
    3.api请求示例接口地址:http://paypal.github.io/PayPal-PHP-SDK/sample/
    4.可以选择composer或者直接下载zip包,来获取sdk。网上有很多composer安装,这里直接放的是github地址:https://github.com/paypal/PayPal-PHP-SDK/releases

  • 直接开撸代码

<?php
/*** @author: xusir* @date: 2021/11/24* @createTime: 10:09 上午* @desc:*/
namespace Home\Controller;require_once "Modules/Lib/PayPal-PHP-SDK/autoload.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 PayPal\Api\PaymentExecution;
use PayPal\Exception\PayPalConnectionException;
use PayPal\Rest\ApiContext;
use PayPal\Auth\OAuthTokenCredential;class PayInfoController extends CommonController
{const clientId     = '';//app的Client IDconst clientSecret = '';//app的Secretconst Currency     = 'USD';//币种public static $accept_url   = '';//回调地址protected $PayPal;public function __construct() {self::$accept_url = "http://".$_SERVER['SERVER_NAME'].'/wxapp.php?s=/PayInfo/Callback';//地址$this->PayPal = new ApiContext(new OAuthTokenCredential(self::clientId,self::clientSecret));//设置线上还是沙箱模式$this->PayPal->setConfig([
//            'mode' => 'live','mode' => 'sandbox',]);}/*** @param mixed $arg1* @author xusir* @date: 2021/11/24* @createTime: 1:59 下午* @remark:* $product 商品* $price 价钱* $shipping 运费* $description 描述内容*/public function pay() {$request = I("request.");$interes_id = $request['interes_id'];$price = $request['price'];if(!$request['interes_id'] || !$request['price']){echo json_encode(['code'=>1,'msg'=>'参数不全']);exit;}$shipping = 0;$order = time().rand("1111,9999");//订单号$product     = '会员权益';$description = '会员权益';$paypal      = $this->PayPal;$total       = $price + $shipping;//todo 在paypal下单$payer = new Payer();$payer->setPaymentMethod('paypal');$item = new Item();$item->setName($product)->setCurrency(self::Currency)->setQuantity(1)->setPrice($price);$itemList = new ItemList();$itemList->setItems([$item]);$details = new Details();$details->setShipping($shipping)->setSubtotal($price);//todo paypal账户余额详情$amount = new Amount();$amount->setCurrency(self::Currency)->setTotal($total)->setDetails($details);$transaction = new Transaction();$transaction->setAmount($amount)->setItemList($itemList)->setDescription($description)->setInvoiceNumber(uniqid());//todo 设置回调地址$redirectUrls = new RedirectUrls();$redirectUrls->setReturnUrl(self::$accept_url . "&success=true&orderId=$order&interes_id=$interes_id")->setCancelUrl(self::$accept_url . "&success=false&orderId=$order");$payment = new Payment();$payment->setIntent('sale')->setPayer($payer)->setRedirectUrls($redirectUrls)->setTransactions([$transaction]);//异常获取try {$payment->create($paypal);} catch (PayPalConnectionException $e) {echo json_encode(['code'=>1,'msg'=>$e->getData()]);exit;}//返回paypal授权地址$approvalUrl = $payment->getApprovalLink();echo json_encode(['code'=>0,'msg'=>'success','url'=>$approvalUrl]);exit;}/*** 回调* @param Request $request* @return void*/public function Callback() {$success = trim($_GET['success']);if ($success == 'false' && !isset($_GET['paymentId']) && !isset($_GET['PayerID'])) {echo json_encode(['code'=>1,'msg'=>'支付失败','data'=>"取消付款"]);exit;}$paymentId = trim($_GET['paymentId']);$PayerID   = trim($_GET['PayerID']);if (!isset($success, $paymentId, $PayerID)) {echo json_encode(['code'=>1,'msg'=>"支付失败"]);exit;}if ((bool)$_GET['success'] === 'false') {echo json_encode(['code'=>1,'msg'=>'支付失败']);exit;}$payment = Payment::get($paymentId, $this->PayPal);$execute = new PaymentExecution();$execute->setPayerId($PayerID);try {$payment->execute($execute, $this->PayPal);} catch (\Exception $e) {echo json_encode(['code'=>1,'msg'=>$e->getData()]);exit;}//支付成功后业务处理逻辑echo json_encode(['code'=>0,'msg'=>'支付成功']);}}

在paypal返回的地址直接web访问就可以进行测试,测试账号填写沙箱的个人账号就可以支付,支付后登录后台就可以看到是否成功付款。
在这里插入图片描述

在这里插入图片描述


http://chatgpt.dhexx.cn/article/1LAlxpXw.shtml

相关文章

国内平台使用国外支付的可行性?

国内平台使用国外支付的情况&#xff1f; 产品做数据互通&#xff0c;H5与二维码海报作为入口。 个人中心&#xff0c;App下载做老用户入口转化。 用境外自动转化费率的支付&#xff0c;有朋友用过&#xff1f; 风控如何&#xff1f; 比如一些拼单项目&#xff0c;并不违规&…

跨境支付与业务流程介绍

跨境支付业务 跨境支付与人民币跨境支付的不同通俗的来讲&#xff0c;跨境支付就是中国消费者在网上购买国外商家产品或国外消费者购买中国商家产品时&#xff0c;由于币种的不一样&#xff0c;就需要通过一定的结算工具和支付系统实现两个国家或地区之间的资金转换&#xff0…

跨境第三方支付有什么,怎么进行跨境支付?

亚马逊收款银行账户一般是采用第三方收款平台提供的外汇账户。只需免费注册第三方收款平台账号即可获得亚马逊银行收款账号。常用的第三方收款平台&#xff0c;如派安盈Payoneer(通称p卡)。万里汇款Worldfirst(通称wf卡..LianLianPay(连续支付).PingPong支付(等)。这些第三方收…

海外支付大战

文章经授权转载自中国企业家杂志&#xff08;ID&#xff1a;iceo-com-cn&#xff09; 插画 | 郭埙 从支付服务链的角度来看&#xff0c;随着跨境贸易的繁荣&#xff0c;对外出口消费的需求增加&#xff0c;B端商户和C端用户都有巨大的市场潜力。 自2015年进入移动支付元年以来&…

Stripe支付,国外支付Stripe、跨境支付

好记星不如烂笔头&#xff0c;这里记录平时工作中用到的东西&#xff0c;不喜可以留言。 美国跨境支付stripe 测试说明&#xff0c;你需要办理至少一张国际信用卡&#xff0c; 比如visa、master、AE(American Express credit 卡)都可以&#xff0c;国内的银联卡不支持的。 eg:…

国外十大在线支付服务网站

1、 贝宝 贝宝&#xff08;PayPal&#xff09;是一个在1998年首次推出的在线支付服务。贝宝在全球200多个国家运营&#xff0c;支持26种货币&#xff0c;允许用户在网站上进行结帐。贝宝通过浏览器&#xff0c;应用程序或阅读器处理付款&#xff0c;并为客户提供信贷服务。 2、…

基于ASP.NET/C#开发国外支付平台(Paypal)学习心得。

最近一直在研究Paypal的支付平台&#xff0c;因为本人之前没有接触过接口这一块&#xff0c;新来一家公司比较不清楚流程就要求开发两个支付平台一个是支付宝&#xff08;这边就不再这篇文章里面赘述了&#xff09;&#xff0c;但还是花了2-3天的时间通过自己研究和借鉴别人的文…

国外支付(Paypal,Cybersource)

前言 Paypal是全球在线支付的领导者&#xff0c;2002年被eBay收购&#xff0c;2015年又戏剧性的从eBay分离&#xff0c;以500亿美元市值反超eBay。创始人 Elon Musk 同时是Paypal、空间探索技术公司、以及特斯拉汽车三家公司的CEO&#xff0c;电影“钢铁侠”的人物原型就是这哥…

第13章 管理身份和身份验证

13.1 控制对资产的访问 资产包括&#xff1a;信息&#xff0c;系统、设备、设施和人员。 •信息 组织的信息包括其所有数据。 数据可存储在服务器、计算机和较小设备上的简单文件中&#xff0c;还可存储在服务器场中的大型数据库中。 访问控制尝试阻止信息的未授权访问。 …

多视角人脸正面化生成综述:Multi-view Frontal Face Image Generation: A Survey

多视角人脸正面化生成综述&#xff1a;Multi-view Frontal Face Image Generation: A Survey 本文首发于极市平台 作者&#xff1a;宁欣1,2,3&#xff0c;南方哲2,3&#xff0c;许少辉2,3&#xff0c;于丽娜1&#xff0c;张丽萍1,2,3 单位信息&#xff1a;1、中国科学院半导体…

如何入门多视角人脸正面化生成?不得不看的超详细最新综述!

作者丨宁欣&#xff0c;南方哲&#xff0c;许少辉&#xff0c;于丽娜&#xff0c;张丽萍 审稿丨邓富城 编辑丨极市平台 导读 本文将重点对近些年来基于3D模型和深度学习模型的人脸正面化生成方法的主要进展和部分具有代表性的研究成果进行介绍&#xff0c;并通过实验对比和分析…

MYSQL错误:Error Code: 1175解决办法

MYSQL错误&#xff1a;Error Code: 1175解决办法 今天对视图进行更新&#xff0c;发现修改不了数据&#xff0c;报错如下&#xff1a; Error Code: 1175. You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column. To disabl…

关于error code 1175的成因和解决办法

事情起源于些课后习题p89页的操作 &#xff08;5&#xff09;在teacherinfo1表中&#xff0c;将性别为“男”的记录的家庭住址都改为“上海市浦东新区”。 update teacherinfo1 set tadress上海市浦东新区 where tcsex男; select *from teacherinfo1; 出现了以下截图的错误 …

洛谷P1175 表达式的转换(栈的应用)

洛谷 P1175 表达式的转换 链接. 难度&#xff1a;提高/省选- 标签&#xff1a;模拟&#xff0c;字符串&#xff0c;线性结构&#xff0c;栈 题意&#xff1a; 给定一个中缀表达式&#xff0c;让我们输出转化为后缀表达式后计算的每一步。 题解&#xff1a; 1.将中缀表达式…

如何解决MySQL Workbench中的错误Error Code: 1175

错误描述&#xff1a; 在MySQL Workbench8.0中练习SQL语句时&#xff0c;执行一条update语句&#xff0c;总是提示如下错误&#xff1a; Error Code: 1175. You are using safe update mode and you tried to update a table without a WHERE that uses a KEY columnTo disab…

1175:除以13

1175&#xff1a;除以13 时间限制: 1000 ms 内存限制: 65536 KB 提交数: 14671 通过数: 8802 【题目描述】 输入一个大于0的大整数N&#xff0c;长度不超过100位&#xff0c;要求输出其除以13得到的商和余数。 【输入】 一个大于0的大整数&#xff0c;长度不超过1…

MySQL报错Error Code:1175--删除/更新数据报错

Error Code: 1175. You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column. To disable safe mode, toggle the option in Preferences -> SQL Editor and reconnect. 因为MySQL运行在safe-updates模式下&#xff0c;该…

JAVA的技术方向

我大致把 JAVA 的复习分为如下几个方向。 JVM&#xff1b; 排序算法和 Java 集合&工具类&#xff1b; 多线程和并发包&#xff1b; 存储相关&#xff1a;Redis 、Elastic Search、MySQL&#xff1b; 框架&#xff1a;Spring&#xff0c;SpringMVC&#xff0c;Spring Bo…

【求职】好未来Java 方向面经

Java 方向面经 一面 2018/9/20 1、项目相关 2、接口和抽象类 3、spring aop ioc 4、场景题 5、手写二叉树镜像 6、Redis 7、数据库高负载怎么办 8、天池大数据比赛 二面 1、项目相关 2、手写两个出现两次的数 3、手写两个出现一次的数 4、想不想转大数据 一面 2…

学Java方向的学生如何找实习的工作?

是这个大三的学生,是学Java方向的,我想知道,实习的工作好找吗?应该会什么?目前会SE、EE,数据库MySQL、 sqlserver。sql语句也会,C语言,c++也会一点。可以用框架做增删改查。这样够了吗? 不好找。 某种意义上来讲,找实习比找工作还要难。 为什么? 你就会一点增删…