NAV Navbar
Logo
curl C#

Introduction

Welcome to ConnexPoint!

ConnexPoint is the next technological breakthrough in how payments are processed, designed for schools and community organizations.

When you partner with ConnexPoint, you will be able to provide a streamlined payment solution to your users without setting up a complex interface. The ConnexPoint payment application seamlessly integrates with your software in two easy steps.

ConnexPoint is a secure, RESTful API that utilizes JSON for transporting data.

Payments

Our Process

  1. 1 The payer will select items for purchase on your site and click the Payment Button.
  2. 2 The ConnexPoint payment interface will guide the payer through selecting a payment method.
  3. 3 You will receive a payment ID via a hidden input called HexeaPaymentID.
  4. 4 Next you will send an execute call using the HexeaPaymentID to complete transaction.
  5. 5 ConnexPoint will send a receipt to the payer.

How It Works

The ConnexPoint payment platform processes your payments in two simple steps.

Step 1: Create Payment

Create the payment via Payment Button

ConnexPoint uses a JavaScript application that is embedded on your site, which we refer to as Payment Button. The Payment Button securely communicates with our server to handle all credit card information which means the payment information never has to pass through your server. Payment Button creates a payment and returns a PaymentID which is used in step two.

Step 2: Execute Payment

Execute the payment via the Execute service of the Payment API

An Execute call is made to our Payment API to capture the funds using the PaymentID. Once you receive a successful response from ConnexPoint, you may display a payment confirmation page to the payer.

Try It Now

Here you can see a sample of Payment Button in action.

When the payer is ready to pay, they simply click the the Pay with ConnexPoint button. Please note that the button text is customizable.

We have a test item set up with a fixed amount of $50. Our authentication server knows you are already logged in to view this documentation, so it will also identify your account to make a payment.

You may make a test payment by using the card number below.

Card Number: 4242 4242 4242 4242

Card Expiration Date: Any future date

Cart total: $50

Payment Button

Include the payments.js script on your site

<script src="https://paybutton.connexpoint.com/payments.js"></script>

First you will need to include the payments.js script on your site.

Next you will select the layout that will work well for your site.

Traditional Web App

Traditional Web App

<form name="checkout" method="POST">
  <script class='hexea-button'>
    Hexea.button({
      pcct: "yourPCCTGoesHere",
      amount: 24.50,
      // The item array is optional
      items: [
        {
          productCode: "SKU0194",
          extendedPrice: 24.50
          // see item definition for full list of item fields
        }
      ]
    });
  </script>
</form>

Single Page Application

Single Page Application

<label>Amount: </label>
<input type="number" id="amount" value="24.50" />
<button id="customButton">Custom Button</button>

<script>
var handler = Hexea.configure({
  pcct: "yourPCCTGoesHere",
  onPayment: function(payment) {
    console.log(payment);
  }
});

document.getElementById('customButton').addEventListener('click', function(e) {
  handler.open({
    amount:document.getElementById("amount").value,
    // The item array is optional
    items: [
      {
        productCode: "SKU0194",
        extendedPrice: 24.50
        // see item definition for full list of item fields
      }
    ]
  });
});
</script>

Pressing the button creates the payment and displays the payment UI.

Fields

Example of input fields in json

{
  "amount": 27,
  "noteToPayer": "FRAGILE",
  "invoiceReference": "1234",
  "serviceFee": 5,
  "serviceFeeAccountCode": "09876543210987654",
  "items": [
    {
      "customItemField": "Don't Forget to drink your Ovaltine",
      "orderReferenceID": "110347",
      "productCode": "SKU123",
      "accountCode": "12345678901234567",
      "description": "Decoder Ring",
      "quantity": 2,
      "extendedPrice": 10,
      "extendedTax": 0.5,
      "payeeID": "ELI0812",
      "payeeName": "Ralphie Parker"
    },
    {
      "customItemField": "You'll shoot your eye out",
      "orderReferenceID": "110348",
      "productCode": "SKU456",
      "accountCode": "12345678901234567",
      "description": "Red Ryder BB Gun",
      "quantity": 1,
      "extendedPrice": 10,
      "extendedTax": 1.5,
      "payeeID": "ELI0812",
      "payeeName": "Ralphie Parker"
    }
  ]
}
Field Type Required Visible on Reports Visible on Receipts Description
amount number Yes Yes Yes A positive decimal representing how much to charge the card. This must include tax and serviceFee.
invoiceReference string No Yes Yes You can use this field to associate your reference number to this payment. We don’t validate this field but it will appear on the payments report.
noteToPayer string No No Yes This is a message that will appear on the receipt that we email to the payer. Markup is not supported at this time.
items array No Yes Yes This field is used for passing details of items in a payment
serviceFee number No Yes Yes A positive decimal representing how much service fee to charge for this payment. Alternatively, this value may be passed at the item level.
serviceFeeAccountCode string No No No Account code for the service fee

We also allow you to pass item details.

The Item object has the following fields:

Field Type Required Visible on Reports Visible on Receipts Description
productCode string Yes Yes Yes This is usually a code or SKU that identifies the product.
accountCode string No No No Account code for the item
extendedPrice number Yes Yes Yes This is the total unit cost of the item multiplied by the quantity. It does not include tax.
description string No Yes Yes This is the short description of the item. It will be displayed to the payer on their receipt.
extendedTax number No Yes Yes This is the total amount of tax charged on the extended price.
payeeID string No No No This is the identification of the item beneficiary. An example is a student’s ID.
payeeName string No No No This is the name of the item beneficiary.
quantity number No Yes Yes This field is shown on the payer’s receipt and the items report. It is not used by ConnexPoint in calculations.
orderReferenceID string No Yes Yes Use this field instead of the invoiceReference if you want to associate your reference number at the item level.
customItemField string No No No This is a pass-through field where you can pass additional information at the item level. It is not shown on any reports.
serviceFee number No Yes Yes A positive decimal representing how much service fee to charge for this item.

Input Response

Once the payer has logged in and selected a payment method, we will provide you with the HexeaPaymentID and confirm the amount.

If you are using the Traditional Web App layout, then ConnexPoint will do a form post to the action you specified with the following fields:

HexeaPaymentID

amount

Single Page Application

{
  "HexeaPaymentID": "6001848165880635",
  "amount": 27
}

If you are using the Single Page Application layout, you can expect to receive a JSON response like the one to the right.

Execute Payment

Request Example

curl https://pay.connexpoint.com/v1/payments/{paymentID}/execute \
  -H "Authorization: Bearer yourSecretKeyGoesHere" \
  -H "PCCT: yourPCCTGoesHere" \
  -d amount=27
var client = new HttpClient();
var paymentID = "paymentIDGoesHere";
var ConnexPointUrl = $"https://pay.connexpoint.com/v1/payments/{paymentID}/execute";
var request = new HttpRequestMessage(HttpMethod.Post, ConnexPointUrl);
request.Headers.Authorization = new AuthenticationHeaderValue(
  "Bearer", "yourSecretKeyGoesHere");
request.Headers.Add("PCCT", "yourPCCTGoesHere");
request.Content = new StringContent("amount=50");
var response = client.SendAsync(request).Result;

Response Example

{
  "Message": "Successful",
  "WasSuccessful": true
}

In order to complete the transaction, you will need to post an execute command with the initial dollar amount and the paymentID received in the Payment Button response.

After the payer has selected a payment method, ConnexPoint will authorize that payment amount for up to 30 minutes. If the execute is not received within 30 minutes, the paymentID will time out and ConnexPoint will release the funds from the payer’s card.

The execute call is idempotent, so calling the function multiple times will not result in duplicate charges.

Get Payment

Request Example


curl https://pay.connexpoint.com/v1/payments/{paymentID} \
  -H "Authorization: Bearer yourSecretKeyGoesHere" \
  -H "PCCT: yourPCCTGoesHere"

var client = new HttpClient();
var paymentID = "paymentIDGoesHere";
var ConnexPointUrl = $"https://pay.connexpoint.com/v1/payments/{paymentID}";
var request = new HttpRequestMessage(HttpMethod.Get, ConnexPointUrl);
request.Headers.Authorization = new AuthenticationHeaderValue(
  "Bearer", "yourSecretKeyGoesHere");
request.Headers.Add("PCCT", "yourPCCTGoesHere");

var response = await client.SendAsync(request);
var stringContent = await response.Content.ReadAsStringAsync();

Response Example

{
    "paymentID": "156077039513649156",
    "paymentRef": "mry-6k8-n54hn0",
    "isTest": true,
    "createTime": "2018-03-07T16:34:25.9914442-06:00",
    "allocateTime": "2018-03-07T16:34:47.5223803-06:00",
    "amount": 27,
    "items": [
        {
            "paymentItemID": "156077039513649157",
            "productCode": "SKU123",
            "accountCode": "12345678901234567",
            "extendedPrice": 10,
            "description": "Decoder Ring",
            "extendedTax": 0.7,
            "payeeID": "ELI0812",
            "payeeName": "Ralphie Parker",
            "quantity": 2,
            "orderReferenceID": "110347",
            "customItemField": "Don't Forget to drink your Ovaltine",
            "serviceFee": 0.5,
        },
        {
            "paymentItemID": "156077039513649158",
            "productCode": "SKU456",
            "accountCode": "12345678901234567",
            "extendedPrice": 10,
            "description": "Red Ryder BB Gun",
            "extendedTax": 1.3,
            "payeeID": "ELI0812",
            "payeeName": "Ralphie Parker",
            "quantity": 1,
            "orderReferenceID": "110348",
            "customItemField": "You'll shoot your eye out",
            "serviceFee": 0.5,
        }
    ],
    "serviceFee": 1,
    "message": "Test mode payments are always approved",
    "responseCode": "000",
    "status": "Success"
}

To get information about a single payment, you can call the payments service with a specific paymentID.

Reversals

Reversals are currently handled by the customer and may need to be manually adjusted in your reporting.

You may use the get https://pay.connexpoint.com/v1/payments/{paymentID} to receive any information about a payment, including its reversal status.

Transactions

Request Example

curl https://api.connexpoint.com/orgs/{yourOrganizationIDGoesHere}/transactions/{filter} \
  -H "Authorization: Bearer yourSecretKeyGoesHere" \
  -H "PCCT: yourPCCTGoesHere"

DateTime startExecuteDate = DateTime.Now.AddDays(-1);
DateTime endExecuteDate = DateTime.Now;
string startExecuteDateFormatted = startExecuteDate.ToString("yyyy-MM-ddTHH-mm-ss");
string endExecuteDateFormatted = endExecuteDate.ToString("yyyy-MM-ddTHH-mm-ss");

string filter = "?filter=" +
$"ExecuteDate~gt~datetime'{startExecuteDateFormatted}'~and~" +
$"ExecuteDate~lt~datetime'{endExecuteDateFormatted}'";

var client = new HttpClient();
var ConnexPointUrl = $"https://api.connexpoint.com/orgs/{yourOrganizationIDGoesHere}/transactions/{filter}";         
var request = new HttpRequestMessage(HttpMethod.Get, ConnexPointUrl);
request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", "yourSecretKeyGoesHere");
request.Headers.Add("PCCT", "yourPCCTGoesHere");
var response = await client.SendAsync(request);
var stringContent = await response.Content.ReadAsStringAsync();

Response Example

[
    {
        "partnerInvoiceNumber": "123456789",
        "fee": 0.20,
        "amountRefunded": 0.00,
        "transactionType": "Payment",
        "transactionID": "12345678901234567",
        "transactionRef": "123-456-789012",
        "amount": 25.50,
        "createDate": "2018-01-01T00:00:00+00:00",
        "executeDate": "2018-01-01T00:00:00+00:00",
        "status": "succeeded",
        "partnerID": "12345678901234567",
        "customerID": "12345678901234567",
        "merchantID": "9876543210987654",
        "isTest": false
    },
    {
        "refundFromTransactionID": "123456789012345678",
        "refundFromTransactionRef": "123-456-789012",
        "transactionType": "Refund",
        "transactionID": "123456789012345678",
        "transactionRef": "123-456-789012",
        "amount": 1.00,
        "createDate": "2018-01-01T00:00:00+00:00",
        "executeDate": "2018-01-01T00:00:00+00:00",
        "status": "refunded",
        "partnerID": "12345678901234567",
        "customerID": "12345678901234567",
        "merchantID": "9876543210987654",
        "isTest": false
    }
]

To obtain a list of payment and reversal transactions executed in a specific timespan, call the transactions service with your organization id and a filter including the bounding dates. In the example response provided, the first item is a payment and the second is a reversal.

Webhooks

How It Works

Use webhooks to be notified about events that happen separately from api requests.

You can register webhook URLs that we will notify any time an event happens. When the event occurs, ConnexPoint will create an Event object to describe the event. This object will include the type of event and the data associated with the event. ConnexPoint will then send the Event object, via an HTTP POST request, to any endpoint URLs that you have subscribed to that kind of event.

See actions for a full list of the event types to wich you can subscribe.

Subscribe to a Webhook

Definition

POST https://api.connexpoint.com/orgs/{ORGANIZATION_ID}/webhooks
POST https://api.connexpoint.com/orgs/{ORGANIZATION_ID}/webhooks

Request Example

curl https://api.connexpoint.com/orgs/{ORGANIZATION_ID}/webhooks \
  -H "Authorization: Bearer yourSecretKeyGoesHere" \
  -H "Content-Type: application/json" \
  -d yourJsonBodyGoesHere
  var client = new RestClient("https://api.connexpoint.com/");
  var request = new RestRequest("orgs/{id}/webhooks", Method.POST);

  request.AddUrlSegment("id", "{yourOrganizationIDGoesHere}");
  request.AddHeader("Authorization", yourSecretKeyGoesHere);
  request.RequestFormat = DataFormat.Json;
  request.AddBody(new { url = "https://example.com/post", actions = new List<string> { "payment.refunded" } });

  var webhooks = client.Execute(request);

Body Example

{
  "url": "https://example.com/post",
  "actions":["payment.refunded"]
}

Response Example

{
    "webhookID": "158938798871093575",
    "url": "https://example.com/post",
    "actions": [
        "payment.refunded"
    ]
}

Subscribe by posting with your receiving endpoint and the actions for whcih you want to be notified.

Fields

Field Type Required Description
url string Yes This is the URL we will POST the event details to.
actions string array Yes These are the actions you want to be notified of.

GET Subscribed Webhook(s)

Definition

GET https://api.connexpoint.com/orgs/{ORGANIZATION_ID}/webhooks
GET https://api.connexpoint.com/orgs/{ORGANIZATION_ID}/webhooks

Request Example

curl https://api.connexpoint.com/orgs/{ORGANIZATION_ID}/webhooks \
  -H "Authorization: Bearer yourSecretKeyGoesHere" \
  var client = new RestClient("https://api.connexpoint.com/");
  var request = new RestRequest("orgs/{id}/webhooks", Method.GET);
  request.AddUrlSegment("id", "{yourOrganizationIDGoesHere}");
  request.AddHeader("Authorization", yourSecretKeyGoesHere);
  var webhooks = client.Execute<List<WebhookResponseModel>>(request);

  public class WebhookResponseModel
  {
    public string webhookID { get; set; }
    public string url { get; set; }
    public List<string> actions { get; set; }
  }

Response Example

[
  {
      "webhookID": "158938798871093575",
      "url": "https://example.com/post",
      "actions": [
          "payment.refunded"
      ]
  }
]

Use a GET to retrieve your subscribed webhooks.

DELETE a Webhook Subscription

Definition

DELETE https://api.connexpoint.com/orgs/{ORGANIZATION_ID}/webhooks/{WEBHOOK_ID}
DELETE https://api.connexpoint.com/orgs/{ORGANIZATION_ID}/webhooks/{WEBHOOK_ID}

Request Example

curl https://api.connexpoint.com/orgs/{ORGANIZATION_ID}/webhooks/{WEBHOOK_ID} \
  -H "Authorization: Bearer yourSecretKeyGoesHere" \
  -X "DELETE"
  //call webhooks api with org ID, webhook ID & token
  var client = new RestClient("https://api.connexpoint.com/");
  var request = new RestRequest("orgs/{id}/webhooks/{webhookID}", Method.DELETE);
  request.AddUrlSegment("id", "yourOrganizationIDGoesHere");
  request.AddUrlSegment("webhookID", "yourWebhookIDGoesHere");
  request.AddHeader("Authorization", yourSecretKeyGoesHere);
  request.RequestFormat = DataFormat.Json;
  //Only a 200 OK is returned for successful deletion
  var response = client.Execute(request);

Delete your webhook using your webhook ID.

Actions

payment.refunded Response Example

{
    "pcct": "10869BD3ED",
    "action": "payment.refunded",
    "url": "https://example.com/post",
    "data": {
        "RefundID": 158149007279063060,
        "RefundRef": "n1y-2wv-gzg998",
        "Amount": 0.04,
        "PaymentID": 156077039513649156,
        "CreateDate": "2018-03-13T09:47:41.601-05:00",
        "Status": "refunded",
        "RefundItems": [{
            "RefundItemID": 158149035191435601,
            "ExtendedItemAmount": 0.01,
            "TaxAmount": 0.01,
            "ShippingAmount": 0.00,
            "HandlingAmount": 0.00,
            "TotalAmount": 0.02,
            "RefundID": 158149007279063060,
            "PaymentItemID": 156077039513649157,
            "CustomerFee": 0.00
        },
        {
            "RefundItemID": 158149035191435602,
            "ExtendedItemAmount": 0.01,
            "TaxAmount": 0.01,
            "ShippingAmount": 0.00,
            "HandlingAmount": 0.00,
            "TotalAmount": 0.02,
            "RefundID": 158149007279063060,
            "PaymentItemID": 156077039513649158,
            "CustomerFee": 0.00
        }]
    }
}

pcct.created Response Example

{
  "action": "pcct.created",
  "url": "https://example.com/post",
  "data": {
    "PcctToken":"10869BD3ED",
    "MerchantName":"Example Name",
    "MerchantID": 123456789987654321
  }
}
Action Description
payment.refunded This action will notify you of a payment reversal (refund or void). Use the returned PCCT to identify the customer to whom the action applies.
pcct.created This action will notify you of a new merchant that wishes to work with you. Use the returned PCCT and Merchant ID to identify the merchant to whom the action applies.

Boarding & Certification

Contact support to start. You will receive your secret key and certification.

Response Codes

The ConnexPoint API returns the following response codes:

400 level errors generally mean that something is wrong with the request.

500 level errors generally mean that something is wrong on our end.

Response Code Meaning Comments
200 Success It worked! You’re done.
400 Bad Request Your request is not behaving properly.
401 Unauthorized The secret key is wrong or missing.
403 Forbidden You do not have permission for this resource.
404 Not Found Request is using the wrong url or an incorrect ID.
405 Method Not Allowed You tried to access with an invalid method.
406 Not Acceptable You requested a format that isn’t json.
500 Internal Server Error We had a problem with our server. Try again later.
503 Service Unavailable We’re temporarily offline. Please try again later.