在建立一個功能齊全的網站(例如電子商務)時,開發人員在實施支付網關時一般會遇到困難。當你的想法有點大時,你想爲你的客戶提供多門戶支持 - 這是一個真正的痛苦。做爲一名開發人員,我能夠理解開發人員應該經歷什麼。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性能優化、分佈式架構等這些成爲架構師必備的知識體系。還能領取免費的學習資源
謝謝閱讀!