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