最近在做一个PHP外贸独立站,想集成PayPal在线支付,于是就想把PayPal做成一个插件。下面就教大家如何一步步来开发PayPal整个流程,有需要的朋友点赞收藏,或下载本插件代码参考。
Paypal接口申请
- 必须是企业认证的帐号才能申请在线支付接口
- 申请网站接口,
- 会有sanbox沙箱模式(用于开发)和live生成环境模式以及对应的秘密。
- 会有sanbox测试付款帐号和测试收款帐号
PayPal接口方式
- REST API接口,方便直接curl到接口就行。推荐使用此方式。
- SDK。必须安装SDK组件,用其自带方法
截图:
开发者中心看到的key也是一样的。
Paypal相关网址
- paypal网址: https://www.paypal.com/ .
- paypal开发者网址: https://developer.paypal.com/developer/accounts/.
- paypal测试账号登录网址: https://www.sandbox.paypal.com/ .
- 接口手册网址: https://developer.paypal.com/api/rest/
- PHP SDK GIT地址: https://github.com/paypal/Checkout-PHP-SDK .
- 官方客服网址: https://www.paypal-support.com/s/?language=zh_CN .(这里登录用paypal正式账号,登录之后联系我们可以提问,回复很慢但是问题都会回答)
PayPal集成思路流程
这里大概叙述一下流程:
- 接口获取
access_token
,后续所有地址都需要这个参数 用clientId
和CLIENT_SECRET
去获取
接口:/v1/oauth2/token - 接口预生成订单,获取支付链接,这里注意参数一定要带回调地址
return_url
,当到第4步用户完成支付后会跳回到return_url
这个地址
接口:/v2/checkout/orders - 跳转支付,在预支付返回数据中,
rel
为payer-action
链接为跳转支付。 - 支付后会跳回自己给的回调地址
return_url
,url上会带上2个参数:token
和PayerID
,token就是订单id,再次调用接口确认支付完成
接口:/v2/checkout/orders/{id}/capture
这个id是上一个生成订单接口返回的参数id
,同时回调回来的url上参数token
也是这个 - 处理自己的付款完成的订单相关逻辑
步骤截图:
预支付返回数据。
对应restful API key详情下有对应的收款方的帐号和密码。
用sanbox accounts下的帐号去登陆支付。
下面是Sanbox测试的付款帐号,分个人和企业,点击去有登陆的密码。
源码实现:
##PHP Paypal支付插件源码:https://www.uihtm.com/other/19755.html
return [
'ClientID' => [
'title' => 'ClientID',
'type' => 'text',
'value' => '',
'tip' => 'Client ID,贝宝开发者平台 https://developer.paypal.com/developer/applications'
],
'Secretkey' => [
'title' => 'Secretkey',
'type' => 'text',
'value' => '',
'tip' => '贝宝开发者平台Secret'
],
'Model' => [
'title' => '模式',
'type' => 'radio',
'options' => [
'Sandbox' => 'Sandbox',
'Live' => 'Live'
],
'value' => 'Sandbox'
]
];
class PaypalPlugin extends Plugin
{
public $info = [
'name' => 'Paypal',//插件英文名,改成你的插件英文就行了
'title' => 'Paypal支付插件',
'description' => 'Paypal支付插件',
'status' => 1,
'author' => 'Ayumi QQ:44784009',
'version' => '1.0',
'author_url' => 'https://www.uihtm.com/other/19755.html'
];
public $hasAdmin = 1;//插件是否有后台管理界面
// 插件安装
public function install()
{
return true;//安装成功返回true,失败false
}
// 插件卸载
public function uninstall()
{
return true;//卸载成功返回true,失败false
}
}