在建立一个功能齐全的网站(例如电子商务)时,开发人员在实施支付网关时一般会遇到困难。当你的想法有点大时,你想为你的客户提供多门户支持 - 这是一个真正的痛苦。做为一名开发人员,我能够理解开发人员应该经历什么。php
最后把它们都带到一个标准。例如,一些网关API接受XML,而其余接受Json或查询字符串。我也遇到过这样的问题,我想若是我面临这样的问题,为何不像其余像我这样的开发者会面临这些错误,他们会经历一样的过程(从新发明轮子)。git
我终于想出了一个建立开源库并将其上传到github的想法。所以,我将实施我所从事的网关工做,其余任何开发人员都将在咱们的图书馆中实施它,而且有一天,这个图书馆将支持全部的网关。github
是的,这就是我命名的J2pay(Java 2付款)。json
J2Pay是一个用于Java的开源多网关支付处理库,它为许多网关提供了一个简单通用的API。它减小了开发人员为每一个网关编写单独代码的工做量。它为全部网关编写一次代码提供了灵活性。它也不包括阅读单个网关文档的努力。api
是的,我已经建立了文档而且该项目已经生效。性能优化
我认为这就够了:我已经解释了开发开源库的缘由,如今让我来介绍一下这个库如何让开发人员的生活变得轻松。架构
org.json
库。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性能优化、分布式架构等这些成为架构师必备的知识体系。还能领取免费的学习资源
谢谢阅读!