支付寶服務窗的簡單開發體會

。。。。。

這兩天作了一下支付寶服務窗,記一下吧,作一個積累,防止之後再次須要開發時忘記。
項目的要求是能夠使用支付寶的服務窗就能夠了,相關交互也很簡單,只須要獲取到使用用戶的支付寶的惟一標識符(之前是openId,不過openId將會在2016年9月廢棄,如今使用userId。若是仍是使用的openId,也就是遺留的項目,支付寶提供了相關的接口,能夠使用openId換取userId<alipay.platform.userid.get>)就能夠了。其實感受支付寶提供的相關的文檔仍是蠻全的。設計模式

支付寶服務窗開發主要須要:

  1. 已申請支付寶服務窗的帳號app

  2. 外網能夠訪問的url。本機上能夠使用端口映射,主要開發時使用(直接使用ip+端口映射不知道可不能夠,沒有試過)。
    3.openssl軟件,這個其實在支付寶提供的包裏已經提供了(支付寶的手機網站支付的demo中有<demo網址框架

開發步驟

  1. 激活開發者模式(必須驗籤和回覆相關消息,偷懶的話能夠不驗籤,直接將相關的消息響應給支付寶就行了,猜的,沒試過,應該)。網站

    這裏相關的文檔仍是蠻詳細的。生成公鑰和私鑰就很少說了,已近夠詳細了,簡單的說下它提供的demo吧(放到結尾說,排版好看點)。this

  2. 設置服務窗的菜單及相關的功能。其實這若是不須要支付寶提供的userId,那樣上面寫的和下面寫的全部東西均可以忽略,只要在管理中心的幾個菜單上點點就行了。
    一樣相關的文檔支付寶也已經提供。(文檔)。我使用的是隻要獲取用戶的userId,不須要其餘的用戶信息,因此只要scope=auth_base就行了。這裏的代碼支付寶的demo中已經提供了,只要稍微改一下就能夠使用:編碼

    try {
           String authCode = this.getReqParam("auth_code");
           String userId = null;
           
           AlipaySystemOauthTokenRequest req = new AlipaySystemOauthTokenRequest();
           
           req.setGrantType("authorization_code");
           req.setCode(authCode);
    
           AlipayClient alipayClient = AlipayUtil.getAlipayClient();
       
           AlipaySystemOauthTokenResponse res = alipayClient.execute(req);
           
           XMap map = new XMap();
           
           
            if (null != res && res.isSuccess()) {
                userId = res.getAlipayUserId();
                map.put("appid", userId);
                
                System.out.println(userId);
           } else {
               System.out.println("authCode換取userId失敗");
           }
            
            this.outPut(map);
       } catch (AlipayApiException e) {
           e.printStackTrace();
       }

    若是獲取用戶的信息,支付寶的demo也有,直接刪刪改改就能夠了。
    這裏須要注意一下的是須要導入支付寶的相關jar包,固然若是隻是這裏使用的話能夠不使用支付寶的jar包,換成使用HttpClient來實現,可是相比較而言麻煩一下,直接使用支付寶的直接傳幾個參數而已,何樂而不爲呢。若是還要使用其餘信息,就要修改相關的scope,文檔裏直接找就是了。url

支付寶服務窗demo

支付寶的demo只要知道服務窗的基本功能就能夠:spa

  • 純文本類型 MsgType:text設計

  • 事件類型 MsgType:eventcode

    • 激活驗證開發者模式 (service:alipay.service.check)(EventType:verifygw)

    • 其餘消息通知 (service:alipay.mobile.public.message.notify)

      • 服務窗關注事件 (EventType:follow)

      • 服務窗取消關注事件 (EventType:unfollow)

      • 服務窗進入事件 (EventType:enter)

        • 自定義場景進入事件

        • 普通進入服務窗事件

      • 根據actionParam進行轉發(服務窗點擊事件)(EventType:click)

        • authentication 申請開發者會員綁定事件: actionParam支付寶服務窗固定值(ActionParam:authentication )

        • delete 刪除開發者會員綁定事件:actionParam支付寶服務窗固定值(ActionParam:delete)

        • xxx 開發者自定義 (ActionParam:xxx)

    • 更多

  • 更多

對照這看demo很容易就知道了。
從servlet開始:這方面主要在GatewayServlet裏面。

驗籤沒什麼,直接調相關方法就行了,注意req的編碼和本項目的編碼

宏觀上來講demo主要是接收相關的req,而後取得該req的參數,進入(Dispatcher)獲取業務的分發器,而後在分發器中獲取業務的執行器。簡單點說,就是從上面的純文本類型開始驗證,逐漸細化到最裏面的一層,將該層的功能返回對應的執行器(執行器也就是ActionExecutor接口,不一樣的功能就是該接口的不一樣的實現,之後添加功能直接添加該接口的實現就行了)。

開發的時候能夠直接使用相關的代碼,而後在裏面刪減對應的功能就行了。不過話說若是像我如今的項目只要驗證,因此只要一個激活驗證開發者模式的驗證就行了,兩層驗證返回就行了,固然要求更低的能夠直接返回相關的res就好,均可以不驗證。能夠是能夠,可是若是之後加功能的話。。。

在LoginAuthServlet裏面也就是取得用戶的userId和用戶的詳細信息等相關內容。

其餘的一些類都是一些例子,對於我這樣的新手+菜鳥來講簡直是福音。

怎麼說呢,一開始看見那麼多類,都不想去看這個demo,後來沒辦法纔去看的。清晰,第一感受就是這個,不想本身寫的代碼,業務一複雜時本身都不想去看,不過因爲源碼讀的少的緣由,自從看完設計模式的書後,雖然大概也知道如今的比較出名的開源框架大概用了哪些,可是都是別人說的,歷來沒有本身去體會過。或者說知道使用了相關的模式以後,再去讀源碼的時候自動去找相關的模式的使用狀況,雖然知道他們很好,可是因爲本身沒有去寫,歷來不知道這玩意兒多好。可是看了這個demo後真心很。。。震撼,應該是,比比本身的代碼,就是去堆邏輯,當然有不少地方是用不上模式的,更多的緣由是不熟。雖然知道這玩意用多了也很差,可是用了以後能夠取捨,而這和不會用徹底是兩回事,慢慢積累吧,會有一天脫離菜鳥的行列的。任重而道遠啊。

相關文章
相關標籤/搜索