mopalgen/paygen

此包最新版本(v1.0.2)的许可证信息不可用。

Paygen支付网关的PHP包

v1.0.2 2024-06-13 08:49 UTC

This package is not auto-updated.

Last update: 2024-09-19 13:12:30 UTC


README

安装

composer require mopalgen/paygen

然后在关闭 <head> 标签之前添加以下脚本

<script src="https://paygen.transactiongateway.com/js/v1/Gateway.js"></script>
<script src="https://paygen.transactiongateway.com/token/Collect.js"
        data-tokenization-key="PUBLIC_SECURITY_TOKEN_HERE"
        data-variant="inline"
></script>

然后在关闭 <body> 标签之前添加以下内容

用于Kount欺诈检测

<script>
    const gateway = Gateway.create('CHECKOUT_PUBLIC_SECURITY_TOKEN_HERE');
    const kount = gateway.getKount();

    kount.createSession().then((response) => {
        const transactionSessionId = response;

        let checkout = document.getElementById("checkout-form");
        let transactionSessionIdInput = document.createElement("input");
        transactionSessionIdInput.type = "hidden";
        transactionSessionIdInput.name = "transaction_session_id";
        transactionSessionIdInput.value = transactionSessionId;
        checkout.appendChild(transactionSessionIdInput);
    });

    // Listen for any errors that might occur
    gateway.on('error', function (e) {
        console.error(e);
    });
</script>

用于PayGen CollectJS配置

<script>
    document.addEventListener('DOMContentLoaded', function () {
        CollectJS.configure({
            'theme': 'material',
            'customCss': {
                'border-width' : '1px',
                'border-radius': '0.5rem',
                'border-color': '#d1d5db',
                'padding': '10px 40px 10px 10px',
                'height': '44px'
            },
            'invalidCss': {
                'border-color': '#f87171',
                'color': '#f87171',
            },
            'validCss': {
                'border-color': '#22c55e',
            },
            'focusCss': {
                'border-color': '#1d4ed8',
                'border-width': '2px'
            },
            'paymentSelector' : '#card-pay-button',
            'fields': {
                'ccnumber': {
                    'placeholder': '0000 0000 0000 0000',
                },
                'cvv': {
                    'placeholder': '123',
                },
                'ccexp': {
                    'placeholder': '00 / 00',
                },
                'googlePay': {
                    'selector': '#google-pay-button',
                    'buttonType': 'pay',
                    'emailRequired': true,
                    'shippingAddressRequired': true,
                    'shippingAddressParameters': {
                        'phoneNumberRequired': true
                    },
                    'billingAddressRequired': true,
                    'billingAddressParameters': {
                        'phoneNumberRequired': true,
                        'format': 'MIN'
                    },
                },
                'applePay' : {
                    'selector': '#apple-pay-button',
                    'type': 'buy',
                },
            },
            "price": "PAY_AMOUNT",
            "currency":"PAY_CURRENCY",
            "country": "PAY_COUNTRY",
            'callback' : function(response) {
                let checkout = document.getElementById("checkout-form");
                let payment_token = document.createElement("input");
                payment_token.type = "hidden";
                payment_token.name = "payment_token";
                payment_token.value = response.token;
                checkout.appendChild(payment_token);
                checkout.submit();
            }
        });
    });
</script>

重要提示

  • 'PAY_AMOUNT' 应该是 10.00 的格式
  • 'PAY_CURRENCY' 应该是 'USD' 的格式
  • 'PAY_COUNTRY' 应该是 'US' 的格式
  • 不需要添加卡号、到期日期和CVV号码的输入字段。它们会动态注入并添加验证。若要添加卡输入字段
    • 添加一个ID为 'ccnumber' 的空div用于卡号
    • 添加一个ID为 'ccexp' 的空div用于到期日期
    • 添加一个ID为 'cvv' 的空div用于CVV代码
    • 对于提交按钮,请确保具有 'card-pay-button' 的id
  • 对于Google Pay,添加一个ID为 'google-pay-button' 的空div
  • 对于Apple Pay,添加一个ID为 'apple-pay-button' 的空div
  • 请注意,我们不会捕获或存储任何卡凭证。

集成指南

使用信用卡支付

// Create a new customer
$customer = new Mopalgen\Paygen\Customer();
$customer->setBillingAddress(
    $_POST['firstname'],
    $_POST['lastname'],
    $_POST['address1'],
    $_POST['address2'],
    $_POST['city'],
    $_POST['state'],
    $_POST['country'],
    $_POST['zip']
);
$customer->setShippingAddress(
    $_POST['shipping_firstname'],
    $_POST['shipping_lastname'],
    $_POST['shipping_address1'],
    $_POST['shipping_address2'],
    $_POST['shipping_city'],
    $_POST['shipping_state'],
    $_POST['shipping_country'],
    $_POST['shipping_zip']
);
$customer->setIPAddress($_SERVER['REMOTE_ADDR']);

// Initiate Payment Processor
$paymentProcessor = new Mopalgen\Paygen\Init(PRIVATE_SECURITY_TOKEN_HERE, $customer);

if(ENABLE_KOUNT_FRAUD_DETECTION) {
    $response = $paymentProcessor->createOrder($order_details, $_POST['payment_method'], $_POST['payment_token'], $_POST['transaction_session_id']);
} else {
    $response = $paymentProcessor->createOrder($order_details, $_POST['payment_method'], $_POST['payment_token']);
}

处理$response并根据相关数据保存。

请确保从响应中保存以下变量

  • responsetext
  • response_code
  • authcode
  • transactionid
  • avsresponse
  • cvvresponse

'$order_details' 应该是以下格式

$order_details = [
    'order_id' => '1',
    'billing_country' => 'US',
    'billing_currency' => 'USD',
    'items' => [
        [
            'name' => 'Product #1',
            'price' => '10.00',
            'qty' => 1,
            'subtotal' => '10.00',
        ],
        [
            'name' => 'Product #2',
            'price' => '10.00',
            'qty' => 2,
            'subtotal' => '20.00',
        ]
    ],
    'sub_total' => '30.00',
    'tax' => '6.00',
    'shipping_rate' => '5.00',
    'total' => '41.00'
];

将信用卡保存到客户保险库

$customer = new Mopalgen\Paygen\Customer();
$response = $customer->addCardToCustomerVault(SECURITY_KEY, $_POST['payment_token']);

处理$response并根据相关数据保存。

请确保从响应中保存以下变量

  • responsetext
  • response_code
  • customer_vault_id

请将customer_vault_id存储起来,以在将来使用存储的卡。

此外,请注意我们为了安全起见,使用payment_token而不是卡凭证。

使用已保存的信用卡支付

// Create a new customer
$customer = new Mopalgen\Paygen\Customer();
$customer->setBillingAddress(
    $_POST['firstname'],
    $_POST['lastname'],
    $_POST['address1'],
    $_POST['address2'],
    $_POST['city'],
    $_POST['state'],
    $_POST['country'],
    $_POST['zip']
);
$customer->setShippingAddress(
    $_POST['shipping_firstname'],
    $_POST['shipping_lastname'],
    $_POST['shipping_address1'],
    $_POST['shipping_address2'],
    $_POST['shipping_city'],
    $_POST['shipping_state'],
    $_POST['shipping_country'],
    $_POST['shipping_zip']
);
$customer->setIPAddress($_SERVER['REMOTE_ADDR']);

// Initiate Payment Processor
$paymentProcessor = new Mopalgen\Paygen\Init(SECURITY_KEY, $customer);

if(ENABLE_KOUNT_FRAUD_DETECTION) {
    $response = $paymentProcessor->createOrderUsingSavedCard($order_details, $_POST['payment_method'], $_POST['customer_vault_id'], $_POST['transaction_session_id']);
} else {
    $response = $paymentProcessor->createOrderUsingSavedCard($order_details, $_POST['payment_method'], $_POST['customer_vault_id']);
}

在这里,我们使用'customer_vault_id'而不是'payment_token'来使用存储的卡进行支付。

请确保从响应中保存以下变量

  • responsetext
  • response_code
  • authcode
  • transactionid
  • avsresponse
  • cvvresponse

更新客户保险库中的已保存卡

$customer = new Mopalgen\Paygen\Customer();
$response = $customer->updateCardFromCustomerVault(SECURITY_KEY, $_POST['customer_vault_id'], $_POST['payment_token']);

处理$response并根据相关数据保存。

从客户保险库中删除已保存的卡

$customer = new Mopalgen\Paygen\Customer();
$response = $customer->deleteCardFromCustomerVault(SECURITY_KEY, $_POST['customer_vault_id']);

处理$response并根据相关数据保存。

响应代码

  • 100 : 交易已被批准。
  • 200 : 交易被处理器拒绝。
  • 201 : 不接受。
  • 202 : 资金不足。
  • 203 : 超出限额。
  • 204 : 不允许的交易。
  • 220 : 付款信息不正确。
  • 221 : 没有这样的发卡机构。
  • 222 : 发卡机构没有卡号。
  • 223 : 卡已过期。
  • 224 : 无效的到期日期。
  • 225 : 无效的卡安全码。
  • 226 : 无效的PIN。
  • 240 : 请联系发卡机构获取更多信息。
  • 250 : 客户的卡已被持卡人报告为丢失或被盗。
  • 251 : 丢失的卡。
  • 252 : 被盗的卡。
  • 253 : 欺诈卡。
  • 260 : 拒绝,有进一步指示可用。
  • 261 : 拒绝-停止所有重复付款。
  • 262 : 拒绝-停止此重复程序。
  • 263 : 拒绝-更新可用持卡人数据。
  • 264 : 拒绝-几天后重试。
  • 300 : 交易被网关拒绝。
  • 400 : 处理器返回的交易错误。
  • 410 : 无效的商户配置。
  • 411 : 商户账户不活跃。
  • 420 : 通信错误。
  • 421 : 与发行机构的通信错误。
  • 430 : 处理器处重复交易。
  • 440 : 处理器格式错误。
  • 441 : 无效的交易信息。
  • 460 : 处理器功能不可用。
  • 461 : 不支持的卡类型。

CVV响应代码

  • M : CVV2/CVC2匹配
  • N : CVV2/CVC2不匹配
  • P : 未处理
  • S : 商户已表明卡上不存在CVV2/CVC2
  • U : 发卡行未认证且/或未提供Visa加密密钥

AVS响应代码

  • X : 完全匹配,9位数字ZIP
  • Y : 完全匹配,5位数字ZIP
  • D : 完全匹配,5位数字ZIP
  • M : 完全匹配,5位数字ZIP
  • 2 : 完全匹配,5位数字ZIP,客户姓名
  • 6 : 完全匹配,5位数字ZIP,客户姓名
  • A : 仅地址匹配
  • B : 仅地址匹配
  • 3 : 地址,客户姓名仅匹配
  • 7 : 地址,客户姓名仅匹配
  • W : 仅9位数字ZIP匹配
  • Z : 仅5位ZIP匹配
  • P : 仅5位ZIP匹配
  • L : 仅5位ZIP匹配
  • 1 : 5位ZIP,客户姓名仅匹配
  • 5 : 5位ZIP,客户姓名仅匹配
  • N : 无地址或ZIP仅匹配
  • C : 无地址或ZIP仅匹配
  • 4 : 无地址或ZIP或客户姓名仅匹配
  • 8 : 无地址或ZIP或客户姓名仅匹配
  • U : 地址不可用
  • G : 非美国发卡行不参与
  • I : 非美国发卡行不参与
  • R : 发卡行系统不可用
  • E : 非邮件/电话订单
  • S : 不支持服务
  • 0 : AVS不可用
  • O : AVS不可用
  • B : AVS不可用

演示项目

您可以在以下位置找到支付网关的基本实现: https://github.com/mopalgen/paygen-demo