hook_payment_gateway

函数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;
}
?>

相关链接: http://ubercart.org         Think in Drupal

论坛:

Drupal版本: