針對Java的多網關支付處理

介紹

在建立一個功能齊全的網站(例如電子商務)時,開發人員在實施支付網關時一般會遇到困難。當你的想法有點大時,你想爲你的客戶提供多門戶支持 - 這是一個真正的痛苦。做爲一名開發人員,我能夠理解開發人員應該經歷什麼。php

  1. 閱讀每一個網關文檔。
  2. 編寫代碼。
  3. 測試它。

最後把它們都帶到一個標準。例如,一些網關API接受XML,而其餘接受Json或查詢字符串。我也遇到過這樣的問題,我想若是我面臨這樣的問題,爲何不像其餘像我這樣的開發者會面臨這些錯誤,他們會經歷一樣的過程(從新發明輪子)。git

我終於想出了一個建立開源庫並將其上傳到github的想法。所以,我將實施我所從事的網關工做,其餘任何開發人員都將在咱們的圖書館中實施它,而且有一天,這個圖書館將支持全部的網關。github

J2pay

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

J2Pay是一個用於Java的開源多網關支付處理庫,它爲許多網關提供了一個簡單通用的API。它減小了開發人員爲每一個網關編寫單獨代碼的工做量。它爲全部網關編寫一次代碼提供了靈活性。它也不包括閱讀單個網關文檔的努力。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性能優化、分佈式架構等這些成爲架構師必備的知識體系。還能領取免費的學習資源

謝謝閱讀!

相關文章
相關標籤/搜索