函数hook_payment_gateway()位于uc_payment.module模块中:
<?php
hook_payment_gateway()
?>
描述:
支付网关是整个支付系统中的重要部分。它们在你的Ubercart和支付服务之间搭了一个桥梁,支付网关将会对你收到的支付信息进行处理。常见的支付服务的例子有PayPal 和Authorize.net。每个支付网关,都会使用一种不同的方式,让你把你从客户那里收集到的信息安全的提交过去,以完成支付。根据支付的成功和失败,它们还会返回相应的信息。
hook_payment_gateway()定义了支付网关,它让Ubercart知道哪些可用,使用的是什么支付方法,以及如何使用它们处理支付。
在支付网关数组中,你可以使用方法ID来引用方法。网关可以处理的每一个支付方法,都应该有一个键,它的值为一个函数的名字,在处理支付时,支付系统将会调用这个函数。(比如uc_payment.module模块中的uc_payment_process()函数)
每个回调函数,都应该能够接受同样的参数,其中$order_i代表着要付款的订单的ID,$amount为要支付的金额,而$data是传递给这个函数的一些其它的必要的数据,可以通过调用uc_payment_process()函数来传递这些数据。这个回调函数应该负责与网关服务的所有交互,并记录合适的日志信息。
在示例的信用卡网关模块中,仅仅假定了支付成功完成。它接着将信息记录到订单的管理评论中。最后,它准备一个网关回调的返回值,一个使用了以下键值的数组:
键 |
类型 |
值 |
success |
bool |
支付成功时,返回TRUE,否则返回FALSE |
comment |
string |
在支付表格中,留给支付的评论。Use t(). |
message |
string |
这里显示给用户的消息,是通过普通的Drupal消息系统实现的.如果在结算过程中,付款是自动完成的话,那么这个消息就不再显示.使用t(). |
uid* |
int |
当前用户的ID,将被记录到支付表中.默认为0. |
data* |
mixed |
你想要传递过来的各种数据,这些数据将被存储到支付表中.数组在被插入数据库以前将被自动的序列化. |
log_payment* |
bool |
如果订单的支付被记录下来的话,那么返回TURE,否则返回FALSE;默认为TRUE.返回FALSE的一个示例情况是,使用了信用卡支付,现在还没有从里面扣钱.这样的支付还没有完成,也就不应该为订单记录这一支付,但是我们仍然想知道信用卡是不是有效的. |
*键是可选的 |
在你的回调函数中,你可以使用任何你创建的其它函数,或者和支付网关的web服务进行交互.有一点非常有用,那就是你收集的和保存了的支付信息,可以在订单对象的支付详细数组中查看.为了在你的回调函数中加在订单,可以这样:
<?php
$order = uc_order_load($order_id);
// Now you can access the payment details with $order->payment_details.
drupal_set_message('<pre>'. print_r($order->payment_details, TRUE) .'</pre>');
?>
支付方法的注释文档,能够帮你了解该方法保存了哪些支付详细信息.这对于信用卡支付方法非常有用,因为你需要访问信用卡的信息,以处理你的订单!
返回值:
返回一个支付网关的数组,这个数组使用了以下键:
键 |
类型 |
值 |
id |
string |
支付网关的内部ID,使用a-z, 0-9, 和- 或者 _. |
title |
string |
显示给用户的支付网关的名字.使用t(). |
description |
string |
支付网关的简洁描述. |
settings |
string |
这是一个返回设置数组的函数的名字,数组里面包含的是用于网关的表单元素. |
credit_txn_types |
array |
处理信用卡支付的支付网关可以使用这个可选键.它的值为一个常量数组,用来说明网关可以提供哪些信用卡交易类型.可用的常量有UC_CREDIT_AUTH_ONLY, UC_CREDIT_PRIOR_AUTH, UC_CREDIT_AUTH_CAPTURE, UC_CREDIT_REFERENCE_TXN;其中默认为UC_CREDIT_AUTH_CAPTURE,它将自动授权并且立即支付. |
示例:
<?php
function test_gateway_payment_gateway() {
$gateways[] = array(
'id' => 'test_gateway',
'title' => t('Test Gateway'),
'description' => t('Process credit card payments through the Test Gateway.'),
'credit' => 'test_gateway_charge',
);
return $gateways;
}
?>
在下面的例子中,显示的是测试网关的信用卡支付方法的回调函数:
<?php
function test_gateway_charge($order_id, $amount, $data) {
global $user;
$message = t('Credit card charged: !amount', array('!amount' => uc_currency_format($amount)));
uc_order_comment_save($order_id, $user->uid, $message, 'admin');
$result = array(
'success' => TRUE,
'comment' => t('Card charged, resolution code: 0022548315'),
'message' => t('Credit card payment processed successfully.'),
'uid' => $user->uid,
);
return $result;
}
?>