It's been a month since the creation of the first live recurring billing profiles; the first transaction is processed correctly, but the transactions are being declined as the credit card number was not passed correctly when the profile was setup. The first transaction's credit card number gets correctly passed, but the profile has an unidentifiable four digit number where the CC should be.
Here's the Daily Activity Transaction Report from Payflow :
TransactionID
TRANSACTION TIME
Apr 7, 2010 7:38:11 AMTRANSACTION TYPE
Sale
-CARD TYPE, ACCOUNT NUMBER and EXPIRATION DATE Mirror what's in the recurring profile
CARD TYPE
BankCardACCOUNT NUMBER
XXXXEXPIRATION DATE
01/12CURRENCY
USDAMOUNT
25.00RESULT
23RESPONSE MESSAGE
Invalid account numberCOMMENT2
Recurring Profile: RT0000000007 Payment: 000001 Name: main_administrator
Here's a MySQL Dump for a few rows from the uc_payflowpro_recurring_profiles table
-----------------------------
-- phpMyAdmin SQL Dump
-- version 3.2.4
-- http://www.phpmyadmin.net
--
-- Host: localhost
-- Generation Time: Apr 07, 2010 at 12:56 PM
-- Server version: 5.0.89
-- PHP Version: 5.2.6
SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
--
-- Database: `databasename`
--
-- --------------------------------------------------------
--
-- Table structure for table `uc_payflowpro_recurring_profiles`
--
CREATE TABLE IF NOT EXISTS `uc_payflowpro_recurring_profiles` (
`pfp_pid` int(10) unsigned NOT NULL auto_increment,
`txnid` int(10) unsigned default NULL,
`order_id` int(10) unsigned default NULL,
`uc_model` varchar(255) default NULL,
`nid` int(10) unsigned NOT NULL default '0',
`vid` int(10) unsigned NOT NULL default '0',
`pfp_uid` int(10) unsigned default NULL,
`pfp_profile_id` varchar(20) default NULL,
`pfp_rpref` varchar(20) default NULL,
`pfp_origid` varchar(20) default NULL,
`pfp_status` char(1) default NULL,
`next_payment_date` int(10) unsigned default NULL,
`last_status_check` int(10) unsigned default NULL,
`payment_status` varchar(45) default NULL,
`profile_status` varchar(45) default NULL,
PRIMARY KEY (`pfp_pid`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=277 ;
--
-- Dumping data for table `uc_payflowpro_recurring_profiles`
--
INSERT INTO `uc_payflowpro_recurring_profiles` (`pfp_pid`, `txnid`, `order_id`, `uc_model`, `nid`, `vid`, `pfp_uid`, `pfp_profile_id`, `pfp_rpref`, `pfp_origid`, `pfp_status`, `next_payment_date`, `last_status_check`, `payment_status`, `profile_status`) VALUES
(7, NULL, 20, 'ULTD-subscription', 240, 665, 1, 'RT0000000007', 'R7851FAF0BF8', 'R7851FAF0BF8', '0', 1270530000, 1267902005, NULL, 'ACTIVE'),
(8, NULL, 20, 'basic-subscription', 236, 646, 1, 'RT0000000008', 'R1852AF61004', 'R1852AF61004', '0', 1270530000, 1267902006, NULL, 'ACTIVE'),
(9, NULL, 23, 'ULTD-subscription', 240, 665, 4903, 'RP0000000001', 'RSG54E5BE822', 'RSG54E5BE822', '0', 1270530000, 1267909205, NULL, 'ACTIVE'),
(10, NULL, 33, 'ULTD-subscription', 240, 665, 639, 'RP0000000002', 'RPC54F16CA79', 'RPC54F16CA79', '0', 1270530000, 1267930801, NULL, 'ACTIVE');
------------------------------------------------
XML Data dump from (cron) function _uc_payflowpro_recurring_process_recurring() :
object(PayflowProRecurring)#49 (30) {
["pid:protected"]=>
NULL
["profile_id:protected"]=>
string(12) "RT0000000001"
["profile_name:protected"]=>
string(0) ""
["profile_term:protected"]=>
string(0) ""
["profile_start:protected"]=>
string(0) ""
["profile_end:protected"]=>
string(0) ""
["profile_payperiod:protected"]=>
string(0) ""
["profile_amt:protected"]=>
string(0) ""
["profile_tender:protected"]=>
array(0) {
}
["profile_email:protected"]=>
string(0) ""
["profile_company_name:protected"]=>
string(0) ""
["profile_billto:protected"]=>
array(0) {
}
["profile_shipto:protected"]=>
array(0) {
}
["profile_payments_left:protected"]=>
string(0) ""
["profile_aggregate_amt:protected"]=>
string(0) ""
["profile_aggregate_trans_amt:protected"]=>
string(0) ""
["profile_num_failed_payments:protected"]=>
string(0) ""
["profile_retry_num_days:protected"]=>
string(0) ""
["profile_next_payment:protected"]=>
string(0) ""
["profile_exp_data:protected"]=>
array(0) {
}
["profile_status:protected"]=>
string(23) "DEACTIVATED BY MERCHANT"
["payment_history:protected"]=>
array(0) {
}
["auth:protected"]=>
array(4) {
["vendor"]=>
string(11) "FAKEUSER"
["partner"]=>
string(11) "FakePartner"
["user"]=>
string(11) "FAKEUSER"
["password"]=>
string(10) "fakepassword"
}
["mode:protected"]=>
string(4) "test"
["return_code:protected"]=>
string(0) ""
["return_msg:protected"]=>
string(0) ""
["last_payment_status:private"]=>
NULL
["update_items:protected"]=>
array(0) {
}
["create_new:protected"]=>
bool(false)
["loaded:protected"]=>
bool(true)
}
| Comment | File | Size | Author |
|---|---|---|---|
| #2 | uc_payflowpro-764874.patch | 4.85 KB | kwinters |
Comments
Comment #1
beifler commentedI'm not sure if it's related, but the customer's full name is placed in the first name field in the Payflow recurring profile. Also, the phone # is missing from the profile info.
Comment #2
kwinters commentedThis should be fixed now (patch provided and also committed).
When not in test mode, Ubercart truncates the credit card info from the order object right after the initial charge (keeps last 4 digits). Before this patch, the recurring profile was being created after this truncation and thus only getting the last 4 digits passed.
However, some parts of the recurring processing still have to be done well after the CC info is lost. If a user is anonymous on checkout, a user is created for them near the end of the process and that user has to be tied to the recurring profile. Now only the user -> profile linkup happens after the user is created, so everything gets all the data it needs.
Comment #3
kwinters commentedFixed in 6.x-1.2