Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/coletiv/cybersource-sdk
Elixir module to provide interface with CyberSource SOAP API
https://github.com/coletiv/cybersource-sdk
cybersource elixir payment-processing
Last synced: 3 months ago
JSON representation
Elixir module to provide interface with CyberSource SOAP API
- Host: GitHub
- URL: https://github.com/coletiv/cybersource-sdk
- Owner: coletiv
- License: mit
- Created: 2017-12-15T12:01:52.000Z (about 7 years ago)
- Default Branch: master
- Last Pushed: 2024-05-14T07:25:21.000Z (9 months ago)
- Last Synced: 2024-10-19T11:13:29.494Z (3 months ago)
- Topics: cybersource, elixir, payment-processing
- Language: Elixir
- Homepage:
- Size: 49.8 KB
- Stars: 12
- Watchers: 3
- Forks: 4
- Open Issues: 2
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Cybersource SDK
[![Build Status](https://travis-ci.org/coletiv/cybersource-sdk.svg?branch=master)](https://travis-ci.org/coletiv/cybersource-sdk)
[![Hex.pm Version](http://img.shields.io/hexpm/v/cybersource_sdk.svg)](https://hex.pm/packages/cybersource_sdk)This module handle CyberSource SOAP service for payments. I've tried to use [Detergentx](https://github.com/r-icarus/detergentex) Elixir wrapper to erlang module detergent without success. Also tried [Bet365 soap](https://github.com/bet365/soap/) module, with no luck.
This module only works for **Apple Pay** and **Android Pay**. Other systems will be added in the future.
It only supports 3 types of requests: Authorization, Capture and Refund.
## Usage
1. Add `cybersource_sdk` to your deps:
```
[
...
{:cybersource_sdk, "~> 1.0.0"},
...
]
```2. Add `cybersource_sdk` to the list of applications dependencies in your `mix.exs`.
```
def application do
[applications: [..., :cybersource_sdk]]
end
```3. Add configuration to your `prod.secret.exs` and/or `dev.secret.exs`.
Check [Configurations](#Configurations).
4. How to call it.
Check [Requests](#Requests).
## Configurations
You can update 4 parameters in configurations:
* **endpoint**: WSDL endpoint URL, you can check the most recent in `https://ics2wstest.ic3.com/commerce/1.x/transactionProcessor/`. Don't forget to only use the one with `.wsdl`.
* **merchant_id**: Your `merchant_id`, the same you use for login.
* **transaction_key**: This key can be generated in your [Business Center](https://ebctest.cybersource.com/ebctest/login/LoginProcess.do), under `Account Management` > `Transaction Security Keys` > `Security Keys for the SOAP Toolkit API`.
* **currency**: Value of the currency you are going to use. Example: `USD`, `EUR`, ...```
config :cybersource_sdk,
endpoint: "https://ics2wstest.ic3.com/commerce/1.x/transactionProcessor/CyberSourceTransaction_1.142.wsdl",
merchant: %{
id: "my_company",
transaction_key: "pdsamp9094m89njkndsa+32423lnksi0NBL32M90dan==",
currency: "USD"
}
```You can add multiple merchants. You need to setup first in configurations like the following example:
```
config :cybersource_sdk,
endpoint: "https://ics2wstest.ic3.com/commerce/1.x/transactionProcessor/CyberSourceTransaction_1.142.wsdl",
merchant_apple_pay: %{
id: "my_company_1",
transaction_key: "pdsamp9094m89njkndsa+32423lnksi0NBL32M90dan==",
currency: "USD"
},
merchant_android_pay: %{
id: "my_company_2",
transaction_key: "pdsamp9094m89njkndsa+32423lnksi0NBL32M90dan==",
currency: "USD"
}
```After this, you need to send the `worker` merchant atom to the request.
## Requests
### Authorization
Check credit card funds, and hold the payment of the transaction until a capture or refund request is issued.
**Example**
```
bill_to = CyberSourceSDK.bill_to("John", "Doe", "Freedom Street", "3L 10001", "New York", "USA", "[email protected]")
CyberSourceSDK.authorize(50, bill_to, "VISA", "3a9KSs98jDSAMsandsab8DSA+dk==", [], :merchant_android_pay)
```### Capture
Complete the authorization request by finishing it with the capture request. All the funds of this transaction will be available in your account and charged to the user.
**Example**
```
items = [
%{
id: 0,
unit_price: 12,
quantity: 2
}
]CyberSourceSDK.capture("12345", request_id, items)
```### Refund
Cancel the authorization request by letting CyberSource know that you don't want to charge the user.
**Example**
```
items = [
%{
id: 0,
unit_price: 12,
quantity: 2
}
]CyberSourceSDK.refund("12345", request_id, items)
```## Response
Response to the request will be the following map:
```
merchantReferenceCode: "...",
requestID: ...,
decision: "...",
reasonCode: ...,
requestToken: "...",
ccAuthReply: [
reasonCode: ....,
amount: ...
],
ccCapctureReply: [
reasonCode: ...,
amount: ...
],
ccAuthReversalReply: [
reasonCode: ...,
amount: ...
],
fault: [
faultCode: ...,
faultString: ...
]
```