针对Java的多网关支付处理

介绍

在创建一个功能齐全的网站(例如电子商务)时,开发人员在实施支付网关时通常会遇到困难。当你的想法有点大时,你想为你的客户提供多门户支持 - 这是一个真正的痛苦。作为一名开发人员,我可以理解开发人员应该经历什么。

  1. 阅读每个网关文档。
  2. 编写代码。
  3. 测试它。

最后把它们都带到一个标准。例如,一些网关API接受XML,而其他接受Json或查询字符串。我也遇到过这样的问题,我想如果我面临这样的问题,为什么不像其他像我这样的开发者会面临这些错误,他们会经历同样的过程(重新发明轮子)。

我终于想出了一个创建开源库并将其上传到github的想法。因此,我将实施我所从事的网关工作,其他任何开发人员都将在我们的图书馆中实施它,并且有一天,这个图书馆将支持所有的网关。

J2pay

是的,这就是我命名的J2pay(Java 2付款)。

J2Pay是一个用于Java的开源多网关支付处理库,它为许多网关提供了一个简单通用的API。它减少了开发人员为每个网关编写单独代码的工作量。它为所有网关编写一次代码提供了灵活性。它也不包括阅读单个网关文档的努力。

是的,我已经创建了文档并且该项目已经生效。

主要特征

我认为这就够了:我已经解释了开发开源库的原因,现在让我来介绍一下这个库如何让开发人员的生活变得轻松。

  • 在J2pay上工作时,您将始终传递和检索json。是的,无论网关API的本地方式是什么,您总是会使用json,为此,我使用了org.json库。
  • 您不必担心网关特定的变量,如某些网关返回交易ID为transId或,transnum但j2pay将始终返回transactionId并相信我,它也会为您提供相同的格式化响应,无论您使用的是什么网关。

我的第一个也是最喜欢的一点是,您不应该阅读网关文档,因为开发人员已经为您完成了这项工作(也许您是集成网关的开发人员)。

J2pay神奇的方法,是的,我称他们为神奇 - 你会知道为什么很快。

我创建了四种方法:

  1. getApiSampleParameters
  2. getRefundSampleParameters
  3. getVoidSampleParameters
  4. getRebillSampleParameters

因此,如果您曾在支付网关上工作过,则必须在每个请求中提供一些身份验证,例如用户名和密码,以便网关API可以识别您。

你可以打电话getApiSampleParameters。让我给你看一些代码。

首先,我会得到我将要研究的gateway对象。假设我正在努力authorize gateway

隐藏   复制代码

//getting the desired gateway.
Gateway gateway = GatewayFactory.getGateway(AvailableGateways.AUTHORIZE);

所以我们有了authorize gatewayin 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方法。

有关详细示例,请参阅上一节中提供的官方文档链接。

这个图书馆只关注四种主要的网关方法:

  1. 采购
  2. 退
  3. 空虚
  4. 重新计费(重复)

让我告诉你最重要的部分是独特的回应。让我分享一个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 }
    }

正如你所看到的,响应分为两个键:

  1. lr (图书馆反应)
  2. gr (网关响应)

图书馆的回应只包含图书馆认为对你而言很重要的价值观,对于进一步的行为如退款/退款/回款可能有用。请记住,图书馆的回复已经准备了进行此次交易的进一步操作所需的参数,即退款,重新填写或无效。

让我告诉你如何简单地执行重复交易。

假设我们将购买响应保存在purchaseResponse变量中。

隐藏   复制代码

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

看到,只有两行,你已经成功地执行了循环,相同的退款和无效。

最后的话

请分享您对J2pay的看法。如果你有空闲时间并且在任何网关上工作,你可以在这个库中实现它。见贡献者DOCS 这里

另外,不要忘记给github仓库一颗星星,或者如果你想贡献并观察回购以在新的网关支持被添加时得到通知,那就分出项目。


在此我向大家推荐一个架构学习交流群。交流学习群号: 744642380, 里面会分享一些资深架构师录制的视频录像:有Spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,JVM性能优化、分布式架构等这些成为架构师必备的知识体系。还能领取免费的学习资源

谢谢阅读!

猜你喜欢

转载自my.oschina.net/u/3833719/blog/1811042