开发前准备

在我的博客中 有介绍如何获取ID 和 secret ;

好了 在上一篇博客中详细介绍了也不少;

跨境网上收款 找PayPal没错(如何获取ID 和 secret)

http://blog.csdn.net/qiandublog/article/details/52809731

那么我们在这里就不废话了。

直接上Demo;

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

    <!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>支付页面</title>
</head>
<body>
<div>
<form action="checkout.php" method="post" autocomplete="off">
<label for="item">
产品名称
<input type="text" name="product">
</label>
<br>
<label for="amount">
价格
<input type="text" name="price">
</label>
<br>
<input type="submit" value="去付款">
</form>
</div>
</body>
</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自行定义 如果是本地是 localhost/后面的看你自己的代码位置pay.php的位置 写到文件夹的位置就可以
    //创建支付对象实例
    $paypal = new \PayPal\Rest\ApiContext(
    new \PayPal\Auth\OAuthTokenCredential(
    '你的Client ID'
    '你的secret'
    )
    );
  • 接下来就来实现表单中提交的处理文件 checkout.php。代码内容如下:
<?php
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没错(php如何实现paypal支付)的更多相关文章

  1. 跨境网上收款 找PayPal没错(获取Client ID 和 secret)

    原文地址:http://blog.csdn.net/qiandublog/article/details/52809731 只需一个PayPal账户,全球1.9亿网购买家触手可得 不管您有没有网站,拥 ...

  2. Python3+Django2集成PayPal(贝宝)跨境支付三方接口以及订单查询和退款业务

    原文转载自「刘悦的技术博客」https://v3u.cn/a_id_157 如果您所在的公司涉及外贸或者跨境支付业务,那一定听说过大名鼎鼎的PayPal,总的来说,PayPal在跨国贸易里的优势还是比 ...

  3. Payssion,海外本地支付_海外本地收款_小语种本地支付_外贸收款_外贸网店收款_欧洲本地支付_俄罗斯本地支付_巴西支付_跨境支付_PAYSSION,让跨境支付更轻松!

    Payssion,海外本地支付_海外本地收款_小语种本地支付_外贸收款_外贸网店收款_欧洲本地支付_俄罗斯本地支付_巴西支付_跨境支付_PAYSSION,让跨境支付更轻松!       首页 / 关于 ...

  4. Paypal、Stripe、Braintree,跨境电商金流第三方支付该用哪家?

    在台湾做跨境电子商务生意,电商网站的金流肯定是一个最大的麻烦,Paypal或是Stripe和Braintree则是国际上大家最常用的金流整合第三方支付服务商.这些金流服务大幅简化网站付费过程,都让消费 ...

  5. Jmeter获取Cookie并传递到下一个线程---跨线程后cookie找不到了

    网上找了一堆文章没有一个是实际操作的,自己边试边查边摸索终于找到了一个全套的办法. 原创文章,转载请说明出处. 1.取得cookie 直接这样写就可以了${COOKIE_JSESSIONID},当然具 ...

  6. PJzhang:一站式跨境卖家网址导航Amz520.com

    猫宁!!! 参考链接:http://www.guxiaobei.com/amz520-release.html www.amz520.com是一个跨境电商导航站点,汇集了大量的高效信息,做这个站点花费 ...

  7. 小特跨境电商ERP桌面版 1.不止包括进销存 还能算毛利

    经过近几年跨境电商ERP的开发,加上对跨境电商行业的业务积累,开发出一套适合中小跨境电商公司使用的ERP软件.欢迎选购.支持目前流行的各大电商平台,如速卖通.敦煌网.亚马逊.Shopee.Wish等. ...

  8. 跨境B2B网站

    大家都在谈跨境电商,其实现在比较火的应该是跨境B2B网站,它被很多的业内人士所看好,并且也取得了很喜人的成绩,无论是经营方面还是品牌打造,都从多方向带动了行业的发展. 跨境B2B网站 一.从买方市场向 ...

  9. 支付宝开通海外退税 阿里腾讯暗战跨境O2O_21世纪网

    支付宝开通海外退税 阿里腾讯暗战跨境O2O_21世纪网 支付宝开通海外退税 阿里腾讯暗战跨境O2O

随机推荐

  1. Python开发之MySQL安装

    MySQL下载安装后再安装破解版本的Navicat图形化数据库工具即可.   安装python后.再进行如下操作(也可以安装好虚拟环境virtualenv 或者增强工具pip install virt ...

  2. Lucene 评分机制一

    1. 评分公式 1.1 公式介绍 这个公式是Lucene实际计算时使用的公式,是由原型公式推导而来 tf(t in d) 表示某个term的出现频率,定义了term t出现在当前document d的 ...

  3. 阿里OSS ajax方式 web直传

    部分js代码 send_request = function(){//这是从后台获取认证策略等信息. var htmlobj=$.ajax({url:root+"/service/polic ...

  4. 关于JEECMS套站工具的使用要点

      第一步:在[界面—资源]下面引入资源文件(js,css,img…) 第二步:在[界面—模板]下面将网站的入口页面写在[index]文件下 此时修改index页面中的 js,css,图片 的路径,路 ...

  5. 装配SpringBean(三)--XML方式实例

    前一篇文章中已经介绍了XML方式装配bean的方式,本文将综合这些方式举一个实例并进行测试,我会把所有类型的参数都放在同一个类中进行测试,下面是我的类结构: 上图是我画的一个基本结构,可以看出该类中有 ...

  6. Java内功修炼系列一代理模式

    代理模式是JAVA设计模式之一,网上设计模式相关的博文铺天盖地,参考它们有助于自己理解,但是所谓“尽信书不如无书”,在参考的同时也要思考其正确性,写博客也是为了记录自己理解知识点的思路历程和心路历程, ...

  7. Python爬虫笔记【一】模拟用户访问之webdriver用户登入——第三次(8)

    经过post方法之后,因为有动态的value值所以再此回到用webdriver的解决上,但是在下载图片上会打开新打开一个链接,导致与网页图片不同即验证码同步问题,没办法只能想了一个笨法子,网页截图,唉 ...

  8. python-web-下载所有xkcd漫画

    下载所有xkcd漫画 # downloads every single xkcd comic import requests,os,bs4 url='http://xkcd.com' # start ...

  9. Leetcode532.K-diff Pairs in an Array数组中的K-diff数对

    给定一个整数数组和一个整数 k, 你需要在数组里找到不同的 k-diff 数对.这里将 k-diff 数对定义为一个整数对 (i, j), 其中 i 和 j 都是数组中的数字,且两数之差的绝对值是 k ...

  10. tmux使用教程

    1.安装 2.操作 如何操作快捷键呢? 比如新建一个窗口的命令是:ctrl+b+c 那么,先按住ctrl不放,接着按下b键,然后ctrl和b键都完全松开后,再立马按下c键. 3.使用命令行 tmux ...