成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

回眸曾經(jīng)的項目,與第三方支付相關(guān),所帶來的溝通問題

kaka / 800人閱讀

摘要:錢可以存儲在自己的余額中,這就相當(dāng)于微信錢包,余額可以提現(xiàn)到銀行卡的中。我們的第三方支付平臺是連連支付,杭州的一家公司。私鑰怎么加簽每個公司的加簽方式是不一樣的,支付寶有支付寶的加簽方式,微信有微信的加簽方式。

導(dǎo)讀

筆者在校期間,通過自學(xué)java。學(xué)校里也開過這門課,但是,講的都是一些基礎(chǔ),比如java的表達式、基本類型、自定義類型等等。也都是很基礎(chǔ)的東西,就連lambda表達式都沒有。然而,讓我們交的作業(yè),是用java-web開發(fā)出的網(wǎng)站。我當(dāng)時做的是與圖書共享相關(guān)的網(wǎng)站。當(dāng)時滿腔熱血地想著去創(chuàng)業(yè),但是,因為自身還沒離開學(xué)校,社會經(jīng)驗不是特別足,于是,這件事就擱淺了。

去年六月份畢業(yè),參加了班級的散伙飯后,大家也都各奔東西。但大部分從事軟件開發(fā)的行業(yè),有些人進入外包公司,有些人進入了游戲公司。不管進入到什么行業(yè),在最初的一段時間中,遇到一個教你的人很重要。這樣,你可以學(xué)校到很多東西。當(dāng)然,你自己也得努力學(xué)習(xí)。

我依稀記得第一次做項目,那個項目做得真是一塌糊涂,權(quán)當(dāng)我個人練手用了。對于個人來說,成長是非??斓?,但是,對于企業(yè)來說,這是一種損失。真的是損失。因為,企業(yè)讓你來做事,不是讓你來試驗的。自從第一個項目失敗后,也不能說失敗吧,至少做得不夠完美。項目沒有達到松散耦合的程度。我在開發(fā)的過程中,遇到了各種各樣的問題,在他人的幫助下,慢慢地適應(yīng)了開發(fā)強度。

當(dāng)時,我給自己定義的是java后端開發(fā)工程師,因而,接口都是通過postman來測試。我們的持久層使用的hibernate框架,于是,仿照hibernate寫個框架,參考我的博客:模仿hibernate框架,詳解hibernate部分方法設(shè)計;同時使用spring容器集合該框架,于是,仿照了spring寫個框架,可以參考我的博客:模擬spring框架,深入講解spring的對象的創(chuàng)建;數(shù)據(jù)過濾的框架是Apache下的beanutils框架,于是,模擬beanutils寫個框架,參看我的博客:只因數(shù)據(jù)過濾,方可模擬beanutils框架

框架能寫的出來,而這只是java端的,我并不知道前端的一些情況,比如前端和后端是如何進行數(shù)據(jù)交互的,前端如何在頁面展示數(shù)據(jù)等等。于是,下載了前端的頁面。我們前端的頁面放置在SVN上,后端代碼放置在git上。自己慢慢地根據(jù)前端頁面去摸索,神奇地是能夠展示出數(shù)據(jù)。帶我的人看我做的還不錯,于是,教我前后端一起開發(fā)。

我們這個是前后端分離的,前端調(diào)用后端的接口。在學(xué)校里面也學(xué)過前端的一些知識,比如CSS3、HTML5,jQuery,JavaScript等等,那時并不是項目開發(fā),有些東西只是自己弄著玩的。但公司項目的開發(fā)和自己開發(fā)完全不是一回事,需要掌握很多的前端知識。

不久,做了個完整的前端項目,因為有學(xué)校的經(jīng)驗,有些東西很快就掌握了,但是,其他很多東西還不怎么會,真的很腦大。但隨著項目的深入,才發(fā)現(xiàn)自己在學(xué)校學(xué)的知識,還是遠遠地不夠項目開發(fā)所用的。于是,不斷地充電,不斷地向前輩的學(xué)習(xí),現(xiàn)在,前端的很多東西也知道了。

現(xiàn)在,回過頭看我寫的前端代碼,再看前輩給我寫的前端代碼,我發(fā)現(xiàn)我那時寫的真的垃圾,可以用不堪入目這個詞來形容。但是,當(dāng)時設(shè)計的頁面還是蠻酷的,也得到了老板的認可。這是我值得驕傲的事。

我不斷地嘗試前后端的開發(fā),也從中知道了vue.js,bootstrap,jQuery、echart等前端框架。也知道了本地ip和局域網(wǎng)ip的區(qū)別,以及如何用小米球做本地調(diào)試。從而更知道了,如何實現(xiàn)前后端分離。我越來越相信這句話,只要你努力,就會有人幫助你。

隨著時間地推進,老板接了一個項目,就是圖書共享的項目。我當(dāng)時聽到這個項目后,我就感覺到有點難過。這和我畢設(shè)所做的項目思想是一致的,如果,我當(dāng)時能夠勇敢一點,也許,我就推廣我的這個項目了。但是,我沒有。

世界就是這么殘酷,不允許你有絲毫地猶豫。于是,老板再接下一個項目后,項目名為云碼兌換平臺。用戶收到某家公司給的代幣(福利),拿到代幣到這個平臺上兌換成錢。錢可以存儲在自己的余額中,這就相當(dāng)于微信錢包,余額可以提現(xiàn)到銀行卡的中。也可以使用余額來購買商品。這分為企業(yè)錢包和個人錢包,企業(yè)錢包和個人錢包是不一樣的。

我沒做個類似項目,于是,就接過來做了。老板說這個項目對我來說,難度系數(shù)還是比較大的。我就下定決心把這個項目給做好,因為我知道可以從這個項目學(xué)到很多東西。我們的第三方支付平臺是連連支付,杭州的一家公司。

支付

這個項目可以說沒有任何人帶我,完全由我自己參考連連給的文檔,邊學(xué)習(xí)邊嘗試著去開發(fā)。這樣,也培養(yǎng)了我調(diào)用第三方接口,參讀他們文檔的能力??梢哉f,未嘗不是一種收獲呢?

我們老總說過年前夕,只做支付相關(guān)的業(yè)務(wù),也就是,用戶提交代幣兌換金額的申請,后臺管理員接收到這個申請后,從后臺給用戶打款。如圖所示:

后臺管理員點擊批量打款時,服務(wù)端會做數(shù)據(jù)的篩選,曬選出狀態(tài)為待轉(zhuǎn)讓的客戶打款,其他情況下一律不打款。就這么一個小小的支付按鈕,其內(nèi)部涉及太多的知識點。

我之所以害怕,是因為對未知的恐懼。一開始做支付非常難,其實,做完之后,也沒有我想像的那么難。但是,我還是需要做一些準備工作。比如,下載連連支付的SDK。但要考慮到SDK是什么SDK?SDK分為兩種,一種是應(yīng)用到j(luò)ava開發(fā)中,一種是應(yīng)用到Android或iOS開發(fā)中。因為,連連那邊沒有將其區(qū)分開來,從而造成錢包項目的延誤。這個會在下文提到。

下載好連連支付的SDK后,我們通過maven創(chuàng)建項目,使用的是阿里云的中央倉庫,其并不存在連連SDK。因而,我們需要配置本地的Maven庫。這個網(wǎng)上都有教程的,我在這里就不細說了。

配置好了SDK后,我們需要了解簽名機制,連連使用的RSA簽名機制,如圖所示:

至于連連為什么使用RSA簽名,可以參考我的這篇博客:支付與簽名原串的那些事,但選擇排序生成簽名原串。

我們將生成的pkcs8格式的公鑰上傳到連連商戶站,再從連連的商戶站下載其連連公鑰。私鑰用以加簽,公鑰用以驗簽,這用以提高數(shù)據(jù)的安全性。

私鑰怎么加簽?每個公司的加簽方式是不一樣的,支付寶有支付寶的加簽方式,微信有微信的加簽方式。這里,我就說說連連支付的加簽方式。我們在向連連發(fā)送支付請求前,需要封裝我們的請求參數(shù),將請求參數(shù)以一定格式的方式存儲,這就是簽名原串,如圖所示:

將簽名原串和我們的pkcs8格式的私鑰共同加密,這就調(diào)用到j(luò)dk數(shù)字簽名的這幾個包:

import java.security.KeyFactory;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.security.Signature;
import java.security.spec.PKCS8EncodedKeySpec;
import java.security.spec.X509EncodedKeySpec;

但是,加密時可能會報出Illegal Key Size的錯誤。當(dāng)您使用Java版本為6, 7或8時, 由于連連提供的公鑰超出了加密過程中使用到的AES加密方法的默認密鑰長度限制, 需要替換您的開發(fā)環(huán)境中的local_policy.jar和US_export_policy.jar這兩個jar包以去除密鑰長度限制,即${java_home}/jre/lib/security/ 否則會在加密時拋出異常 Illegal Key Size。

Jar包替換地址為:

http://www.oracle.com/technet...

http://www.oracle.com/technet...

http://www.oracle.com/technet...

得到加簽后的簽名字符串,再調(diào)用連連支付的LianLianPaySecurity.encrypt(JSON.toJSONString(preq), PaymentConstant.LIAN_PUBLIC_RSA_KEY);加密算法,該算法有兩個參數(shù),一個是包括簽名的請求參數(shù),一個是下載下來的連連公鑰。

如果請求連連支付成功的話,其會返回一段字符串,該字符串包含連連的簽名原串、私鑰簽名串等其他信息。連連那邊的簽名串的加簽方式,和我們這邊的是一樣的。我們從連連下載下來的連連公鑰,其公鑰也是其由私鑰生成而來。其將請求參數(shù)封裝成簽名原串,將私鑰和簽名原串共同加簽成簽名串。

因而,我們這邊拿到了連連的簽名原串和簽名串之后,就要進行驗簽了。怎么驗簽?zāi)??我們這個時候,就用到了從連連的商戶站下載的連連公鑰了,如代碼所示:

 /**
 * Created By zby on 17:28 2018/12/18
 * RSA簽名驗證
 * 

* * @param reqObj: The obtained asynchronous notification body * * @param rsa_public: The public key provided by LianLian */ public static boolean checkSignRSA(String response) { logger.info("【響應(yīng)參數(shù)】申請付款的響應(yīng)參數(shù)為:" + response); if (StringUtils.isBlank(response)) { return false; } JSONObject reqObj = JSONObject.parseObject(response); String lianPubkey = PaymentConstant.LIAN_PUBLIC_RSA_KEY; String lianSigned = reqObj.getString("sign"); String lianSignSrc = genSignData(reqObj); ifNullThrow(lianPubkey, ResultCodeEnum.NOT_CONFIG_LIAN_PUBLIC_KEY_VALUE); try { if (TraderRSAUtil.checksign(lianPubkey, lianSigned, lianSignSrc)) { return true; } else { return false; } } catch (Exception e) { return false; } }

底部調(diào)用的是TraderRSAUtil.checksign這個方法,其內(nèi)部如代碼所示:

  /**
 * 簽名驗證
 *
 * @param lianPubkey  下載好的連連公鑰
 * @param lianSignSrc 連連的簽名原串,也就是將返回串封裝成jsonObject
 * @param lianSigned  連連加密簽名簽名,包括簽名原串+私鑰
 * @return
 */
public static boolean checksign(String lianPubkey, String lianSigned,
                                String lianSignSrc) {
    try {
        //【1】獲取公鑰
        //獲取KeyFactory,指定RSA算法
        KeyFactory keyFactory = KeyFactory.getInstance(PaymentConstant.SIGN_TYPE);
        //將BASE64編碼的公鑰字符串進行解碼
        BASE64Decoder decoder = new BASE64Decoder();
        //將BASE64解碼后的字節(jié)數(shù)組,構(gòu)造成X509EncodedKeySpec對象,生成公鑰對象
        PublicKey publicKey = keyFactory.generatePublic(new X509EncodedKeySpec(decoder.decodeBuffer(lianPubkey)));
        byte[] signed = decoder.decodeBuffer(lianSigned);
        //【2】使用公鑰,進行驗簽
        //獲取Signature實例,指定簽名算法(與之前一致)
        Signature signature = Signature.getInstance(PaymentConstant.MD5_WITH_RSA);
        //加載公鑰
        signature.initVerify(publicKey);
        //更新原數(shù)據(jù)
        signature.update(lianSignSrc.getBytes(BaseConstant.CHARSET));
        //公鑰驗簽(true-驗簽通過;false-驗簽失?。?        return signature.verify(signed);
    } catch (Exception e) {
        e.printStackTrace();
    }
    return false;
}

這就是一個支付的流程,不論是任何第三方支付,其都要有加簽和驗簽,因為,這是最基本的安全機制。只不過,各個公司的加簽和驗簽方式有所不同而已。

當(dāng)然,有些東西就沒必要使用RSA加簽和驗簽了,比如連連那邊的綁定銀行卡的業(yè)務(wù),其加簽方式就是用MD5加簽的。但是,支付涉及到了金額,這個,只要與錢相關(guān)的業(yè)務(wù)。都需要謹慎處理,也許,RSA不是最好的加密方式,但就目前而言,其還是比較安全的。

錢包

為什么要做錢包呢?做任何事都要有其目的。

我們做的是福利平臺。屆時,許多商戶會入駐該平臺,給其用戶提供不同的優(yōu)惠卡或者錢,比如流量充值卡、話費充值卡,中石油的加油卡等。不同商戶提供不同的(虛擬)商品,不同的商品對應(yīng)多少錢,比如話費卡30元,流量卡30元等。商戶需要在錢包中充錢(充值),便于用戶兌換。

用戶拿到這些卡消費時,商戶的錢包里的錢會減少。用戶可以通過代幣兌換這些充值卡,也可以通過代幣兌換錢,商戶的錢就會變少,而用戶的錢包的錢增加,其可以提現(xiàn)到銀行卡(提現(xiàn)),也可以購買其他產(chǎn)品(支付);在購買時,錢包余額不夠,可以充值到連連錢包(充值)。如果已經(jīng)購買了,也可以,申請退款(退款)。 同時,也可以查看提現(xiàn)記錄(提現(xiàn)查詢),支付記錄(支付查詢);

總的來說,電子錢包可以存儲用戶的金額,相當(dāng)于微信支付中的余額,也相當(dāng)于我們現(xiàn)實中的錢包。用戶可以支配錢包金額(余額),但并非任意支配。因為用戶支配的額度不能超過錢包的額度。

今年都到了三月二十四號了,我們的錢包已經(jīng)做一個月了。但是,我們這邊的產(chǎn)品經(jīng)理可能和連連那邊的業(yè)務(wù)沒有溝通好,其所提供給我們的web組件全部是走他們的頁面。我當(dāng)時問他們的頁面支不支持響應(yīng)式布局,他們堅決地回答說不支持。如圖所示:

這在PC端的瀏覽器中看,界面還是可以的,但是,如果用手機端看的話,其會非常的別扭,如圖所示:

你會發(fā)現(xiàn),這簡直不能使用。我當(dāng)時和對方說,這種效果的用戶體驗不好。他們說我們這邊提供的了手機端的SDK組件,我看了他們給的SDK組件,其完全是Android開發(fā)和iOS開發(fā)的SDK組件。他們以為我們是Android開發(fā),而我們這是微信公眾號,是嵌入在微信中的h5頁面,自然是不能使用的。

這就是產(chǎn)品經(jīng)理和業(yè)務(wù)沒有溝通好帶來的誤會,產(chǎn)品經(jīng)理說他們那邊的業(yè)務(wù)不懂技術(shù)。他們那邊的業(yè)務(wù)以為SDK就是SDK,不區(qū)分是不是Android和iOS,還是服務(wù)端java的SDK。業(yè)務(wù)可能也沒問他那邊的技術(shù)。因而,浪費了這一個月的時間。我們這是從開年就開始做錢包了,做到現(xiàn)在就遇到了這個問題。所以,很多東西都要重新做。

對于企業(yè)來說,這是一個損失。但對于我個人來說,這是一種成長。不論是技術(shù)方面,還是與人溝通方面,都是一種成長。

我們后來和他們說,web組件走不通了,能不能通過API的方式自定義界面,他們說他們這邊也是提供的,不過,是最近剛開放的API的接口。我們這邊的產(chǎn)品經(jīng)理非常生氣,說你們那邊沒有的話,就早點和我們說嗎,免得浪費我們的時間。

我在開發(fā)的起始階段,看了他們的SDK,也有和對方溝通。我說我們這是公眾號開發(fā),你們這個SDK好像有問題,他們那邊說你可以使用web組件,當(dāng)時,也沒有說到這個API的接口。

溝通問題

出現(xiàn)上述的問題,也不能說是誰的錯。其實,誰都沒有錯,然而,誰貌似都有錯。因為溝通的不及時,導(dǎo)致了上面的問題。

事情已經(jīng)出了,生氣也沒用。因而,我就從這件事中吸取教訓(xùn)。凡是,都要先溝通好,比如,就這個SDK的問題。是什么樣的SDK?嵌入在java中的SDK,還是純安卓的SDK。這個,就需要考慮清楚。溝通是非常重要,如果溝通的不及時,既浪費了人力和物力,也讓雙方都不開心。

因而,以后為人處事,一定要學(xué)會溝通。不過,這對于我來說,也是一次小小的成長吧。在成長的過程中,就會摔跟頭的。但站起來之后,回頭看看絆倒自己的是什么?是石頭,還是香蕉皮?以后,再遇到這樣的事情,能不能及時的溝通。

祝自己在成長的過程,愈挫愈勇吧。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/73877.html

相關(guān)文章

  • 智能支付穩(wěn)定性測試實戰(zhàn)

    摘要:主要介紹了美團智能支付業(yè)務(wù)在穩(wěn)定性方向遇到的挑戰(zhàn),并重點介紹在穩(wěn)定性測試中的一些方法與實踐。其中,智能支付作為新擴展的業(yè)務(wù)場景,去年也成為了美團增速最快的業(yè)務(wù)之一。 本文根據(jù)美團高級測試開發(fā)工程師勛偉在美團第43期技術(shù)沙龍美團金融千萬級交易系統(tǒng)質(zhì)量保障之路的演講整理而成。主要介紹了美團智能支付業(yè)務(wù)在穩(wěn)定性方向遇到的挑戰(zhàn),并重點介紹QA在穩(wěn)定性測試中的一些方法與實踐。 背景 美團支付承載...

    The question 評論0 收藏0
  • 計算機常識 - 收藏集 - 掘金

    摘要:使用簡記后端掘金全稱為即消息隊列。優(yōu)測優(yōu)社區(qū)干貨精選老司機亂談編輯器之神掘金前言是一種信仰,我自從年有了這個信仰,已經(jīng)個年頭了。 PHP 程序員進階學(xué)習(xí)書籍參考指南 - 后端 - 掘金PHP程序員進階學(xué)習(xí)書籍參考指南 @heiyeluren lastmodify: 2016/2/18 ... 當(dāng)我們在談?wù)撉岸思用軙r,我們在談些什么 - 前端 - 掘金潘建旭,豈安科技(www.bigse...

    Yi_Zhi_Yu 評論0 收藏0
  • Nervos Alacris 正式建立合作關(guān)系

    摘要:年月,與宣布正式建立合作關(guān)系,共同推進解決方案的發(fā)展,為降低區(qū)塊鏈應(yīng)用開發(fā)的復(fù)雜性,使區(qū)塊鏈和分布式技術(shù)的廣泛地使用成為可能。在可擴展性和互操作性方面,顯著超越其它建立在已有區(qū)塊鏈之上的協(xié)議。 2019 年 1 月,Nervos 與 Alacris 宣布正式建立合作關(guān)系,共同推進 Layer 2 解決方案的發(fā)展,為降低區(qū)塊鏈應(yīng)用開發(fā)的復(fù)雜性,使區(qū)塊鏈和分布式技術(shù)的廣泛地使用成為可能。s...

    since1986 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<