P12 Authentication Upgrade for SOAP Toolkit Key Users Migration Guide {#so-p12-about-guide}
===========================================================================================

Audience and Purpose
--------------------

This guide is written for merchants who need to upgrade their system to use P12 authentication.

Convention
----------

This statement appears in this document:

> An *Important* statement contains information essential to successfully completing a task or learning a concept.

Customer Support
----------------

For support information about any service, visit the Support Center:  
<http://support.visaacceptance.com>

Recent Revisions to This Document {#so-p12-recent-revisions}
============================================================

26.07.01
--------

Updated the deadline for transitioning your system to use P12 authentication in the production environment, and added a date for production validation tests for selected merchants. See [Introduction to P12 Authentication for SOAP Toolkit Key Users](/docs/cybs/en-us/so-p12/migration/all/so/so-p12/so-p12-intro.md "").

26.05.01
--------

Updated the required transition dates for the test and production environments. See [Introduction to P12 Authentication for SOAP Toolkit Key Users](/docs/cybs/en-us/so-p12/migration/all/so/so-p12/so-p12-intro.md "").

25.08.01
--------

This revision contains only editorial changes and no technical updates.

25.07.01
--------

Updated the deadline for transitioning your system to certificate-based authentication. See [Introduction to P12 Authentication for SOAP Toolkit Key Users](/docs/cybs/en-us/so-p12/migration/all/so/so-p12/so-p12-intro.md "").

25.05.01
--------

This guide has undergone a reorganization.  
Added information about how to verify your P12 authentication upgrade. See [Verify Your P12 Certificate in Transaction Management](/docs/cybs/en-us/so-p12/migration/all/so/so-p12/so-p12-validate.md "").

25.04.01
--------

Changed title of guide to *P12 Authentication Upgrade for SOAP Toolkit Key Users Migration Guide*.  
Added authorization example request endpoint information. See [Send a Test Request with P12 Authentication](/docs/cybs/en-us/so-p12/migration/all/so/so-p12/so-p12-intro-ex.md "").  
Added new section about how to configure WS-Security 1.0. See [Overview of WS-Security 1.0 with the SOAP API](/docs/cybs/en-us/so-p12/migration/all/so/so-p12/so-p12-intro-ws-security.md "").  
Updated the instructions for creating and downloading a Simple Order API key as a .p12 file. See [Create a P12 Certificate](/docs/cybs/en-us/so-p12/migration/all/so/so-p12/so-p12-create-p12.md "").

25.02.02
--------

Updated the deadline for when merchants must upgrade to P12 authentication. See the deadline for upgrading section in the [Introduction to P12 Authentication for SOAP Toolkit Key Users](/docs/cybs/en-us/so-p12/migration/all/so/so-p12/so-p12-intro.md "").

VISA Platform Connect: Specifications and Conditions for Resellers/Partners {#vpc-partner-reseller-disclaimer}
==============================================================================================================

The following are specifications and conditions that apply to a Reseller/Partner enabling its merchants through Cybersource for Visa Platform Connect ("VPC") processing. Failure to meet any of the specifications and conditions below is subject to the liability provisions and indemnification obligations under Reseller/Partner's contract with Visa/Cybersource.

1. Before boarding merchants for payment processing on a VPC acquirer's connection, Reseller/Partner and the VPC acquirer must have a contract or other legal agreement that permits Reseller/Partner to enable its merchants to process payments with the acquirer through the dedicated VPC connection and/or traditional connection with such VPC acquirer.
2. Reseller/Partner is responsible for boarding and enabling its merchants in accordance with the terms of the contract or other legal agreement with the relevant VPC acquirer.
3. Reseller/Partner acknowledges and agrees that all considerations and fees associated with chargebacks, interchange downgrades, settlement issues, funding delays, and other processing related activities are strictly between Reseller and the relevant VPC acquirer.
4. Reseller/Partner acknowledges and agrees that the relevant VPC acquirer is responsible for payment processing issues, including but not limited to, transaction declines by network/issuer, decline rates, and interchange qualification, as may be agreed to or outlined in the contract or other legal agreement between Reseller/Partner and such VPC acquirer.

DISCLAIMER: NEITHER VISA NOR CYBERSOURCE WILL BE RESPONSIBLE OR LIABLE FOR ANY ERRORS OR OMISSIONS BY THE Visa Platform Connect ACQUIRER IN PROCESSING TRANSACTIONS. NEITHER VISA NOR CYBERSOURCE WILL BE RESPONSIBLE OR LIABLE FOR RESELLER/PARTNER BOARDING MERCHANTS OR ENABLING MERCHANT PROCESSING IN VIOLATION OF THE TERMS AND CONDITIONS IMPOSED BY THE RELEVANT Visa Platform Connect ACQUIRER.

Introduction to P12 Authentication for SOAP Toolkit Key Users {#so-p12-intro}
=============================================================================

Cybersource will no longer support username and password-based authentication for merchants who use the *SOAP toolkit key*. You are required to remove username and password-based authentication from your SOAP toolkit integration, and transition to certificate-based authentication, by these dates:
* **Test Environment:** April 15, 2026
* **Production Validation Test (Shock Test):** September 30, 2026. This applies only to selected merchants.
* **Production Environment:** October 7, 2026  
  Your API requests to ` Cybersource ` will be rejected if you do not implement P12 authentication by the above dates.  
  This migration guide explains how to transition your SOAP authentication to use a compliant P12 certificate. You must complete this update to remain compliant and avoid service disruptions. Updated toolkit examples for these programming environments are available in GitHub:
* [**C++ SOAP toolkit**](https://github.com/CyberSource/cybersource-soap-toolkit/tree/master/CPlusPlusSoapToolkit "")
* [**C# SOAP toolkit**](https://github.com/CyberSource/cybersource-soap-toolkit/tree/master/CSharpSoapToolkit "")
* [**Java SOAP toolkit**](https://github.com/CyberSource/cybersource-soap-toolkit/tree/master/JavaSoapToolkit "")
* [**PHP SOAP toolkit**](https://github.com/CyberSource/cybersource-soap-toolkit/tree/master/PHPSoapToolkit "")  
  If your SOAP integration uses a different programming environment or commercial off-the-shelf software (COTS), see [Overview of WS-Security 1.0 with the SOAP API](/docs/cybs/en-us/so-p12/migration/all/so/so-p12/so-p12-intro-ws-security.md "") for more information about implementing this change.

How to Set Up P12 Certificate Keys
----------------------------------

These are the tasks you must complete to configure your system to support P12 certificate authentication.

1. Create a .p12 file in the `Business Center`. For more information, see [Introduction to P12 Authentication for SOAP Toolkit Key Users](/docs/cybs/en-us/so-p12/migration/all/so/so-p12/so-p12-intro.md "").
2. Edit the files in your application to use P12 authentication. How you edit your files is dependent on your system's programming environment:
   * [C++ Upgrade to P12 Authentication](/docs/cybs/en-us/so-p12/migration/all/so/so-p12/so-p12-cplusplus-intro.md "")
   * [C# Upgrade to P12 Authentication](/docs/cybs/en-us/so-p12/migration/all/so/so-p12/so-p12-csharp-intro.md "")
   * [Java Upgrade to P12 Authentication](/docs/cybs/en-us/so-p12/migration/all/so/so-p12/so-p12-java-intro.md "")
   * [PHP Upgrade to P12 Authentication](/docs/cybs/en-us/so-p12/migration/all/so/so-p12/so-p12-php-intro.md "")
   * [Other programming languages](/docs/cybs/en-us/so-p12/migration/all/so/so-p12/so-p12-intro-ws-security.md "")
3. Send a test authorization request using your P12 certificate. For more information, see [Send a Test Request with P12 Authentication](/docs/cybs/en-us/so-p12/migration/all/so/so-p12/so-p12-intro-ex.md "").
4. Verify that your request used your P12 certificate. For more information, see [Verify Your P12 Certificate in Transaction Management](/docs/cybs/en-us/so-p12/migration/all/so/so-p12/so-p12-validate.md "").

Endpoints for the Simple Order API
----------------------------------

While you complete this security update, verify that your integration uses one of these valid Simple Order API endpoints.  
**Production endpoints:**
* `https://ics2ws.ic3.com/commerce/1.x/transactionProcessor`
* `https://ics2wsa.ic3.com/commerce/1.x/transactionProcessor`
* **India:** `https://ics2ws.in.ic3.com/commerce/1.x/transactionProcessor`
  {#so-p12-intro_prod-endpoints-list}  
  **Test endpoints:**
* `https://ics2wstest.ic3.com/commerce/1.x/transactionProcessor`
* `https://ics2wstesta.ic3.com/commerce/1.x/transactionProcessor`
* **India:** `https://ics2wstest.in.ic3.com/commerce/1.x/transactionProcessor`
  {#so-p12-intro_test-endpoints-list}

Master Shared Secret Keys
-------------------------

If you are a portfolio user who creates *master shared secret keys* using the API, contact your technical account manager for more information about automatically creating security keys. The current process for creating master shared secret keys is not compatible with the certificate-based authentication.

Create a P12 Certificate {#so-p12-cots-prereq}
==============================================

To begin upgrading to P12 authentication, you must first create a P12 certificate.  
Follow these steps to create a .p12 file that contains your P12 certificate:

1. Log in to the `Business Center`:  
   [`https://businesscentertest.cybersource.com`](https://businesscentertest.cybersource.com/ebc2/ "")
2. On the left navigation panel, choose ![](/content/dam/documentation/cybs/en-us/common/images/ebc/ebc-icon-pymt-config.svg/jcr:content/renditions/original) **Payment Configuration \&gt; Key Management**.{#so-p12-cots-prereq_d9e35}
3. Click **+ Generate key**.  
   ![](/content/dam/documentation/cybs/en-us/topics/payments-processing/payment-services/sec-keys/images/generate-key.png/jcr:content/renditions/original)  
   The Create Key page appears.
4. Select **Simple Order API** and click **Generate Key**.  
   ![](/content/dam/documentation/cybs/en-us/topics/payments-processing/payment-services/sec-keys/images/security-keys-so-select.png/jcr:content/renditions/original)  
   ![](/content/dam/documentation/cybs/en-us/topics/platform/rest/getting-started/images/generate-key-bttn.png/jcr:content/renditions/original) {#so-p12-cots-prereq_d8e25}
   {#so-p12-cots-prereq_d8e25}
5. Click **Download key** to download the .p12 file.  
   ![](/content/dam/documentation/cybs/en-us/topics/payments-processing/payment-services/sec-keys/images/so-generate-key.png/jcr:content/renditions/original)  
   The **Set Password** page appears. {#so-p12-cots-prereq_d8e43}
   {#so-p12-cots-prereq_d8e43}
6. Enter your new password and confirm it.  
   ![](/content/dam/documentation/cybs/en-us/topics/platform/rest/getting-started/images/restgs-set-pass.png/jcr:content/renditions/original) {#so-p12-cots-prereq_d8e61}
   {#so-p12-cots-prereq_d8e61}
7. Click **Generate Key** when done.{#so-p12-cots-prereq_d8e70}
   {#so-p12-cots-prereq_d8e70}
8. The .p12 file that contains your Simple Order API key downloads to your desktop.

   > Store your .p12 file in a secure location with restricted access.
   > {#so-p12-cots-prereq_d8e80}
   > {#so-p12-cots-prereq_d8e80}

{#so-p12-cots-prereq_steps}

#### AFTER COMPLETING THE TASK

After creating your .p12 file, you must edit the files in your application to use P12 authentication.  
How you edit your files is dependent on your system's programming environment:

* [C++ Upgrade to P12 Authentication](/docs/cybs/en-us/so-p12/migration/all/so/so-p12/so-p12-cplusplus-intro.md "")
* [C# Upgrade to P12 Authentication](/docs/cybs/en-us/so-p12/migration/all/so/so-p12/so-p12-csharp-intro.md "")
* [Java Upgrade to P12 Authentication](/docs/cybs/en-us/so-p12/migration/all/so/so-p12/so-p12-java-intro.md "")
* [PHP Upgrade to P12 Authentication](/docs/cybs/en-us/so-p12/migration/all/so/so-p12/so-p12-php-intro.md "")
* [Other programming languages](/docs/cybs/en-us/so-p12/migration/all/so/so-p12/so-p12-intro-ws-security.md "")

Overview of WS-Security 1.0 with the SOAP API {#so-p12-intro-ws-security}
=========================================================================

Upgrading to certificate-based authentication requires your programming library to support WS-Security 1.0. This overview section provides helpful information about which WS-Security elements all merchants must configure in their SOAP integration. If your SOAP integration uses a programming environment that is not available as a toolkit example or a commercial off-the-shelf software (COTS), follow the instructions in this section to remain compliant.

Configurable WS-Security Elements
---------------------------------

WS-Security ensures secure SOAP communications between you and `Cybersource`. These are the WS-Security elements you must support and configure for this upgrade:

* **Digest algorithm** to verity the integrity of message bodies.
* **X.509 Binary Security Token (BST)** for authentication.
* **Security timestamps** to prevent replay attacks.
* **Digital signature** to ensure message integrity.
* **Canonicalization** to standardize XML formatting for signing.

For more information about the WS-Security standards, see the OASIS [*Web Services Security: SOAP Message Security 1.0 (WS-Security 2004)*](https://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0.pdf "") guide.

Configure WS-Security Algorithms
--------------------------------

Find the elements listed in the Security Element column in your payment system and set them to the values in the Required Value column. You must verify that your WS-Security library is configured to use these algorithms. The method for setting these values is dependent on your language library.  
Some WS-Security libraries use algorithms by default, while others require you to configure the algorithms. Before setting these values, verify what your library's default values are and configure the necessary values.

|      Security Element      |                   Required Value                    |
|----------------------------|-----------------------------------------------------|
| Signature Algorithm        | `http://www.w3.org/2001/04/xmldsig-more#rsa-sha256` |
| Digest Algorithm           | `http://www.w3.org/2001/04/xmlenc#sha256`           |
| Canonicalization Algorithm | `http://www.w3.org/10/xml-exc-c14n#`                |
| Signature Transformations  | `http://www.w3.org/2001/10/xml-exc-c14n#`           |
[WS-Security Algorithms]

Update Your Authentication Method
---------------------------------

You must configure your SOAP payment system to authenticate using the X.509 certificate in your .p12 file as a Binary Security Token (BST). For more information, see the Security Tokens section on page 18 in the OASIS [*Web Services Security: SOAP Message Security 1.0 (WS-Security 2004)*](https://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0.pdf "") guide.

Add Security Timestamps
-----------------------

Verify that security timestamps are enabled in your WS-Security configuration. Enabling timestamps is typically sufficient for most payment systems. Timestamps help prevent replay attacks by validating how recent message was sent.

Generate Digital Signatures
---------------------------

Use your private key in your .p12 file to generate digital signatures. Embed the signatures in your SOAP message. For more information about how to message signatures, see the Signing Messages section on page 28 in the OASIS [*Web Services Security: SOAP Message Security 1.0 (WS-Security 2004)*](https://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0.pdf "") guide.

Extract Keys from .p12 File
---------------------------

Run these commands to the extract your private key and public certificate from your .p12 file:

```
openssl pkcs12 -in &lt;Merchant_ID&gt;.p12 -nocerts -out &lt;Merchant_ID&gt;.key
```

```
openssl pkcs12 -in &lt;Merchant_ID&gt;.p12 -clcerts -nokeys -out  &lt;Merchant_ID&gt;.crt
```

To create your p12 certificate, see [Create a P12 Certificate](/docs/cybs/en-us/so-p12/migration/all/so/so-p12/so-p12-create-p12.md "").

Remove Username and Password Authentication
-------------------------------------------

Search your application for any code or configuration related to your merchant credentials and remove it. Your WS-Security library should now automatically add your binary security token instead.  
If your integration contains multiple merchants that require you to complete this transition over a period of time, `Cybersource` will support both authentication methods until the deadline.

C++ Upgrade to P12 Authentication {#so-p12-cplusplus-intro}
===========================================================

This section describes how to upgrade your application using the C++ programming language.

Application Requirements
------------------------

Your C++ SOAP toolkit must have access to these system requirements:
* gSOAP 2.8.135 or later (developer version including header files)
* OpenSSL 3.4.0 or later (developer version including header files)
* G++ compiler
  {#so-p12-cplusplus-intro_so-p12-c-plus_ul_bqs_gdp_zdc}

Version Compatibility for C++
-----------------------------

This P12 authentication upgrade is compatible with WSDL and XSD version **1.219** or later.
* [WSDL version 1.219](https://ics2ws.ic3.com/commerce/1.x/transactionProcessor/CyberSourceTransaction_1.219.wsdl "")
* [XSD version 1.219](https://ics2ws.ic3.com/commerce/1.x/transactionProcessor/CyberSourceTransaction_1.219.xsd "")

Migrate with C++ {#so-p12-cplusplus}
====================================

This section explains how to edit the files in your application to use P12 authentication. If you do not have the files that are mentioned in this section, you can find them in the most recent version of the [C++ SOAP toolkit](https://github.com/CyberSource/cybersource-soap-toolkit/tree/master/CPlusPlusSoapToolkit "") in GitHub.  
Follow these steps to upgrade your existing C++ code:

1. Update your existing *.Makefile* by changing the `cybsdemo` target from the text in the first example to the text in the second example:

   ```
   cybsdemo:     sample.cpp $(SOAPH) $(SOAPCPP) ../gsoap/dom.cpp wsseapi.o smdevp.o
   		$(CPP) $(CFLAGS) -o cybsdemo sample.cpp soapC.cpp soapClient.cpp ../gsoap/dom.cpp $(SOAPCPP) wsseapi.o smdevp.o $(LIBS)
   ```

   ```
   cybsdemo:	sample.cpp $(SOAPH) $(SOAPCPP) ../gsoap/dom.cpp wsseapi.o smdevp.o
   		$(CPP) $(CFLAGS) -o cybsdemo sample.cpp soapC.cpp ../gsoap/dom.cpp stdsoap2.cpp ../gsoap/import/custom/struct_timeval.cpp ../gsoap/plugin/threads.c ../gsoap/plugin/mecevp.c ../gsoap/plugin/wsaapi.c wsseapi.o smdevp.o soapITransactionProcessorProxy.cpp ../gsoap/import/gsoapWinInet.cpp PropertiesUtil.cpp BinarySecurityTokenHandler.cpp $(LIBS)
   ```

   If you do not have an existing *.Makefile* , you can use one of these *.Makefile* files from the *CPlusPlusSoapToolkit* folder in GitHub:

   * [***UnixBuildAllCommented.Makefile***](https://github.com/CyberSource/cybersource-soap-toolkit/blob/master/CPlusPlusSoapToolkit/UnixBuildAllCommented.Makefile "")
   * [***UnixQuickBuild.Makefile***](https://github.com/CyberSource/cybersource-soap-toolkit/blob/master/CPlusPlusSoapToolkit/UnixQuickBuild.Makefile "")
   * [***WindowsBuildAllCommented.Makefile***](https://github.com/CyberSource/cybersource-soap-toolkit/blob/master/CPlusPlusSoapToolkit/WindowsBuildAllCommented.Makefile "")
   * [***WindowsQuickBuild.Makefile***](https://github.com/CyberSource/cybersource-soap-toolkit/blob/master/CPlusPlusSoapToolkit/WindowsQuickBuild.Makefile "")

   `Cybersource` recommends that you use *UnixBuildAllCommented.Makefile* or *WindowsBuildAllCommented.Makefile* . If you need to make changes to individual targets, `Cybersource` recommends that you use *UnixQuickBuild.Makefile* or *WindowsQuickBuild.Makefile*, which enable you to build each target individually.

2. Download either the *CyberSourceTransaction* WSDL or XSD version 1.224 file from the *CPlusPlusSoapToolkit* folder in GitHub to your project directory:

   * [WSDL](https://github.com/CyberSource/cybersource-soap-toolkit/blob/master/CPlusPlusSoapToolkit/CyberSourceTransaction_1.224.wsdl "")
   * [XSD](https://github.com/CyberSource/cybersource-soap-toolkit/blob/master/CPlusPlusSoapToolkit/CyberSourceTransaction_1.224.xsd "")

   If you want to use a different version, download your preferred version to the project directory and update the versions in the `header` target of your *.Makefile* from the text in the first example to the text in the second example.

   ```
   header:	CyberSourceTransaction_1.224.wsdl
   		$(GWSDL) -t ../gsoap/WS/WS-typemap.dat -s -o cybersource.h CyberSourceTransaction_1.224.wsdl
   ```

   ```
   header:	CyberSourceTransaction_1.219.wsdl
   		$(GWSDL) -t ../gsoap/WS/WS-typemap.dat -s -o cybersource.h CyberSourceTransaction_1.219.wsdl
   ```
3. Add `gsoap` to the compile path by using one of these methods:

   * **Option 1:** Copy the `gsoap` directory, including the header files, to one level above the project directory.
   * **Option 2:** Update all paths in the .Makefile that reference `gsoap` to point to the `gsoap` location.
     {#so-p12-cplusplus_ul_bjn_jdp_zdc}
4. Update your *sample.cpp* file to include your test credentials:

   ```
   const char *MERCHANT_ID = "your_merchant_id";
   const char *TRANSACTION_KEY = "your_transaction_key";
   ```

   If you do not have an existing *sample.cpp* file, you can use the [***sample.cpp***](https://github.com/CyberSource/cybersource-soap-toolkit/blob/master/CPlusPlusSoapToolkit/sample.cpp "") file in the *CPlusPlusSoapToolkit* folder in GitHub.  
   If you are using an existing *sample.cpp* file from a previous C++ SOAP Toolkit, you must refer to current version of the *sample.cpp* file and find all *upgrading from previous versions* comments to see what has changed.

5. Include these new source files from the *CPlusPlusSoapToolkit* folder in your project:

   * [***BinarySecurityTokenHandler.cpp***](https://github.com/CyberSource/cybersource-soap-toolkit/blob/master/CPlusPlusSoapToolkit/BinarySecurityTokenHandler.cpp "")
   * [***BinarySecurityTokenHandler.h***](https://github.com/CyberSource/cybersource-soap-toolkit/blob/master/CPlusPlusSoapToolkit/BinarySecurityTokenHandler.h "")
   * [***PropertiesUtil.cpp***](https://github.com/CyberSource/cybersource-soap-toolkit/blob/master/CPlusPlusSoapToolkit/PropertiesUtil.cpp "")
   * [***PropertiesUtil.h***](https://github.com/CyberSource/cybersource-soap-toolkit/blob/master/CPlusPlusSoapToolkit/PropertiesUtil.h "")
   * [***stdsoap2.cpp***](https://github.com/CyberSource/cybersource-soap-toolkit/blob/master/CPlusPlusSoapToolkit/stdsoap2.cpp "")
   * [***stdsoap2.h***](https://github.com/CyberSource/cybersource-soap-toolkit/blob/master/CPlusPlusSoapToolkit/stdsoap2.h "")
6. Edit the *toolkit.properties* configuration file to include your test credentials:

   ```
   MERCHANT_ID= 
   KEY_ALIAS= 
   KEY_FILE= 
   KEY_PASS= 
   KEY_DIRECTORY=
   ```

   The *toolkit.properties* configuration file is read from the same location as the executable at run time.  
   You must verify that there are no spaces at the start and end of each line, or on either side of the equal sign (` = `).  
   If you do not have an existing *toolkit.properties* file, you can use the [***toolkit.properties***](https://github.com/CyberSource/cybersource-soap-toolkit/blob/master/CPlusPlusSoapToolkit/toolkit.properties "") file in the *CPlusPlusSoapToolkit* folder in GitHub.

7. Run this command in your terminal:

   ```
   make header
   ```

   This command generates the *cybersource.h* file.

8. Insert this text in the Import section of the *cybersource.h* file:

   ```
   #import "WS-Header.h"
   ```
9. Run this command in your terminal:

   ```
   make source
   ```

   This command generates these files:

   * soapITransactionProcessorProxy.cpp
   * soapITransactionProcessorProxy.h
   * ITransactionProcessor.runTransaction.req.xml
   * ITransactionProcessor.runTransaction.res.xml
   * ITransactionProcessor.nsmap
   * soapStub.h
   * soapH.h
   * soapC.cpp
     {#so-p12-cplusplus_ul_ejn_jdp_zdc}
10. Run these three commands in this order in your terminal to generate the *cybsdemo.exe* executable file:

    ```
    make wsseapi.o 
    make smdevp.o 
    make cybsdemo
    ```
11. Add your P12 certificate to the Key directory.

12. Run the *cybsdemo.exe* executable file in your terminal.  
    A successful console output consists of the `keyFile` full path, followed by the response from the web service, and no errors.

    ```
    keyFile full path: C:/keys/test_p12_file.p12
    decision = APPROVED
    reasonCode = 0
    requestID = 6017349752184504643266
    requestToken = Axxd6DCgJoj77wSTjm5pe7DwFPfjpNDMyadDIZ/u1Pfje7D9IGU1ogwAGkmXoDc3JoZmTToZDIAAvxSz
    ccAuthReply.reasonCode = 0
    ```

{#so-p12-cplusplus_ol_y3n_jdp_zdc}

What to Do Next {#so-p12-cplusplus_follow-on}
---------------------------------------------

After completing the above migration steps, you must send a test authorization request using your P12 certificate to validate your migration. For more information, see [Send a Test Request with P12 Authentication](/docs/cybs/en-us/so-p12/migration/all/so/so-p12/so-p12-intro-ex.md "").

C# Upgrade to P12 Authentication {#so-p12-csharp-intro}
=======================================================

This section describes how to upgrade your application using the C# programming language.

Application Requirements
------------------------

Your C# SOAP toolkit must have access to these system requirements:
* The .NET Framework 4.7.2 and later Redistributable Package
* [NuGet Command-Line Interface](https://learn.microsoft.com/en-us/nuget/reference/nuget-exe-cli-reference?tabs=windows "")
* Portable.BouncyCastle

Version Compatibility for C#
----------------------------

This P12 authentication upgrade is compatible with WSDL and XSD version **1.219** or later.
* [WSDL version 1.219](https://ics2ws.ic3.com/commerce/1.x/transactionProcessor/CyberSourceTransaction_1.219.wsdl "")
* [XSD version 1.219](https://ics2ws.ic3.com/commerce/1.x/transactionProcessor/CyberSourceTransaction_1.219.xsd "")

Migrate with C# {#so-p12-csharp}
================================

This section explains how to edit the files in your application to use P12 authentication. If you do not have the files that are mentioned in this section, you can find them in the most recent version of the [C# SOAP toolkit](https://github.com/CyberSource/cybersource-soap-toolkit/tree/master/CSharpSoapToolkit "") in GitHub.  
Follow these steps to upgrade your C# code:

1. Add this service URL as a service reference to your project, and set `N.NNN` to the most recent server API version.

   ```
   https://ics2wstest.ic3.com/commerce/1.x/transactionProcessor/CyberSourceTransaction_N.NNN.wsdl
   ```

   This step generates a Connected Services section in your project. It will also generate an *app.config* file for your project.

2. Add these sections to the top of your *app.config* file:

   ```
   &lt;configuration&gt;
      &lt;configSections&gt;
         &lt;section name="toolkitProperties" type="System.Configuration.NameValueSectionHandler"/&gt;
      &lt;/configSections&gt;

      &lt;toolkitProperties&gt;
         &lt;add key="MERCHANT_ID" value="&lt;your_merchant_id&gt;"/&gt;
         &lt;add key="KEY_ALIAS" value="&lt;your_certificate_key_alias&gt;"/&gt;
         &lt;add key="KEY_FILE" value="&lt;your_certificate_file&gt;"/&gt;
         &lt;add key="KEY_PASS" value="&lt;your_certificate_password&gt;"/&gt;
         &lt;add key="KEY_DIRECTORY" value="&lt;path/to/certificate/file&gt;"/&gt;
      &lt;/toolkitProperties&gt;
   &lt;/configuration&gt;
   ```

   > The ` &lt;configSections&gt; ` element must be the first dependent element in the ` &lt;configurations&gt; ` element.

   3. In the generated *app.config* file, leave the `&lt;binding&gt;` section as it is.  
      The `&lt;binding&gt;` section must look like this:

   ```
   &lt;bindings&gt;
      &lt;basicHttpBinding&gt;
            &lt;binding name="ITransactionProcessor"&gt;
            &lt;security mode="Transport"/&gt;
            &lt;/binding&gt;
      &lt;/basicHttpBinding&gt;
   &lt;/bindings&gt;
   ```
3. Add this dependency to the *packages.config* file:

   ```
   &lt;packages&gt;
      &lt;package id="Portable.BouncyCastle" version="1.9.0" targetFramework="net472" /&gt;
   &lt;/packages&gt;
   ```
4. Install this dependency by either running this command in your terminal or by another method:

   ```
   nuget install packages.config -OutputDirectory packages
   ```
5. Add this package reference to your *.csproj* file:

   ```
   &lt;Reference Include="BouncyCastle.Crypto, Version=1.9.0.0, Culture=neutral, PublicKeyToken=0e99375e54769942, processorArchitecture=MSIL"&gt;
      &lt;HintPath&gt;packages\Portable.BouncyCastle.1.9.0\lib\net40\BouncyCastle.Crypto.dll&lt;/HintPath&gt;
   &lt;/Reference&gt;
   ```

   The steps for adding a new dependency can also be comleted through Visual Studio Package Manager.

6. Add your P12 certificate to the Key directory.  
   This `KEY_DIRECTORY` location must be accessible to your code. Ensure that your code has permission to read this location.

7. Copy these files from the *CSharpSoapToolkit/CSharpSoapToolkit* folder to your project directory and import them to your project:

   * [***CertificateCacheUtility.cs***](https://github.com/CyberSource/cybersource-soap-toolkit/blob/master/CSharpSoapToolkit/CSharpSoapToolkit/CertificateCacheUtility.cs "")
   * [***InspectorBehavior.cs***](https://github.com/CyberSource/cybersource-soap-toolkit/blob/master/CSharpSoapToolkit/CSharpSoapToolkit/InspectorBehavior.cs "")
   * [***PropertiesUtility.cs***](https://github.com/CyberSource/cybersource-soap-toolkit/blob/master/CSharpSoapToolkit/CSharpSoapToolkit/PropertiesUtility.cs "")
   * [***SecurityUtility.cs***](https://github.com/CyberSource/cybersource-soap-toolkit/blob/master/CSharpSoapToolkit/CSharpSoapToolkit/SecurityUtility.cs "")
   * [***SoapEnvelopeUtility.cs***](https://github.com/CyberSource/cybersource-soap-toolkit/blob/master/CSharpSoapToolkit/CSharpSoapToolkit/SoapEnvelopeUtility.cs "")
8. Find these lines in your existing code:

   ```
   TransactionProcessorClient proc = new TransactionProcessorClient();

   proc.ChannelFactory.Credentials.UserName.UserName =  request.merchantID;
   proc.ChannelFactory.Credentials.UserName.Password =  TRANSACTION_KEY;

   ReplyMessage reply = proc.runTransaction(request);
   ```

   Replace them with these lines:

   ```
   TransactionProcessorClient proc = new TransactionProcessorClient();

   proc.Endpoint.EndpointBehaviors.Add(new InspectorBehavior());

   ReplyMessage reply = proc.runTransaction(request);
   ```
9. Find your installation of the .NET Framework.  
   It is often in one of these locations:

   * `C:\Windows\Microsoft.NET\Framework\v4.0.30319` (32-bit)
   * `C:\Windows\Microsoft.NET\Framework64\v4.0.30319` (64-bit)
     {#so-p12-csharp_ul_gtq_zdp_zdc}
10. Use the *msBuild.exe* file that is already in your system to compile your project.

    ```
    &lt;path_to_framework&gt;\msBuild.exe &lt;name_of_project&gt;.csproj
    ```
11. Run the project executable:

    ```
    bin\&lt;configuration&gt;\&lt;project_name&gt;.exe
    ```
12. To confirm that your configuration is updated successfully, you can use a Bearer token that verifies that your request is authenticated. To do so, add this command after line 59 in the *InspectorBehavior.cs* file from the *CSharpSoapToolkit* folder:

    ```
    Console.WriteLine(request.ToString()); 
    ```

{#so-p12-csharp_ol_xpc_v5v_ldc}

What to Do Next
---------------

After completing the above migration steps, you must send a test authorization request using your P12 certificate to validate your migration. For more information, see [Send a Test Request with P12 Authentication](/docs/cybs/en-us/so-p12/migration/all/so/so-p12/so-p12-intro-ex.md "").

Java Upgrade to P12 Authentication {#so-p12-java-intro}
=======================================================

This section describes how to upgrade your application using the Java programming language.

Application Requirements
------------------------

Your Java SOAP toolkit must have access to these system requirements:

* Java 9 or later
* Jakarta XML Web Services API
* JAX-WS Runtime
* Jakarta XML Web Services distribution
* Bouncy Castle Cryptography APIs for JDK 1.5 to JDK 1.8
* Apache XML Security

Version Compatibility for Java
------------------------------

This P12 authentication upgrade is compatible with WSDL and XSD version **1.219** or earlier.
* [WSDL version 1.219](https://ics2ws.ic3.com/commerce/1.x/transactionProcessor/CyberSourceTransaction_1.219.wsdl "")
* [XSD version 1.219](https://ics2ws.ic3.com/commerce/1.x/transactionProcessor/CyberSourceTransaction_1.219.xsd "")
  {#so-p12-java-intro_wsdl-xsd-link}

Migrate with Java {#so-p12-java}
================================

This section explains how to edit the files in your application to use P12 authentication. If you do not have the files that are mentioned in this section, you can find them in the most recent version of the [Java SOAP](https://github.com/CyberSource/cybersource-soap-toolkit/tree/master/JavaSoapToolkit "") toolkit in GitHub.  
Follow these steps to upgrade your Java code:

1. Add these dependencies in the *pom.xml* file.

   ```
   &lt;dependencies&gt;
     &lt;dependency&gt;
       &lt;groupId&gt;jakarta.xml.ws&lt;/groupId&gt;
       &lt;artifactId&gt;jakarta.xml.ws-api&lt;/artifactId&gt;
       &lt;version&gt;4.0.2&lt;/version&gt;
     &lt;/dependency&gt;
     &lt;dependency&gt;
       &lt;groupId&gt;com.sun.xml.ws&lt;/groupId&gt;
       &lt;artifactId&gt;jaxws-rt&lt;/artifactId&gt;
       &lt;version&gt;4.0.3&lt;/version&gt;
       &lt;scope&gt;runtime&lt;/scope&gt;
     &lt;/dependency&gt;
     &lt;dependency&gt;
       &lt;groupId&gt;com.sun.xml.ws&lt;/groupId&gt;
       &lt;artifactId&gt;jaxws-ri&lt;/artifactId&gt;
       &lt;version&gt;4.0.3&lt;/version&gt;
       &lt;type&gt;pom&lt;/type&gt;
     &lt;/dependency&gt;
     &lt;dependency&gt;
       &lt;groupId&gt;org.bouncycastle&lt;/groupId&gt;
       &lt;artifactId&gt;bcprov-jdk15to18&lt;/artifactId&gt;
       &lt;version&gt;1.78&lt;/version&gt;
     &lt;/dependency&gt;
     &lt;dependency&gt;
       &lt;groupId&gt;org.apache.santuario&lt;/groupId&gt;
       &lt;artifactId&gt;xmlsec&lt;/artifactId&gt;
       &lt;version&gt;4.0.3&lt;/version&gt;
     &lt;/dependency&gt;
   &lt;/dependencies&gt;
   ```

   If you do not have an existing [*pom.xml*](https://github.com/CyberSource/cybersource-soap-toolkit/blob/master/JavaSoapToolkit/pom.xml "") file, you can use the one in the *JavaSoapToolkit* folder in GitHub.

2. Add this plugin in your *pom.xml* file:

   ```
   &lt;build&gt;
     &lt;plugins&gt;
       &lt;plugin&gt;
         &lt;groupId&gt;com.sun.xml.ws&lt;/groupId&gt;
         &lt;artifactId&gt;jaxws-maven-plugin&lt;/artifactId&gt;
         &lt;version&gt;4.0.3&lt;/version&gt;
         &lt;configuration&gt;
   	  &lt;wsdlUrls&gt;
              &lt;wsdlUrl&gt;https://ics2wstest.ic3.com/commerce/1.x/transactionProcessor/CyberSourceTransaction_1.219.wsdl&lt;/wsdlUrl&gt;
           &lt;/wsdlUrls&gt;
           &lt;keep&gt;true&lt;/keep&gt;
           &lt;packageName&gt;com.cybersource.stub&lt;/packageName&gt;
           &lt;sourceDestDir&gt;src/main/java&lt;/sourceDestDir&gt;
         &lt;/configuration&gt;
       &lt;/plugin&gt;
     &lt;/plugins&gt;
   &lt;/build&gt;
   ```
3. Verify that the *wsdlUrl* tag is set to a valid WSDL version value, and update it if necessary. Only version 1.219 or earlier is valid.

4. Run this command in your terminal:

   ```
   mvn clean jaxws:wsimport
   ```
5. Find these lines in your existing code:

   ```
   TransactionProcessorLocator service = new 
       TransactionProcessorLocator();

   URL endpoint = new URL(SERVER_URL);

   ITransactionProcessorStub stub = 
       (ITransactionProcessorStub) service.getportXML
       (endpoint);

   stub._setProperty(WSHandlerConstants.USER, request
       .getMerchantID());
   ```

   Replace them with these lines:

   ```
   TransactionProcessor service = new TransactionProcessor();

   service.setHandlerResolver(portInfo - &gt;{
     List &lt; Handler &gt; handlerList = new ArrayList &lt; &gt;();
     handlerList.add(new BinarySecurityTokenHandler());
     return handlerList;
   });

   ITransactionProcessor stub = service.getPortXML();
   ```
6. Go to GitHub and copy these files from the *JavaSoapToolkit/src/main/java/com/cybersource* folder. Add them to your project directory:

   * [***BinarySecurityTokenHandler.java***](https://github.com/CyberSource/cybersource-soap-toolkit/blob/master/JavaSoapToolkit/src/main/java/com/cybersource/BinarySecurityTokenHandler.java#L8 "")
   * [***PropertiesUtil.java***](https://github.com/CyberSource/cybersource-soap-toolkit/blob/master/JavaSoapToolkit/src/main/java/com/cybersource/PropertiesUtil.java "")
   * [***SecurityUtil.java***](https://github.com/CyberSource/cybersource-soap-toolkit/blob/master/JavaSoapToolkit/src/main/java/com/cybersource/SecurityUtils.java "")
   7. Add the [*toolkit.properties*](https://github.com/CyberSource/cybersource-soap-toolkit/blob/master/JavaSoapToolkit/src/main/resources/toolkit.properties "") file from the *src/main/resources* folder in GitHub to your project.  
      Edit the *toolkit.properties* file to contain this required content:

   ```
   MERCHANT_ID = &lt;your_merchant_id&gt;
   LIB_VERSION = 4.0.3
   KEY_ALIAS = &lt;your_certificate_key_alias&gt;
   KEY_FILE = &lt;your_certificate_file&gt;
   KEY_PASS = &lt;your_certificate_password&gt;
   KEY_DIRECTORY = src/main/resources
   ```

   If you are using your own properties file, you can make these changes in your *PropertiesUtil.java* file.

7. Add your P12 certificate to your key directory.

8. Run these two commands in your terminal:

   ```
   mvn clean install
   ```

   ```
   java -jar target\JavaSoapToolkit.jar
   ```
9. To confirm that your configuration is updated successfully, you can add a Bearer token that verifies that your requests are authenticated. To do so, add this command after line 54 in the *BinarySecurityTokenHandler.java* file in the *src\\main\\java\\com\\cybersource* folder.

   ```
   System.out.println( soapMessageContext ); 
   ```

What to Do Next
---------------

After completing the above migration steps, you must send a test authorization request using your P12 certificate to validate your migration. For more information, see [Send a Test Request with P12 Authentication](/docs/cybs/en-us/so-p12/migration/all/so/so-p12/so-p12-intro-ex.md "").

PHP Upgrade to P12 Authentication {#so-p12-php-intro}
=====================================================

This section describes how to upgrade your application using the PHP programming language.

Application Requirements
------------------------

Your PHP SOAP toolkit must have access to these system requirements:
* PHP 5.6x or higher
* PHP SOAP extension
* PHP OpenSSL extension

Version Compatibility for PHP
-----------------------------

This P12 authentication upgrade is compatible with WSDL and XSD version **1.219** or later.
* [WSDL version 1.219](https://ics2ws.ic3.com/commerce/1.x/transactionProcessor/CyberSourceTransaction_1.219.wsdl "")
* [XSD version 1.219](https://ics2ws.ic3.com/commerce/1.x/transactionProcessor/CyberSourceTransaction_1.219.xsd "")

Migrate with PHP {#so-p12-php}
==============================

This section explains how to edit the files in your application to use P12 authentication. If you do not have the files that are mentioned in this section, you can find them in the most recent version of the [PHP SOAP toolkit](https://github.com/CyberSource/cybersource-soap-toolkit/tree/master/PHPSoapToolkit "") in GitHub:  
Follow these steps to upgrade your existing PHP code:

1. Update this service URL (`WSDL_URL`) in your code, and set the `N.NNN` to the most recent server API version.

   ```
   https://ics2wstest.ic3.com/commerce/1.x/transactionProcessor/CyberSourceTransaction_N.NNN.wsdl
   ```
2. Copy these files from the *PHPSoapToolkit* folder and put them in your project directory:

   * [***ExtendedClientWithToken.php***](https://github.com/CyberSource/cybersource-soap-toolkit/blob/master/PHPSoapToolkit/ExtendedClientWithToken.php "")
   * [***PropertiesUtility.php***](https://github.com/CyberSource/cybersource-soap-toolkit/blob/master/PHPSoapToolkit/PropertiesUtility.php "")
   * [***SecurityUtility.php***](https://github.com/CyberSource/cybersource-soap-toolkit/blob/master/PHPSoapToolkit/SecurityUtility.php "")
3. Find these lines in your existing code:

   ```
   $soapClient = new ExtendedClient(WSDL_URL, array());
   ```

   Replace them with these lines:

   ```
   $soapClient = new ExtendedClientWithToken(
       WSDL_URL,
       array(
           'SSL' =&gt; array(
                   'KEY_ALIAS' =&gt; 'YOUR KEY ALIAS',
                   'KEY_FILE' =&gt; 'YOUR CERTIFICATE FILE',
                   'KEY_PASS' =&gt; 'YOUR KEY PASS',
                   'KEY_DIRECTORY' =&gt; 'PATH TO CERTIFICATES'
               )
           )
   );
   ```
4. Update these field values in your code with your information:

   * MERCHANT_ID
   * KEY_ALIAS
   * KEY_FILE
   * KEY_PASS
   * KEY_DIRECTORY
     {#so-p12-php_ul_scp_rcz_mdc}
5. Add your P12 certificate to the Key directory.  
   This Key directory location must be accessible to your code. Ensure that your code has permission to read this location.

6. Run this command in your terminal:

   ```
   php &lt;sample_PHP_file&gt;
   ```

   7. To confirm that your configuration is updated successfully, you can use a Bearer token that verifies that your request is authenticated. To do so, add this command after line 109 in the *ExtendedClientWithToken.php* file from the *PHPSoapToolkit* folder:

   ```
   print_r($request);
   ```

{#so-p12-php_ol_qcp_rcz_mdc}

What to Do Next
---------------

After completing the above migration steps, you must send a test authorization request using your P12 certificate to validate your migration. For more information, see [Send a Test Request with P12 Authentication](/docs/cybs/en-us/so-p12/migration/all/so/so-p12/so-p12-intro-ex.md "").

Send a Test Request with P12 Authentication {#so-p12-intro-ex}
==============================================================

After you complete the migration requirements documented in this guide, you can send this valid SOAP API request with P12 authentication to verify that your migration is valid.

> You must configure the header information in this example to include your credentials.

Endpoint
--------

Send your test request to one of these valid test endpoints:
* `https://ics2wstest.ic3.com/commerce/1.x/transactionProcessor`
* `https://ics2wstesta.ic3.com/commerce/1.x/transactionProcessor`
* **India:** `https://ics2wstest.in.ic3.com/commerce/1.x/transactionProcessor`
  Request with P12 Authentication

```
&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:urn="urn:schemas-cybersource-com:transaction-data-1.215"&gt;
	&lt;SOAP-ENV:Header&gt;
		&lt;wsse:Security
			xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"&gt;
			&lt;wsse:BinarySecurityToken
				xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" ValueType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509v3"
EncodingType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary" wsu:Id="X509Token"&gt;
MIICXzCCAcigAMIICXzCCAcigAMIICXzCCAcigAMIICXzCCAcigAMIICXzCCAcigAMIICXzCCAcigAMIICXzCCAcigAMIICXzCCAcigAMIICXzCCAcigAMIICXzCCAcigAMIICXzCCAcigAMIICXzCCAcigAMIICXzCCAcigAMIICXzCCAcigAMIICXzCCAcigAMIICXzCCAcigAMIICXzCCAcigAMIICXzCCAcigAMIICXzCCAcigAMIICXzCCAcigAMIICXzCCAcigAMIICXzCCAcigAMIICXzCCAcigAMIICXzCCAcigAMIICXzCCAcigAMIICXzCCAcigAMIICXzCCAcigA........

			&lt;/wsse:BinarySecurityToken&gt;
			&lt;ds:Signature
				xmlns:ds="http://www.w3.org/2000/09/xmldsig#"&gt;
				&lt;ds:SignedInfo&gt;
					&lt;ds:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" /&gt;
					&lt;ds:SignatureMethodAlgorithm="http://www.w3.org/2001/04/xmldsig-more#rsa-sha256" /&gt;
					&lt;ds:Reference URI="#Body"&gt;
						&lt;ds:Transforms&gt;
							&lt;ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" /&gt;
						&lt;/ds:Transforms&gt;
						&lt;ds:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" /&gt;
						&lt;ds:DigestValue&gt;
KRmKx6digestvalye12389012367u7hlkV1vvbtec...........
&lt;/ds:DigestValue&gt;
					&lt;/ds:Reference&gt;
				&lt;/ds:SignedInfo&gt;
				&lt;ds:SignatureValue&gt;otrfnrck17dwxI4UR12345612yNG7TtE8L3XFhfEa/63r2uBDsg7b2YY8C6nKvkJGop4NHW7d30yfrz5dK2CHkp18TM+hVkyNIVLGokZzZpAwuc0sXm33+J4i765421duLsE4jM0FfIABsPHT2vgSq+T0g+812312jOeIk5R5kLhwnlVd92wQvBmpxINBW2Hh5adwwtpv+gj4AtvuhLYe1ky4R/oDNSWLPmyY1dSIyGDKO4ko8CT0mFlAvxECa8dLHRsyFrZVlK6................
&lt;/ds:SignatureValue&gt;
				&lt;ds:KeyInfo&gt;
					&lt;wsse:SecurityTokenReference&gt;
						&lt;wsse:Reference URI="#X509Token" /&gt;
					&lt;/wsse:SecurityTokenReference&gt;
				&lt;/ds:KeyInfo&gt;
			&lt;/ds:Signature&gt;
		&lt;/wsse:Security&gt;
	&lt;/SOAP-ENV:Header&gt;
	&lt;soapenv:Body&gt;
		&lt;requestMessage
			xmlns="urn:schemas-cybersource-com:transaction-data-1.215"&gt;
			&lt;merchantID&gt;johndoe&lt;/merchantID&gt;
			&lt;merchantReferenceCode&gt;MRC-123&lt;/merchantReferenceCode&gt;
			&lt;billTo&gt;
				&lt;firstName&gt;John&lt;/firstName&gt;
				&lt;lastName&gt;Doe&lt;/lastName&gt;
				&lt;street1&gt;123 Example Road&lt;/street1&gt;
				&lt;city&gt;Austin&lt;/city&gt;
				&lt;state&gt;TX&lt;/state&gt;
				&lt;postalCode&gt;12345&lt;/postalCode&gt;
				&lt;country&gt;US&lt;/country&gt;
				&lt;email&gt;abc@company.com&lt;/email&gt;
			&lt;/billTo&gt;
			&lt;shipTo&gt;
				&lt;firstName&gt;John&lt;/firstName&gt;
				&lt;lastName&gt;Doe&lt;/lastName&gt;
				&lt;street1&gt;123 Example Road&lt;/street1&gt;
				&lt;city&gt;Austin&lt;/city&gt;
				&lt;state&gt;TX&lt;/state&gt;
				&lt;postalCode&gt;12345&lt;/postalCode&gt;
				&lt;country&gt;US&lt;/country&gt;
			&lt;/shipTo&gt;
			&lt;purchaseTotals&gt;
				&lt;currency&gt;USD&lt;/currency&gt;
				&lt;grandTotalAmount&gt;100.00&lt;/grandTotalAmount&gt;
			&lt;/purchaseTotals&gt;
			&lt;card&gt;
				&lt;accountNumber&gt;4111111111111111&lt;/accountNumber&gt;
				&lt;expirationMonth&gt;12&lt;/expirationMonth&gt;
				&lt;expirationYear&gt;2029&lt;/expirationYear&gt;
				&lt;cvNumber&gt;111&lt;/cvNumber&gt;
			&lt;/card&gt;
			&lt;ccAuthService run="true"&gt;&lt;/ccAuthService&gt;
			&lt;ccCaptureService run="true"&gt;&lt;/ccCaptureService&gt;
		&lt;/requestMessage&gt;
	&lt;/soapenv:Body&gt;
&lt;/soapenv:Envelope&gt;
```

What to Do Next
---------------

After sending a test request, you must verify that the request used your p12 certificate. For more information, see [Verify Your P12 Certificate in Transaction Management](/docs/cybs/en-us/so-p12/migration/all/so/so-p12/so-p12-validate.md "").

Verify Your P12 Certificate in Transaction Management {#so-p12-validate}
========================================================================

After transitioning your SOAP authentication to use a P12 certificate, you must verify that your transaction requests are using the P12 certificate. Send a test request before beginning this task. For more information about sending a test request, see [Send a Test Request with P12 Authentication](/docs/cybs/en-us/so-p12/migration/all/so/so-p12/so-p12-intro-ex.md "").  
Choose one of these methods to verify that your P12 certificate using transaction management in the `Business Center`:

* Use the *client application* search filter.
* Add the *client application* search results column.
* View the request transaction details.

Verifying with a Search Filter
------------------------------

Follow these steps to verify that your test request used your P12 certificate by adding a search filter.

1. Log in to the `Business Center`:
   * **Test:** [`https://businesscentertest.cybersource.com`](https://businesscentertest.cybersource.com/ebc2/ "")
   * **Production:** [`https://businesscenter.cybersource.com`](https://businesscenter.cybersource.com/ebc2/ "")
2. On the left navigation panel, choose ![](/content/dam/documentation/cybs/en-us/common/images/ebc/ebc-icon-trxn-mgmt.svg/jcr:content/renditions/original) **Transaction Management \&gt; Transactions** .  
   The Transactions page appears.
3. In the New Filter field, choose **Client Application**.
4. In the Client Application field, choose **Simple Order API** .  
   ![](/content/dam/documentation/cybs/en-us/topics/platform/soap/p12/images/so-p12-trxn-mgmt-search-field.png/jcr:content/renditions/original)
5. When done, click **Search** .  
   The Search Results table displays all of your transactions that used a Simple Order API key. If your test transaction is in the search results table, your P12 certificate was used in the request and is verified.

Verifying with a Results Column
-------------------------------

Follow these steps to verify that your test request used your P12 certificate by adding a results column.

1. Log in to the `Business Center`:
   * **Test:** [`https://businesscentertest.cybersource.com`](https://businesscentertest.cybersource.com/ebc2/ "")
   * **Production:** [`https://businesscenter.cybersource.com`](https://businesscenter.cybersource.com/ebc2/ "")
2. On the left navigation panel, choose ![](/content/dam/documentation/cybs/en-us/common/images/ebc/ebc-icon-trxn-mgmt.svg/jcr:content/renditions/original) **Transaction Management \&gt; Transactions** .  
   The Transactions page appears.
3. In the Search Results section, click **Edit columns** .  
   The Edit Table Layout page appears.
4. Click **Add item** .  
   The **Add Table Column** window appears.
5. In the Select Table Column drop-down menu, choose Client Application, then click **Save** .  
   ![](/content/dam/documentation/cybs/en-us/topics/platform/soap/p12/images/so-p12-trxn-mgmt-client-app.png/jcr:content/renditions/original)  
   You are returned to the Edit Table Layout page.
6. When done, click **Save** .  
   The Transaction page appears. Now when you search for transactions, the search results table displays the Client Application column. When the Client Application column displays the *Simple Order API* value, the corresponding transaction used a P12 certificate.  
   ![](/content/dam/documentation/cybs/en-us/topics/platform/soap/p12/images/so-p12-trxn-mgmt-column.png/jcr:content/renditions/original)

Verifying with Transaction Details
----------------------------------

Follow these steps to verify that your test request used your P12 certificate in transaction details.

1. Log in to the `Business Center`:
   * **Test:** [`https://businesscentertest.cybersource.com`](https://businesscentertest.cybersource.com/ebc2/ "")
   * **Production:** [`https://businesscenter.cybersource.com`](https://businesscenter.cybersource.com/ebc2/ "")
2. On the left navigation bar, choose ![](/content/dam/documentation/cybs/en-us/common/images/ebc/ebc-icon-trxn-mgmt.svg/jcr:content/renditions/original) **Transaction Management \&gt; Transactions** .  
   The Transactions page appears.
3. Use the search fields to find a transaction you sent using your P12 certificate, then click **Search** .  
   The Search Results table updates.  
   ![](/content/dam/documentation/cybs/en-us/topics/platform/soap/p12/images/so-p12-trxn-mgmt-search.png/jcr:content/renditions/original)
4. In the Search Results table, click the request ID for the transaction you are verifying.  
   The Transaction Details page appears.  
   ![](/content/dam/documentation/cybs/en-us/topics/platform/soap/p12/images/so-p12-trxn-mgmt-table.png/jcr:content/renditions/original)
5. In the Request Information section, verify that the Client App is set to Simple Order API. You can also verify that the Security Key ID is set to your key ID.  
   ![](/content/dam/documentation/cybs/en-us/topics/platform/soap/p12/images/so-p12-trxn-mgmt-key.png/jcr:content/renditions/original)

