tclink 4.2.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,2160 @@
1
+ ----------------------------------------------------------------------
2
+
3
+ TrustCommerce Developer's Guide 2.5
4
+
5
+ http://www.trustcommerce.com
6
+ developer@trustcommerce.com
7
+
8
+ ----------------------------------------------------------------------
9
+
10
+ Table of Contents
11
+
12
+ I. Introduction
13
+ II. Connecting via TCLink
14
+ III. Transaction Types
15
+ IV. Input Parameters
16
+ V. Return Parameters
17
+ VI. Credit Card Preauths and Sales
18
+ VII. Card Verification Value (CVV)
19
+ VIII. Card-Present Transactions
20
+ IX. ACH
21
+ X. Postauths, Credits, and Chargebacks
22
+ XI. Citadel (Billing IDs)
23
+ XII. Recurring Billing
24
+ XIII. TC Wallet
25
+ XIV. CrediGuard - Neural Network Fraud Scoring
26
+ XV. CrediGuard - Blacklists
27
+ XVI. CrediGuard - Velocity Control
28
+ XVII. Purchase Level II (Commercial Cards)
29
+ XVIII. Automated Fulfillment
30
+ XIX. Batch Processing
31
+ XX. Vault Query API
32
+ Appendix A - Test Data
33
+ Appendix B - Troubleshooting
34
+ Appendix C - Connecting via HTTPS POST
35
+ Appendix D - Currency Table
36
+ Appendix E - Input Field List
37
+
38
+ ----------------------------------------------------------------------
39
+
40
+ I. Introduction
41
+
42
+ This guide is for developers. If you are seeking to add payment processing
43
+ functionality to a software package or website using the TrustCommerce,
44
+ platform and language neutral, transaction processing API, then this guide
45
+ is for you. If you are connecting via a pre-integrated commerce package,
46
+ including shopping carts such as StoreForge, Mal's e-Commerce, or
47
+ osCommerce, then you do not need this document.
48
+
49
+ An overview of payment processing and information about the TrustCommerce
50
+ Vault website are presented in the TrustCommerce User's Guide and will not
51
+ be covered here. If you are not familiar with the basics of credit card
52
+ processing (such as the difference between an auth and capture), then you
53
+ should probably read the User's Guide first. The User's Guide also
54
+ describes the Vault's reporting capabilities, which you may find useful to
55
+ confirm that your test transactions are working as expected.
56
+
57
+ There are two methods of connecting to the TrustCommerce gateway at the
58
+ programming level: TCLink client software and HTTPS POST to the Vault
59
+ server. TCLink is HIGHLY recommend, as it offers support for
60
+ TrustCommerce's advanced features such as automated failover, 2048-bit
61
+ encryption and server certificate verification. It's available for many
62
+ platforms and languages, and installation is straightforward. If you are
63
+ unable to use TCLink, the HTTPS POST method will still allow you to access
64
+ most features of the TrustCommerce processing engine, but be aware that it
65
+ cannot match the speed and especially the reliability of TCLink.
66
+
67
+ II. Connecting via TCLink
68
+
69
+ The TCLink API is available for download from the Vault website. Be sure
70
+ to choose the version that matches the platform and language that you are
71
+ using. Win32 developers will typically want the COM object, which contains
72
+ support for a number of different languages on the Win32 platform,
73
+ including ASP, Cold Fusion, Perl, PHP, and Python.
74
+
75
+ Installation instructions specific to the TCLink version you download can
76
+ be found in the readme file contained within the archive. It will also
77
+ contain a version of the TCTest program specific to the language you are
78
+ using. Review this example, and use it as the basis for your own code. In
79
+ fact, we recommend that you look over the code sample now to get a feel
80
+ for the API, and then return to reading this document.
81
+
82
+ Versions of TCLink for high-level languages (including PHP, Perl, Python,
83
+ and Java) with built in support for hashes only have one method: Send().
84
+ This method accepts a single parameter, a hash of input values, and
85
+ returns a single parameter, a hash of output values. The only other method
86
+ available is GetVersion(), which returns the version string for TCLink.
87
+
88
+ TCLink for other languages (including C/C++, Win32 COM, and CFX) contains
89
+ four basic methods: Create(), PushParam(), Send(), and GetResponse().
90
+ These four methods map to the four stages of running a transaction:
91
+ initialize, push a number of parameters describing the transaction, send
92
+ the transaction to the TrustCommerce gateway for processing, and finally
93
+ get details about the transaction results.
94
+
95
+ The only method which contacts the TC servers is Send(). This function
96
+ will block for one or two seconds while the transaction is processed.
97
+ Afterward, you can retrieve response parameters at your leisure; they are
98
+ stored internally in TCLink.
99
+
100
+ C-style TCLink functions are described in the table below.
101
+
102
+ TCLink Function Names
103
+
104
+ +------------------------------------------------------------------------------+
105
+ | Function Name | Description |
106
+ |---------------------+--------------------------------------------------------|
107
+ | CreateLink() | Create a new transaction handle. |
108
+ |---------------------+--------------------------------------------------------|
109
+ | PushParam() | Push a parameter into the transaction. |
110
+ |---------------------+--------------------------------------------------------|
111
+ | Send() | Submit a transaction to the gateway. |
112
+ |---------------------+--------------------------------------------------------|
113
+ | GetResponse() | Retrieve a response parameter from the transaction. |
114
+ |---------------------+--------------------------------------------------------|
115
+ | GetEntireResponse() | Get the entire response for the transaction, primarily |
116
+ | | use for debugging or logging. |
117
+ |---------------------+--------------------------------------------------------|
118
+ | Destroy() | Deallocate any memory associated with the transaction |
119
+ | | handle. |
120
+ |---------------------+--------------------------------------------------------|
121
+ | GetVersion() | Get the version string for the TCLink API in use. |
122
+ +------------------------------------------------------------------------------+
123
+
124
+ III. Transaction Types
125
+
126
+ You may wish to read the section of the TC User's Guide which describes
127
+ the transaction types and the authorization/capture process, especially if
128
+ you are not already familiar with credit card processing.
129
+
130
+ In terms of parameters passed, preauths and sales are almost identical.
131
+ They take account data and personal information about the customer, along
132
+ with a transaction amount. The transaction is authorized and the response
133
+ values returned. In the case of a sale, the item is also immediately
134
+ submitted for capture. Preauths are not captured until they are
135
+ postauthed.
136
+
137
+ Postauths and credits are also very similar to one another. They indicate
138
+ a capture or a return of funds for a previous transaction, and no personal
139
+ data about the customer or their payment method is passed.
140
+
141
+ There are three other types of transaction. Store and unstore are covered
142
+ in the Billing ID section of this document. Walletsale is covered under
143
+ the TC Wallet section .
144
+
145
+ IV. Input Parameters
146
+
147
+ There are a large number of parameters available for describing
148
+ transactions. Not all parameters are accepted for all transaction types,
149
+ and most parameters are optional. Most transactions can be sent with only
150
+ a few parameters. The only parameters always required are custid,
151
+ password, and action.
152
+
153
+ Parameters are carefully checked for format and size before the
154
+ transaction is sent. If there are any errors in the parameters you've
155
+ entered, the transaction will be aborted and detailed information about
156
+ the errors will be returned. These return values are described in more
157
+ detail in the next section.
158
+
159
+ All transaction types use the parameters presented in the following
160
+ tables.
161
+
162
+ Required Parameters
163
+
164
+ +------------------------------------------------------------------------------+
165
+ | Parameter Name | Description |
166
+ |----------------+-------------------------------------------------------------|
167
+ | amount | Amount of the transaction, in cents. (example: "500" is |
168
+ | | $5.00) |
169
+ |----------------+-------------------------------------------------------------|
170
+ | custid | The customer ID number assigned to you by TrustCommerce. |
171
+ |----------------+-------------------------------------------------------------|
172
+ | password | The password for your custid as assigned by TrustCommerce. |
173
+ |----------------+-------------------------------------------------------------|
174
+ | action | The transaction type; can be one of preauth, sale, |
175
+ | | postauth,credit, store, unstore, walletsale, or chargeback |
176
+ +------------------------------------------------------------------------------+
177
+
178
+ Optional Parameters
179
+
180
+ +------------------------------------------------------------------------------+
181
+ | Parameter Name | Description |
182
+ |----------------+-------------------------------------------------------------|
183
+ | | When set to "y", the transaction will be a test transaction |
184
+ | | only. |
185
+ | | |
186
+ | | This parameter is useful for testing. Demo transactions |
187
+ | demo | allow you to submit transactions from your processing |
188
+ | | system without charging real money to a card and without |
189
+ | | incurring any transaction fees. Demo transactions are also |
190
+ | | flagged separately in the Vault database and will not |
191
+ | | appear in the regular accounting reports. |
192
+ |----------------+-------------------------------------------------------------|
193
+ | | Free-form text field intended for storing ticket number or |
194
+ | | order number associated with the transaction, to aid |
195
+ | | merchants in order tracking and reporting. |
196
+ | | |
197
+ | ticket | The ticket parameter is passed to the acquiring bank in the |
198
+ | | settlement process as the "purchase identifier." This may |
199
+ | | aid in reconciling the TrustCommerce transactions with the |
200
+ | | deposits made into the merchant bank account. If no ticket |
201
+ | | is passed, then the TrustCommerce transID will be sent to |
202
+ | | the bank instead. |
203
+ |----------------+-------------------------------------------------------------|
204
+ | | Free-form text field intended for recording the operator |
205
+ | | that entered the transaction, to aid merchants in order |
206
+ | operator | track and reporting. Enterprise-class customers will note |
207
+ | | that this field corresponds to the username assigned to |
208
+ | | operators in the Vault. |
209
+ +------------------------------------------------------------------------------+
210
+
211
+ V. Return Parameters
212
+
213
+ Any transaction sent will return several parameters describing the success
214
+ or failure of the transaction. Properly formatted transactions will always
215
+ return a transaction ID (or "transID".) The transaction ID is the unique
216
+ identifier for this transaction, and can be used to retrieve the
217
+ transaction from the Vault website, or otherwise access the transaction in
218
+ the future. (For example, in order to credit a previous transaction, you
219
+ will need to send the transID of the original transaction.)
220
+
221
+ Transactions always return a status parameter which describes the success
222
+ or failure of the transaction. Status can be set to one of the following:
223
+
224
+ Status
225
+
226
+ +------------------------------------------------------------------------------+
227
+ | Status Value | Description |
228
+ |--------------+---------------------------------------------------------------|
229
+ | approved | The transaction was successfully authorized. |
230
+ |--------------+---------------------------------------------------------------|
231
+ | accepted | The transaction has been successfully accepted into the |
232
+ | | system. |
233
+ |--------------+---------------------------------------------------------------|
234
+ | decline | The transaction was declined, see declinetype for further |
235
+ | | details. |
236
+ |--------------+---------------------------------------------------------------|
237
+ | baddata | Invalid parameters passed, see error for further details. |
238
+ |--------------+---------------------------------------------------------------|
239
+ | error | System error when processing the transaction, see errortype |
240
+ | | for details. |
241
+ +------------------------------------------------------------------------------+
242
+
243
+ The difference between approved and accepted is subtle, but important.
244
+ Approved means that the transaction was an authorization of some sort, and
245
+ has been successfully cleared with the bank. Accepted only means that the
246
+ transaction was queued into the system without errors, but may be rejected
247
+ at some later time. An example of the difference is a sale versus a
248
+ credit. A sale is a real-time authorization, so it returns approved on
249
+ success. A credit is not real-time; there is no such thing as a "credit
250
+ authorization." Instead it is queued up for processing by the bank and
251
+ there is the small but non-zero possibility that it will be rejected at a
252
+ later time. In practice, however, this rarely happens, so the developer
253
+ need not worry unduly.
254
+
255
+ When status is set to decline, the parameter declinetype will contain one
256
+ of the following:
257
+
258
+ Decline Type
259
+
260
+ +------------------------------------------------------------------------------+
261
+ | Declinetype Value | Description |
262
+ |-------------------+----------------------------------------------------------|
263
+ | decline | This is a "true" decline, it almost always is a result |
264
+ | | of insufficient funds on the card. |
265
+ |-------------------+----------------------------------------------------------|
266
+ | avs | AVS failed; the address entered does not match the |
267
+ | | billing address on file at the bank. |
268
+ |-------------------+----------------------------------------------------------|
269
+ | | CVV failed; the number provided is not the correct |
270
+ | cvv | verification number for the card. (See CVV section for |
271
+ | | more details.) |
272
+ |-------------------+----------------------------------------------------------|
273
+ | | The card must be authorized manually over the phone. You |
274
+ | call | may choose to call the customer service number listed on |
275
+ | | the card and ask for an offline authcode, which can be |
276
+ | | passed in the offlineauthcode field. |
277
+ |-------------------+----------------------------------------------------------|
278
+ | expiredcard | The card has expired. Get updated expiration date from |
279
+ | | cardholder. |
280
+ |-------------------+----------------------------------------------------------|
281
+ | carderror | Card number is invalid, which could be a typo, or |
282
+ | | sometimes a card reported stolen. |
283
+ |-------------------+----------------------------------------------------------|
284
+ | authexpired | Attempt to postauth an expired (more than 14 days old) |
285
+ | | preauth. |
286
+ |-------------------+----------------------------------------------------------|
287
+ | fraud | CrediGuard fraud score was below requested thershold. |
288
+ |-------------------+----------------------------------------------------------|
289
+ | blacklist | CrediGuard blacklist value was triggered. |
290
+ |-------------------+----------------------------------------------------------|
291
+ | velocity | CrediGuard velocity control was triggered. |
292
+ |-------------------+----------------------------------------------------------|
293
+ | dailylimit | Daily limit in transaction count or amount as been |
294
+ | | reached. |
295
+ |-------------------+----------------------------------------------------------|
296
+ | weeklylimit | Weekly limit in transaction count or amount as been |
297
+ | | reached. |
298
+ |-------------------+----------------------------------------------------------|
299
+ | monthlylimit | Monthly limit in transaction count or amount as been |
300
+ | | reached. |
301
+ +------------------------------------------------------------------------------+
302
+
303
+ A status of baddata indicates that no transaction was attempted because
304
+ one or more parameters was invalid. In this case, the parameter error will
305
+ indicate the problem, and the offender's parameter will list the offending
306
+ input fields. The error parameter may be set to one of the following:
307
+
308
+ Bad Data
309
+
310
+ +------------------------------------------------------------------------------+
311
+ | Error Value | Description |
312
+ |--------------------+---------------------------------------------------------|
313
+ | missingfields | One or more parameters required for this transaction |
314
+ | | type were not sent. |
315
+ |--------------------+---------------------------------------------------------|
316
+ | extrafields | Parameters not allowed for this transaction type were |
317
+ | | sent. |
318
+ |--------------------+---------------------------------------------------------|
319
+ | badformat | A field was improperly formatted, such as non-digit |
320
+ | | characters in a number field. |
321
+ |--------------------+---------------------------------------------------------|
322
+ | badlength | A field was longer or shorter than the server allows. |
323
+ |--------------------+---------------------------------------------------------|
324
+ | | The merchant can't accept data passed in this field. If |
325
+ | | the offender is "cc", for example, it usually means |
326
+ | merchantcantaccept | that you tried to run a card type (such as American |
327
+ | | Express or Discover) that is not supported by your |
328
+ | | account. If it was "currency", you tried to run a |
329
+ | | currency type not supported by your account. |
330
+ |--------------------+---------------------------------------------------------|
331
+ | mismatch | Data in one of the offending fields did not cross-check |
332
+ | | with the other offending field. |
333
+ +------------------------------------------------------------------------------+
334
+
335
+ A status of error indicates the an error occurred while processing the
336
+ transaction. These are almost always networking errors; see the
337
+ Troubleshooting section for more details. If the status is error, then the
338
+ errortype parameter will be set to one of the following:
339
+
340
+ Errortype
341
+
342
+ +------------------------------------------------------------------------------+
343
+ | Errortype Value | Description |
344
+ |-----------------+------------------------------------------------------------|
345
+ | cantconnect | Couldn't connect to the TrustCommerce gateway. Check your |
346
+ | | Internet connection to make sure it is up. |
347
+ |-----------------+------------------------------------------------------------|
348
+ | dnsfailure | The TCLink software was unable to resolve DNS hostnames. |
349
+ | | Make sure you have name resolving ability on the machine. |
350
+ |-----------------+------------------------------------------------------------|
351
+ | linkfailure | The connection was established, but was severed before the |
352
+ | | transaction could complete. |
353
+ |-----------------+------------------------------------------------------------|
354
+ | | The bank servers are offline and unable to authorize |
355
+ | failtoprocess | transactions. Try again in a few minutes, or try a card |
356
+ | | from a different issuing bank. |
357
+ +------------------------------------------------------------------------------+
358
+
359
+ Other parameters (such as avs or billingid) may be returned by the
360
+ transaction depending on the action; see sections covering the transaction
361
+ type you're running for detailed information on the specialized return
362
+ values.
363
+
364
+ VI. Credit Card Preauths and Sales
365
+
366
+ The 'preauth' and 'sale' actions are identical in terms of parameters and
367
+ function. The only difference is that a sale submits the item for capture
368
+ as well, while preauths run the authorization only and can be postauthed
369
+ at another time.
370
+
371
+ The parameters that can be passed with these action types are described in
372
+ the following two tables. The first table list required fields that you
373
+ must pass in order to send the transaction. The second table lists
374
+ optional fields that you can pass if you wish, but are not required.
375
+
376
+ Required Parameters
377
+
378
+ +------------------------------------------------------------------------------+
379
+ | Parameter Name | Description |
380
+ |----------------+-------------------------------------------------------------|
381
+ | amount | Amount of the transaction, in cents. (example: "500" is |
382
+ | | $5.00) |
383
+ |----------------+-------------------------------------------------------------|
384
+ | cc | Credit card number, digits only (no spaces or dashes) |
385
+ |----------------+-------------------------------------------------------------|
386
+ | exp | Credit card expiration date, in MMYY format. |
387
+ +------------------------------------------------------------------------------+
388
+
389
+ Optional Parameters
390
+
391
+ +------------------------------------------------------------------------------+
392
+ | Parameter Name | Default Value | Description |
393
+ |-----------------+---------------+--------------------------------------------|
394
+ | media | cc | "cc" for credit card or "ach" for ACH. |
395
+ |-----------------+---------------+--------------------------------------------|
396
+ | currency | usd | Currency code (see the Currency Table for |
397
+ | | | a list of allowed codes.) |
398
+ |-----------------+---------------+--------------------------------------------|
399
+ | | | AVS requested, "y" or "n". |
400
+ | | | |
401
+ | | | NOTE: |
402
+ | | | The AVS system is a useful way to help |
403
+ | | | screen for fraud. Unfortunately, card |
404
+ | | | issuers do not provide uniform support for |
405
+ | | | AVS; approximately 30% of US-based credit |
406
+ | | | cards do not have AVS capability, and AVS |
407
+ | | | is not available with any non-US cards at |
408
+ | | | all. The ONLY time that a transaction will |
409
+ | | | be declined due to AVS is in cases where |
410
+ | | | AVS is available and the address data |
411
+ | | | submitted with the transaction does not |
412
+ | | | match the data on file at the bank. If AVS |
413
+ | | | is unavailable, it will not cause the |
414
+ | | | transaction to fail. For this reason, you |
415
+ | avs | n | may wish to screen AVS results closely. |
416
+ | | | |
417
+ | | | Only the numeric parts of the address |
418
+ | | | (street address and zip code) are |
419
+ | | | verified. It should also be noted that on |
420
+ | | | occasion, AVS data is incorrect or not |
421
+ | | | entirely up-to-date. Treat AVS as a |
422
+ | | | helpful tool which can be used in |
423
+ | | | combination with other methods (dependent |
424
+ | | | upon your business model) for screening |
425
+ | | | transactions. If you trust AVS too |
426
+ | | | blindly, you may risk losing legitimate |
427
+ | | | sales. Some merchants (again, dependent |
428
+ | | | upon business model) choose to turn AVS |
429
+ | | | off altogether. You should analyze your |
430
+ | | | customer base and make the decision that |
431
+ | | | will work best for your business. |
432
+ |-----------------+---------------+--------------------------------------------|
433
+ | name | | Cardholder's name. |
434
+ |-----------------+---------------+--------------------------------------------|
435
+ | address1 | | First line of cardholder's street address. |
436
+ |-----------------+---------------+--------------------------------------------|
437
+ | address2 | | Second line of cardholder's street |
438
+ | | | address. |
439
+ |-----------------+---------------+--------------------------------------------|
440
+ | city | | Cardholder's city. |
441
+ |-----------------+---------------+--------------------------------------------|
442
+ | | | Two-character code for the cardholder's |
443
+ | state | | state, or the full region/province for |
444
+ | | | international addresses. |
445
+ |-----------------+---------------+--------------------------------------------|
446
+ | | | Cardholder's zip code, five or nine digits |
447
+ | zip | | with no spaces or dashes, or the full |
448
+ | | | postal code for international addresses. |
449
+ |-----------------+---------------+--------------------------------------------|
450
+ | country | | Cardholder's country, leave blank for US. |
451
+ |-----------------+---------------+--------------------------------------------|
452
+ | phone | | Cardholder's phone number. |
453
+ |-----------------+---------------+--------------------------------------------|
454
+ | email | | Cardholder's email address. |
455
+ |-----------------+---------------+--------------------------------------------|
456
+ | | | Customer's originating TCP/IP address |
457
+ | | | (e-commerce only). This is not your |
458
+ | | | server's IP, but that of the customer's |
459
+ | ip | | computer, as reported by the web server. |
460
+ | | | For example, in PHP the global variable |
461
+ | | | $_SERVER{'REMOTE_ADDR'} contains the |
462
+ | | | incoming IP address which should be passed |
463
+ | | | in this field. |
464
+ |-----------------+---------------+--------------------------------------------|
465
+ | | | Six-digit numeric code used to "force" the |
466
+ | | | transaction. |
467
+ | | | |
468
+ | | | NOTE: |
469
+ | | | |
470
+ | | | Some cards returned a declinetype of call. |
471
+ | | | This indicates that the card cannot be |
472
+ | | | automatically authorized. If you call the |
473
+ | | | card issuer, they may be able to give you |
474
+ | offlineauthcode | | a manual authorization, which will consist |
475
+ | | | of a six-digit auth code. You may then |
476
+ | | | push the transaction through by entering |
477
+ | | | that code into the offlineauthcode field. |
478
+ | | | Offline authorizations via offlineauthcode |
479
+ | | | can only be used with sale transactions. |
480
+ | | | Since offlineauthcode skips the |
481
+ | | | authorization phase altogether, it is not |
482
+ | | | guaranteed in the same way as a normal |
483
+ | | | authorization. Be careful with the use of |
484
+ | | | this parameter. |
485
+ +------------------------------------------------------------------------------+
486
+
487
+ AVS Returns Codes
488
+
489
+ +------------------------------------------------------------+
490
+ | Code | Description |
491
+ |------+-----------------------------------------------------|
492
+ | X | Exact match, 9 digit zip code. |
493
+ |------+-----------------------------------------------------|
494
+ | Y | Exact match, 5 digit zip code. |
495
+ |------+-----------------------------------------------------|
496
+ | A | Street address match only. |
497
+ |------+-----------------------------------------------------|
498
+ | W | 9 digit zip code match only. |
499
+ |------+-----------------------------------------------------|
500
+ | Z | 5 digit zip code match only. |
501
+ |------+-----------------------------------------------------|
502
+ | N | No match on street address or zip code. |
503
+ |------+-----------------------------------------------------|
504
+ | U | AVS unavailable on this card. |
505
+ |------+-----------------------------------------------------|
506
+ | G | Non-US card issuer, AVS unavailable. |
507
+ |------+-----------------------------------------------------|
508
+ | R | Card issuer system currently down, try again later. |
509
+ |------+-----------------------------------------------------|
510
+ | E | Error, ineligible - not a mail/phone order. |
511
+ |------+-----------------------------------------------------|
512
+ | S | Service not supported. |
513
+ |------+-----------------------------------------------------|
514
+ | 0 | General decline or other error. |
515
+ +------------------------------------------------------------+
516
+
517
+ Preauth/Sale Example
518
+
519
+ params = {
520
+ 'custid': 'mycustid',
521
+ 'password': 'mypasswd',
522
+ 'action': 'preauth',
523
+ 'amount': '500',
524
+ 'cc': '4111111111111111',
525
+ 'exp': '0412',
526
+ 'name': 'Jennifer Smith',
527
+ 'address1': '123 Test St.',
528
+ 'city': 'Somewhere',
529
+ 'state': 'CA',
530
+ 'zip': '90001',
531
+ 'avs': 'y'
532
+ }
533
+
534
+ result = tclink.send(params)
535
+
536
+ if (result['status'] == 'approved'):
537
+ print 'Transaction was successful'
538
+ elif (result['status'] == 'decline'):
539
+ print 'Transaction declined. Reason: ', result['declinetype']
540
+ elif (result['status'] == 'baddata'):
541
+ print 'Improperly formatted data. Offending fields: ', result['offenders']
542
+ else:
543
+ print 'An error occurred: ', result['errortype']
544
+
545
+ print 'Here are the full details:'
546
+ print result
547
+
548
+ VII. Card Verification Value (CVV)
549
+
550
+ Another method for cardholder verification is the CVV system. Visa cards
551
+ use what is called a CVV(II) or CVV2 code; MasterCard calls it CVC2, and
552
+ American Express calls it CID. CVV(II) and CVC2 (Visa/MC) are located on
553
+ the back of the credit card, printed in ink on the signature strip. The
554
+ number is the last three digits on the right hand side of the long string
555
+ of numbers on the strip. In the case of CID (AmEx), the number is a
556
+ four-digit value located on the front of the card, printed just above the
557
+ card number on the left hand side. This value is passed to TCLink through
558
+ the following parameter.
559
+
560
+ CVV Parameters
561
+
562
+ +------------------------------------------------------------------------------+
563
+ | Parameter Name | Description |
564
+ |----------------+-------------------------------------------------------------|
565
+ | cvv | A three or four digit CVV number. |
566
+ |----------------+-------------------------------------------------------------|
567
+ | checkcvv | Set to "n" to disable CVV check, even if the value is |
568
+ | | passed. Default is "y". |
569
+ +------------------------------------------------------------------------------+
570
+
571
+ The CVV value will be checked if anything is passed in this parameter. (If
572
+ you don't include the parameter, no CVV test will be run.) If the CVV
573
+ matches, the transaction will run as normal. If it does not, you will
574
+ receive a status of decline, and a declinetype of cvv.
575
+
576
+ In some cases you may wish to pass the CVV code without actually checking
577
+ to confirm that it is correct. In that case set checkcvv=n.
578
+
579
+ CVV Example
580
+
581
+ params = {
582
+ 'custid': 'mycustid',
583
+ 'password': 'mypasswd',
584
+ 'action': 'sale',
585
+ 'amount': '500',
586
+ 'cc': '4111111111111111',
587
+ 'exp': '0412',
588
+ 'cvv': '123'
589
+ }
590
+
591
+ result = tclink.send(params)
592
+
593
+ if (result['status'] == 'decline'):
594
+ if (result['declinetype'] == 'cvv'):
595
+ print 'The CVV number is not valid.'
596
+
597
+ VIII. Card-Present Transactions
598
+
599
+ In a retail environment with a card swiper, you may wish to pass magnetic
600
+ stripe data along with the other credit card information on a preauth or
601
+ sale. There are two parameters which you can use to send this data, named
602
+ track1 and track2. Each one is for a different type of track data, and
603
+ depends on the type of card reader being used.
604
+
605
+ Card-Present Parameters
606
+
607
+ +--------------------------------------------------+
608
+ | Parameter Name | Description |
609
+ |----------------+---------------------------------|
610
+ | track1 | Up to 79 bytes of Track 1 data. |
611
+ |----------------+---------------------------------|
612
+ | track2 | Up to 40 bytes of Track 2 data. |
613
+ +--------------------------------------------------+
614
+
615
+ You can include all data read from the track, but only data between the
616
+ start sentinel (a '%' character for track1 and a ';' for track2) and the
617
+ end sentinel ('?') will be used. Everything outside the start and end
618
+ sentinels (such as the trailing LRC character) will be discarded.
619
+
620
+ The cc and exp fields may be passed, but are not required, since they will
621
+ be extracted from the track data. If you do pass one or both of these
622
+ fields, however, and it does not match the data extracted from the track
623
+ data, a status of baddata and an error mismatch will be returned.
624
+
625
+ If both track1 and track2 data are passed, the system will choose track1
626
+ by default for the authorization, and track2 will be discarded.
627
+
628
+ Generally AVS and address data are not necessary for swiped transactions,
629
+ but you may pass them anyway if you choose. All data passed will be saved
630
+ in the vault and can be downloaded for reports and later analysis.
631
+
632
+ Card Present Example
633
+
634
+ params = {
635
+ 'custid': 'mycustid',
636
+ 'password': 'mypasswd',
637
+ 'action': 'sale',
638
+ 'amount': '500'
639
+ }
640
+
641
+ params['track1'] = CardReader.readMagStripe()
642
+
643
+ result = tclink.send(params)
644
+
645
+ IX. ACH
646
+
647
+ ACH, also known as electronic checks, is very different from credit cards
648
+ in that it allow a direct debit or credit to a checking account. The
649
+ concept of "authorization" does not exist; it is purely a money transfer.
650
+ For this reason, the only transaction types available for ACH are sale and
651
+ credit. ACH credits are identical to all other types of credits in the
652
+ TrustCommerce system, so please refer to postauths, credits and
653
+ chargebacks for details on issuing credits.
654
+
655
+ ACH sales take the same parameters as credit card sales, with the
656
+ exception of the "cc" and "exp" fields. Instead, use the following
657
+ parameters.
658
+
659
+ ACH Parameters
660
+
661
+ +------------------------------------------------------------------------------+
662
+ | Parameter Name | Description |
663
+ |----------------+-------------------------------------------------------------|
664
+ | routing | The routing number of the bank being debited. |
665
+ |----------------+-------------------------------------------------------------|
666
+ | account | The account number of the person or business being debited. |
667
+ +------------------------------------------------------------------------------+
668
+
669
+ AVS is not available for ACH transactions, so the AVS setting is ignored.
670
+
671
+ There is only one declinetype returned from unsuccessful ACH sales, and
672
+ that is "decline."
673
+
674
+ ACH Example
675
+
676
+ params = {
677
+ 'custid': 'mycustid',
678
+ 'password': 'mypass',
679
+ 'action': 'sale',
680
+ 'media': 'ach',
681
+ 'amount': '1000',
682
+ 'routing': '789456124',
683
+ 'account': '55544433221'
684
+ }
685
+
686
+ tclink.send(params)
687
+
688
+ X. Postauths, Credits, and Chargebacks
689
+
690
+ These three transaction types are similar in that they reference a
691
+ successful transaction previously executed through the TrustCommerce
692
+ system. These transaction types will not accept credit card information or
693
+ other personal information fields. There is only one required parameter.
694
+
695
+ Required Parameters
696
+
697
+ +------------------------------------------------------------------------------+
698
+ | Parameter Name | Description |
699
+ |----------------+-------------------------------------------------------------|
700
+ | transid | The transaction ID (format: nnn-nnnnnnnnnn) of the |
701
+ | | referenced transaction. |
702
+ +------------------------------------------------------------------------------+
703
+
704
+ In addition, postauths and credits can take an optional amount parameter.
705
+
706
+ Optional Parameters
707
+
708
+ +------------------------------------------------------------------------------+
709
+ | Parameter Name | Description |
710
+ |----------------+-------------------------------------------------------------|
711
+ | amount | The amount, in cents, to credit or postauth if it is not |
712
+ | | the same as the original amount. |
713
+ +------------------------------------------------------------------------------+
714
+
715
+ If no amount is passed, the default will be to take the amount from the
716
+ original transaction. If, however, you wish to credit or postauthorize
717
+ less than the original amount, you may pass this parameter.
718
+
719
+ Credit Example
720
+
721
+ params = {
722
+ 'custid': 'mycustid',
723
+ 'password': 'mypass',
724
+ 'action': 'credit',
725
+ 'transid': '001-0000111101'
726
+ }
727
+
728
+ tclink.send(params)
729
+
730
+ if (result['status'] != 'accepted'):
731
+ print 'Credit unsuccessful.'
732
+
733
+ XI. Citadel (Billing IDs)
734
+
735
+ The Citadel enables you to store customer billing information in an
736
+ encrypted TrustCommerce database. This information can then be recalled
737
+ with a single six-character alphanumeric code known as a billing ID.
738
+ Besides offloading the liability of storing sensitive data such as credit
739
+ card numbers from your business to TrustCommerce, the Citadel can also
740
+ simplify application development on your servers.
741
+
742
+ The Citadel has two unique actions, store and unstore. These transction
743
+ types allow you to create, update, and deactivate billing IDs. Once
744
+ stored, the billing ID will be passed in place of the many billing
745
+ information fields for preauth and sale transactions.
746
+
747
+ Store Parameters
748
+
749
+ The store transaction looks very similar to a preauth or sale. You may
750
+ pass credit card information , billing and shipping address, or even ACH
751
+ information.
752
+
753
+ +------------------------------------------------------------------------------+
754
+ | Parameter Name | Description |
755
+ |----------------+-------------------------------------------------------------|
756
+ | verify | When set to "y", a $1.00 preauth will be run on the card to |
757
+ | | ensure that it is valid. |
758
+ |----------------+-------------------------------------------------------------|
759
+ | billingid | Pass if you wish to update values of an existing billing |
760
+ | | ID. |
761
+ +------------------------------------------------------------------------------+
762
+
763
+ You can update information on existing billing IDs by passing the
764
+ billingid field along with the store transaction. If you wish to erase the
765
+ data contained in a field, pass the exact string "null" (four characters,
766
+ all lower case) as the parameter value.
767
+
768
+ The verify parameter is useful for ensuring that the card number is valid
769
+ if you are not planning to bill the customer right away. It has no effect
770
+ for ACH billing IDs, because there is no such thing as an ACH preauth. It
771
+ is recommended that you pass avs=y for further verification of the
772
+ cardholder's data. Please note: normally, billing ID storage returns a
773
+ status of accepted, because the card is unverified. If you use the verify
774
+ parameter, however, it will return approved upon success.
775
+
776
+ Unstore Parameters
777
+
778
+ The unstore action takes a single parameter:
779
+
780
+ +------------------------------------------------------------------------------+
781
+ | Parameter Name | Description |
782
+ |----------------+-------------------------------------------------------------|
783
+ | billingid | The six-character alphanumeric billing ID returned by a |
784
+ | | previous store transaction. |
785
+ +------------------------------------------------------------------------------+
786
+
787
+ Unstore removes the billing ID from active use, and you won't be able to
788
+ run further transactions on it. For your convenience, however, it does
789
+ remain visible in Vault (flagged as an inactive ID), so you can still look
790
+ up old IDs if needed.
791
+
792
+ Billing ID Example
793
+
794
+ To run a billing ID transaction, pass the billingid parameter to a preauth
795
+ or a sale in place of all of the usual billing info fields (name, cc, exp,
796
+ routing, account, etc). That's all there is to it! You'll find that your
797
+ sale or preauth transactions are now only a few parameters: custid,
798
+ password, billingid, and amount.
799
+
800
+ # First, store a new ID.
801
+ params = {
802
+ 'custid': 'mycustid',
803
+ 'password': 'mypass',
804
+ 'action': 'store',
805
+ 'cc': '4111111111111111',
806
+ 'exp': '0412',
807
+ 'name': 'Jennifer Smith'
808
+ }
809
+
810
+ result = tclink.send(params)
811
+
812
+ if (result['status'] == 'accepted'):
813
+ # It was successfully stored. Now try running a transaction on the new ID.
814
+ billingid = result['billingid']
815
+ params2 = {
816
+ 'custid': 'mycustid',
817
+ 'password': 'mypass',
818
+ 'action': 'sale',
819
+ 'billingid': billingid,
820
+ 'amount': '995'
821
+ }
822
+ tclink.send(params2);
823
+ # Unstore the ID now that we are done.
824
+ params3 = {
825
+ 'custid': 'mycustid',
826
+ 'password': 'mypass',
827
+ 'action': 'unstore',
828
+ 'billingid': billingid
829
+ }
830
+ tclink.send(params3)
831
+
832
+ XII. Recurring Billing
833
+
834
+ Recurring billing (also called "subscription billing") is an extension of
835
+ the billing ID system. There are four parameters that are added to a store
836
+ which turn the billing ID into a recurring billing ID. They are described
837
+ below.
838
+
839
+ Recurring Parameters
840
+
841
+ +------------------------------------------------------------------------------+
842
+ | Parameter Name | Required? | Default Value | Description |
843
+ |--------------------+-----------+---------------+-----------------------------|
844
+ | cycle | X | | Repeat cycle in days, |
845
+ | | | | weeks, months, or years. |
846
+ |--------------------+-----------+---------------+-----------------------------|
847
+ | amount | X | | Amount to bill in cents. |
848
+ |--------------------+-----------+---------------+-----------------------------|
849
+ | | | | Date to start, or else |
850
+ | start | | | offset from current date |
851
+ | | | | (defaults to now). |
852
+ |--------------------+-----------+---------------+-----------------------------|
853
+ | payments | | 0 | Number of payments to make |
854
+ | | | | (defaults to infinite). |
855
+ |--------------------+-----------+---------------+-----------------------------|
856
+ | | | | If 'y', performs the card |
857
+ | | | | authorization immediately. |
858
+ | authnow | | n | Funds will be captured upon |
859
+ | | | | first payment cycle. |
860
+ | | | | (requires start date) |
861
+ |--------------------+-----------+---------------+-----------------------------|
862
+ | | | | If 'y', the final payment |
863
+ | lastpaymentunstore | | y | in the billing cycle will |
864
+ | | | | result in the billing ID |
865
+ | | | | being unstored. |
866
+ +------------------------------------------------------------------------------+
867
+
868
+ Cycle is in the format of a number between 1 and 99 followed by a
869
+ character representing the time frame: 'd' for days, 'w' for weeks, 'm'
870
+ for months or 'y' for years. For example, a value of "3d" in this field
871
+ would cause the charge to recur every three days, whereas a value of "2m"
872
+ would cause it to recur every two months.
873
+
874
+ Amount is identical to the amount passed to a sale or a preauth, and
875
+ indicates the amount of each charge made during the subscription.
876
+
877
+ Start is an optional field which allows the delay of the cycle's start. By
878
+ default, the cycle starts the day the billing ID is stored. If it is
879
+ specified in the format YYYY-MM-DD, it indicates a date when the first
880
+ payment should be made. (For example, "2005-02-01" would be February 1,
881
+ 2005.) If it is in the same format as the cycle (a number followed by a
882
+ character), it indicates an offset from the current date. (For example,
883
+ "1d" would start the billing tomorrow.)
884
+
885
+ If there is no start parameter, the first transaction is run immediately
886
+ (and can cause the store action to return a "decline" or other result you
887
+ would expect from a sale). Other return parameters associated with auths,
888
+ such as avs code, will be returned as well.
889
+
890
+ If you pass authnow=y, an immediate authorization will be performed for
891
+ the payment amount, but the funds will not be captured until the start
892
+ date is reached. This is handy for free trial accounts: because the funds
893
+ are authorized immediately, you are assured the money. If they cancel
894
+ sometime between the time the billing ID is stored and the start date of
895
+ the billing cycle, you can unstore the ID and they will never be charged.
896
+ Their free trial will be the time between the billing ID store and the
897
+ billing cycle start date. Authnow requires that a start date be specified.
898
+
899
+ The payments field is also optional; left blank or set to zero it will
900
+ continue the billing cycle until it is manually interrupted by an unstore,
901
+ or by updating the billing ID with cycle set to "null". Once the final
902
+ payment is made, the billing ID will be unstored, unless
903
+ lastpaymentunstore is set to 'n'. lastpaymentunstore should only be used
904
+ when the number of payments is specified.
905
+
906
+ There is only one instance in which the cycle parameter is not required,
907
+ and that is a one-time future payment. By setting payments to "1" and
908
+ passing a start date, the payment will be made on that date and then the
909
+ billing ID unstored. The cycle parameter may be included with a one-time
910
+ future payment, but it will have no effect.
911
+
912
+ Recurring Billing Example
913
+
914
+ params = {
915
+ 'custid': 'mycustid',
916
+ 'password': 'mypass',
917
+ 'action': 'store',
918
+ 'cc': '4111111111111111',
919
+ 'exp': '0412',
920
+ 'name': 'Jennifer Smith',
921
+ 'amount': '1200'
922
+ }
923
+
924
+ mode = chooseSubscriptionMode()
925
+
926
+ if (mode == 1):
927
+ # Make a payment every day, infinitely (or until someone manually disables it)
928
+ params['cycle'] = '1d';
929
+ elif (mode == 2):
930
+ # Make a payment once a month for one year
931
+ params['cycle'] = '1m';
932
+ params['payments'] = '12';
933
+ elif (mode == 3):
934
+ # Make a payment every six weeks, starting one week from now
935
+ params['cycle'] = '62';
936
+ params['start'] = '1w';
937
+ elif (mode == 4):
938
+ # Make annual payments, and don't start until September 1, 2007
939
+ params['cycle'] = '1y';
940
+ params['start'] = '2007-09-01';
941
+ elif (mode == 5):
942
+ # Make a one time payment in 45 days
943
+ params['start'] = '45d';
944
+ params['payments'] = '1';
945
+
946
+ tclink.send(params)
947
+
948
+ XIII. TC Wallet
949
+
950
+ The TC Wallet is an additional service offered by the TrustCommerce
951
+ gateway that allows you to run many small micro payments which are later
952
+ lumped together and submitted as a single, large payment. This can offer a
953
+ substantial savings for the merchant in transaction fees, as merchant
954
+ account providers tend to penalize merchants that run small payments.
955
+
956
+ Wallet Parameters
957
+
958
+ The Wallet is an extension of the billing ID system. It adds three new
959
+ parameters to the store action, described below.
960
+
961
+ +------------------------------------------------------------------------------+
962
+ | Parameter Name | Description |
963
+ |----------------+-------------------------------------------------------------|
964
+ | wallet | "y" to enable the wallet. |
965
+ |----------------+-------------------------------------------------------------|
966
+ | walletsize | Accumulated amount, in cents, before the wallet is |
967
+ | | submitted for capture. |
968
+ |----------------+-------------------------------------------------------------|
969
+ | walletexposure | Length of time to wait before capturing the wallet. |
970
+ +------------------------------------------------------------------------------+
971
+
972
+ In order to enable wallets for the billing ID that you are storing, set
973
+ the "wallet" parameter to "y". The other two parameters are optional, as
974
+ there are default values attached to your TC account. If you wish to
975
+ change these default values (which are normally $10.00 and 72 hours)
976
+ please contact TrustCommerce. If you wish to change the values for an
977
+ individual billing ID without changing your defaults, include these
978
+ parameters.
979
+
980
+ Once the billing ID is stored, it is possible to use a new action type on
981
+ the ID called walletsale. It is identical to a sale in all ways, except
982
+ that it can only be used on wallet-enabled billing IDs, and it can accept
983
+ amounts anywhere from $0.01 up to the size of the wallet. Walletsale will
984
+ usually return "approved", but it may return "decline" if the stored
985
+ credit card fails to re-authorize when the current wallet is exceeded.
986
+ Except for these two modifications (the wallet parameters on the store,
987
+ and changing sales to walletsales), there is no extra development to be
988
+ done client-side to make wallets work. Captures happen automatically after
989
+ walletexposure has expired or the walletamount has been used up;
990
+ reauthorizations also happen automatically.
991
+
992
+ Wallet Example
993
+
994
+ # First, store a new ID with the wallet enabled.
995
+ params = {
996
+ 'custid': 'mycustid',
997
+ 'password': 'mypass',
998
+ 'action': 'store',
999
+ 'cc': '4111111111111111',
1000
+ 'exp': '0412',
1001
+ 'name': 'Jennifer Smith',
1002
+ 'wallet': 'y'
1003
+ }
1004
+
1005
+ result = tclink.send(params)
1006
+
1007
+ if (result['status'] == 'approved'):
1008
+ # We have a new wallet at our disposal. Run a micropayment on it.
1009
+ billingid = result['billingid']
1010
+ params2 = {
1011
+ 'custid': 'mycustid',
1012
+ 'password': 'mypass',
1013
+ 'action': 'walletsale',
1014
+ 'billingid': billingid,
1015
+ 'amount': '995'
1016
+ }
1017
+ tclink.send(params)
1018
+
1019
+ XIV. CrediGuard - Neural Network Fraud Scoring
1020
+
1021
+ When the CrediGuard Neural Network is enabled, a fraud score is assigned
1022
+ to each transaction based on its appearance of fraud or legitimacy. This
1023
+ score is determined by running each transaction through an advanced
1024
+ artificial intelligence neural network that is trained to recognize
1025
+ fraudulent transactions.
1026
+
1027
+ The fraud score represents an evaluation of how legitimate or fraudulent
1028
+ the transaction appears. A fraud score close to 0 means that the
1029
+ transaction is likely to be fraudulent, while a fraud score close to 100
1030
+ means that the transaction is likely to be legitimate.
1031
+
1032
+ The CrediGuard Score Threshold is a number from 0 to 100 that controls how
1033
+ restrictive the CrediGuard fraud screening system should be. Any
1034
+ transaction with a fraud score less than the CrediGuard score threshold
1035
+ will be declined. All other transactions will be accepted as per usual.
1036
+ The following chart sums up the effects of the possible CrediGuard score
1037
+ threshold ranges:
1038
+
1039
+ +--------------------------------------------+
1040
+ | Score Threshold Range | Blocking Effect |
1041
+ |-----------------------+--------------------|
1042
+ | 0 | Allow All |
1043
+ |-----------------------+--------------------|
1044
+ | 1 - 25 | Allow Most |
1045
+ |-----------------------+--------------------|
1046
+ | 26 - 50 | Normal |
1047
+ |-----------------------+--------------------|
1048
+ | 51 - 75 | Restrictive |
1049
+ |-----------------------+--------------------|
1050
+ | 76 - 100 | Highly Restrictive |
1051
+ +--------------------------------------------+
1052
+
1053
+ The default score threshold can be configured within the Vault web
1054
+ interface. To override the default score threshold, you can optionally
1055
+ pass in an extra parameter to set a different score threshold for the
1056
+ current transaction only:
1057
+
1058
+ CrediGuard Parameters
1059
+
1060
+ +------------------------------------------------------------------------------+
1061
+ | Parameter Name | Description |
1062
+ |----------------+-------------------------------------------------------------|
1063
+ | | The fraud threshold for the current transaction. If the |
1064
+ | threshold | transaction receives a Fraud Score below this threshold, it |
1065
+ | | will be declined. |
1066
+ +------------------------------------------------------------------------------+
1067
+
1068
+ With Neural Network scoring enabled, the return parameters for each
1069
+ transaction will contain an additional parameter for the calculated fraud
1070
+ score:
1071
+
1072
+ CrediGuard Return Parameters
1073
+
1074
+ +------------------------------------------------------------------------------+
1075
+ | Parameter Name | Description |
1076
+ |----------------+-------------------------------------------------------------|
1077
+ | fraudscore | The actual numeric score, 0 to 100, that the Crediguard |
1078
+ | | Neural Network gave to the transaction. |
1079
+ +------------------------------------------------------------------------------+
1080
+
1081
+ CrediGuard Neural Network Example
1082
+
1083
+ params = {
1084
+ 'custid': 'mycustid',
1085
+ 'password': 'mypasswd',
1086
+ 'action': 'sale',
1087
+ 'amount': '500',
1088
+ 'cc': '4111111111111111',
1089
+ 'exp': '0412',
1090
+ 'threshold': '45',
1091
+ }
1092
+
1093
+ result = tclink.send(params)
1094
+
1095
+ if (result['status'] == 'decline'):
1096
+ if (result['declinetype'] == 'fraud'):
1097
+ print 'Transaction declined based on fraud score.'
1098
+
1099
+ You may also wish to handle the score result yourself, perhaps with fuzzy
1100
+ logic that treats a certain range of low scores as out-and-out declines, a
1101
+ high range as approvals, and a middle range as accepting pending further
1102
+ processing. The last category of transactions could be set aside in your
1103
+ local database or perhaps trigger an email to a customer service rep, who
1104
+ could manually review the transaction, and perhaps call the customer for
1105
+ verification.
1106
+
1107
+ CrediGuard Fuzzy Logic Scoring Example
1108
+
1109
+ score_bottom = 30
1110
+ score_top = 70
1111
+
1112
+ params = {
1113
+ 'custid': 'mycustid',
1114
+ 'password': 'mypasswd',
1115
+ 'action': 'sale',
1116
+ 'amount': '500',
1117
+ 'cc': '4111111111111111',
1118
+ 'exp': '0412',
1119
+ 'threshold': score_bottom
1120
+ }
1121
+
1122
+ result = tclink.send(params)
1123
+
1124
+ if (result['status'] == 'decline'):
1125
+ if (result['declinetype'] == 'fraud'):
1126
+ print 'Transaction declined, score was too low.'
1127
+
1128
+ if (result['status'] == 'approved'):
1129
+ if (result['fraudscore'] > score_top):
1130
+ print 'Transaction approved'
1131
+ else:
1132
+ print 'Transaction accepted pending review'
1133
+
1134
+
1135
+
1136
+ XV. CrediGuard - Blacklists
1137
+
1138
+ Blacklists are used to block specific cardholder information that you know
1139
+ to be fraudlent. The most common example would be a customer who keeps
1140
+ using a credit card that caused chargebacks in the past. You can block the
1141
+ customer from running charges on the card by entering their credit card
1142
+ number as a blacklist value.
1143
+
1144
+ Blacklist rules are configured from within the Vault web interface and
1145
+ apply to all transactions, so there are no blacklist input parameters that
1146
+ you need to pass in with TCLink.
1147
+
1148
+ If a transaction is declined because it matches a blacklist rule that you
1149
+ have created, the reason for this decline will be returned via the
1150
+ following parameters:
1151
+
1152
+ Blacklist Return Parameters
1153
+
1154
+ +------------------------------------------------------------------------------+
1155
+ | Parameter Name | Description |
1156
+ |----------------+-------------------------------------------------------------|
1157
+ | | The name of the input field that contained the blacklisted |
1158
+ | blacklistfield | value. This can be one of "name", "cc", "zip", "address1", |
1159
+ | | "state", "country", "email", "phone", or "ip". |
1160
+ |----------------+-------------------------------------------------------------|
1161
+ | | The input value that triggered the blacklist decline. For |
1162
+ | blacklistvalue | instance, if the decline was due to a blacklisted IP |
1163
+ | | address, the offending IP address would be returned here. |
1164
+ +------------------------------------------------------------------------------+
1165
+
1166
+ Blacklist Example
1167
+
1168
+ params = {
1169
+ 'custid': 'mycustid',
1170
+ 'password': 'mypasswd',
1171
+ 'action': 'sale',
1172
+ 'amount': '500',
1173
+ 'cc': '4111111111111111',
1174
+ 'exp': '0412',
1175
+ }
1176
+
1177
+ result = tclink.send(params)
1178
+
1179
+ if (result['status'] == 'decline'):
1180
+ if (result['declinetype'] == 'blacklist'):
1181
+ print 'Transaction declined based on blacklist rule.'
1182
+ print 'The offending field was: ' + result['blacklistfield']
1183
+ print 'And the blacklisted value was: ' + result['blacklistvalue']
1184
+
1185
+
1186
+ XVI. CrediGuard - Velocity Control
1187
+
1188
+ In the world of payment processing, 'velocity' refers to limiting the
1189
+ number or amount of transactions which occur over a set period of time.
1190
+ This allows you, the merchant, to control your risk. The most common use
1191
+ of velocity would be to limit the dollar amount spent per day on a single
1192
+ credit card. But the CrediGuard package supports a wide variety of
1193
+ velocity parameters, allowing you to tailor them to match the usage
1194
+ patterns of your customers and thereby control your risk factor.
1195
+
1196
+ CrediGuard can perform four different types of velocity checks:
1197
+
1198
+ Velocity Types
1199
+
1200
+ +------------------------------------------------------------------+
1201
+ | Velocity Type | Description |
1202
+ |---------------+--------------------------------------------------|
1203
+ | Global | All transactions |
1204
+ |---------------+--------------------------------------------------|
1205
+ | Zipcode | Transactions on the same zipcode |
1206
+ |---------------+--------------------------------------------------|
1207
+ | IP Address | Transactions sent from the same Internet address |
1208
+ |---------------+--------------------------------------------------|
1209
+ | Credit Card | Transactions on the same credit card |
1210
+ +------------------------------------------------------------------+
1211
+
1212
+ Each of the four velocity types offers a count (number of transactions)
1213
+ and a total (dollar amount sum). For each of those two values, there are
1214
+ four time periods, ranging from one day to one month. All of these
1215
+ velocity settings are configured from within the Vault web interface and
1216
+ apply to all transactions, so there are no velocity input parameters that
1217
+ you need to pass in with TCLink.
1218
+
1219
+ If a transaction is declined on the basis of exceeding one of these
1220
+ velocity settings, the reason for this decline will be returned via the
1221
+ following parameters:
1222
+
1223
+ Velocity Return Parameters
1224
+
1225
+ +------------------------------------------------------------------------------+
1226
+ | Parameter Name | Description |
1227
+ |----------------+-------------------------------------------------------------|
1228
+ | | A brief string that contains the precise reason for the |
1229
+ | | velocity decline. The first part of this string contains a |
1230
+ | | velocity type, either "global", "zip", "ip", or "cc". The |
1231
+ | | next part of the string contains a time period, either |
1232
+ | velocitytype | "1day", "3day", "15day", or "30day". The end of the string |
1233
+ | | is "count" if the transaction count for the velocity type |
1234
+ | | and time period was exceeded, or "total" if the dollar |
1235
+ | | amount sum was exceeded. For example, "zip3daycount" would |
1236
+ | | be returned if the velocity transaction count was exceeded |
1237
+ | | for a particular zip code in a three day period. |
1238
+ |----------------+-------------------------------------------------------------|
1239
+ | | The input value that triggered the velocity decline. For |
1240
+ | velocityvalue | instance, if the decline was due to a zip code velocity |
1241
+ | | setting, the offending zip code would be returned here. |
1242
+ +------------------------------------------------------------------------------+
1243
+
1244
+ Velocity Example
1245
+
1246
+ params = {
1247
+ 'custid': 'mycustid',
1248
+ 'password': 'mypasswd',
1249
+ 'action': 'sale',
1250
+ 'amount': '500',
1251
+ 'cc': '4111111111111111',
1252
+ 'exp': '0412',
1253
+ }
1254
+
1255
+ result = tclink.send(params)
1256
+
1257
+ if (result['status'] == 'decline'):
1258
+ if (result['declinetype'] == 'velocity'):
1259
+ print 'Transaction declined based on ' + result['velocitytype'] + ' velocity controls.'
1260
+
1261
+ XVII. Purchase Level II
1262
+
1263
+ Purchase Level II is required by some merchant banks to achieve a
1264
+ qualified discount rate. It is only used for B2B or B2G transactions. If
1265
+ you are selling products directly to consumers, you do not need to use
1266
+ PL2. Additionally, PL2 can only be used if the cardholder is using one of
1267
+ the three types of commercial cards: a corporate card, a business card, or
1268
+ a purchasing card.
1269
+
1270
+ PL2 Input Parameters
1271
+
1272
+ PL2 has three new parameters:
1273
+
1274
+ +------------------------------------------------------------------------------+
1275
+ | Parameter Name | Description |
1276
+ |------------------+-----------------------------------------------------------|
1277
+ | purchaselevel | Specify as "2". |
1278
+ |------------------+-----------------------------------------------------------|
1279
+ | | The purchasing order number from their Visa purchasing |
1280
+ | purchaseordernum | card. This is either a 16 or a 17 digit number. If they |
1281
+ | | are not using a Visa purchasing card, do not pass this |
1282
+ | | field. |
1283
+ |------------------+-----------------------------------------------------------|
1284
+ | tax | The amount of tax, in cents, charged for the order. If |
1285
+ | | the order is tax exempt omit this field or set it to 0. |
1286
+ +------------------------------------------------------------------------------+
1287
+
1288
+ PL2 Output Parameter
1289
+
1290
+ A successful PL2 transaction will return one extra response parameter
1291
+
1292
+ +------------------------------------------------------------------------------+
1293
+ | Parameter Name | Description |
1294
+ |----------------+-------------------------------------------------------------|
1295
+ | commercialcard | Set to "S" for if it is a purchasing card, "R" if it is |
1296
+ | | corporate card, and "B" if it is a business card. |
1297
+ +------------------------------------------------------------------------------+
1298
+
1299
+ If you don't care what kind of card they used (which you probably don't),
1300
+ there is no reason to store or otherwise do anything with the
1301
+ commercialcard return value. TrustCommerce internally handles all the
1302
+ details for you. However, if you want this information for some reason,
1303
+ you can access it from the result parameters.
1304
+
1305
+ Purchase Level II Example
1306
+
1307
+ params = {
1308
+ 'custid': 'mycustid',
1309
+ 'password': 'mypass',
1310
+ 'action': 'sale',
1311
+ 'cc': '4111111111111111',
1312
+ 'exp': '0412',
1313
+ 'amount': '1000'
1314
+ 'name': 'Jennifer Smith',
1315
+ 'purchaselevel': '2'
1316
+ 'purchaseordernum': '12345678901234567'
1317
+ 'tax': '83' # $10.00 x 8.25% sales tax = $0.83
1318
+
1319
+ }
1320
+
1321
+ result = tclink.send(params)
1322
+
1323
+ if (result['status'] == 'approved'):
1324
+ print 'Approved'
1325
+
1326
+ XVIII. Automated Fulfillment
1327
+
1328
+ TrustCommerce offers the unique feature of automated fulfillment, by which
1329
+ orders submitted through the TCLink API can contain parameters describing
1330
+ product information. This information is then passed on to your
1331
+ fulfillment house, which ships the products automatically. Even if you
1332
+ aren't using automated fulfillment, you can use the order line item
1333
+ specification parameters to store information in the TrustCommerce
1334
+ transaction database about the type of products ordered.
1335
+
1336
+ First, you may wish to specify the shipping address for the customer. If
1337
+ it is the same as the billing address, you need not duplicate it, but
1338
+ rather just send the shiptosame parameter set to y. The table below lists
1339
+ the shipping parameters.
1340
+
1341
+ Ship To Parameters
1342
+
1343
+ +------------------------------------------------------------------------------+
1344
+ | Parameter Name | Description |
1345
+ |-----------------+------------------------------------------------------------|
1346
+ | shiptosame | y or n (defaults to n). If "y", then no other shipto_ |
1347
+ | | parameters should be passed. |
1348
+ |-----------------+------------------------------------------------------------|
1349
+ | shipto_name | Name of the product recipient. |
1350
+ |-----------------+------------------------------------------------------------|
1351
+ | shipto_address1 | First line of shipping address. |
1352
+ |-----------------+------------------------------------------------------------|
1353
+ | shipto_address2 | Second line (if any) of shipping address. |
1354
+ |-----------------+------------------------------------------------------------|
1355
+ | shipto_city | City. |
1356
+ |-----------------+------------------------------------------------------------|
1357
+ | shipto_state | State. |
1358
+ |-----------------+------------------------------------------------------------|
1359
+ | shipto_zip | Zip code, five or nine digits (no spaces or dashes). |
1360
+ |-----------------+------------------------------------------------------------|
1361
+ | shipto_country | Country, leave blank for US. |
1362
+ +------------------------------------------------------------------------------+
1363
+
1364
+ Order Header Parameters
1365
+
1366
+ Second, some additional data about the order as a whole should be passed
1367
+ in the form of the following parameters.
1368
+
1369
+ +------------------------------------------------------------------------------+
1370
+ | Parameter Name | Description |
1371
+ |------------------+-----------------------------------------------------------|
1372
+ | shippingcode | Three character code indicating shipping method to use. |
1373
+ |------------------+-----------------------------------------------------------|
1374
+ | shippinghandling | The total cost of shipping and handling, in cents. |
1375
+ |------------------+-----------------------------------------------------------|
1376
+ | numitems | Total number of distinct items (product codes) in the |
1377
+ | | order. |
1378
+ +------------------------------------------------------------------------------+
1379
+
1380
+ Order Detail Parameters
1381
+
1382
+ Finally, a number of parameters which describe the details of each type of
1383
+ item must be passed. In the table below, the 'X' character in the
1384
+ parameter name should be replaced with a digit indicating which item it
1385
+ applies to. For example, if numitems is set to three, then you should pass
1386
+ three product codes, in the form of productcode1, productcode2, and
1387
+ productcode3.
1388
+
1389
+ +------------------------------------------------------------------------------+
1390
+ | Parameter Name | Description |
1391
+ |-------------------+----------------------------------------------------------|
1392
+ | productcodeX | The alphanumeric product code defined by the fulfillment |
1393
+ | | house. |
1394
+ |-------------------+----------------------------------------------------------|
1395
+ | quantityX | The number of items of this type to be shipped. |
1396
+ |-------------------+----------------------------------------------------------|
1397
+ | priceX | The price of all items of this type not including sales |
1398
+ | | tax or shipping, in cents. |
1399
+ |-------------------+----------------------------------------------------------|
1400
+ | taxX | Total tax charged for all items of this product code. |
1401
+ |-------------------+----------------------------------------------------------|
1402
+ | shippinghandlingX | Total shipping and handling charged for all items of |
1403
+ | | this product code. |
1404
+ +------------------------------------------------------------------------------+
1405
+
1406
+ Please note: the shippinghandling field and the shippinghandlingX fields
1407
+ are mutually exclusive. Use one or the other, but not both. If you're not
1408
+ sure which to use, please contact your fulfillment house.
1409
+
1410
+ Fulfillment Example
1411
+
1412
+ params = {
1413
+ 'custid': 'mycustid',
1414
+ 'password': 'mypass',
1415
+ 'action': 'preauth',
1416
+ 'cc': '4111111111111111',
1417
+ 'exp': '0412',
1418
+ 'amount': '1979', # Total of items, tax, and shipping
1419
+ 'name': 'Jennifer Smith',
1420
+ 'address1': '123 Test St.',
1421
+ 'city': 'Somewhere',
1422
+ 'state': 'CA',
1423
+ 'zip': '90001',
1424
+ 'shiptosame': 'y', # Shipping address is same as billing address
1425
+
1426
+ 'numitems': '2', # Two total product codes will be described
1427
+ 'shippingcode': 'OVRNGT',
1428
+ 'shippinghandling': '695',
1429
+
1430
+ 'productcode1': 'PCODE1',
1431
+ 'quantity1': '3',
1432
+ 'price1': '600', # Item 1 costs $2.00, and there are 3 of them
1433
+ 'tax1': '144', # Tax of 8%
1434
+
1435
+ 'productcode2': 'PCODE2',
1436
+ 'quantity2': '1',
1437
+ 'price2': '500', # Item 1 costs $5.00, there's only one
1438
+ 'tax2': '40' # Tax of 8%
1439
+ }
1440
+
1441
+ tclink.send(params)
1442
+
1443
+ XIX. Batch Processing
1444
+
1445
+ The TrustCommerce Batch Processing service allows programmers to submit an
1446
+ unlimited number of transactions in a single file for offline processing.
1447
+ The file can contain a mixture of transaction types (preauths and
1448
+ postauths, credits, sales, stores and unstores for example) and can use
1449
+ Citadel Billing IDs, ACH Routing codes or credit card information to
1450
+ identify the account to be charged. In fact, any field found in Appendix E
1451
+ - Input Field List of this guide can be included.
1452
+
1453
+ Naming Conventions
1454
+
1455
+ While there is no required naming convention for the transaction file sent
1456
+ to TrustCommerce, we recommend the convention shown in the table below.
1457
+
1458
+ The results file that we return to you will use your file name with the
1459
+ prefix "result-".
1460
+
1461
+ +------------------------------------------------------------------------------+
1462
+ | Recommended File Name | Description |
1463
+ |--------------------------------+---------------------------------------------|
1464
+ | | This is the input file containing the list |
1465
+ | | of transactions to be processed. |
1466
+ | | |
1467
+ | | This file MUST be in comma separated values |
1468
+ | | (CSV) format and the first row MUST contain |
1469
+ | | the field names for all fields that you |
1470
+ | | choose to include (See Appendix E .) |
1471
+ | | Individual records are not required to |
1472
+ | | contain values for each field. |
1473
+ | batch-[custid]-[mmddyy][x].txt | |
1474
+ | | [custid] is your numeric TrustCommerce |
1475
+ | | custid. [mmddyy] is a numeric date. |
1476
+ | | |
1477
+ | | [x] is an optional alpha identifier to |
1478
+ | | distinguish batches if multiple batches are |
1479
+ | | sent in one day. |
1480
+ | | |
1481
+ | | Do not include the "[" or "]"characters in |
1482
+ | | the file name. |
1483
+ |--------------------------------+---------------------------------------------|
1484
+ | | This file contains a response record for |
1485
+ | result-[your file name].txt | each transaction record sent in the batch |
1486
+ | | file. |
1487
+ +------------------------------------------------------------------------------+
1488
+
1489
+ +------------------------------------------------------------------------------+
1490
+ | NOTE: The records in the results file will be sequenced in exactly the same |
1491
+ | order as the original input file. If you require a more positive identifier |
1492
+ | for each record (invoice number for example) include the required value in |
1493
+ | the "ticket" field of your input file. This value will be echoed back to you |
1494
+ | in the "ticket" field of the results file. See the examples below. |
1495
+ +------------------------------------------------------------------------------+
1496
+
1497
+ Sample Batch Upload File
1498
+
1499
+ To invoke the Batch Processing service use your programming language's
1500
+ HTTPS POST function and point it at
1501
+ https://batch.trustcommerce.com/submit.php .
1502
+
1503
+ A sample batch upload file might look like this:
1504
+
1505
+ ticket,action,cc,exp,amount,name,email
1506
+ 01-1224,sale,4111111111111111,0412,999,Test Person,person@example.com
1507
+ 00-1175,preauth,4111111111111111,0412,333,Test Person,person@example.com
1508
+
1509
+ Sample Batch Response File
1510
+
1511
+ The response file will contain one response record for each uploaded
1512
+ transaction record.
1513
+
1514
+ The results file can then be downloaded interactively from the Vault or by
1515
+ invoking your language's HTTPS POST function pointed at
1516
+ https://batch.trustcommerce.com/download.php .
1517
+
1518
+ A sample response file might look like this:
1519
+
1520
+ ticket,status,transid,billingid,declinetype,errortype,offenders,avs
1521
+ 01-1224,approved,010-0001364786,,,,,N
1522
+ 00-1175,approved,010-0001364785,,,,,N
1523
+
1524
+ Status Reporting
1525
+
1526
+ Email is the primary means used by the Batch Processing service to provide
1527
+ status updates. Status updates will be sent to the same email address used
1528
+ for Daily Reports emails. This email address can be modifed on the
1529
+ "Settings" page of the Vault's web interface.
1530
+
1531
+ After uploading your file, the system will respond immediately with an
1532
+ "Acknowledged" message and then follow by sending an email with a subject
1533
+ similar to the following:
1534
+
1535
+ Subject: Batch File [your file name] Picked Up
1536
+
1537
+ The content of the mail will provide processing statistics including the
1538
+ number of records found in the file.
1539
+
1540
+ When processing is complete, a second e-mail will be sent. The subject
1541
+ this time will look like:
1542
+
1543
+ Subject: Batch File [your file name] Complete
1544
+
1545
+ The body of this email will contain relevant information including the
1546
+ number of approvals, declines, accepts and settlements.
1547
+
1548
+ Sample Code
1549
+
1550
+ The sample HTML code shown below illustrates the functionality of the
1551
+ Batch Processing service invocation of the TCLink API. It can be pasted
1552
+ into a file and loaded on your web browser in order to experiment with
1553
+ batch processing before you even begin to write your code.
1554
+
1555
+ Batch Upload Example
1556
+
1557
+ <html>
1558
+ <head> <title> TrustCommerce Batch Upload Interface </title> </head>
1559
+ <body>
1560
+ <h2> TrustCommerce Batch Upload Interface </h2>
1561
+
1562
+ <form action=https://batch.trustcommerce.com/submit.php method=post
1563
+ enctype=multipart/form-data>
1564
+ <table align=center border=1>
1565
+ <tr>
1566
+ <td> custid </td>
1567
+ <td> <input type=text name=custid> </td>
1568
+ <td> This is your TrustCommerce custid (required) </td>
1569
+ </tr>
1570
+ <tr>
1571
+ <td> password </td>
1572
+ <td> <input type=password name=password> </td>
1573
+ <td> This is your TrustCommerce password (required) </td>
1574
+ </tr>
1575
+ <tr>
1576
+ <td> batch file </td>
1577
+ <td> <input name=file type=file> </td>
1578
+ <td> This is the batch file to upload (required) </td>
1579
+ </tr>
1580
+ <tr>
1581
+ <td colspan=3> <input type=submit> </td>
1582
+ </tr>
1583
+ </table>
1584
+ </form>
1585
+ </body>
1586
+ </html>
1587
+
1588
+ Batch Results Download Example
1589
+
1590
+ <html>
1591
+ <head> <title> TrustCommerce Batch Results Download Interface </title> </head>
1592
+ <body>
1593
+ <h2> TrustCommerce Batch Results Download Interface </h2>
1594
+
1595
+ <form action=https://batch.trustcommerce.com/download.php method=post>
1596
+ <table align=center border=1>
1597
+ <tr>
1598
+ <td> custid </td>
1599
+ <td> <input type=text name=custid> </td>
1600
+ <td> This is your TrustCommerce custid (required) </td>
1601
+ </tr>
1602
+ <tr>
1603
+ <td> password </td>
1604
+ <td> <input type=password name=password> </td>
1605
+ <td> This is your TrustCommerce password (required) </td>
1606
+ </tr>
1607
+ <tr>
1608
+ <td> result file name </td>
1609
+ <td> <input name=file type=text> </td>
1610
+ <td> This is the result file name to download (required) </td>
1611
+ </tr>
1612
+ <tr>
1613
+ <td colspan=3> <input type=submit> </td>
1614
+ </tr>
1615
+ </table>
1616
+ </form>
1617
+ </body>
1618
+ </html>
1619
+
1620
+ XX. Vault Query API
1621
+
1622
+ The Vault website serves as a web-based interface for merchant
1623
+ reconciliation. On the back end, it is a complex database that tracks all
1624
+ transactional data for your TrustCommerce account. The information
1625
+ contained in the Vault can be accessed at the API level using a standard
1626
+ CGI query over HTTPS.
1627
+
1628
+ The query API returns data in CSV (comma separated value) format, which is
1629
+ just a flat text file with fields separated by commas, and records
1630
+ separated by newlines. (You can also request the data returned in an HTML
1631
+ table, which is useful for debugging.) The first line of the file contains
1632
+ the name of each field that will be returned in subsequent records.
1633
+
1634
+ The parameters that the query interface accepts are described in the table
1635
+ below.
1636
+
1637
+ Required Parameters
1638
+
1639
+ +------------------------------------------------------------------------------+
1640
+ | Parameter Name | Required? | Description |
1641
+ |----------------+-----------+-------------------------------------------------|
1642
+ | custid | X | TrustCommerce customer ID number. |
1643
+ |----------------+-----------+-------------------------------------------------|
1644
+ | password | X | The password for your custID. |
1645
+ |----------------+-----------+-------------------------------------------------|
1646
+ | format | | Set to "html" for human-readable HTML output, |
1647
+ | | | or "text" (default) for CSV text output. |
1648
+ |----------------+-----------+-------------------------------------------------|
1649
+ | | | Possible values are: chain, transaction, |
1650
+ | | | summary, or billingid, corresponding to the |
1651
+ | querytype | X | equivalent reports on the Vault website. Read |
1652
+ | | | the User's Guide for further description of |
1653
+ | | | each report type. |
1654
+ |----------------+-----------+-------------------------------------------------|
1655
+ | media | | Set to "cc" (default) or "ach" for media type. |
1656
+ |----------------+-----------+-------------------------------------------------|
1657
+ | begindate | | Begin date for query, format: MM-DD-YYYY |
1658
+ | | | HH:MM:SS |
1659
+ |----------------+-----------+-------------------------------------------------|
1660
+ | enddate | | End date for query, format: MM-DD-YYYY HH:MM:SS |
1661
+ |----------------+-----------+-------------------------------------------------|
1662
+ | chain | | Narrow search to a single chain of |
1663
+ | | | transactions. |
1664
+ |----------------+-----------+-------------------------------------------------|
1665
+ | transid | | Narrow search to a single transaction ID. |
1666
+ |----------------+-----------+-------------------------------------------------|
1667
+ | billingid | | Narrow search to a single billing ID. |
1668
+ |----------------+-----------+-------------------------------------------------|
1669
+ | | | Use 'y' or 'n'. For billing ID search. Show |
1670
+ | pastdue | | only recurring billing IDs that have been |
1671
+ | | | unable to capture the requested funds. |
1672
+ |----------------+-----------+-------------------------------------------------|
1673
+ | action | | Narrow search by action (preauth, sale, credit, |
1674
+ | | | etc). |
1675
+ |----------------+-----------+-------------------------------------------------|
1676
+ | status | | Narrow search by status (approved, accepted, |
1677
+ | | | decline, etc). |
1678
+ |----------------+-----------+-------------------------------------------------|
1679
+ | name | | Narrow search by cardholder name, partial or |
1680
+ | | | complete. |
1681
+ |----------------+-----------+-------------------------------------------------|
1682
+ | cc | | Narrow search by credit card number. |
1683
+ |----------------+-----------+-------------------------------------------------|
1684
+ | ticket | | Narrow search by contents of the ticket field. |
1685
+ |----------------+-----------+-------------------------------------------------|
1686
+ | limit | | Do not allow size of result set to exceed this |
1687
+ | | | number of records. |
1688
+ |----------------+-----------+-------------------------------------------------|
1689
+ | | | Report result set starting from this offset. |
1690
+ | offset | | Use this parameter in conjunction with limit in |
1691
+ | | | order to page through a large result set. |
1692
+ |----------------+-----------+-------------------------------------------------|
1693
+ | showcount | | Show the number of records returned on the last |
1694
+ | | | line of the result set. |
1695
+ +------------------------------------------------------------------------------+
1696
+
1697
+ The sample HTML code shown below illustrates the functionality of the
1698
+ query API. It can be pasted into a file and loaded on your web browser in
1699
+ order to try out some queries before you even begin to write your code.
1700
+
1701
+ Query Example HTML
1702
+
1703
+ <html>
1704
+ <head> <title> TrustCommerce Query Interface </title> </head>
1705
+ <body>
1706
+ <h2> TrustCommerce Query Interface </h2>
1707
+ <form action=https://vault.trustcommerce.com/query/>
1708
+ <table align=center border=1>
1709
+ <tr>
1710
+ <td> custid </td>
1711
+ <td> <input type=text name=custid> </td>
1712
+ <td> This is your TrustCommerce custid (required) </td>
1713
+ </tr>
1714
+ <tr>
1715
+ <td> password </td>
1716
+ <td> <input type=password name=password> </td>
1717
+ <td> This is your TrustCommerce password (required) </td>
1718
+ </tr>
1719
+ <tr>
1720
+ <td> format </td>
1721
+ <td> <select name=format> <option value=text>text</option>
1722
+ <option value=html>html</option></select></td>
1723
+ <td> Human readable (html) or computer readable (text) results</td>
1724
+ </tr>
1725
+ <tr>
1726
+ <td> Query type </td>
1727
+ <td> <select name=querytype>
1728
+ <option value=chain>chain</option>
1729
+ <option value=transaction>transaction</option>
1730
+ <option value=summary>summary</option>
1731
+ <option value=billingid>billingid</option>
1732
+ </select></td>
1733
+ <td> Type of query </td>
1734
+ </tr>
1735
+ <tr>
1736
+ <td> media </td>
1737
+ <td> <input type=text name=media value=cc> </td>
1738
+ <td> For now this must be cc </td>
1739
+ </tr>
1740
+ <tr>
1741
+ <td> begindate MM-DD-YYYY HH:MM:SS </td>
1742
+ <td> <input type=text name=begindate> </td>
1743
+ <td> Query begins at this date</td>
1744
+ </tr>
1745
+ <tr>
1746
+ <td> enddate MM-DD-YYYY HH:MM:SS </td>
1747
+ <td> <input type=text name=enddate> </td>
1748
+ <td> Query ends at this date</td>
1749
+ </tr>
1750
+ <tr>
1751
+ <td> chain </td>
1752
+ <td> <input type=text name=chain> </td>
1753
+ <td> Narrow search to a single chain of transactions </td>
1754
+ </tr>
1755
+ <tr>
1756
+ <td> transid </td>
1757
+ <td> <input type=text name=transid> </td>
1758
+ <td> Narrow search to a single transactions </td>
1759
+ </tr>
1760
+ <tr>
1761
+ <td> billingid </td>
1762
+ <td> <input type=text name=transid> </td>
1763
+ <td> Narrow search to a single billingid </td>
1764
+ </tr>
1765
+ <tr>
1766
+ <td> pastdue </td>
1767
+ <td> <select name=pastdue>
1768
+ <option value=y>y</option>
1769
+ <option value=n>n</option>
1770
+ </select></td>
1771
+ <td> Use 'y' or 'n'. For billing ID search. Show only recurring billing IDs
1772
+ that have been unable to capture the requested funds. </td>
1773
+ </tr>
1774
+ <tr>
1775
+ <td> action </td>
1776
+ <td> <input type=text name=action> </td>
1777
+ <td> Narrow search by action. (example: preauth,postauth) </td>
1778
+ </tr>
1779
+ <tr>
1780
+ <td> status </td>
1781
+ <td> <input type=text name=status> </td>
1782
+ <td> Narrow search by status. (example: approved,accepted) </td>
1783
+ </tr>
1784
+ <tr>
1785
+ <td> name </td>
1786
+ <td> <input type=text name=name> </td>
1787
+ <td> Narrow search by name. </td>
1788
+ </tr>
1789
+ <tr>
1790
+ <td> cc </td>
1791
+ <td> <input type=text name=cc> </td>
1792
+ <td> Narrow search by credit card field. </td>
1793
+ </tr>
1794
+ <tr>
1795
+ <td> limit </td>
1796
+ <td> <input type=text name=limit value=20> </td>
1797
+ <td> Limit results to this number of fields (not used for summary)</td>
1798
+ </tr>
1799
+ <tr>
1800
+ <td> offset </td>
1801
+ <td> <input type=text name=offset value=0> </td>
1802
+ <td> Report results at this offset (used with limit to page through results)</td>
1803
+ </tr>
1804
+ <tr>
1805
+ <td> showcount </td>
1806
+ <td> <select name=showcount>
1807
+ <option value=y>yes</option>
1808
+ <option value=n>no</option>
1809
+ </select></td>
1810
+ <td> Show the number of not-limited rows on the last line of the result</td>
1811
+ </tr>
1812
+ <tr>
1813
+ <td colspan=3> <input type=submit> </td>
1814
+ </tr>
1815
+ </table>
1816
+ </form>
1817
+ </body>
1818
+ </html>
1819
+
1820
+ Appendix A - Test Data
1821
+
1822
+ While testing, you may wish to experiment with the different responses
1823
+ that the gateway can generate. The following test card numbers will
1824
+ produce an approval, and have address data as listed, for testing AVS. If
1825
+ you wish to test CVV, the code listed int he right-hand column is the
1826
+ correct CVV code, Other valid credit cards will work, but will produce a
1827
+ 'U' AVS code.
1828
+
1829
+ Please note: these cards ONLY work on transactions flagged as demo, or
1830
+ while your account is in "test" mode! For a live transaction, they will
1831
+ all return a decline with a declinetype of carderror.
1832
+
1833
+ Test Cards - Approved
1834
+
1835
+ +----------------------------------------------------------------------------------------+
1836
+ | Card Type | Card Number | Exp | Address | City |State | Zip | CVV |
1837
+ |------------+-----------------+------+----------------+------------+------+-------+-----|
1838
+ |Visa |4111111111111111 |04/12 |123 Test St. |Somewhere |CA |90001 |123 |
1839
+ |------------+-----------------+------+----------------+------------+------+-------+-----|
1840
+ |MasterCard |5411111111111115 |04/12 |4000 Main St. |Anytown |AZ |85001 |777 |
1841
+ |------------+-----------------+------+----------------+------------+------+-------+-----|
1842
+ |American |341111111111111 |04/12 |12 Colorado |Elsewhere |IL |54321 |4000 |
1843
+ |Express | | |Blvd. | | | | |
1844
+ |------------+-----------------+------+----------------+------------+------+-------+-----|
1845
+ |Discover |6011111111111117 |04/12 |6789 Green Ave. |Nowhere |MA |12345 |- |
1846
+ |------------+-----------------+------+----------------+------------+------+-------+-----|
1847
+ |Diner's Club|36484444444446 |04/12 |7390 Del Mar |Atown |NY |01101 |- |
1848
+ | | | |Blvd. | | | | |
1849
+ |------------+-----------------+------+----------------+------------+------+-------+-----|
1850
+ |JCB |213122222222221 |04/12 |350 Madison Ave.|Springfield |OH |400000 |- |
1851
+ +----------------------------------------------------------------------------------------+
1852
+
1853
+ The following card numbers will generate a decline, with the declinetype
1854
+ listed as follows. You may use this to test code which takes different
1855
+ paths dependent upon the type of decline.
1856
+
1857
+ Test Cards - Declined
1858
+
1859
+ +----------------------------------------+
1860
+ | Card Number | Exp | DeclineType |
1861
+ |------------------+-------+-------------|
1862
+ | 4012345678909 | 04/12 | decline |
1863
+ |------------------+-------+-------------|
1864
+ | 5555444433332226 | 04/12 | call |
1865
+ |------------------+-------+-------------|
1866
+ | 4444111144441111 | 04/12 | carderror |
1867
+ +----------------------------------------+
1868
+
1869
+ ACH Test Numbers
1870
+
1871
+ +---------------------------------+
1872
+ | Routing Number | Account Number |
1873
+ |----------------+----------------|
1874
+ | 789456124 | 55544433221 |
1875
+ +---------------------------------+
1876
+
1877
+ You should also test your code to make sure it properly handles all
1878
+ baddata and error cases. Simply pass bad values in order to generate these
1879
+ situations.
1880
+
1881
+ Appendix B - Troubleshooting
1882
+
1883
+ Details about installing and troubleshooting TCLink specific to your
1884
+ development platform can be found in the documentation included with the
1885
+ TCLink archive.
1886
+
1887
+ Once you are able to connect to the TC gateway, you should be able to
1888
+ diagnose parameter-related issues using the status, declinetype , and
1889
+ errortype parameters returned by the gateway. There is one response which
1890
+ indicates a more generic error, and that's an error of cantconnect. First,
1891
+ check the computer's network connection; can you ping machines on the
1892
+ Internet, by IP or by name?
1893
+
1894
+ The most common network connectivity error is that your target computer
1895
+ may be behind a firewall. TCLink uses the HTTPS port (443/tcp) for network
1896
+ communications; you can check whether this port is open from the target
1897
+ machine by typing "telnet vault.trustcommerce.com 443" at a UNIX command
1898
+ prompt, or else by loading a web browser on the target machine and
1899
+ attempting to visit https://vault.trustcommerce.com directly. If you
1900
+ timeout attempting to make the connection, but your Internet connection is
1901
+ working otherwise, then you may be firewalled. Speak to your network
1902
+ administrator about allowing outbound TCP traffic on port 443.
1903
+
1904
+ Another common problem is the lack of domain name (DNS) resolution. In
1905
+ some cases this will result in an errortype dnsfailure. (Not always; the
1906
+ TCLink software will sometimes fall back to hard coded IP addresses for
1907
+ established accounts. But this method is insecure and error-prone, and is
1908
+ used only as a last resort to keep a system with temporary DNS issues up
1909
+ and running during the outage.) The target machine must be able to resolve
1910
+ the trustcommerce.com domain; try typing "host trustcommerce.com" from a
1911
+ UNIX command prompt. If you don't get a response, or get an error, then
1912
+ the machine cannot resolve DNS information and TCLink will not be able to
1913
+ connect to the TC gateway. Speak to your sysadmin about making domain name
1914
+ resolution available to your target host.
1915
+
1916
+ Appendix C - Connecting via HTTPS POST
1917
+
1918
+ This method should only be used if a TCLink client install is not an
1919
+ option. It does not have the failover capability (and thus the processing
1920
+ uptime is not guaranteed to be 100%), or some of the enhanced security
1921
+ features of TCLink. In addition, transactions may be slightly slower, by
1922
+ an extra half second or so. It does, however support all other features
1923
+ available through TCLink, including all parameters and transaction types.
1924
+
1925
+ This is the URL:
1926
+
1927
+ https://vault.trustcommerce.com/trans/
1928
+
1929
+ The transaction should be sent as a standard POST, with CGI parameters,
1930
+ URL encoded. The parameters are otherwise identical to those used through
1931
+ TCLink.
1932
+
1933
+ Response parameters are returned as name-value pairs separated by
1934
+ newlines.
1935
+
1936
+ Appendix D - Currency Table
1937
+
1938
+ Currency Codes
1939
+
1940
+ +-----------------------------------------------------------------------+
1941
+ | Code | Currency Type | Code | Currency Type |
1942
+ |------+---------------------------+------+-----------------------------|
1943
+ | usd | US Dollars | jpy | Japan Yen |
1944
+ |------+---------------------------+------+-----------------------------|
1945
+ | eur | Euro | jod | Jordan Dinar |
1946
+ |------+---------------------------+------+-----------------------------|
1947
+ | cad | Canadian Dollars | krw | Korea (South) Won |
1948
+ |------+---------------------------+------+-----------------------------|
1949
+ | gbp | UK Pounds | lbp | Lebanon Pounds |
1950
+ |------+---------------------------+------+-----------------------------|
1951
+ | dem | German Deutschemarks | luf | Luxembourg Francs |
1952
+ |------+---------------------------+------+-----------------------------|
1953
+ | frf | French Francs | myr | Malaysia Ringgit |
1954
+ |------+---------------------------+------+-----------------------------|
1955
+ | jpy | Japanese Yen | mxp | Mexico Pesos |
1956
+ |------+---------------------------+------+-----------------------------|
1957
+ | nlg | Dutch Guilders | nlg | Netherlands Guilders |
1958
+ |------+---------------------------+------+-----------------------------|
1959
+ | itl | Italian Lira | nzd | New Zealand Dollars |
1960
+ |------+---------------------------+------+-----------------------------|
1961
+ | chf | Switzerland Francs | nok | Norway Kroner |
1962
+ |------+---------------------------+------+-----------------------------|
1963
+ | dzd | Algeria Dinars | pkr | Pakistan Rupees |
1964
+ |------+---------------------------+------+-----------------------------|
1965
+ | arp | Argentina Pesos | xpd | Palladium Ounces |
1966
+ |------+---------------------------+------+-----------------------------|
1967
+ | aud | Australia Dollars | php | Philippines Pesos |
1968
+ |------+---------------------------+------+-----------------------------|
1969
+ | ats | Austria Schillings | xpt | Platinum Ounces |
1970
+ |------+---------------------------+------+-----------------------------|
1971
+ | bsd | Bahamas Dollars | plz | Poland Zloty |
1972
+ |------+---------------------------+------+-----------------------------|
1973
+ | bbd | Barbados Dollars | pte | Portugal Escudo |
1974
+ |------+---------------------------+------+-----------------------------|
1975
+ | bef | Belgium Francs | rol | Romania Leu |
1976
+ |------+---------------------------+------+-----------------------------|
1977
+ | bmd | Bermuda Dollars | rur | Russia Rubles |
1978
+ |------+---------------------------+------+-----------------------------|
1979
+ | brr | Brazil Real | sar | Saudi Arabia Riyal |
1980
+ |------+---------------------------+------+-----------------------------|
1981
+ | bgl | Bulgaria Lev | xag | Silver Ounces |
1982
+ |------+---------------------------+------+-----------------------------|
1983
+ | cad | Canada Dollars | sgd | Singapore Dollars |
1984
+ |------+---------------------------+------+-----------------------------|
1985
+ | clp | Chile Pesos | skk | Slovakia Koruna |
1986
+ |------+---------------------------+------+-----------------------------|
1987
+ | cny | China Yuan Renmimbi | zar | South Africa Rand |
1988
+ |------+---------------------------+------+-----------------------------|
1989
+ | cyp | Cyprus Pounds | krw | South Korea Won |
1990
+ |------+---------------------------+------+-----------------------------|
1991
+ | csk | Czech Republic Koruna | esp | Spain Pesetas |
1992
+ |------+---------------------------+------+-----------------------------|
1993
+ | dkk | Denmark Kroner | xdr | Special Drawing Right (IMF) |
1994
+ |------+---------------------------+------+-----------------------------|
1995
+ | nlg | Dutch Guilders | sdd | Sudan Dinar |
1996
+ |------+---------------------------+------+-----------------------------|
1997
+ | xcd | Eastern Caribbean Dollars | sek | Sweden Krona |
1998
+ |------+---------------------------+------+-----------------------------|
1999
+ | egp | Egypt Pounds | chf | Switzerland Francs |
2000
+ |------+---------------------------+------+-----------------------------|
2001
+ | eur | Euro | twd | Taiwan Dollars |
2002
+ |------+---------------------------+------+-----------------------------|
2003
+ | fjd | Fiji Dollars | thb | Thailand Baht |
2004
+ |------+---------------------------+------+-----------------------------|
2005
+ | fim | Finland Markka | ttd | Trinidad and Tobago Dollars |
2006
+ |------+---------------------------+------+-----------------------------|
2007
+ | frf | France Francs | trl | Turkey Lira |
2008
+ |------+---------------------------+------+-----------------------------|
2009
+ | dem | Germany Deutsche Marks | gbp | United Kingdom Pounds |
2010
+ |------+---------------------------+------+-----------------------------|
2011
+ | xau | Gold Ounces | usd | United States Dollars |
2012
+ |------+---------------------------+------+-----------------------------|
2013
+ | grd | Greece Drachmas | veb | Venezuela Bolivar |
2014
+ |------+---------------------------+------+-----------------------------|
2015
+ | hkd | Hong Kong Dollars | zmk | Zambia Kwacha |
2016
+ |------+---------------------------+------+-----------------------------|
2017
+ | huf | Hungary Forint | eur | Euro |
2018
+ |------+---------------------------+------+-----------------------------|
2019
+ | isk | Iceland Krona | xcd | Eastern Caribbean Dollars |
2020
+ |------+---------------------------+------+-----------------------------|
2021
+ | inr | India Rupees | xdr | Special Drawing Right (IMF) |
2022
+ |------+---------------------------+------+-----------------------------|
2023
+ | idr | Indonesia Rupiah | xag | Silver Ounces |
2024
+ |------+---------------------------+------+-----------------------------|
2025
+ | iep | Ireland Punt | xau | Gold Ounces |
2026
+ |------+---------------------------+------+-----------------------------|
2027
+ | ils | Israel New Shekels | xpd | Palladium Ounces |
2028
+ |------+---------------------------+------+-----------------------------|
2029
+ | itl | Italy Lira | xpt | Platinum Ounces |
2030
+ |------+---------------------------+------+-----------------------------|
2031
+ | jmd | Jamaica Dollars | | |
2032
+ +-----------------------------------------------------------------------+
2033
+
2034
+ Appendix E - Input Field List
2035
+
2036
+ Input Fields
2037
+
2038
+ +------------------------------------------------------------------------+
2039
+ | Name | Type | Minimum | Maximum | Service |
2040
+ | | | Length | Length | |
2041
+ |--------------------+--------+---------+---------+----------------------|
2042
+ | custid | string | 1 | 20 | |
2043
+ |--------------------+--------+---------+---------+----------------------|
2044
+ | password | string | 1 | 20 | |
2045
+ |--------------------+--------+---------+---------+----------------------|
2046
+ | action | string | 1 | 10 | |
2047
+ |--------------------+--------+---------+---------+----------------------|
2048
+ | media | string | 1 | 10 | |
2049
+ |--------------------+--------+---------+---------+----------------------|
2050
+ | currency | string | 3 | 3 | |
2051
+ |--------------------+--------+---------+---------+----------------------|
2052
+ | amount | number | 3 | 8 | |
2053
+ |--------------------+--------+---------+---------+----------------------|
2054
+ | cc | number | 13 | 16 | |
2055
+ |--------------------+--------+---------+---------+----------------------|
2056
+ | exp | number | 4 | 4 | |
2057
+ |--------------------+--------+---------+---------+----------------------|
2058
+ | cvv | number | 3 | 4 | |
2059
+ |--------------------+--------+---------+---------+----------------------|
2060
+ | routing | number | 9 | 9 | ACH |
2061
+ |--------------------+--------+---------+---------+----------------------|
2062
+ | account | number | 3 | 17 | ACH |
2063
+ |--------------------+--------+---------+---------+----------------------|
2064
+ | billingid | string | 6 | 6 | Citadel |
2065
+ |--------------------+--------+---------+---------+----------------------|
2066
+ | verify | y/n | 1 | 1 | Citadel |
2067
+ |--------------------+--------+---------+---------+----------------------|
2068
+ | transid | string | 14 | 14 | |
2069
+ |--------------------+--------+---------+---------+----------------------|
2070
+ | avs | y/n | 1 | 10 | |
2071
+ |--------------------+--------+---------+---------+----------------------|
2072
+ | name | string | 1 | 60 | |
2073
+ |--------------------+--------+---------+---------+----------------------|
2074
+ | address1 | string | 1 | 80 | |
2075
+ |--------------------+--------+---------+---------+----------------------|
2076
+ | address2 | string | 1 | 80 | |
2077
+ |--------------------+--------+---------+---------+----------------------|
2078
+ | zip | string | 1 | 20 | |
2079
+ |--------------------+--------+---------+---------+----------------------|
2080
+ | city | string | 1 | 40 | |
2081
+ |--------------------+--------+---------+---------+----------------------|
2082
+ | state | string | 1 | 20 | |
2083
+ |--------------------+--------+---------+---------+----------------------|
2084
+ | country | string | 1 | 20 | |
2085
+ |--------------------+--------+---------+---------+----------------------|
2086
+ | phone | string | 1 | 30 | |
2087
+ |--------------------+--------+---------+---------+----------------------|
2088
+ | email | string | 1 | 50 | |
2089
+ |--------------------+--------+---------+---------+----------------------|
2090
+ | ip | string | 7 | 15 | |
2091
+ |--------------------+--------+---------+---------+----------------------|
2092
+ | track1 | string | 1 | 79 | Card Swipe |
2093
+ |--------------------+--------+---------+---------+----------------------|
2094
+ | track2 | string | 1 | 40 | Card Swipe |
2095
+ |--------------------+--------+---------+---------+----------------------|
2096
+ | ticket | string | 1 | 30 | |
2097
+ |--------------------+--------+---------+---------+----------------------|
2098
+ | operator | string | 1 | 20 | |
2099
+ |--------------------+--------+---------+---------+----------------------|
2100
+ | shiptosame | y/n | 1 | 1 | |
2101
+ |--------------------+--------+---------+---------+----------------------|
2102
+ | shipto_name | string | 1 | 60 | |
2103
+ |--------------------+--------+---------+---------+----------------------|
2104
+ | shipto_address1 | string | 1 | 40 | |
2105
+ |--------------------+--------+---------+---------+----------------------|
2106
+ | shipto_address2 | string | 1 | 20 | |
2107
+ |--------------------+--------+---------+---------+----------------------|
2108
+ | shipto_city | string | 1 | 20 | |
2109
+ |--------------------+--------+---------+---------+----------------------|
2110
+ | shipto_state | string | 2 | 2 | |
2111
+ |--------------------+--------+---------+---------+----------------------|
2112
+ | shipto_zip | string | 1 | 20 | |
2113
+ |--------------------+--------+---------+---------+----------------------|
2114
+ | shipto_country | string | 1 | 20 | |
2115
+ |--------------------+--------+---------+---------+----------------------|
2116
+ | numitems | number | 1 | 3 | |
2117
+ |--------------------+--------+---------+---------+----------------------|
2118
+ | price | string | 1 | 20 | |
2119
+ |--------------------+--------+---------+---------+----------------------|
2120
+ | shippingcode | string | 1 | 20 | |
2121
+ |--------------------+--------+---------+---------+----------------------|
2122
+ | shippinghandling | string | 1 | 20 | |
2123
+ |--------------------+--------+---------+---------+----------------------|
2124
+ | productcode# | string | 1 | 20 | |
2125
+ |--------------------+--------+---------+---------+----------------------|
2126
+ | quantity# | number | 1 | 3 | |
2127
+ |--------------------+--------+---------+---------+----------------------|
2128
+ | price# | number | 1 | 6 | |
2129
+ |--------------------+--------+---------+---------+----------------------|
2130
+ | tax# | number | 1 | 6 | |
2131
+ |--------------------+--------+---------+---------+----------------------|
2132
+ | shippinghandling# | number | 1 | 6 | |
2133
+ |--------------------+--------+---------+---------+----------------------|
2134
+ | wallet | y/n | 1 | 1 | TC Wallet |
2135
+ |--------------------+--------+---------+---------+----------------------|
2136
+ | walletsize | string | 3 | 8 | TC Wallet |
2137
+ |--------------------+--------+---------+---------+----------------------|
2138
+ | walletexposure | string | 1 | 3 | TC Wallet |
2139
+ |--------------------+--------+---------+---------+----------------------|
2140
+ | start | string | 2 | 10 | Citadel |
2141
+ |--------------------+--------+---------+---------+----------------------|
2142
+ | cycle | string | 2 | 4 | Citadel |
2143
+ |--------------------+--------+---------+---------+----------------------|
2144
+ | payments | number | 1 | 4 | Citadel |
2145
+ |--------------------+--------+---------+---------+----------------------|
2146
+ | authnow | y/n | 1 | 1 | Citadel |
2147
+ |--------------------+--------+---------+---------+----------------------|
2148
+ | lastpaymentunstore | y/n | 1 | 1 | Citadel |
2149
+ |--------------------+--------+---------+---------+----------------------|
2150
+ | fraudthreshold | number | 1 | 2 | CrediGuard (Scoring) |
2151
+ |--------------------+--------+---------+---------+----------------------|
2152
+ | ip | number | 7 | 15 | CrediGuard |
2153
+ | | | | | (Blacklist) |
2154
+ |--------------------+--------+---------+---------+----------------------|
2155
+ | demo | y/n | 1 | 1 | |
2156
+ |--------------------+--------+---------+---------+----------------------|
2157
+ | offlineauthcode | string | 6 | 6 | |
2158
+ +------------------------------------------------------------------------+
2159
+
2160
+ Copyright (c) 2006 TrustCommerce