PHPackages                             joseph-bing-han/omnipay-windcave - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Payment Processing](/categories/payments)
4. /
5. joseph-bing-han/omnipay-windcave

ActiveLibrary[Payment Processing](/categories/payments)

joseph-bing-han/omnipay-windcave
================================

Windcave (Payment Express) REST API driver for the Omnipay payment processing library

2.1.0(6mo ago)0224↑150%MITPHPPHP ^8.1

Since Nov 6Pushed 6mo agoCompare

[ Source](https://github.com/joseph-bing-han/omnipay-windcave)[ Packagist](https://packagist.org/packages/joseph-bing-han/omnipay-windcave)[ Docs](https://github.com/joseph-bing-han/omnipay-windcave)[ RSS](/packages/joseph-bing-han-omnipay-windcave/feed)WikiDiscussions master Synced 1mo ago

READMEChangelog (1)Dependencies (8)Versions (2)Used By (0)

Omnipay Windcave (Maintained fork)
----------------------------------

[](#omnipay-windcave-maintained-fork)

This is a maintained fork of the Windcave REST API driver for Omnipay, published as `joseph-bing-han/omnipay-windcave`.
It keeps the original PHP namespace `Omnipay\Windcave` for maximum compatibility.

Why this fork?

- Visa 3DS requirement: at least one of Cardholder Email Address or Cardholder Phone Number must be provided during authentication.
- The library enforces this rule at session creation time by requiring at least one of email or phone to be supplied.

References:

- Packagist: `https://packagist.org/`
- Windcave REST 3DS fields: `https://www.windcave.com/developer-e-commerce-api-rest#3DSecure_Fields`
- Windcave PxPay required fields: `https://www.windcave.com/developer-e-commerce-hosted-pxpay#Required_Fields`

### Install

[](#install)

```
composer require joseph-bing-han/omnipay-windcave
```

### Basic Usage (Laravel / Omnipay)

[](#basic-usage-laravel--omnipay)

```
use Omnipay\Omnipay;
use Omnipay\Common\CreditCard;

// 网关初始化（示例）
$gateway = Omnipay::create('Windcave');
$gateway->setUsername('your-windcave-username');   // 商户号
$gateway->setApiKey('your-windcave-api-key');      // API Key
$gateway->setTestMode(true);                       // 测试环境：uat，生产：sec

// 准备持卡人信息（推荐通过CreditCard提供Email/Phone）
$card = new CreditCard([
    'firstName' => 'John',
    'lastName'  => 'Doe',
    'number'    => '4111111111111111',
    'expiryMonth' => '12',
    'expiryYear'  => '2030',
    'cvv'         => '123',
    'email'       => 'john@example.com', // 满足3DS要求的方式之一
    // 'billingPhone' => '+64-21-000-0000', // 或者提供电话号码
]);

// 创建会话（遵循3DS要求：至少提供邮箱或电话）
$request = $gateway->createSession([
    'amount'            => '10.00',
    'currency'          => 'NZD',
    'merchantReference' => 'ORDER-123456',
    'callbackUrls'      => [
        'approved'  => 'https://example.com/pay/callback?status=approved',
        'declined'  => 'https://example.com/pay/callback?status=declined',
        'cancelled' => 'https://example.com/pay/callback?status=cancelled',
    ],
    'card' => $card,

    // 也可通过参数直接提供（将覆盖CreditCard中的值）：
    // 'cardholderEmail' => 'john@example.com',
    // 'cardholderPhone' => '+64-21-000-0000',

    // 可选：关闭强制（不建议）
    // 'enforce3dsContact' => false,
]);

$response = $request->send();
if ($response->isSuccessful()) {
    // 成功创建会话
    $sessionId   = $response->getSessionId();
    $purchaseUrl = $response->getPurchaseUrl();
    // 将用户引导至 $purchaseUrl 完成支付
} else {
    // 处理错误
    // logger('Windcave createSession failed: '.$response->getMessage());
}
```

### Enforcing 3DS Contact

[](#enforcing-3ds-contact)

- The library validates cardholder contact on createSession: either email or phone must be present.
- By default it is enforced (`enforce3dsContact = true`). You can turn it off per request by passing `enforce3dsContact => false` (not recommended).

### Notes

[](#notes)

- Namespace remains `Omnipay\Windcave`, so existing integrations should keep working after switching the package name.
- For production, ensure you are using the `sec` environment by disabling test mode.
- Always provide at least one of email or phone to satisfy Visa 3DS.

###  Health Score

36

—

LowBetter than 82% of packages

Maintenance68

Regular maintenance activity

Popularity15

Limited adoption so far

Community11

Small or concentrated contributor base

Maturity43

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 68.8% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Unknown

Total

1

Last Release

187d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/ce0ace822e54a03c388b9e73fd5a316a39c1380596f4e9b756e0030a91896289?d=identicon)[Joseph Han](/maintainers/Joseph%20Han)

---

Top Contributors

[![sjohnston-digistorm](https://avatars.githubusercontent.com/u/174985771?v=4)](https://github.com/sjohnston-digistorm "sjohnston-digistorm (11 commits)")[![joseph-bing-han](https://avatars.githubusercontent.com/u/1439426?v=4)](https://github.com/joseph-bing-han "joseph-bing-han (2 commits)")[![bokanechase-digistorm](https://avatars.githubusercontent.com/u/147365195?v=4)](https://github.com/bokanechase-digistorm "bokanechase-digistorm (1 commits)")[![digistorm-developer](https://avatars.githubusercontent.com/u/1697554?v=4)](https://github.com/digistorm-developer "digistorm-developer (1 commits)")[![mokeeffe-digistorm](https://avatars.githubusercontent.com/u/141710247?v=4)](https://github.com/mokeeffe-digistorm "mokeeffe-digistorm (1 commits)")

---

Tags

paymentgatewaypaymerchantomnipaypayment expresswindcave

###  Code Quality

Static AnalysisPHPStan, Rector

Code StylePHP CS Fixer

Type Coverage Yes

### Embed Badge

![Health badge](/badges/joseph-bing-han-omnipay-windcave/health.svg)

```
[![Health](https://phpackages.com/badges/joseph-bing-han-omnipay-windcave/health.svg)](https://phpackages.com/packages/joseph-bing-han-omnipay-windcave)
```

###  Alternatives

[lokielse/omnipay-alipay

Alipay gateway for Omnipay payment processing library

587421.0k11](/packages/lokielse-omnipay-alipay)[omnipay/paymentexpress

Payment Express (DPS) driver for the Omnipay payment processing library

261.6M13](/packages/omnipay-paymentexpress)[sudiptpa/omnipay-nabtransact

National Australia Bank (NAB) Transact driver for the Omnipay payment processing library.

1017.2k](/packages/sudiptpa-omnipay-nabtransact)[lucassmacedo/omnipay-mercadopago

MercadoPago gateway for OmniPay

154.6k](/packages/lucassmacedo-omnipay-mercadopago)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
