J2Pay –完整示例
介绍
在本节中,我们将详细探讨如何使用网关并成功调用所有四种方法,即购买,退款,作废和重新计费。
对于此示例,我们将使用授权网关。 让我们开始。
首先,我们将获得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>");
采购
购买方法需要五个参数。
- JSONObject apiParamters,这是网关特定的参数,对于每个网关而言始终是唯一的。
- 客户客户,这个类代表客户的个人信息。
- CustomerCard customerCard,此类代表客户卡详细信息。
- 货币货币,即枚举,包含将收取金额的货币列表。
- 浮动金额,将要收取的金额。
我们已经在上面设置了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)。
由于重新开票方法需要三个参数
- JSON apiParameters
- JSON rebillParameters
- 浮动金额
我们已经讨论了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()方法来检查事务是否成功。
您还可以注意到这两种方法都非常简单,可以随意使用更适合自己的方法,但是建议您使用第一种方法,因为这也非常简单,并且排除了任何可能的错误。
注意:在本示例的其余部分,我们将使用第一种方法。
退款
退款方式需要三个参数
- JSON apiParameters
- JSON退款参数
- 浮动金额
这与退款非常相似。 这就是我们称为退款方式的方式。
JSONObject refundParams = response.getJSONObject("lr").getJSONObject("refundParams")HTTPResponse refundResponse = gateway.refund(apiSampleParameters, refundParams, 2.5);
注意:其余工作将保持不变returnResponse包含实际的响应。
空洞
voidTransaction方法需要两个参数。
- JSON apiParameters
- 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 –完整示例相关推荐
- eclipse 创建maven 项目 动态web工程完整示例
需求表均同springmvc案例 此处只是使用maven 注意,以下所有需要建立在你的eclipse等已经集成配置好了maven了,说白了就是新建项目的时候已经可以找到maven了 没有的话需要安装m ...
- ViewPager详解(一)——ViewPager的基本使用完整示例
MainActivity如下: package cn.ww;import java.lang.reflect.Field;import android.app.Activity; import and ...
- 【Java 泛型】泛型简介 ( 泛型类 | 泛型方法 | 静态方法的泛型 | 泛型类与泛型方法完整示例 )
文章目录 一.泛型简介 二.泛型类 三.泛型方法 四.静态方法的泛型 五.泛型类与泛型方法完整示例 一.泛型简介 泛型 可以 简单理解为 参数化类型 , 主要作用在 类 , 方法 , 接口 上 ; j ...
- 【Kotlin】Lambda 表达式 ( 简介 | 表达式语法 | 表达式类型 | 表达式返回值 | 调用方式 | 完整示例 )
文章目录 I . Lambda 表达式 简介 II . Lambda 表达式语法 III . Lambda 表达式类型 IV . Lambda 表达式返回值 V . Lambda 表达式调用 VI . ...
- react-template 包含客户端,服务端渲染完整示例
原文链接 React version 16.2 版本脚手架 包含客户端,服务端渲染完整示例,使用了最新的react,并实现version 16.2 最新的服务端渲染; 解决了一些之前的服务端渲染bug ...
- 利用ffmpeg来进行视频解码的完整示例代码
(转)利用ffmpeg来进行视频解码的完整示例代码(H.264) Decode() { FILE * inpf; int nWrite; int i,p; int nalLen; unsign ...
- java自建ocr完整示例_Java 7:完整的invokedynamic示例
java自建ocr完整示例 我当前的Java 7系列中的另一个博客条目. 这次它处理的是invokedynamic,这是JVM上用于方法调用的新字节码指令. invokedynamic指令允许呼叫站点 ...
- Spring Integration完整示例
本文是我们名为" Spring Integration for EAI "的学院课程的一部分. 在本课程中,向您介绍了企业应用程序集成模式以及Spring Integration如 ...
- jqGrid + JSON + WebService 完整示例
真没找到这样的例子,于是自已写了个,分享出来. 第一步,首先在WebService上,添加[System.Web.Script.Services.ScriptService]属性标签,让WebServ ...
最新文章
- 机关单位公文编写注意事项
- 对于初学者而言!如何处理 Python 入门难以进步的现象?
- k8s往secret里导入证书_Rancher 修改Kubernetes Ingress默认ssl证书
- C++程序内存分配方式(堆与栈)
- JQuery中的.attr()与.removeAttr()
- 与其感慨路难行,不如马上出发
- 英特尔ARM开启芯片之战 消费者该何去何从?
- Ping pong【树状数组】
- 一些SAP Partners能够通过二次开发实现打通C/4HANA和S/4HANA的方法介绍
- tomcat的连接数与线程池
- 微信小程序 731 天
- 编程规范 —— 变量的命名
- git的简单使用(windows)
- 瞒不住了!超过4000人都在这里死磕3D视觉技术
- 广义相对论-学习记录4-第三章-张量分析与黎曼几何1
- 红外通信模块——详细资料(含遥控器按键对应的码值)
- poi创建数据透视表_从数据透视表创建自定义报告
- 利用C#实现的外挂式甲骨文拼音输入法
- qq游戏坦大战服务器维护中,高手教你如何解决QQ游戏问题
- 盒式交换机S5750系列指示灯含义
热门文章
- 【最小环】【Floyed】观光旅游(ssl 1763)
- 【Floyed】【最短路】商店选址问题(ssl 1760)
- 汇编语言(十一)之统计非数字字符个数
- JavaFX UI控件教程(四)之Button
- 这可能是最生动的加密相关科普文章
- java实现遍历树形菜单方法——映射文件VoteTree.hbm.xml
- React中的唯一标识key(用index VS id)和key的选择
- 生物信息 python 书籍_用python做生物信息数据分析(1-环境准备)
- (转)base64编码(严格说来,base64不算作加解密算法)
- 在 eclipse 中 设置 jvm 的 运行时目录