用于 Java 的多网关支付处理





5.00/5 (2投票s)
J2pay 是一个用于 Java 的多网关支付库。
引言
在创建一个功能齐全的网站,例如需要支付的电子商务网站时,开发人员通常在实现支付网关时面临困难。当你的想法稍微大一点,你希望为你的客户提供多网关支持 - 这真是一个痛苦。作为一名开发人员,我能理解开发人员应该经历什么。
- 阅读每个网关的文档。
- 编写代码。
- 进行测试。
最后将它们整合到一个标准中。例如,一些网关 API 接受 XML,而另一些接受 Json 或查询字符串。我也遇到了这种问题,并思考如果我正在面临这种问题,为什么其他像我一样的开发人员不会面临这些错误,并且他们会经历相同的过程(重复造轮子)。
我最终提出了一个想法,制作一个开源库并将其上传到 github。因此,我将实现我曾经使用过的网关,任何其他使用过任何网关的开发人员都将在我们的库中实现它,总有一天,这个库将支持所有网关。
J2pay
是的,这就是我将它命名为 J2pay(Java 2 payment)的原因。
J2Pay 是一个开源的多网关支付处理 Java 库,它为许多网关提供了一个简单而通用的 API。它减少了开发人员为每个网关编写单独代码的工作量。它提供了为所有网关编写一次代码的灵活性。它还免除了阅读各个网关文档的工作。
以下是你应该看到的链接
- github: https://github.com/tranxactive/J2PAY
- 官方文档: http://www.j2pay.org
是的,我已经创建了文档,并且该项目已经上线。
主要特点
我认为这已经足够了:我已经解释了开发开源库背后的原因,现在让我向你介绍这个库如何使开发人员的生活变得轻松。
- 在使用 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);
所以我们在 gateway
变量中得到了 authorize gateway
,到目前为止,我不知道 authorize 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
方法。
有关详细示例,请参阅上面部分提供的官方文档链接。
该库仅专注于网关的四个主要方法
- 购买
- 退款
- Void
- 续费(循环)
让我告诉你最独特的部分,那就是独特的响应。让我分享一个 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 的想法。如果你有一些空闲时间并且使用过任何网关,你可以在这个库中实现它。请参阅贡献者文档 here。
也别忘了给 github 存储库一个 star,或者 fork 该项目,如果你想贡献代码并关注该存储库,以便在新网关支持添加时收到通知。
感谢阅读!