介绍
在创建一个功能齐全的网站(例如电子商务)时,开发人员在实施支付网关时通常会遇到困难。当你的想法有点大时,你想为你的客户提供多门户支持 - 这是一个真正的痛苦。作为一名开发人员,我可以理解开发人员应该经历什么。
- 阅读每个网关文档。
- 编写代码。
- 测试它。
最后把它们都带到一个标准。例如,一些网关API接受XML,而其他接受Json或查询字符串。我也遇到过这样的问题,我想如果我面临这样的问题,为什么不像其他像我这样的开发者会面临这些错误,他们会经历同样的过程(重新发明轮子)。
我终于想出了一个创建开源库并将其上传到github的想法。因此,我将实施我所从事的网关工作,其他任何开发人员都将在我们的图书馆中实施它,并且有一天,这个图书馆将支持所有的网关。
J2pay
是的,这就是我命名的J2pay(Java 2付款)。
J2Pay是一个用于Java的开源多网关支付处理库,它为许多网关提供了一个简单通用的API。它减少了开发人员为每个网关编写单独代码的工作量。它为所有网关编写一次代码提供了灵活性。它也不包括阅读单个网关文档的努力。
是的,我已经创建了文档并且该项目已经生效。
主要特征
我认为这就够了:我已经解释了开发开源库的原因,现在让我来介绍一下这个库如何让开发人员的生活变得轻松。
- 在J2pay上工作时,您将始终传递和检索json。是的,无论网关API的本地方式是什么,您总是会使用json,为此,我使用了
org.json
库。 - 您不必担心网关特定的变量,如某些网关返回交易ID为
transId
或,transnum
但j2pay将始终返回transactionId
并相信我,它也会为您提供相同的格式化响应,无论您使用的是什么网关。
我的第一个也是最喜欢的一点是,您不应该阅读网关文档,因为开发人员已经为您完成了这项工作(也许您是集成网关的开发人员)。
J2pay神奇的方法,是的,我称他们为神奇 - 你会知道为什么很快。
我创建了四种方法:
getApiSampleParameters
getRefundSampleParameters
getVoidSampleParameters
getRebillSampleParameters
因此,如果您曾在支付网关上工作过,则必须在每个请求中提供一些身份验证,例如用户名和密码,以便网关API可以识别您。
你可以打电话getApiSampleParameters
。让我给你看一些代码。
首先,我会得到我将要研究的gateway
对象。假设我正在努力authorize gateway
。
隐藏 复制代码
//getting the desired gateway.Gateway gateway = GatewayFactory.getGateway(AvailableGateways.AUTHORIZE);
所以我们有了authorize gateway
in gateway
变量,直到现在,我不知道授权网关需要什么API参数。但别担心,我保证你永远不必阅读authorize
文档。
隐藏 复制代码
JSONObject apiSampleParameters = gateway.getApiSampleParameters();System.out.println(apiSampleParameters) //output{"name":"also called api user name / api login id","transactionKey":"the transaction key"}
看,图书馆本身告诉我们什么是API参数。您可以使用您的秘密值填充此密钥并将其传递给purchase
方法。
有关详细示例,请参阅上一节中提供的官方文档链接。
这个图书馆只关注四种主要的网关方法:
- 采购
- 退
- 空虚
- 重新计费(重复)
让我告诉你最重要的部分是独特的回应。让我分享一个purchase
方法的样本回应。
隐藏 复制代码
//output { "lr": { "success": true, "message": "SUCCESS", "transactionId": "3902990127", "amount": 45, "cardExpiryYear": "2017", "cardFirst6": "601160", "cardExpiryMonth": "12", "maskedCard": "601160******6611", "rebillParams": { "customerVaultId": "174302554" }, "voidParams": { "transactionId": "3902990127" }, "currencyCode": "USD", "cardLast4": "6611", "refundParams": { "transactionId": "3902990127" } }, "gr": { // long gateway response } }
正如你所看到的,响应分为两个键:
lr
(图书馆反应)gr
(网关响应)
图书馆的回应只包含图书馆认为对你而言很重要的价值观,对于进一步的行为如退款/退款/回款可能有用。请记住,图书馆的回复已经准备了进行此次交易的进一步操作所需的参数,即退款,重新填写或无效。
让我告诉你如何简单地执行重复交易。
假设我们将购买响应保存在purchaseResponse
变量中。
隐藏 复制代码
JSONObject rebillParams = purchaseResponse.getJSONObject("lr").getJSONObject("rebillParams"); HTTPResponse rebillResponse = gateway.rebill(apiSampleParameters, rebillParams, 50);
看到,只有两行,你已经成功地执行了循环,相同的退款和无效。
最后的话
请分享您对J2pay的看法。如果你有空闲时间并且在任何网关上工作,你可以在这个库中实现它。见贡献者DOCS 。
另外,不要忘记给github仓库一颗星星,或者如果你想贡献并观察回购以在新的网关支持被添加时得到通知,那就分出项目。
在此我向大家推荐一个架构学习交流群。交流学习群号: 744642380, 里面会分享一些资深架构师录制的视频录像:有Spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,JVM性能优化、分布式架构等这些成为架构师必备的知识体系。还能领取免费的学习资源谢谢阅读!