PAYPAL 完整开发API支付实例

PAYPAL支付的提交和接收都分为2种方式!这是网上很多人的博客资料都没有比较细致说明的。当初我在上面掉了一个大坑,苦不堪言。(公司要求是使用邮箱收款的方式,我自己不清楚看了帖子使用了APP的方式,即:和淘宝的一样,使用appkey、apptoken的方式)申请这个比较麻烦,需要填写很多的资料,而且审批也需要周期很久,所以直接使用邮箱收款的方式。

何为邮箱收款方式,PAYPAL上面可以直接注册个帐号,这个帐号就可以用来收钱。任何人,只要你的帐号上有钱,或者使用信用卡都可以在上面打钱。其实,说了这么多废话,就是想大家不要绕到坑里,这2种方式无非就是使用PAYPAL的类库SDK,或者是PDT与IPN的方式去验证。好了,废话不多说直接开始:

需要的了解的相关东西如下:

1)PAYPAL的与SERVICE交互的方式,有2种:PDT与IPN的方式;如图:

PDT如下(GET方式):

IPN(POST方式)如下:

相信看了上述图都已经了解,无非就是GET的方式(即:用户支付完成后直接跳转回来到商户网站,通过get的方式获取到对应参数,商户再与PAYPAL进行验证)与POST的方式(即:异步,用户支付完成后没有跳转回商户网站,PAYPAL通过POST的方式给商户网站获取到对应参数,商户网站再与PAYPAL进行验证)

2)对上述东西知道了之后,有了大致的了解,然后你需要去https://developer.paypal.com/developer/accounts/注册一个帐号在PAYPAL网站上,PAYPAL很友好的提供了SANDBOX方式,即:测试环境,这个专门给开发者测试用的,你注册了开发者帐号后,系统会自己给你开通2个测试帐号:一个是买家(xxx@youmail-buyer.com)一个是卖家帐号(xxx@youmail-facilitator.com),相应的注册流程,网上也很多帖子都说得很清楚,这里我就不在赘述了,自行百度。

如果你想使用APP的方式的话,可以在这个地方注册好你的APP,点击PHP(我的APP名字),然后上面就会有CLIENT ID 和 SECRET了,SECRET你需要点击show这个按钮,别找了半天找不到。^_^

3)有了帐号之后,就需要登录测试环境https://www.sandbox.paypal.com卖家帐号去设置你的相关资料;记得,帐号是开发者帐号上面的!

--你要设置的相关资料有:(这里再啰嗦下,如果登录老是找不到个人档案,你可以登录你开发者帐号试试,它们都是关联的。)

首先登录:->点击个人档案->即时付款通知习惯设定

->点击个人档案->网站付款习惯设定

上述的操作完成之后,你就可以开工了,去官网DOWLOADS对应的SDK;不过官网的手册全是英文的,对应的文档也很乱,想要最新的源码,你需要去官网下载,之前我就是下载了过时的DEMO,现在是17年3月份,导致一直跟PAYPAL验证失败!

这个是我找到的中文手册:https://www.paypal-biz.com/development/documentation/PayPal_IPN&PDT_Guide_V1.0.pdf

但是不要直接用上面的源码,已经用不了的!

开发者文档:https://developer.paypal.com/docs/

最后这里在强调下,PAYPAL都是通过表单提交的方式生成的订单的,当然APP的方式不用,可以直接用类库帮你生成表单提交;这里我贴上我的DEMO,是自定义表单:

* 生成支付代码

* @param array $order 订单信息

* @param array $payment 支付方式信息

*/

function get_code($config)

{

//测试 https://www.sandbox.paypal.com/cgi-bin/webscr

$deal_url = '<br /><form style="text-align:center;" id="form1" name="form1" action="https://www.paypal.com/cgi-bin/webscr" method="post" class="paypal">' .

"<input type='hidden' name='cmd' value='_xclick'>" .//告诉paypal该表单是立即购买

"<input type='hidden' name='business' value=''>" .//卖家帐号 也就是收钱的帐号

"<input type='hidden' name='item_name' value=''>" .//商品名称 item_number

"<input type='hidden' name='item_number' value=''>" .//物品号 item_number

"<input type='hidden' name='amount' value=''>" .// 订单金额

"<input type='hidden' name='currency_code' value='USD'>" .// 货币

"<input type='hidden' name='return' value=''>" .// 支付成功后网页跳转地址

"<input type='hidden' name='notify_url' value=''>" .//支付成功后paypal后台发送订单通知地址

"<input type='hidden' name='cancel_return' value=''>" .//用户取消交易返回地址

"<input type='hidden' name='invoice' value=''>" .//自定义订单号

"<input type='hidden' name='charset' value='utf-8'>" .// 字符集

"<input type='hidden' name='no_shipping' value='1'>" .// 不要求客户提供收货地址

"<input type='hidden' name='no_note' value=''>" .// 付款说明

"<input type='hidden' name='rm' value='2'>" .

"</form><br />

<script type='text/javascript'>function load_submit(){document.form1.submit()}load_submit();</script>";

return $deal_url;

}

提交给PAYPAL会生成一个页面,上面有你刚刚填写对应的订单信息;而且它集成手机端自适应的方式,会自动调整好页面,我就不贴图了,可以自己去试试:

填写好你的资料,帐号或者用信用卡支付都可以,确认完成后会提示你支付成功,10秒钟会自动返回!APP的方式是立即返回的!

返回就会有对应的地址了:

http://xxx.com/index.php/pay/paypal_url/houtai/amt=1.00&cc=USD&item_name=C14896341493008718&item_number=C14896341493008718&st=Pending&tx=6R903017GR561561Y

这个就是你PDT返回的地址,即通过GET的方式获取到参数跟PAYPAL验证!

废话不说,贴DEMO:

//获取 PayPal 交易流水号 tx

$tx = $_GET['tx'];

$pay_type =$this->db->GetOne("SELECT * from `@#_pay` where `pay_class` = 'paypal' and `pay_start` = '1'");

$pay_type_key = unserialize($pay_type['pay_key']);

$at_token = $pay_type_key['key']['val']; //your_pdt_identity_token

$partner = $pay_type_key['id']['val']; //支付商号

// Init cURL

$request = curl_init();

// Set request options

curl_setopt_array($request, array

(

// CURLOPT_URL => 'https://www.sandbox.paypal.com/cgi-bin/webscr',//测试

CURLOPT_URL => 'https://www.paypal.com/cgi-bin/webscr',//正式

CURLOPT_POST => TRUE,

CURLOPT_POSTFIELDS => http_build_query(array

(

'cmd' => '_notify-synch',

'tx' => $tx,

'at' => $at_token,

)),

CURLOPT_RETURNTRANSFER => TRUE,

CURLOPT_HEADER => FALSE//,

// CURLOPT_SSL_VERIFYPEER => TRUE,

// CURLOPT_CAINFO => 'cacert.pem',

));

// Execute request and get response and status code

$response = curl_exec($request);

$status = curl_getinfo($request, CURLINFO_HTTP_CODE);

// Close connection

curl_close($request);

// echo $status;

// var_dump($response);

if($status == 200 AND strpos($response, 'SUCCESS') === 0)

{

// Remove SUCCESS part (7 characters long)

$response = substr($response, 7);

// Urldecode it

$response = urldecode($response);

// Turn it into associative array

preg_match_all('/^([^=\r\n]++)=(.*+)/m', $response, $m, PREG_PATTERN_ORDER);

$response = array_combine($m[1], $m[2]);

// Fix character encoding if needed

if(isset($response['charset']) AND strtoupper($response['charset']) !== 'UTF-8')

{

foreach($response as $key => &$value)

{

$value = mb_convert_encoding($value, 'UTF-8', $response['charset']);

}

$response['charset_original'] = $response['charset'];

$response['charset'] = 'UTF-8';

}

// Sort on keys

ksort($response);

// Done!

}else{

echo 'pay fail curl';

die();

}

//下面是做对应的验证,验证payment_status 状态是否已支付,有人一直说这个状态是待接收的状态,这是因为你的开发者帐号那里设置了开启了待审核的状态,把它关掉即可(商家帐号->profile->setting->Payment Review->off)。

// var_dump($response);exit;

// check whether the payment_status is Completed

// check that txn_id has not been previously processed

// check that receiver_email is your Primary PayPal email

// check that payment_amount/payment_currency are correct

// process the notification

// assign posted variables to local variables

验证了以上对应参数,就可以数据库入库了做相应的操作。

接着就是异步的方式:具体代码就不贴了。验证方式类同,只不过是换了个地址,请你们自己去下载对应的源码在集成到自身网站即可;直接提供对应的SDK给你们自己去看吧,方法都大同小异;

注意的是:最好你的PHP是5.3以上的版本,而且也支持CURL等函数的支持,环境必须是线上的,本地的没办法拿到参数的哦!

中文接口文档地址:https://www.paypal-biz.com/development/documentation/PayPal_IPN&PDT_Guide_V1.0.pdf

IPN SDK:https://github.com/paypal/ipn-code-samples/blob/master/php/PaypalIPN.php

PDT SDK:https://github.com/paypal/pdt-code-samples

app源码方式 SDK如下:

通过composer(composer安装教程)下载PayPal-PHP-SDK,具体的composer.json如下:

{"require" : {"paypal/rest-api-sdk-php" : "1.7.4"},"repositories": {"packagist": {"type": "composer","url": "https://packagist.phpcomposer.com"}}
}
  • 切换至项目目录并执行composer install,PayPal-PHP-SDK安装完毕。
  • 因为PayPal-PHP-SDK里面的composer.json里面的require有psr/log,所以在在目录vendor下有三个文件夹:composer,paypal和psr。
  • 此时项目的目录结构如下,其中的app文件夹是下面实例化创建的文件夹。

这个我也是通过这位哥们写的博客安装的,很多人都采用这个方式开发,你们要看详细的例子这里有传送门,我就不重复造轮子了:http://blog.csdn.net/alexander_phper/article/details/52057524

以上就是最近我总结出来很全面的PAYPAL支付开发,相信从头看到尾你们自己去试一试折腾一下就知道了,网上很多博客自己都是没有去写出来,

或者没写很全,很多代码都过时了,还贴出来坑了不少人,我就是其中一员,希望分享出来这个案例,大伙开发少走弯路吧。

--请支持原创,转载请注明

2017.03.22晚22:32

注:这个是我当时刚好有做到支付功能顺便写的,17年写的,有些文章链接失效了也正常,官方文档肯定也会有所改版,但是万变不离其宗,支付流程是不变的,可以参考国内的一些主流支付:支付宝、微信,或一些第三方支付/也有一些封装好的包,可以通过composer安装使用即可。大体的流程都是一致的。无非就是 创建订单->调起支付->用户授权(扫码/账号密码/扫脸)->根据回调参数再提交支付授权->异步/同步通知->验证异步结果->订单支付成功.

还有就是,自己去折腾一遍就会了,发现有些童鞋加了微信之后,全然不知道所以然,百度GOOGLE都可以解决的问题,为何还如此麻烦,更让我哭笑不得的是,我告诉有些人详细的流程,却直接把代码扔给我,让我帮他调试,感情我是为了你发一毛钱的红包就要给你服务?所以把微信删除了,希望大家自己可以去多折腾技术,毕竟就算我帮你搞定了问题,你自己也掌握不了,此文章仅供参考,有些东西确实太久了,等忙完之后我再出一篇新的文章。

算是目前PAYPAL最全最完整的开发方式了相关推荐

  1. url.getinputsteam 获取不完整_年度营销方案合集,活动策划,规划推广,全内容完整套用告别加班...

    Hello大家好,我是帮帮.今天跟大家分享一组年度营销方案合集,活动策划,规划推广,全内容完整套用,告别加班. 为了让大家能更稳定的下载模板,我们又开通了全新下载方式(见文章末尾),以便大家可以轻松获 ...

  2. 全基因组完整数据实战

    一个人全基因组完整数据分析脚本 人全基因组分析一直是整个测序行业最重要的内容之一,随着各种测序仪性能的快速提升,人全基因组测序价格越来越便宜,周期越来越低,可以预见,即将有越来越多的人全基因组被测序出 ...

  3. 1.1 大数据简介-hadoop-最全最完整的保姆级的java大数据学习资料

    文章目录 1 hadoop-最全最完整的保姆级的java大数据学习资料 1.1 大数据简介 1.1.1 大数据的定义 1.1.2 大数据的特点 1.1.3 大数据的应用场景 1.1.4 大数据的发展趋 ...

  4. 华为p6电信版 android 4.5,华为P6电信版系统应用apk补全教程 完整EMUI

    现在要说的是华为P6电信版的系统应用apk补全教程,给你一个非阉割版的完整EMUI系统.大家应该都知道,电信定制版由于华为系统服务与电信的 定制APP功能重叠,语音助手.云同步.云端备份.手机找回等系 ...

  5. 区块链游戏项目(战舰游戏)基于layer2区块链技术,使用以太坊的solidity语言, 含全栈完整源码

    这里介绍一个基于区块链以太坊开发的战舰游戏项目.做这个项目的初衷是对layer2区块链技术的proof-of-concept.因此,本项目是一个可以在每一个人的电脑上面执行的demo.为了让大家也能执 ...

  6. 史上最全最完整,最详细,软件保护技术-程序脱壳篇-逆向工程学习记录

    title: 程序脱壳篇 date: {{ date }} tags: ['程序壳','程序脱壳篇'] categories: ['程序壳','程序脱壳篇'] excerpt: 壳是最早出现的专用加密 ...

  7. Upload-labs 1-21关 靶场通关攻略(全网最全最完整)

    Pass-01(前端验证) 因为是进行前端JS校验,因此可以直接在浏览器检查代码把checkFile()函数(即如下图红色框选中的函数)删了或者也可以把红色框改成true,并按回车,即可成功上传php ...

  8. 金庸群侠传之武林浩荡1.7全隐藏完整攻略流程(图文)

    连接:http://www.kuaihou.com/youxi/26036.html 小编在玩<金庸群侠传之武林浩荡>中成功通关多次,但由于打到的历练物品不一样,所以每次的历练方式也许都不 ...

  9. DZ论坛克米模板3.5版全解密+完整插件/教程

    正文: DZ论坛 克米模板3.5 全插件 搭建教程 本次分享的是DZ论坛最新克米设计模板最新版本+3.5新版十七大插件 1.先安装DZ论坛,php最低要求5.3最高7.4 2.下载好后直接上传根目录解 ...

  10. autojspro常用的代码和公共函数搜集整理,史上最全最完整,不看后悔一辈子

    /*** 整理者: 家* 日期: 20190224* 妈呀: 整理了一宿,现在是早上6:34* 功能: 把某些常用的函数集中起来,方便调用* 函数来源: 都是群里的大佬写的,稻草人,+攀登,Ai,破晓 ...

最新文章

  1. “华为云杯”2020深圳开放数据应用创新大赛线上推介会成功举办,让深圳大数据在全球“跑”起来...
  2. 构建云安全架构的技巧
  3. debian7get源,自动设置get源
  4. 区块链的技术——账本是去中心化的分布式存储,加密+校验(哈希二叉树)+多数选举来防止篡改...
  5. C++ STL--stack/queue 的使用方法
  6. pep3评估报告解读_quot;聚焦慢病、助力医改,检验项目风险评估培训计划“大兴区第四期培训班成功举办...
  7. git 报错does not have a commit checked out
  8. 算法笔记_什么是数据结构_向量vector
  9. LIS最长上升子序列详解+模板(dp和二分做法)
  10. 机试:Python的代码模板、OJ技巧
  11. 高德地图根据关键词坐标拾取小工具
  12. Java处理图片和视频文件——视频抽帧与图片压缩
  13. Minecraft 1.16.5模组开发(三十三) 自定义3D方块
  14. 二进制部署Kubernetes v1.13.4 HA可选 1
  15. 初学Python-反射 装饰器 面向对象编程 异常处理 断言
  16. 如何用turtle画椭圆?
  17. (二) 数据挖掘之分类
  18. Exception encountered during context initialization - cancelling refresh attempt
  19. 干货分享,一个 IP 网段地址!Python
  20. 基于Matlab的多普勒脉冲雷达回波仿真

热门文章

  1. 网络广告CPS/CPC/CPV/CPM/CPA分别是什么意思
  2. ATLAS中文设置steam中文启动代码
  3. 关于LCR表和万用表测电容容值不一样的怪事
  4. fms2.0视频服务器系统,[FMS]adobe FMS(flash media server )服务器安装过程
  5. 搜狗泛站群之搜狗批量提交软件
  6. 清华大学计算机与科学系张荷花简历,清华大学软件学院
  7. 【导数术】10.导数数列不等式
  8. 可调稳压电源lm317实验报告_可调直流稳压电源实验报告 -
  9. 区块链开发语言python_区块链开发语言有哪些?哪种语言更适合区块链开发?
  10. clean code 读书笔记