adonis-paypal 是一个针对 AdonisJS 框架设计的 PayPal API 功能实现包,可以方便地在 Node.js 应用中实现 PayPal 的支付和付款功能。本文将介绍 adonis-paypal 的安装和使用方法,以及一些常见问题的解决方案。
安装
要使用 adonis-paypal,需要先在 Node.js 环境中安装 AdonisJS 框架。AdonisJS 的安装方法可以参考官方文档:https://adonisjs.com/docs/4.1/installation
安装好 AdonisJS 之后,可以使用 npm 直接安装 adonis-paypal:
npm install adonis-paypal --save
使用
在 AdonisJS 应用中启用 adonis-paypal,需要在 start/app.js
文件中添加以下代码:
-- -------------------- ---- ------- ----- --------- - - ---------------------------------------- - ----- ------------ - - ------------------------------------------ - ----- ------- - - ------- ---------------------- - -- --- ----- -------------- - - -- --- ------------------------------- ----------------------------- ---------------------------- ------------------------ - -- --- ----- --------------- - - ----- ------------------------ - -- --- -------------- - - ---------- ------------- -------- -------- - --------------- --------------- ---------------- --------------- - -- --- -
然后在需要使用 PayPal 功能的地方,可以使用下面的代码引入 adonis-paypal 的 PayPal 类:
const Paypal = use('Adonis/Addons/Paypal')
实现支付
在 AdonisJS 应用中使用 adonis-paypal 实现 PayPal 的支付功能,需要依次完成以下步骤:
初始化 PayPal
在使用 PayPal 的任何功能前,需要先初始化 PayPal 客户端。可以通过调用
Paypal.init()
方法来实现:await Paypal.init()
如果不需要在初始化时指定其他配置参数,可以省略 init() 方法的参数。
创建订单
通过
Paypal.order()
方法可以创建一个订单。order() 方法的参数是订单的详细信息,包括订单的总金额、付款方式等。const order = await Paypal.order({ amount: '10.00', currency: 'USD', description: 'Test Order' })
创建订单成功后,会返回一个订单号
order.id
,将该订单号返回给客户端即可让客户端使用 PayPal 完成支付。付款
客户端支付成功后,可以通过调用
Paypal.pay()
方法来完成付款:-- -------------------- ---- ------- ----- ------- - ----- ------------ ------- ------- ------ - --------------- -------- -- ------------- -- ------- - ------ -------- --------- ----- -- ------------ ----- -------- --- -------------- - ----------- -------------------------------- ----------- ------------------------------ - -- ---------
在支付成功后,可以通过读取
payment.state
属性来获取付款状态,如果该属性的值是approved
,那么说明付款已经成功。查看付款详情
可以通过调用
Paypal.details()
方法来查询付款的详细信息:const details = await Paypal.details(payment.id)
实现退款
通过 adonis-paypal 实现退款功能,需要依次完成以下步骤:
初始化 PayPal
与实现支付功能一样,退款前也需要先初始化 PayPal 客户端:
await Paypal.init()
创建退款
通过调用
Paypal.refund()
方法来创建一个退款。refund() 方法的参数是退款的详细信息,包括退款的金额等。const refund = await Paypal.refund({ amount: { total: '10.00', currency: 'USD' }, description: 'Test Refund' }, payment.id)
创建退款后,可以通过读取
refund.state
属性来获取退款状态。如果该属性的值是completed
,那么说明退款已经成功。
常见问题解决方案
SSL 认证问题
如果在使用 PayPal API 的过程中遇到 SSL 认证错误,可以通过在创建 PayPal 实例时指定 ssl: true
参数来忽略 SSL 错误:
const Paypal = new PayPal({ client_id, client_secret, mode: 'sandbox', ssl: true })
示例代码
-- -------------------- ---- ------- ----- ----- - ------------ ----- ------ - --------------------------- -------------- -- - ------------------------- ----- -- ------- -- -- - --- - ----- - ------- -------- - - ------------- ----- ------------- ----- ----- - ----- -------------- ------- --------- ------------ ----- ------ -- ------ -------- - ----- ------- - -------------------- - -- ---------------------------- ----- -- -------- -------- -- -- - --- - ----- --------- - -------------------------- ----- ------------ - ---------------------- ----- -------------- - ------------------------ ----- ------------- ----- ------- - ----- ------------------------- --------------- -- -------------- --- ----------- - -------------------- ---------- ------ -------- --------- - ---- - -------------------- --------- ------ -------- -------- - - ----- ------- - -------------------- - -- --------------------------- -- -------- -------- -- -- - -------------------- ----------- ------ -------- ---------- -- ---------------------------- ----- -- ------- -- -- - --- - ----- - ---------- ------- -------- - - ------------- ----- ------------- ----- ------ - ----- --------------- ------- - ------ ------- -------- -- ------------ ----- ------- -- ---------- -- ------------- --- ------------ - ------------------- ---------- ------ ------- --------- - ---- - ------------------- --------- ------ ------- -------- - - ----- ------- - -------------------- - -- -------------------
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/600671d430d0927023822a1b