subscribo/omnipay-klarna

用于Omnipay支付处理库的Klarna驱动程序

v0.1.4 2016-06-30 17:29 UTC

README

用于Omnipay PHP支付处理库的Klarna驱动程序

主分支: 构建状态 功能Checkout分支: 构建状态

Omnipay 是一个与框架无关的、支持多网关的PHP 5.3+支付处理库。此包实现了Omnipay的Klarna支持。

重要提示

  • 这是一个正在进行中的不稳定版本。稳定版本尚未发布。
  • 错误处理实现 使用以下启发式方法:如果抛出的 KlarnaException 代码小于0或大于1100,则假定它包含要显示给客户的 消息,否则假定是技术错误,并重新抛出异常。

要求

安装

通过 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_IDKLARNA_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 (可能从网关继承)
  • 卡片
  • 项目

这些是可选参数

  • 金额
  • transactionIdorderId1 的别名
  • orderId2

如果没有提供 amount,则将其设置为 -1,并使用 items 来计算金额。您可以使用 calculateAmount() 方法来检查此值。

卡片

客户个人和联系数据可以通过 card 参数或 setCard() 设置器方法发送,可以是数组的形式,也可以是扩展 Omnipay\Common\CreditCardSubscribo\Omnipay\Shared\CreditCard 对象。

以下卡片参数可能被使用

个人参数

  • gender 用于 DE/AT/NL
  • birthday 用于 DE/AT/NL
  • nationalIdentificationNumber - 其他国家的个人号码;必要时也可用于公司号码

地址参数

  • 电话
  • 移动电话
  • 邮政编码
  • 城市
  • 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号码
  • 标志
  • transactionIdorderId1 的别名
  • orderId2
发送

当在InvoiceCaptureRequest对象上设置所有必需参数后,您可以调用其方法send()来接收InvoiceCaptureResponse对象。

InvoiceCaptureResponse对象有以下方法

  • isSuccessful() - 等同于 isAccepted()
  • getTransactionReferencegetInvoiceNumber()的别名
  • 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

您可以在每个发票上设置两个自定义引用标识符 - orderId1orderId2。对于InvoiceAuthorizeRequestInvoiceCaptureRequest,参数transactionIdorderId1的别名。

您可以通过在InvoiceCheckOrderStatusRequest中设置参数orderId来搜索唯一的orderId(无论是orderId1还是orderId2)。在InvoiceCheckOrderStatusRequest中,transactionIdorderId的别名。

示例代码

有关示例代码,请参阅

InvoiceWidget

InvoiceGatewayInvoiceAuthorizeRequest都具有方法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_IDKLARNA_SHARED_SECRET,使用您的Klarna API测试凭据。

支持

一般

如果您在使用Omnipay时遇到一般问题,我们建议在Stack Overflow上发帖。请务必添加omnipay标签,以便更容易找到。

如果您想保持与发布公告同步,讨论项目想法或提出更详细的问题,还有一个您可以订阅的邮件列表

Omnipay Klarna驱动程序特定

如果您认为您发现了一个错误,请发送电子邮件(packages@subscribo.io)或使用GitHub问题跟踪器报告,或者最好是分支库并提交拉取请求。

链接