feat(api): 添加交易类型常量接口并优化API请求参数

将交易类型字符串统一为常量接口,避免硬编码错误
优化API请求参数,明确处理布尔值和添加国家代码
This commit is contained in:
tikkhun 2025-11-05 16:35:13 +08:00
parent 4727881e05
commit 5d449721ef
3 changed files with 39 additions and 6 deletions

View File

@ -91,7 +91,8 @@ class Yoone_Moneris_API implements Yoone_Moneris_API_Interface {
$num = isset($card['number']) ? preg_replace('/\D+/', '', (string) $card['number']) : ''; $num = isset($card['number']) ? preg_replace('/\D+/', '', (string) $card['number']) : '';
$masked = $num ? str_repeat('*', max(strlen($num) - 4, 0)) . substr($num, -4) : ''; $masked = $num ? str_repeat('*', max(strlen($num) - 4, 0)) . substr($num, -4) : '';
error_log('【Yoone Moneris API】tokenize_card 请求last4=' . ($num ? substr($num, -4) : '') . ' len=' . strlen($num) . ' expdate=' . $payload['expdate'] . ' cryptType=' . $payload['cryptType']); error_log('【Yoone Moneris API】tokenize_card 请求last4=' . ($num ? substr($num, -4) : '') . ' len=' . strlen($num) . ' expdate=' . $payload['expdate'] . ' cryptType=' . $payload['cryptType']);
$res = $this->send_moneris_xml( 'res_add_cc', $payload ); // 使用集中加载的交易类型常量接口
$res = $this->send_moneris_xml( Yoone_Moneris_Txn_Types::RES_ADD_CC, $payload );
error_log('$res11111111'. print_r($res, true)); error_log('$res11111111'. print_r($res, true));
if ( $res['ok'] ) { if ( $res['ok'] ) {
return array( return array(
@ -126,7 +127,8 @@ class Yoone_Moneris_API implements Yoone_Moneris_API_Interface {
require_once __DIR__ . '/utils/orderid.php'; require_once __DIR__ . '/utils/orderid.php';
} }
$unique_order_id = yoone_moneris_unique_order_id( $order_id ); $unique_order_id = yoone_moneris_unique_order_id( $order_id );
$type = $capture ? 'res_purchase_cc' : 'res_preauth_cc'; // 使用集中加载的交易类型常量接口
$type = $capture ? Yoone_Moneris_Txn_Types::RES_PURCHASE_CC : Yoone_Moneris_Txn_Types::RES_PREAUTH_CC;
$payload = array( $payload = array(
'dataKey' => (string) $token, 'dataKey' => (string) $token,
'orderId' => (string) $unique_order_id, 'orderId' => (string) $unique_order_id,
@ -185,7 +187,8 @@ class Yoone_Moneris_API implements Yoone_Moneris_API_Interface {
'amount' => $this->format_amount( $amount ), 'amount' => $this->format_amount( $amount ),
'cryptType' => $this->crypt_type, 'cryptType' => $this->crypt_type,
); );
$res = $this->send_moneris_xml( 'refund', $payload ); // 使用集中加载的交易类型常量接口
$res = $this->send_moneris_xml( Yoone_Moneris_Txn_Types::REFUND, $payload );
if ( $res['ok'] ) { if ( $res['ok'] ) {
return array( 'success' => true ); return array( 'success' => true );
} }
@ -216,7 +219,12 @@ class Yoone_Moneris_API implements Yoone_Moneris_API_Interface {
$body = array( $body = array(
'storeId' => $this->store_id, 'storeId' => $this->store_id,
'apiToken' => $this->api_token, 'apiToken' => $this->api_token,
'statusCheck'=> (bool) $this->status_check, // 明确发送字符串 true/false避免 boolean false 被序列化为空字符串
'statusCheck' => $this->status_check ? 'true' : 'false',
// 添加处理国家代码CA/US与端点匹配
'processingCountryCode' => strtoupper($this->country_code),
// 在沙箱环境显式声明 test=true与官方示例一致
'test' => $this->is_test_mode() ? 'true' : 'false',
); );
// 风险查询特殊结构(暂不支持;如需支持可扩展) // 风险查询特殊结构(暂不支持;如需支持可扩展)

View File

@ -0,0 +1,23 @@
<?php
if (! defined('ABSPATH')) {
exit;
}
/**
* 交易类型常量枚举(避免字符串写错)
* 将常用的交易类型统一到接口常量中,供 API 层调用。
*/
interface Yoone_Moneris_Txn_Types
{
// Vault存储卡片相关
public const RES_ADD_CC = 'res_add_cc';
public const RES_UPDATE_CC = 'res_update_cc';
public const RES_DELETE = 'res_delete';
// Vault 令牌交易
public const RES_PURCHASE_CC = 'res_purchase_cc';
public const RES_PREAUTH_CC = 'res_preauth_cc';
// 通用交易
public const REFUND = 'refund';
}

View File

@ -40,6 +40,8 @@ function yoone_moneris_payments_init() {
// __DIR__ 是当前文件所在目录,拼接 includes 路径以找到类定义文件。 // __DIR__ 是当前文件所在目录,拼接 includes 路径以找到类定义文件。
require_once __DIR__ . '/includes/constants/moneris.php'; require_once __DIR__ . '/includes/constants/moneris.php';
require_once __DIR__ . '/includes/interfaces/class-yoone-moneris-api-interface.php'; require_once __DIR__ . '/includes/interfaces/class-yoone-moneris-api-interface.php';
// 加载交易类型常量接口,统一交易类型字符串,避免在使用处多次 require
require_once __DIR__ . '/includes/interfaces/class-yoone-moneris-txn-types.php';
require_once __DIR__ . '/includes/utils/logger.php'; require_once __DIR__ . '/includes/utils/logger.php';
require_once __DIR__ . '/includes/class-yoone-moneris-api.php'; require_once __DIR__ . '/includes/class-yoone-moneris-api.php';
require_once __DIR__ . '/includes/class-yoone-gateway-moneris.php'; require_once __DIR__ . '/includes/class-yoone-gateway-moneris.php';