Boarding with ProtectPay Requires an Additional Step

When a partner boards new merchants, and then processes onto those merchant accounts, AND that same partner intends to use ProtectPay when so doing, an additional boarding step needs to take place. Each merchant has to have a ProtectPay Merchant Profile ID set up.

This seems like extra work. Why do I have to do it?
ProtectPay was built as a processor-agnostic solution. It can be used when your merchants are with ProPay, but it can also provide help in meeting your PCI compliance obligations when you intend to use another gateway (Although, we always recommend that you switch to ProPay for better service). When ProtectPay sends a transaction request to a gateway, it needs to provide both credentials and an account identifier. The Merchant Profile construct contains the following:
  • An indicator that tells ProtectPay which gateway to use.
  • One or more credential values. These values may provide an indicator, to the gateway, about the account.
  • One or more values specific to an account-type entity on that gateway.
Essentially, the Merchant Profile contains all of the "stuff" you would normally send to the gateway to describe the merchant account. With ProtectPay, you set up a profile in advance (one time per merchant, not once per each transaction) and then reference the profile when you process.

Okay, but I still want to know why ProtectPay is set up this way.
ProtectPay doesn’t actually process credit cards by itself. It is a vault containing secure cardholder data, and a system that routes transactions using that secure data. A ProtectPay "Biller" can contain many merchant profiles, and you don’t need to separate (or tokenize more than once) whenever there is a new processor to which you need to send a transaction. Just provide a Merchant Profile ID when you perform a transaction. ProtectPay will take care of the rest.
How to call this method?

HTTP URL(s) https://xmltestapi.propay.com/protectpay/MerchantProfiles/
HTTP Verb PUT
HTTP Header Authorization
Example Request

Example Response

{
 "ProfileName":"505be90a-9256-45c5-85a5-5df6f62189c7",
 "PaymentProcessor":"LegacyProPay",
 "ProcessorData":[
 {
 "ProcessorField":"certStr",
 "Value":"90a933bc-07e1-4d33-9a97-084929113a22"
 },
 {
 "ProcessorField":"accountNum",
 "Value":"30312345"
 },
 {
 "ProcessorField":"termId",
 "Value": "113a22"
 }
 ]
}

{
 RequestResult: {
ResultValue: "SUCCESS", 
ResultCode: "00", 
ResultMessage: "" 
 },
 ProfileId: 769987
}

Implementation Details
Request Submission

namespace ProtectPayApi_CreateMerchantProfile
{
using System;
using System.Collections.Generic;
using System.Text;

using RestSharp;

/*
ProPay provides the following code “AS IS.”
ProPay makes no warranties and ProPay disclaims all warranties and conditions, express, implied or statutory,
including without limitation the implied warranties of title, non-infringement, merchantability, and fitness for a particular purpose.
ProPay does not warrant that the code will be uninterrupted or error free,
nor does ProPay make any warranty as to the performance or any results that may be obtained by use of the code.
*/
public class CreateMerchantProfileProgram
{
public static void Main(string[] args)
{
var createMerchantProfileResponse = CreateMerchantProfile();
Console.WriteLine("Result: " + createMerchantProfileResponse.RequestResult.ResultValue);
Console.WriteLine("Result code: " + createMerchantProfileResponse.RequestResult.ResultCode);
Console.WriteLine("Result message: " + createMerchantProfileResponse.RequestResult.ResultMessage);
Console.WriteLine("Profile id: " + createMerchantProfileResponse.ProfileId);
}

private static CreateMerchantProfileResponse CreateMerchantProfile()
{
// var baseUrl = "https://xmltestapi.propay.com/ProtectPay";
var baseUrl = "http://localhost:5219/API/";

var request = BuildCreateMerchantProfileRequest();
var restRequest = CreateRestRequest("/MerchantProfiles/", RestSharp.Method.PUT);
restRequest.AddBody(request);

return Execute<CreateMerchantProfileResponse>(restRequest, baseUrl);
}

private static CreateMerchantProfileRequest BuildCreateMerchantProfileRequest()
{
return new CreateMerchantProfileRequest
{
ProfileName = "ProPay",
PaymentProcessor = "LegacyProPay",
ProcessorData =
new List<ProcessorData>
{
new ProcessorData { ProcessorField = "certStr", Value = "6fcb7017034141c3992e5d6755edbc" },
new ProcessorData { ProcessorField = "termId", Value = "c90a84580a" },
new ProcessorData { ProcessorField = "accountNum", Value = "32685511" },
new ProcessorData { ProcessorField = "forceRecurring", Value = "false" },
},
};
}

/// <summary>
/// Request factory to ensure API key is always first parameter added.
/// </summary>
/// <param name="resource">The resource name.</param>
/// <param name="method">The HTTP method.</param>
/// <returns>Returns a new <see cref="RestRequest"/>.</returns>
private static RestRequest CreateRestRequest(string resource, Method method)
{
var restRequest = new RestRequest { Resource = resource, Method = method, RequestFormat = DataFormat.Json, };
var credentials = GetCredentials();
restRequest.AddHeader("accept", "application/json");
restRequest.AddHeader("Authorization", credentials);

return restRequest;
}

/// <summary>
/// Gets the credentials for the call.
/// </summary>
/// <returns>The credentials.</returns>
private static string GetCredentials()
{
var billerAccountId = "4526293327582082"; // biller account id
var authToken = "5b8d6753-4aff-4771-b3ae-c831a072a45c"; // authentication token of biller

var encodedCredentials = Convert.ToBase64String(Encoding.Default.GetBytes(billerAccountId + ":" + authToken));

var credentials = string.Format("Basic {0}", encodedCredentials);
return credentials;
}

/// <summary>
/// Executes a particular http request to a resource.
/// </summary>
/// <typeparam name="T">The response type.</typeparam>
/// <param name="request">The REST request.</param>
/// <param name="baseUrl">The base URL.</param>
/// <returns>Returns a response of the type parameter.</returns>
private static T Execute<T>(IRestRequest request, string baseUrl) where T : class, new()
{
var client = new RestClient(baseUrl);
var response = client.Execute<T>(request);

if (response.ErrorException != null)
{
Console.WriteLine(
"Error: Exception: {0}, Headers: {1}, Content: {2}, Status Code: {3}",
response.ErrorException,
response.Headers,
response.Content,
response.StatusCode);
}

return response.Data;
}

/// <summary>
/// Request information for a call to the "CreateMerchantProfile" method.
/// </summary>
public class CreateMerchantProfileRequest
{
/// <summary>
/// The name of the merchant profile.
/// </summary>
public string ProfileName { get; set; }

/// <summary>
/// The profile's payment processor.
/// </summary>
public string PaymentProcessor { get; set; }

/// <summary>
/// Payment processor specific data.
/// </summary>
public List<ProcessorData> ProcessorData { get; set; }
}

/// <summary>
/// Payment processor specific configuration setting.
/// </summary>
public class ProcessorData
{
/// <summary>
/// The processor specific field name.
/// </summary>
public string ProcessorField { get; set; }

/// <summary>
/// The value for the processor specific field.
/// </summary>
public string Value { get; set; }
}

/// <summary>
/// The value returned from a call to the "CreateMerchantProfile" method.
/// </summary>
public class CreateMerchantProfileResponse
{
/// <summary>
/// The merchant profile id for future processing.
/// </summary>
public string ProfileId { get; set; }

/// <summary>
/// <c>Result</c> structure for giving the result of the transaction.
/// </summary>
public Result RequestResult { get; set; }
}

/// <summary>
/// The result of the call.
/// </summary>
public class Result
{
/// <summary>
/// The result of the transaction
/// </summary>
/// <remarks>
/// Will always be SUCCESS or FAILURE
/// </remarks>
public string ResultValue { get; set; }

/// <summary>
/// The result code of the transaction
/// </summary>
/// <remarks>
/// Will be a two-digit string with only numbers. Allows "00" as a response.
/// </remarks>
public string ResultCode { get; set; }

/// <summary>
/// The english-text message of what went wrong (if anything)
/// </summary>
/// <remarks>
/// The documenation show the empty string being returned in the success cases.
/// </remarks>
public string ResultMessage { get; set; }
}
}
}

Use the JavaScript minifier to compress the code before you publish a website.

Response Handling

Request Submission

/*
ProPay provides the following code "AS IS."
ProPay makes no warranties and ProPay disclaims all warranties and conditions, express, implied or statutory,
including without limitation the implied warranties of title, non-infringement, merchantability, and fitness for a particular purpose.
ProPay does not warrant that the code will be uninterrupted or error free,
nor does ProPay make any warranty as to the performance or any results that may be obtained by use of the code.
*/

<?php
class ProtectPayApi
{

/* change this to the production url for going live after testing https://api.propay.com */
private $_apiBaseUrl = 'https://xmltestapi.propay.com';

/* credentials that would normally be set from database values or a config value */
private $_billerId;
private $_authToken;

/* for creating merchant profiles */
private $_createMerchantProfileData;
private $_createdMerchantProfileInfo;

/**
* @param string $billerId
* @return $this
*/
public function setBillerId($billerId) {
$this->_billerId = $billerId;
return $this;
}

/**
* @param string $authToken
* @return $this
*/
public function setAuthToken($authToken) {
$this->_authToken = $authToken;
return $this;
}

/**
* @return string
*/
private function _getAuth() {
return $this->_billerId . ':' . $this->_authToken;
}

/**
* @return mixed
*/
public function getCreatedMerchantProfileInfo() {
return $this->_createdMerchantProfileInfo;
}

/**
* @param array $merchantProfileData
* @return $this
*/
public function setMerchantProfileData($merchantProfileData) {
$this->_createMerchantProfileData = $merchantProfileData;
return $this;
}

/**
* Create the merchant profile
* @return $this
* _createdMerchantProfileInfo contains a json string like this
* {
* "RequestResult":
* {
* "ResultValue":"SUCCESS",
* "ResultCode":"00",
* "ResultMessage":""
* },
* "ProfileId":769987
* }
*/
public function createMerchantProfile() {
$data_string = json_encode($this->_createMerchantProfileData);

$ch = curl_init($this->_apiBaseUrl . '/protectpay/merchantprofiles');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "PUT");
curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_USERPWD, $this->_getAuth());
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Content-Type: application/json',
'Content-Length: ' . strlen($data_string)
));

$this->_createdMerchantProfileInfo = curl_exec($ch);
return $this;
}
}

$data = [
"ProfileName" => "ProPay",
"PaymentProcessor" => "LegacyProPay",
"ProcessorData" => [
{
"ProcessorField" => "certStr",
"Value" => "90a933bc-07e1-4d33-9a97-084929113a22"
},
{
"ProcessorField" => "accountNum",
"Value" => "30312345"
},
{
"ProcessorField" => "termId",
"Value": "113a22"
}
 ]
];

// Create Merchant Profile
$protectPayAPI = new ProtectPayApi();
$result = $protectPayAPI->setBillerId('9999986379225246')
->setAuthToken('16dfe8d7-889b-4380-925f-9c2c6ea4d930')
->setMerchantProfileData($data)
->createMerchantProfile()
->getCreatedMerchantProfileInfo();

Response Handling

Request Submission

/*
ProPay provides the following code "AS IS."
ProPay makes no warranties and ProPay disclaims all warranties and conditions, express, implied or statutory,
including without limitation the implied warranties of title, non-infringement, merchantability, and fitness for a particular purpose.
ProPay does not warrant that the code will be uninterrupted or error free,
nor does ProPay make any warranty as to the performance or any results that may be obtained by use of the code.
*/

import java.io.IOException;
import java.util.ArrayList;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.ObjectMapper;
import com.mashape.unirest.http.Unirest;
import com.mashape.unirest.http.exceptions.UnirestException;
import com.mashape.unirest.request.HttpRequest;
import com.mashape.unirest.request.HttpRequestWithBody;

public class CreateMerchantProfileSample {
 /**
* This URL would normally come from some configuration file or database.
*/
 //String baseUrl = "https://xmltestapi.propay.com/protectpay/";
 String baseUrl = "http://localhost:5219/API/";

 public static void main(String[] args) {
configureObjectMapper();

CreateMerchantProfileSample program = new CreateMerchantProfileSample();

MerchantProfileResponse response = program.createMerchantProfile();

System.out.println("Result: " + response.RequestResult.ResultValue);
System.out.println("Result code: " + response.RequestResult.ResultCode);
System.out.println("Result message: " + response.RequestResult.ResultMessage);
System.out.println("Profile id: " + response.ProfileId);
 }

 public MerchantProfileResponse createMerchantProfile() {
String resourceUrl = baseUrl + "MerchantProfiles";
MerchantProfile profile = this.buildRequest();

HttpRequestWithBody request = this.createRequest(resourceUrl);

request.body(profile);

return this.executeRequest(request, MerchantProfileResponse.class);
 }

 /**
* Gets the authentication token. This would normally be in a configuration
* file or database.
*
* @return The authentication token.
*/
 private String getAuthToken() {
return "5b8d6753-4aff-4771-b3ae-c831a072a45c";
 }

 /**
* Gets the biller's id. This would normally be in a configuration file or
* database.
*
* @return
*/
 private String getBillerId() {
return "4526293327582082";
 }

 /**
* Builds the request data.
*
* @returns The request data.
*/
 private MerchantProfile buildRequest() {
MerchantProfile profile = new MerchantProfile();
profile.ProfileName = "ProPay";
profile.PaymentProcessor = "LegacyProPay";
profile.ProcessorData = new ProcessorData[4];

ArrayList<ProcessorData> processorData = new ArrayList<ProcessorData>();
ProcessorData certStr = new ProcessorData();
certStr.ProcessorField = "certStr";
certStr.Value = "6fcb7017034141c3992e5d6755edbc";

ProcessorData termId = new ProcessorData();
termId.ProcessorField = "termId";
termId.Value = "c90a84580a";

ProcessorData accountNum = new ProcessorData();
accountNum.ProcessorField = "accountNum";
accountNum.Value = "32685511";

ProcessorData forceRecurring = new ProcessorData();
forceRecurring.ProcessorField = "forceRecurring";
forceRecurring.Value = "false";

processorData.add(certStr);
processorData.add(termId);
processorData.add(accountNum);
processorData.add(forceRecurring);

profile.ProcessorData = processorData.toArray(profile.ProcessorData);

return profile;
 }

 /**
* Create the request instance. This ensures that the authentication header
* is attached to each request.
*
* @param resourceUrl
* The URL of the REST resource.
* @return The GetRequest instance.
*/
 private HttpRequestWithBody createRequest(String resourceUrl) {
String authToken = this.getAuthToken();
String billerId = this.getBillerId();

HttpRequestWithBody restRequest = Unirest.put(resourceUrl).basicAuth(billerId, authToken)
.header("accept", "application/json").header("Content-Type", "application/json");

return restRequest;
 }

 /**
* Execute a REST request.
*
* @param request
* The request to perform.
* @param responseClass
* The type instance of the return type.
* @return An instance of type T or null if there was an error.
*/
 private <T> T executeRequest(HttpRequest request, Class<T> responseClass) {
try {
HttpResponse<T> response = request.asObject(responseClass);
if (response.getStatus() != 200) { // HTTP OK response code
System.out.println(response.getStatusText());
return null;
}

return response.getBody();
} catch (UnirestException e) {
e.printStackTrace();
}

return null;
 }

 /**
* Configures the mapping between JSON and Classes.
*
* This is boilerplate Unirest & Jackson configuration. It should only need
* to be done once in a full solution.
*/
 private static void configureObjectMapper() {
Unirest.setObjectMapper(new ObjectMapper() {
private com.fasterxml.jackson.databind.ObjectMapper jacksonObjectMapper = new com.fasterxml.jackson.databind.ObjectMapper();

public <T> T readValue(String value, Class<T> valueType) {
try {
return jacksonObjectMapper.readValue(value, valueType);
} catch (IOException e) {
throw new RuntimeException(e);
}
}

public String writeValue(Object value) {
try {
return jacksonObjectMapper.writeValueAsString(value);
} catch (JsonProcessingException e) {
throw new RuntimeException(e);
}
}
});
 }
}


// -------------------------------------------------------------------------------------------- //
// Object files

// ProcessorData.java

/**
 * ProPay provides the following code "AS IS." ProPay makes no warranties and
 * ProPay disclaims all warranties and conditions, express, implied or
 * statutory, including without limitation the implied warranties of title,
 * non-infringement, merchantability, and fitness for a particular purpose.
 * ProPay does not warrant that the code will be uninterrupted or error free,
 * nor does ProPay make any warranty as to the performance or any results that
 * may be obtained by use of the code.
 */

/**
 * Class for processor specific values.
 */
public class ProcessorData {

 /**
* The processor specific field name.
*/
 public String ProcessorField;
 
 /**
* The value for the processor specific field.
*/
 public String Value;
}

// -------------------------------------------------------------------------------------------- //
// MerchantProfile.java

/*
ProPay provides the following code "AS IS."
ProPay makes no warranties and ProPay disclaims all warranties and conditions, express, implied or statutory,
including without limitation the implied warranties of title, non-infringement, merchantability, and fitness for a particular purpose.
ProPay does not warrant that the code will be uninterrupted or error free,
nor does ProPay make any warranty as to the performance or any results that may be obtained by use of the code.
*/

/**
 * Data for creating a merchant profile.
 *
 */
public class MerchantProfile {
 /**
* The name of the profile.
*/
 public String ProfileName;
 
 /**
* The payment gateway where transactions will be sent.
*
* See ProtectPay API Appending B for valid processors.
*/
 public String PaymentProcessor;
 
 /**
* The processor specific data fields.
*/
 public ProcessorData[] ProcessorData;
}


// -------------------------------------------------------------------------------------------- //
// Result.java

/*
ProPay provides the following code "AS IS."
ProPay makes no warranties and ProPay disclaims all warranties and conditions, express, implied or statutory,
including without limitation the implied warranties of title, non-infringement, merchantability, and fitness for a particular purpose.
ProPay does not warrant that the code will be uninterrupted or error free,
nor does ProPay make any warranty as to the performance or any results that may be obtained by use of the code.
*/

/**
 * The result of the call.
 */
public class Result {
 /**
* The result of the transaction
*
* Will always be SUCCESS or FAILURE
*/
 public String ResultValue;

 /**
* The result code of the transaction
*
*
* Will be a two-digit string with only numbers. Allows "00" as a response.
*/
 public String ResultCode;

 /**
* The English-text message of what went wrong (if anything)
*
*
* The documentation shows the empty string being returned in the success
* cases.
*/
 public String ResultMessage;
}

// -------------------------------------------------------------------------------------------- //
// MerchantProfileResponse.java

/*
ProPay provides the following code "AS IS."
ProPay makes no warranties and ProPay disclaims all warranties and conditions, express, implied or statutory,
including without limitation the implied warranties of title, non-infringement, merchantability, and fitness for a particular purpose.
ProPay does not warrant that the code will be uninterrupted or error free,
nor does ProPay make any warranty as to the performance or any results that may be obtained by use of the code.
*/


//import com.fasterxml.jackson.annotation.JsonProperty;

/**
 * The value returned from a call to create a merchant profile.
 */
public class MerchantProfileResponse {
 /**
* The API Result from the request.
*/
 public Result RequestResult;

 /**
* The merchant profile id for future processing.
*/
 public String ProfileId;
}

Response Handling

The following sample uses the Unirest and Jackson libraries.

You can add them to your project using:

Apache Maven
<dependency>
<groupId>com.mashape.unirest</groupId>
<artifactId>unirest-java</artifactId>
<version>1.4.9</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.8.8.1</version>
</dependency>


Gradle/Grails
compile 'com.mashape.unirest:unirest-java:1.4.9'
compile 'com.fasterxml.jackson.core:jackson-databind:2.8.8.1'

Request Submission

Response Handling

Coming Soon
Request Values

Request Element

Type

Max

Required

Notes

AuthenticationToken

String

100

Authorization

Valid value is a GUID. Value supplied by ProPay. Used to access the API

BillerAccountId

String

16

Authorization

Value supplied by ProPay. Used to identify the correct collection of tokens.

PaymentProcessor

String

-

Required

Used to tell the ProtectPay system which type of link to a gateway should be created.

See Appendix B for valid supported processors.

ProcessorData[]

Object

-

-

 

ProcessorData[].ProcessorField

String

-

Required

Used in conjunction with value to describe the various fields necessary to create a link to a payment processor.

See Appendix for valid processor fields

ProcessorData[].Value

String

20

Required

Used in conjunction with value to describe the various fields necessary to create a link to a payment processor.

ProfileName

String

50

Required

A name for the profile.

Response Values

Response Element

Type

Notes

RequestResult.ResultValue

String

The ProtectPay API Method Response Value; SUCCESS indicates the method completed; FAILURE indicates the method call failed and the reason is indicated in the ResultCode and ResultMessage

RequestResult.ResultCode

String

The ProtectPay API Method Response Code. See Appendix for possible returned Values

RequestResult.ResultMessage

String

The ProtectPay API Method Response Message. See Appendix for possible returned Messages

ProfileId

String

The MerchantProfileId that was created using the supplied credentials for the supplied Gateway that is used to process against this particular gateway

How to call this method?

Example Request

Example Response

Implementation Details
Request Submission

Response Handling

Request Submission

Response Handling

Request Submission

Response Handling

Request Submission

Response Handling

Request Values
Response Values
How to call this method?

{SOAP Action}     CreateMerchantProfile
{URL}                   https://xmltestapi.propay.com/protectpay/sps.svc
Example Request

Example Response

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:con="http://propay.com/SPS/contracts" xmlns:typ="http://propay.com/SPS/types" xmlns:prop="http://schemas.datacontract.org/2004/07/Propay.Contracts.SPS.External" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
 <soapenv:Header/>
 <soapenv:Body>
<con:CreateMerchantProfile>
<con:identification>
<typ:AuthenticationToken>MyAuthToken</typ:AuthenticationToken>
<typ:BillerAccountId>MyBillerId</typ:BillerAccountId>
</con:identification>
<con:merchantProfile>
<prop:PaymentProcessor>LegacyProPay</prop:PaymentProcessor>
<prop:ProcessorData>
<!--Zero or more repetitions:--> 
<prop:ProcessorDatum> 
<prop:ProcessorField>certStr</prop:ProcessorField>
<prop:Value>ad6212e08ae41f6a0a5eeac55d522b</prop:Value>
</prop:ProcessorDatum> 
<prop:ProcessorDatum> 
<prop:ProcessorField>accountNum</prop:ProcessorField>
<prop:Value>30312345</prop:Value>
</prop:ProcessorDatum> 
<prop:ProcessorDatum> 
<prop:ProcessorField>termId</prop:ProcessorField>
<prop:Value>113a22</prop:Value>
</prop:ProcessorDatum> 
</prop:ProcessorData>
<prop:ProfileName>505be90a-9256-45c5-85a5-5df6f62189c7</prop:ProfileName>
</con:merchantProfile>
</con:CreateMerchantProfile>
 </soapenv:Body>
</soapenv:Envelope>

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
 <s:Body>
<CreateMerchantProfileResponse xmlns="http://propay.com/SPS/contracts">
<CreateMerchantProfileResult xmlns:a="http://schemas.datacontract.org/2004/07/ProPay.Contracts.SPS.External" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<a:ProfileId>769987</a:ProfileId>
<a:RequestResult xmlns:b="http://propay.com/SPS/types">
<b:ResultCode>00</b:ResultCode> 
<b:ResultMessage/> 
<b:ResultValue>SUCCESS</b:ResultValue> 
</a:RequestResult>
</CreateMerchantProfileResult>
</CreateMerchantProfileResponse>
 </s:Body>
</s:Envelope>

Implementation Details
Request Submission

Response Handling

Request Submission

Response Handling

Request Submission

Response Handling

Request Submission

Response Handling

Request Values

Request Element

Type

Max

Required

Notes

AuthenticationToken

String

100

Authorization

Valid value is a GUID. Value supplied by ProPay. Used to access the API

BillerAccountId

String

16

Authorization

Value supplied by ProPay. Used to identify the correct collection of tokens.

PaymentProcessor

String

-

Required

Used to tell the ProtectPay system which type of link to a gateway should be created.

See Appendix for valid supported processors.

ProcessorData[]

Object

-

-

 

ProcessorData[].ProcessorField

String

-

Required

Used in conjunction with value to describe the various fields necessary to create a link to a payment processor.

See Appendix for valid processor fields

ProcessorData[].Value

String

20

Required

Used in conjunction with value to describe the various fields necessary to create a link to a payment processor.

ProfileName

String

50

Required

A name for the profile.

Response Values

Response Element

Type

Notes

RequestResult.ResultValue

String

The ProtectPay API Method Response Value;

SUCCESS indicates the method completed;

FAILURE indicates the method call failed and the reason is indicated in the ResultCode and ResultMessage

RequestResult.ResultCode

String

The ProtectPay API Method Response Code. See Appendix for possible returned Values

RequestResult.ResultMessage

String

The ProtectPay API Method Response Message. See Appendix for possible returned Messages

ProfileId

String

The MerchantProfileId that was created using the supplied credentials for the supplied Gateway that is used to process against this particular gateway