authorizenet 主要的信用卡支付网关,国外用的比较多。最近做项目使用到,顺便看了一下。结合ubercart使用。如果使用自动续费功能,那authorizenet也是支持的。
& F3 M0 e8 Y- _/ G4 ~( ?5 D/ h4 O: j z
<?php7 h. Q1 y$ d& k) f9 A; B6 }
8 G4 A2 ?" x+ h; B0 M2 B/ w1 r* e; E5 ]4 j7 V
//这个totalOccurrences 就是对这个续费操作的总共次数。
) U) E# r# P0 A4 V% l, b
. t% R8 K' a4 }1 z3 L//创建一个arb
0 h0 o/ F( \. H' @6 X" Ifunction uc_authorizenet_arb_create($order, $fee) {}
. L* ^7 y0 o% q6 Z6 S: \) Q( \/ s7 d3 z% b- e% C
//更新一个arb
5 A; i3 C6 e* ~* _function uc_authorizenet_arb_update($subscription_id, $updates, $order_id = NULL) {}
% D6 O0 s- h9 Q) @ A
) L1 v' k- B, q% ]//取消arb,如果不取消,那会自动扣款的。
' y' k$ s% p) j% Gfunction uc_authorizenet_arb_cancel($subscription_id, $order_id = NULL, $fee = array()) {} ! ]1 d. d! c1 q' D0 `. }2 k
?>
- }2 _# G" `6 X0 {( ]/ p
. V- Y) e }( w# b9 B & Y" i; F. u/ E* a6 c) O, ], J, G
& ?' F$ S. L. K' T6 O t0 x" N" d. t8 d& R% a M
# U; I) N# y7 z, g0 P; o" G
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------2 r! S& h% n5 n9 \% N4 M3 h
% c. P A9 {9 q3 D+ |. u2 v# _信用卡支付网关Authorize.Net 续费之 CIM
/ c* e4 n1 S/ s% N4 Y+ m! P2 @8 L( ^: ^' Y3 ] H, I
1 m' G( b2 Q; k+ J$ `/ Y1 u* Y2 n3 u6 |2 r. _1 r% L; y/ A* Z
Authorize.net网关还可以通过CIM来实现续费。本地只要保存一个CIM的customerProfileId你可以读取想要的信息。ubercart的支付网关模块 Authorize还没完善。运行简单的机制,订单下好,在订单order数据库' }6 x$ b2 d9 _ v7 P& k: o7 ]; w8 {
data字段里面保存customerProfileId等信息。当要需要使用信用卡信息的时候在通过author网关通过customerProfileId来读取进行续费操作。5 i' f9 \, p/ [: S4 P
* @. N- ]0 U: q2 Y3 R. Z
<?php
4 b* G, W* `6 F; p5 X// Main handler for processing credit card transactions., L+ e( @% ]7 ]: A: L
function uc_authorizenet_charge($order_id, $amount, $data) {2 m8 i, n! C2 n5 H& g- T3 ]- ?8 E1 `
// Load the order.
- k5 `- j' b9 U- m $order = uc_order_load($order_id);0 J* V: u# n% r5 r! Y/ U
8 Y. |, B9 V+ q
// Perform the appropriate action based on the transaction type.# M* k3 y$ ~, c9 W3 r8 ~% a4 }
switch ($data['txn_type']) {7 n( r- G/ D1 K v$ `
// Reference transactions are handled through Authorize.Net's CIM. 9 G* F. F3 Z3 m8 f+ T
case UC_CREDIT_REFERENCE_TXN: // 第一种交易模式,通过CIM来处理交易费用0 _( N+ ^; R1 C# A$ X1 l1 w' m
return _uc_authorizenet_cim_profile_charge($order, $amount, $data); // 通过cim续费& P3 O( N: e3 A& }6 W) u
5 Q) p* k3 S0 C I6 ?# D$ {8 W // Set a reference only.4 W; R+ U8 E! Z- N' a
case UC_CREDIT_REFERENCE_SET: //另一模式,只建立一个CIM信息
- }! a! x! f9 ~ t( ]; E- f$ |8 j // Return the error message if this failed. s4 o0 C n% }9 Z1 T$ ]+ ^/ @
if ($message = _uc_authorizenet_cim_profile_create($order)) {& C) m* |- a9 S
return array('success' => FALSE, 'message' => $message);
3 }" N- ^2 F3 a4 X4 U P3 h' L }
t/ R# J. b( ?, C* L0 L else {
. g/ o* S5 ~# { return array('success' => TRUE, 'message' => t('New customer profile created successfully at Authorize.Net.'));7 d! Z5 A, y8 ^& S2 G" Q+ _
}6 ]# p" M! q: }6 G) E
' w- p. p0 U! t( T" s
// Accommodate all other transaction types.+ T6 s B9 r; C+ z; t4 C& l" s
default: // 其他的什么都在这里处理
2 D! n3 v% [3 E0 w P- S return _uc_authorizenet_charge($order, $amount, $data); ! |9 y: _5 i% h8 }; b" q
}
# w8 m4 Z% Y, ~0 @0 R( j6 r" z}7 \, a' z' A4 e a& c* h# J
3 C/ e1 e, W. {2 _
/**
' H& L7 L. |& x+ t8 x* Get a CIM payment profile stored at auth.net. Z% I$ {# v. c+ V" e& B( L& _
从auth.net 得到cim payment 信息。现有的版本好像还没试用到到这个函数,估计作者后期要加上一些功能,, S8 m3 g5 D! N! S( c/ Z: l
这个函数还不完善。从auth的提供最新的网关接口信息来测试,会出错,因为少加了一个参数customerPaymentProfileId+ X q4 T: {( L
*/
) F% @. H' W6 nfunction _uc_authorizenet_cim_payment_profile_get($order, $profile_id, $payment_profile_id) {! x7 a+ ^4 N# t. N
$server = variable_get('uc_authnet_cim_mode', 'disabled');! ~; B9 R' r6 J4 T" `' X: \) T! |' a
$request = array(. R. P3 o g/ X7 x% `
'customerProfileId' => $profile_id,
9 A% L2 y, S$ H: f3 b! g0 p 'customerPaymentProfileId' => $payment_profile_id // 额外添加, u" w5 r# G/ ^& [ W
);+ u2 I9 J8 Z6 H: N5 \ O
; Y; V' I9 ~, A7 {
// Request a profile from auth.net.7 }- ^3 N1 m! V6 j7 i$ _ C! W
$xml = _uc_authorizenet_xml_api_wrapper('getCustomerPaymentProfileRequest', _uc_authorizenet_array_to_xml($request));" F9 V9 y# E- ]# o: n# J. z
// Parse the response.
# Y; n, T* t7 P3 {$ J" m4 S $response = _uc_authorizenet_cim_parse_response(uc_authorizenet_xml_api($server, $xml));$ z' r V+ `- e! q* u7 |" N
return $response['resultCode'] == 'Error' ? FALSE : $response;
- T3 j' e( c" S3 w x}
; N0 a8 e5 M; h1 x?>
0 E& b7 I) p4 ^7 b
# f, e# c! e' P- p8 _6 i0 k& [
- ?# n( E4 T M1 s8 P+ v! z6 s # m% x+ l. B+ \) n" r/ Y
% E7 f2 ~+ l" s4 k$ N" t' s8 j2 X% ^. S2 P: Z
# V/ T6 V. Q( ?% n( [
# T' V4 @$ G K, }, z( } t( z6 K |
|