stone2083

          支付寶接口demo代碼讀后感

          最近在幫朋友做一個支付功能,用到了支付寶。
          從支付寶管理界面,下載到商戶合作文檔,看了demo程序后,心是拔涼拔涼的。
          說說review代碼后的問題吧:
          CheckURL.java
          public static String check(String urlvalue ) {


                String inputLine
          ="";

                  
          try{
                          URL url 
          = new URL(urlvalue);

                          HttpURLConnection urlConnection  
          = (HttpURLConnection)url.openConnection();

                          BufferedReader in  
          = new BufferedReader(
                                  
          new InputStreamReader(
                                          urlConnection.getInputStream()));

                          inputLine 
          = in.readLine().toString();
                      }
          catch(Exception e){
                          e.printStackTrace();
                      }
                      
          //System.out.println(inputLine);  系統打印出抓取得驗證結果

                  
          return inputLine;
            }
          *Inputstream不需要close?
          *知道e.printStackTrace()的性能代價?

          Md5Encrypt.java
          *是采用什么編碼的?我下載的是UTF8編碼版本的,請問Md5Encrypt.java是什么編碼?

          Payment.java
          public static String CreateUrl(String paygateway,String service,String sign_type,String out_trade_no,

                            String input_charset,String partner,String key,String seller_email,

                            String body,String subject,String price,String quantity,String show_url,String payment_type,

                            String discount,String logistics_type,String logistics_fee,String logistics_payment,

                            String return_url) {

                             
          //String notify_url,需要的請把參數加入以上的createurl

                  Map params 
          = new HashMap();

                  params.put(
          "service", service);

                  params.put(
          "out_trade_no", out_trade_no);

                  params.put(
          "show_url", show_url);

                  params.put(
          "quantity", quantity);

                  params.put(
          "partner", partner);

                  params.put(
          "payment_type", payment_type);

                  params.put(
          "discount", discount);

                  params.put(
          "body", body);

                 
          // params.put("notify_url", notify_url);

                  params.put(
          "price", price);

                  params.put(
          "return_url", return_url);

                  params.put(
          "seller_email", seller_email);

                  params.put(
          "logistics_type", logistics_type);

                  params.put(
          "logistics_fee", logistics_fee);

                  params.put(
          "logistics_payment", logistics_payment);

                  params.put(
          "subject", subject);

                  params.put(
          "_input_charset", input_charset);

                  String prestr 
          = "";



                  prestr 
          = prestr + key;

                  
          //System.out.println("prestr=" + prestr);



                  String sign 
          = com.alipay.util.Md5Encrypt.md5(getContent(params, key));



                  String parameter 
          = "";

                  parameter 
          = parameter + paygateway;

                  
          //System.out.println("prestr="  + parameter);

                  List keys 
          = new ArrayList(params.keySet());

                  
          for (int i = 0; i < keys.size(); i++) {

                        String value 
          =(String) params.get(keys.get(i));

                      
          if(value == null || value.trim().length() ==0){

                          
          continue;

                      }

                      
          try {

                          parameter 
          = parameter + keys.get(i) + "="

                              
          + URLEncoder.encode(value, input_charset) + "&";

                      } 
          catch (UnsupportedEncodingException e) {



                          e.printStackTrace();

                      }

                  }



                  parameter 
          = parameter + "sign=" + sign + "&sign_type=" + sign_type;



                  
          return sign;



              }
          *多少個參數?。砍^3,4個參數,都不使用ParameterClass嗎?方便client調用嗎?
          *這個方法做什么?createUrl?得到url??墒聦嵣夏??return sign。sign是什么?是參數的加密竄。
          方法中的parameter不知道要來干嗎用?
          *又看到
          e.printStackTrace();

          SignatureHelper.java
          哇,總算看到一個過得去的代碼,可以eclipse上,發現一個warning:import java.io.UnsupportedEncodingException;
          有用到UnsupportedEncodingException這個嗎?

          SignatureHelper_return.java
          *看看這個類名,符合java類名的規范嗎?
          *和SignatureHelper.java有什么區別?

          SetCharacterEncodingFilter.java
          哇塞,總算看到非常標準的代碼了??墒牵?#64;author Craig McClanahan,原來是copy過來的。嗚呼。

          并且整個demo工程,是用myeclipse的。哎。。。

          看不下去了,實在看不下去了。
          我不清楚支付寶公司提供的demo程序的目的是什么?
          --提供的java文件是允許打成lib包使用的?
          --僅僅提供學習的?

          就算是提供學習的,寫得標準些,行不?

          最后,我真希望,是我自己下錯了demo程序--這個demo程序不是支付寶官方的demo。希望如此吧,阿門~

          備注:
          除了demo,那份接口文檔,寫得還是非常規范的。

          posted on 2009-09-18 13:10 stone2083 閱讀(6320) 評論(10)  編輯  收藏 所屬分類: java

          Feedback

          # re: 支付寶接口demo代碼讀后感[未登錄] 2009-09-20 18:23 阿風

          參數個數<3個 參數
          3<參數<類 用map
          =類 用類
          是這樣嘛?  回復  更多評論   

          # re: 支付寶接口demo代碼讀后感 2009-09-21 13:10 stone2083

          其實本身并沒有非常強制的標準,比如一定得:3<參數<類 用map
          原則只有一個,方便客戶端的調用。

          比如上面舉的例子,一共有19個參數,調用者能方便的調用嗎?哪個參數在哪個位置,能方便找到嗎?

          所以,自定義map(定義了key常量的map)或者parameter Class,更合適上面的場景。
            回復  更多評論   

          # re: 支付寶接口demo代碼讀后感 2010-01-30 17:02 sgz

          受益匪淺!  回復  更多評論   

          # re: 支付寶接口demo代碼讀后感 2010-03-13 19:44 出錯

          剛剛今天下了,我想罵他年的  回復  更多評論   

          # re: 支付寶接口demo代碼讀后感 2010-03-17 10:15 stone2083

          @出錯
          比較遺憾.我第一時間和支付寶工程師聯系反饋了這個問題.沒想到他們到現在還沒有跟進...  回復  更多評論   

          # re: 支付寶接口demo代碼讀后感[未登錄] 2013-01-04 20:52 test

          .net 版本的一樣的,哎@stone2083
            回復  更多評論   

          # re: 支付寶接口demo代碼讀后感 2013-01-20 01:27 weipeng

          支付寶的參數基本都是面向KV的,所以在交易這邊我們自己搞了4個注解,對應于輸入和輸出,比如
          @AlipayParam(service="close_order")
          public Class CloseOrderParam {
          @AlipayParamKey("trade_no")
          private String id;
          @AlipayParamKey("trade_user")
          private String user;
          @AlipayParamKey("xxxxx")
          private String xxx;
          }
          這樣,通過一個Util,可以將自定義類型轉換為支付寶喜歡的Map結構,而輸出也可以從Map在轉換為需要的自定義Result,就比較方便了。

          其實支付寶估計也是想的自定義參數類型更新比較麻煩,所以如果支付寶的client端,提供類似的一組幫助工具,用戶可以自定義參數,然后按照接口約束將其生成為KV形式即可。  回復  更多評論   

          # re: 支付寶接口demo代碼讀后感 2013-01-21 10:55 stone2083

          @weipeng
          我能理解、接受KV結構體,但是不能接受一個方法體使用19個參數。

          總體來說,這個客戶端包代碼質量,太差了。  回復  更多評論   

          # re: 支付寶接口demo代碼讀后感 2013-07-22 12:02 。。。

          裝b裝的蠻像的,都以為自己很牛逼一樣  回復  更多評論   

          # re: 支付寶接口demo代碼讀后感 2015-05-05 11:25 lyta

          你倒是說了很多,說的很詳細,罵的很徹底,那你倒是自己寫一個出來啊  回復  更多評論   

          主站蜘蛛池模板: 凤城市| 新宾| 黑水县| 曲水县| 泗阳县| 吉木乃县| 南木林县| 鄱阳县| 醴陵市| 永川市| 高淳县| 南阳市| 四会市| 高雄市| 张家港市| 苍山县| 龙岩市| 华安县| 五常市| 绥棱县| 通辽市| 迁安市| 石家庄市| 五台县| 尼勒克县| 湖南省| 天柱县| 平度市| 海兴县| 正宁县| 天峨县| 隆尧县| 德钦县| 临江市| 阆中市| 新巴尔虎左旗| 若羌县| 营口市| 建昌县| 马山县| 都匀市|