subscribo / omnipay-klarna
用于Omnipay支付处理库的Klarna驱动程序
Requires
- php: >=5.4
- omnipay/common: ^2.5.0
- subscribo/klarna-invoice-sdk-wrapped: ^1.1.0
- subscribo/omnipay-subscribo-shared: ^0.3.8
Requires (Dev)
- omnipay/tests: ^2.0.2
This package is not auto-updated.
Last update: 2024-09-28 18:05:14 UTC
README
用于Omnipay PHP支付处理库的Klarna驱动程序
Omnipay 是一个与框架无关的、支持多网关的PHP 5.3+支付处理库。此包实现了Omnipay的Klarna支持。
重要提示
- 这是一个正在进行中的不稳定版本。稳定版本尚未发布。
- 错误处理实现 使用以下启发式方法:如果抛出的
KlarnaException
代码小于0或大于1100,则假定它包含要显示给客户的 消息,否则假定是技术错误,并重新抛出异常。
要求
- PHP 5.4+
- Klarna API凭证
安装
通过 Composer 安装Omnipay Klarna驱动程序。要安装,请将其添加到您的 composer.json
文件
对于beta版本使用
{ "require": { "subscribo/omnipay-klarna": "^0.1.4" } }
对于开发版本使用
{ "require": { "subscribo/omnipay-klarna": "^0.1.*@dev" } }
当您想要使用feature分支Checkout时,使用
{ "require": { "subscribo/omnipay-klarna": "dev-feature/checkout", "klarna/checkout": "1.2", "subscribo/psr-http-message-tools": "~0.4.3" } }
更新composer.json后,运行composer update以更新您的依赖项
$ curl -s http://getcomposer.org/installer | php
$ php composer.phar update
如果您想运行在线测试,您还需要设置环境变量 KLARNA_MERCHANT_ID
和 KLARNA_SHARED_SECRET
,使用您的Klarna API测试凭证。这些也是docs/example/invoice中提供的示例(它们通常位于示例的12-13行附近,但您可以修改它们并不同样提供凭证)。
基本用法
此包提供以下网关
Klarna\Invoice
Klarna\Checkout
(仅在dev-feature/checkout分支中可用)
此包中的网关有以下必需选项
merchantId
sharedSecret
要获取这些,请联系您的Klarna代表。
此外,还可以指定以下选项
testMode
country
language
currency
您可以使用 setLocale()
方法一次性设置国家、语言和货币(对于支持的国家)。
有关 testMode
的含义,请参阅Omnipay的通用 文档
使用网关 Klarna\Invoice
网关 Klarna\Invoice
支持以下请求发送方法
authorize()
capture()
checkOrderStatus()
有关使用和预期参数,请参阅单元测试和示例代码
authorize()
您可以查看 官方文档 和相关链接以获取更多信息。
方法 authorize()
可以有一个参数数组作为其可选参数,或者参数可以通过返回的 InvoiceAuthorizeRequest
对象上的设置器来指定。
以下参数是必需的
merchantId
(可能从网关继承)sharedSecret
(可能从网关继承)country
(可能从网关继承)language
(可能从网关继承)currency
(可能从网关继承)卡片
项目
这些是可选参数
金额
transactionId
是orderId1
的别名orderId2
如果没有提供 amount
,则将其设置为 -1
,并使用 items
来计算金额。您可以使用 calculateAmount()
方法来检查此值。
卡片
客户个人和联系数据可以通过 card
参数或 setCard()
设置器方法发送,可以是数组的形式,也可以是扩展 Omnipay\Common\CreditCard
的 Subscribo\Omnipay\Shared\CreditCard
对象。
以下卡片参数可能被使用
个人参数
gender
用于 DE/AT/NLbirthday
用于 DE/AT/NLnationalIdentificationNumber
- 其他国家的个人号码;必要时也可用于公司号码
地址参数
电话
移动电话
名
姓
邮政编码
城市
country
公司
地址1
地址2
对于 DE/AT/NL,您可以将门牌号作为 address2
传递,对于其他国家,address2
简单地附加到 address1
上。
您还可以使用参数的发货变体传递不同的发货地址,例如 shippingFirstName
...
项目
购物车项目应通过 items
参数或 setItems()
设置器方法发送,可以是数组数组的格式,也可以是 Subscribo\Omnipay\Shared\Item
对象的数组或 Subscribo\Omnipay\Shared\ItemBag
对象。
以下项目参数可能被使用
name
(“标题”)identifier
(“货号”)数量
价格
taxPercent
(“增值税”)discountPercent
(“折扣”)标志
发送
当在 InvoiceAuthorizeRequest
对象上设置了所有必需的参数后,您可以调用其 send()
方法,以接收 InvoiceAuthorizeResponse
对象。
InvoiceAuthorizeResponse
对象有以下方法
isSuccessful()
- 等同于isAccepted()
isWaiting()
- 等同于isPending()
getInvoiceStatus()
getReservationNumber
getMessage()
getCode()
如果授权成功,您可以使用 getReservationNumber()
作为 capture()
网关调用的参数。如果授权正在等待,您可以使用 getReservationNumber()
作为后续 checkOrderStatus()
网关调用的参数。
错误和异常
如果授权被拒绝,getMessage()
应包含供客户显示的消息,而 getCode()
应包含异常代码编号。在技术错误的情况下,应抛出 KlarnaException
。
重要说明:在后台,对于技术错误和授权拒绝,都会抛出 KlarnaException
。但是,如果代码小于 0 或超过 1100,它将被转换为 InvoiceAuthorizeResponse
。有关更多详细信息,请参阅 https://developers.klarna.com/en/at+php/kpm/error-codes。
capture()
capture()
方法可以有一个参数数组作为可选参数,或者可以通过返回的 InvoiceAuthorizeRequest
对象上的设置器指定参数。
以下参数是必需的
merchantId
(可能从网关继承)sharedSecret
(可能从网关继承)country
(可能从网关继承)language
(可能从网关继承)currency
(可能从网关继承)预订号码
这些是可选参数
OCR号码
标志
transactionId
是orderId1
的别名orderId2
发送
当在InvoiceCaptureRequest
对象上设置所有必需参数后,您可以调用其方法send()
来接收InvoiceCaptureResponse
对象。
InvoiceCaptureResponse
对象有以下方法
isSuccessful()
- 等同于isAccepted()
getTransactionReference
是getInvoiceNumber()
的别名getRiskStatus()
getMessage()
getCode()
有关错误和异常处理,请参阅上面的错误和异常。
checkOrderStatus()
方法checkOrderStatus()
可能有一个参数数组作为其可选参数,或者参数可以通过返回的InvoiceCheckOrderStatusRequest
对象上的设置器指定。
以下参数是必需的
merchantId
(可能从网关继承)sharedSecret
(可能从网关继承)country
(可能从网关继承)language
(可能从网关继承)currency
(可能从网关继承)
其中之一是必需的
预订号码
invoiceNumber
orderId
或其别名transactionId
发送
当在InvoiceCheckOrderStatusRequest
对象上设置所有必需参数后,您可以调用其方法send()
来接收InvoiceCheckOrderStatusResponse
对象。
InvoiceCaptureResponse
对象有以下方法
isSuccessful()
- 等同于isAccepted()
isWaiting()
- 等同于isPending()
isDenied()
getOrderStatus()
getMessage()
getCode()
有关错误和异常处理,请参阅上面的错误和异常。
OrderIds
您可以在每个发票上设置两个自定义引用标识符 - orderId1
和orderId2
。对于InvoiceAuthorizeRequest
和InvoiceCaptureRequest
,参数transactionId
是orderId1
的别名。
您可以通过在InvoiceCheckOrderStatusRequest
中设置参数orderId
来搜索唯一的orderId(无论是orderId1还是orderId2)。在InvoiceCheckOrderStatusRequest
中,transactionId
是orderId
的别名。
示例代码
有关示例代码,请参阅
InvoiceWidget
InvoiceGateway
和InvoiceAuthorizeRequest
都具有方法getWidget()
,该方法返回InvoiceWidget
,其中包括以下方法(以及其他方法)
getDefaultParameters()
getRequiredParameters()
isRenderable()
render()
renderPaymentMethodWidget()
renderLogoUrl()
renderTooltip()
renderTermsInvoiceHtml()
renderTermsConsentHtml()
renderTermsAccountHtml()
类还包含以下静态方法
assemblePaymentMethodWidgetHtml()
assembleLogoUrl()
assembleTooltipHtml()
assembleTermsInvoiceObject()
assembleTermsConsentObject()
assembleTermsAccountObject()
assembleTermsConsentText()
assembleLoadJavascript()
assembleLoadTermsJavascript()
渲染方法的参数可以通过构造函数、设置器或作为参数数组的键传递。某些参数只能作为参数数组的键传递。
默认渲染方法render()
是renderPaymentMethodWidget()
的别名 - 部分付款/付款方法小部件的渲染
必需参数
merchantId
(可能从网关或InvoiceAuthorizeRequest
继承)country
(可能从网关或InvoiceAuthorizeRequest
继承)language
(可能从网关或InvoiceAuthorizeRequest
继承)price
(可能从InvoiceAuthorizeRequest
继承 -amount
或计算金额)
可选参数
charge
- "invoice-fee" - 格式为'0.95'
的数字字符串layout
- 参数数组键仅;如果不设置,默认值可能受color
参数影响width
- 参数数组键仅height
- 参数数组键仅style
- 参数数组键仅;容器<div>
的额外样式设置
有关其他渲染方法的用途和预期参数,您可以查看代码、示例代码、单元测试以及官方文档和相关链接。
一般说明
有关一般使用说明,请参阅主Omnipay仓库。
测试
进行测试需要安装开发依赖项
cd path/to/your/project cd vendor/subscribo/omnipay-klarna composer update
如果您想同时运行在线和离线测试,只需运行phpunit
。
如果您只想运行离线(不需要互联网连接)测试,运行phpunit tests/offline
如果您想运行在线测试,还需要设置环境变量KLARNA_MERCHANT_ID
和KLARNA_SHARED_SECRET
,使用您的Klarna API测试凭据。
支持
一般
如果您在使用Omnipay时遇到一般问题,我们建议在Stack Overflow上发帖。请务必添加omnipay标签,以便更容易找到。
如果您想保持与发布公告同步,讨论项目想法或提出更详细的问题,还有一个您可以订阅的邮件列表。
Omnipay Klarna驱动程序特定
如果您认为您发现了一个错误,请发送电子邮件(packages@subscribo.io)或使用GitHub问题跟踪器报告,或者最好是分支库并提交拉取请求。
链接
- Klarna开发者文档:https://developers.klarna.com
- Omnipay库网页:http://omnipay.thephpleague.com
- Omnipay库GitHub项目:https://github.com/thephpleague/omnipay