使用Marqeta构建Java付款应用
#网络开发人员 #教程 #java #fintech

如果您的企业曾经考虑过添加一种可能向客户或员工发行卡的付款系统,那么您可能会避免使用它,因为技术障碍似乎太困难了。实际上,启动和运行付款系统非常简单。在这篇文章中,我们将研究如何使用MarqetaCore API向您的Java应用程序建立付款。

Marqeta是一家广受信任的金融服务公司,您可能已经从他们的平台中受益。 UberSquareDoorDash都有使用Marqeta构建的付款平台。如果您的公司需要向客户或员工发布付款方式,则Marqeta平台可能正是您所需要的。

我们将逐步构建一个功能齐全的卡支付系统,该系统从银行或其他金融机构开始,并以客户或雇员结束,他们可以在接受借记卡或信用卡的任何地方使用卡。

在我们开始这项技术之前,重要的是首先介绍Marqeta使用的一些关键术语。

Marqeta的关键条款

Marqeta与银行合作提供funding source。该消息来源将是一个可以从user进行交易的任何地方,该交易已发出card。持卡人是持有可以是物理或虚拟的卡的任何用户。

card product中封装了管理卡的使用规则。卡产品包括与与它们相关的所有卡有关的信息,例如卡是物理还是虚拟,一次性或多用途,以及完成交易所需的内容。

可以通过核心API管理Marqeta生态系统的所有重要部分。在我们的简单Java应用程序中,我们将使用Core API使用Core API,将create a new card productcreate a userissue a virtual card(基于我们创建的卡产品)。从您的持卡人的角度来看,我们将要构建的应用程序将发生一切,因此根本不需要与Marqeta互动。

Java和核心API

虽然没有正式支持Marqeta的Java SDK,但building a Java client还是很简单的,因为Swagger v2.0OpenAPI v3.0都记录了核心API。 OpenAPI文档位于Beta中,但直接从API源代码生成。要获取Java客户端,我们要做的就是将OpenAPI YAML文件放入editor.swagger.io中,修改服务器部分将https://sandbox-api.marqeta.com/v3用作URL,并告诉它生成Java客户端。

建立客户

下载客户端后,您可以在本地的Maven存储库中构建客户端,启动Maven应用程序,然后将客户端包含在pom.xml文件中。

Java的较新版本可能需要向客户端的pom.xml添加依赖关系:

<!-- https://mvnrepository.com/artifact/javax.annotation/javax.annotation-api -->
<dependency>
  <groupId>javax.annotation</groupId>
  <artifactId>javax.annotation-api</artifactId>
  <version>1.3.2</version>
</dependency>

要构建客户端,我们从客户端的文件夹中运行此命令:

$ mvn clean install

然后,在我们应用的干净工作文件夹中,我们运行此命令:

$ mvn -B archetype:generate \
    -DgroupId=com.mycompany.app \
    -DartifactId=my-payment-app \
    -DarchetypeArtifactId=maven-archetype-quickstart \
    -DarchetypeVersion=1.4

您现在有一个带有pom.xml的文件夹称为my-payment-app,您可以将生成的客户端添加为依赖关系:

<dependency>
  <groupId>io.swagger</groupId>
  <artifactId>swagger-java-client</artifactId>
  <version>1.0.0</version>
  <scope>compile</scope>
</dependency>

创建Java付款应用程序

现在您创建了应用程序的骨架,让我们看一下Marqeta的Core API开始的肉。实际上,我们将在Core API Quick Start guide的许多步骤中努力。如果您更喜欢通过该指南进行工作,则根本不需要编写任何代码,因为它包括一个内置的API Explorer。浏览器也是仔细检查您的工作时仔细检查您的工作的好方法。

进口和身份验证

我们可以通过设置我们的身份验证并导入我们将在整个项目中使用的类来开始在Maven生成的应用程序的主要App.java文件中开始。

package com.mycompany.app;

import io.swagger.client.*;
import io.swagger.client.api.*;
import io.swagger.client.model.*;

public class App
{
   public static void main( String[] args )
   {
       String username = "your-sandbox-application-token";
       String password = "your-sandbox-admin-access-token";

       ApiClient apiClient = new ApiClient();
       apiClient.setUsername(username);
       apiClient.setPassword(password);
  }
}

当然,在生产应用程序中,您不希望将您的身份验证令牌包含在代码中。但是,为了在此演示设置中学习目的,这样做将使我们能够快速发展。您可以在Marqeta Sandbox Dashboard中找到所需的值。

创建一个用户

一旦我们准备好了这个ApiClient对象,我们就可以使用UsersAPI创建新的用户记录:

...
       apiClient.setPassword(password);

       UsersApi usersApiInstance = new UsersApi();
       usersApiInstance.setApiClient(apiClient);
       CardHolderModel cardHolderBody = new CardHolderModel();

       cardHolderBody.setFirstName("Marqeta");
       cardHolderBody.setLastName("User");
       cardHolderBody.setAddress1("180 Grand Avenue");
       cardHolderBody.setAddress2("6th Floor");
       cardHolderBody.setCity("Oakland");
       cardHolderBody.setState("CA");
       cardHolderBody.setPostalCode("94612");

       String userToken = "";

       try {
           UserCardHolderResponse cardHolderResult = usersApiInstance.postUsers(cardHolderBody);
           System.out.println(cardHolderResult);
           userToken = cardHolderResult.getToken();
           System.out.println("USER TOKEN: " + userToken);
       } catch (ApiException e) {
           System.err.println("Exception when calling UsersApi#postUsers");
           e.printStackTrace();
       }
...

请注意,我们设置了用户的名字和姓氏,并且我们存储返回的用户令牌,以便稍后使用它。我们还配置了usersApiInstance来使用以前定义的APIClient。我们将继续为我们与之互动的每个新API端点做到这一点。

创建或使用现有卡产品

此时,我们可以寻找适合用户发行卡的合适卡产品。幸运的是,沙箱为我们提供了一种名为“可重新加载卡”的卡产品,因此我们可以搜索该卡产品并保存其令牌。该卡产品还附有一种资金类型,因此我们不需要做任何特别的事情来创建一个。

...
       CardProductsApi cardProductsApiInstance = new CardProductsApi();
       cardProductsApiInstance.setApiClient(apiClient);

       Integer count = 1;
       Integer startIndex = 0;
       String sortBy = "-createdTime";

       String cardProductToken = "";

       try {
           CardProductListResponse cardProductListResult = cardProductsApiInstance.getCardproducts(count, startIndex, sortBy);
           System.out.println(cardProductListResult);
           cardProductToken = cardProductListResult.getData().get(0).getToken();
           System.out.println("CARD PRODUCT TOKEN: " + cardProductToken);
       } catch (ApiException e) {
           System.err.println("Exception when calling CardProductsApi#getCardProducts");
           e.printStackTrace();
       }
...

发行卡

在这一点上,我们拥有需要用户令牌卡产品令牌的所有内容。我们确保告诉api ,以发行更大的安全性,将CVV或锅发送给我们。

...
       CardsApi cardsApiInstance = new CardsApi();
       cardsApiInstance.setApiClient(apiClient);

       CardRequest cardRequestBody = new CardRequest();
       cardRequestBody.setUserToken(userToken);
       cardRequestBody.setCardProductToken(cardProductToken);

       Boolean showCvvNumber = false;
       Boolean showPan = false;

       try {
           CardResponse cardResult = cardsApiInstance.postCards(cardRequestBody, showCvvNumber, showPan);
           System.out.println(cardResult);
       } catch (ApiException e) {
           System.err.println("Exception when calling CardsApi#postCards");
           e.printStackTrace();
       }
...

模拟交易并查看历史

现在您为用户创建了一张卡,您可以simulate some transactions against that card。我们使用的现有卡产品已经具有funding source,但是您还可以打电话给API电话,以确保用户获得适当的资金来使用卡进行付款。

然后,您可以在仪表板中的Transaction Timeline工具中查看帐户余额和交易历史记录。这将帮助您了解交易对Marqeta上的卡进行的确切情况。

Webhooks

Marqeta的核心API还实现了webhooks,每当发生某些事件时,可以通知您的应用程序或系统。 Webhooks可以帮助您连接应用程序中的活动(例如发卡或拒绝交易)与触发器一起运行后端流程或通知您的用户。

结论

无论是在Java,Python,JavaScript还是其他语言中,都将付款整合到您的应用程序中。随着Marqeta的核心API以OpenAPI格式提供,加上documentationAPI Explorer,在Marqeta平台之上构建付款申请是一个直接的项目,这是一个直接的项目,任何开发团队都可以快速解决。