介绍

在本节中,我们将详细探讨如何使用网关并成功调用所有四种方法,即购买,退款,作废和重新计费。

对于此示例,我们将使用授权网关。 让我们开始。

首先,我们将获得Authorize网关对象。

Gateway gateway = GatewayFactory.getGateway(AvailableGateways.AUTHORIZE);

但是,如果您想动态获取授权网关,例如从数据库中获取其名称,该怎么办。

这是您可以执行的操作。

Gateway gateway = GatewayFactory.getGateway(AvailableGateways.valueOf("AUTHORIZE"));

知道您可以了解如何获取所需网关对象的两种方法。

由于我们在测试环境中工作,因此第二件事就是启用测试模式。

gateway.setTestMode(true);

注意:测试模式仅在网关支持的情况下才起作用,否则它将被库忽略。

接下来最重要的是API参数,这些是我的商家服务提供商提供的唯一值,即API用户名和密码,必须包含在所有请求中,并且对于所有网关而言,它们始终是不同的。

由于我们使用的是J2pay,因此无需阅读任何文档即可授权网关变量。

这是您将使用样本参数方法的位置(请参阅样本参数部分)

这是您将如何做的。

JSONObject apiSampleParameters = gateway.getApiSampleParameters();

现在我们将打印它以查看参数是什么。

JSONObject apiSampleParameters = gateway.getApiSampleParameters();System.out.println(apiSampleParameters);//output{ "name" : "also called api user name / api login id", "transactionKey" : "the transaction key" }

如您所见,对于Authorize API,参数是name和transactionKey。 我们将填充这些值并传递给购买方法。

apiSampleParameters.put("name", "<your acount's user name here>");
apiSampleParameters.put("transactionKey", "<your account's transaction key here>");

采购

购买方法需要五个参数。

  1. JSONObject apiParamters,这是网关特定的参数,对于每个网关而言始终是唯一的。
  2. 客户客户,这个类代表客户的个人信息。
  3. CustomerCard customerCard,此类代表客户卡详细信息。
  4. 货币货币,即枚举,包含将收取金额的货币列表。
  5. 浮动金额,将要收取的金额。

我们已经在上面设置了apiParameters。

现在创建客户和客户卡对象。

注意:客户和客户卡类支持链设置器方法,并且下面使用的所有字段都是必需的。

Customer customer = new Customer();customer.setFirstName("test first name").setLastName("test last name").setCountry(Country.US).setState("TX").setCity("test city").setAddress("test address").setZip("12345").setPhoneNumber("1234567890").setEmail("email@domain.com").setIp("127.0.0.1");CustomerCard customerCard = new CustomerCard();customerCard.setName("test card name").setNumber("5424000000000015").setCvv(123).setExpiryMonth("01").setExpiryYear("2022");

注意:第4和第5参数不需要任何解释。

现在所有参数都准备好了,我们可以将它们传递给购买方法

HTTPResponse response = gateway.purchase(apiSampleParameters, customer, customerCard, Currency.USD, 45);

您可以通过调用isSuccessful方法来检查购买请求的状态,还可以通过调用getJSONResponse方法来获取JSON响应。

response.isSuccessful();response.getJSONResponse();

让我们将所有代码放在一起。

Gateway gateway = GatewayFactory.getGateway(AvailableGateways.AUTHORIZE);JSONObject apiSampleParameters = gateway.getApiSampleParameters();apiSampleParameters.put("name", "");apiSampleParameters.put("transactionKey", "");Customer customer = new Customer();customer.setFirstName("test first name").setLastName("test last name").setCountry(Country.US).setState("TX").setCity("test city").setAddress("test address").setZip("12345").setPhoneNumber("1234567890");CustomerCard customerCard = new CustomerCard();customerCard.setName("test card name").setNumber("5424000000000015").setCvv(123).setExpiryMonth("01").setExpiryYear("2022");gateway.setTestMode(true);HTTPResponse response = gateway.purchase(apiSampleParameters, customer, customerCard, Currency.USD, 45);System.out.println (response.isSuccessful());System.out.println (response.getJSONResponse());

让我们看看收到的回复。 考虑我们将响应保存在响应变量中。

JSONObject response = response.getJSONResponse();

打印响应后,这就是我们得到的。

{"lr": {"amount": 2.5,"cardExpiryYear": "2017","message": "This transaction has been approved.","cardFirst6": "542400","cardExpiryMonth": "12","transactionId": "60036012175","maskedCard": "542400******0015","rebillParams": {"customerProfileId": "1813844918","paymentProfileId": "1808509554"},"success": true,"voidParams": {"transactionId": "60036012175"},"currencyCode": "USD","cardLast4": "0015","refundParams": {"transactionId": "60036012175","cardLast4": "0015"}},"gr": { //long gateway response }}

如您所见,对于进一步的交易(如退款,作废或重新开票),图书馆本身创建了必需的参数

重新开票

"rebillParams": {"customerProfileId": "1813844918","paymentProfileId": "1808509554"},

虚无

"voidParams": {"transactionId": "60036012175"},

退款

"refundParams": {"transactionId": "60036012175","cardLast4": "0015"}

注意:您可以将这些参数保存在数据库中,并将它们传递给合适的方法。

重新开票

对于重新计费,我们将调用getRebillSampleParameters方法。

JSONObject rebillSampleParameters = gateway.getRebillSampleParameters();

打印后,您将看到。

{"customerProfileId":"the customer profile id","paymentProfileId":"the customer payment profile id"}

如果将其与上面的购买响应rebillParams密钥相匹配,您将看到实际上没有任何区别。 购买响应已经包含这些参数以及填充的值。

因此,我们不会像上面的getApiSampleParameters那样创建它们,但是如果您尚未从该库中执行购买交易,则可以使用第二个选项来创建这些参数并将它们传递给rebill方法。 下面我们描述了两种方法,因此您可以使用更适合自己的方法。

第一种方法

这种方法是快速前进的。 我们将使用库生成的参数(rebillParams)。

由于重新开票方法需要三个参数

  1. JSON apiParameters
  2. JSON rebillParameters
  3. 浮动金额

我们已经讨论了apiParameters,只是提醒您我们将网关对象保存在网关变量中,并将购买响应保存在响应变量中。

这是我们可以轻松调用rebill方法的方法。

JSONObject rebillParams = response.getJSONObject("lr").getJSONObject("rebillParams")HTTPResponse rebillResponse = gateway.rebill(apiSampleParameters, rebillParams, 105);

仅仅两行就不是那么简单吗?

第二种方法

第二种方法与我们创建的apiParameters类似。

JSONObject rebillParams = gateway.getRebillSampleParameters();

打印rebillParams之后,我们得到了。

System.out.println(rebillParams);//output{"customerProfileId":"the customer profile id","paymentProfileId":"the customer payment profile id"}

现在,我们将填充这些值。

rebillParams.put("customerProfileId", "1813844918");rebillParams.put("paymentProfileId", "1808509554");

现在我们可以调用rebill方法。

HTTPResponse rebillResponse = gateway.rebill(apiSampleParameters, rebillParams, 105);

如上所示,您可以调用rebillResponse。 getJSONResponse()方法获取响应。 您还可以通过调用rebillResponse.isSuccessful()方法来检查事务是否成功。

您还可以注意到这两种方法都非常简单,可以随意使用更适合自己的方法,但是建议您使用第一种方法,因为这也非常简单,并且排除了任何可能的错误。

注意:在本示例的其余部分,我们将使用第一种方法。

退款

退款方式需要三个参数

  1. JSON apiParameters
  2. JSON退款参数
  3. 浮动金额

这与退款非常相似。 这就是我们称为退款方式的方式。

JSONObject refundParams = response.getJSONObject("lr").getJSONObject("refundParams")HTTPResponse refundResponse = gateway.refund(apiSampleParameters, refundParams, 2.5);

注意:其余工作将保持不变returnResponse包含实际的响应。

空洞

voidTransaction方法需要两个参数。

  1. JSON apiParameters
  2. JSON voidParameters

下面是示例代码。

JSONObject voidParams= response.getJSONObject("lr").getJSONObject("voidParams")HTTPResponse voidResponse = gateway.voidTransaction (apiSampleParameters, voidParams);

注意:其余工作将保持不变voidResponse包含实际的响应。

祝贺您完成示例。 您已经完全了解该库。

翻译自: https://www.javacodegeeks.com/2018/11/j2pay-complete-example.html

J2Pay –完整示例相关推荐

  1. eclipse 创建maven 项目 动态web工程完整示例

    需求表均同springmvc案例 此处只是使用maven 注意,以下所有需要建立在你的eclipse等已经集成配置好了maven了,说白了就是新建项目的时候已经可以找到maven了 没有的话需要安装m ...

  2. ViewPager详解(一)——ViewPager的基本使用完整示例

    MainActivity如下: package cn.ww;import java.lang.reflect.Field;import android.app.Activity; import and ...

  3. 【Java 泛型】泛型简介 ( 泛型类 | 泛型方法 | 静态方法的泛型 | 泛型类与泛型方法完整示例 )

    文章目录 一.泛型简介 二.泛型类 三.泛型方法 四.静态方法的泛型 五.泛型类与泛型方法完整示例 一.泛型简介 泛型 可以 简单理解为 参数化类型 , 主要作用在 类 , 方法 , 接口 上 ; j ...

  4. 【Kotlin】Lambda 表达式 ( 简介 | 表达式语法 | 表达式类型 | 表达式返回值 | 调用方式 | 完整示例 )

    文章目录 I . Lambda 表达式 简介 II . Lambda 表达式语法 III . Lambda 表达式类型 IV . Lambda 表达式返回值 V . Lambda 表达式调用 VI . ...

  5. react-template 包含客户端,服务端渲染完整示例

    原文链接 React version 16.2 版本脚手架 包含客户端,服务端渲染完整示例,使用了最新的react,并实现version 16.2 最新的服务端渲染; 解决了一些之前的服务端渲染bug ...

  6. 利用ffmpeg来进行视频解码的完整示例代码

    (转)利用ffmpeg来进行视频解码的完整示例代码(H.264) Decode() { FILE  * inpf; int  nWrite; int  i,p; int  nalLen; unsign ...

  7. java自建ocr完整示例_Java 7:完整的invokedynamic示例

    java自建ocr完整示例 我当前的Java 7系列中的另一个博客条目. 这次它处理的是invokedynamic,这是JVM上用于方法调用的新字节码指令. invokedynamic指令允许呼叫站点 ...

  8. Spring Integration完整示例

    本文是我们名为" Spring Integration for EAI "的学院课程的一部分. 在本课程中,向您介绍了企业应用程序集成模式以及Spring Integration如 ...

  9. jqGrid + JSON + WebService 完整示例

    真没找到这样的例子,于是自已写了个,分享出来. 第一步,首先在WebService上,添加[System.Web.Script.Services.ScriptService]属性标签,让WebServ ...

最新文章

  1. 机关单位公文编写注意事项
  2. 对于初学者而言!如何处理 Python 入门难以进步的现象?
  3. k8s往secret里导入证书_Rancher 修改Kubernetes Ingress默认ssl证书
  4. C++程序内存分配方式(堆与栈)
  5. JQuery中的.attr()与.removeAttr()
  6. 与其感慨路难行,不如马上出发
  7. 英特尔ARM开启芯片之战 消费者该何去何从?
  8. Ping pong【树状数组】
  9. 一些SAP Partners能够通过二次开发实现打通C/4HANA和S/4HANA的方法介绍
  10. tomcat的连接数与线程池
  11. 微信小程序 731 天
  12. 编程规范 —— 变量的命名
  13. git的简单使用(windows)
  14. 瞒不住了!超过4000人都在这里死磕3D视觉技术
  15. 广义相对论-学习记录4-第三章-张量分析与黎曼几何1
  16. 红外通信模块——详细资料(含遥控器按键对应的码值)
  17. poi创建数据透视表_从数据透视表创建自定义报告
  18. 利用C#实现的外挂式甲骨文拼音输入法
  19. qq游戏坦大战服务器维护中,高手教你如何解决QQ游戏问题
  20. 盒式交换机S5750系列指示灯含义

热门文章

  1. 【最小环】【Floyed】观光旅游(ssl 1763)
  2. 【Floyed】【最短路】商店选址问题(ssl 1760)
  3. 汇编语言(十一)之统计非数字字符个数
  4. JavaFX UI控件教程(四)之Button
  5. 这可能是最生动的加密相关科普文章
  6. java实现遍历树形菜单方法——映射文件VoteTree.hbm.xml
  7. React中的唯一标识key(用index VS id)和key的选择
  8. 生物信息 python 书籍_用python做生物信息数据分析(1-环境准备)
  9. (转)base64编码(严格说来,base64不算作加解密算法)
  10. 在 eclipse 中 设置 jvm 的 运行时目录