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
哇塞,总算看到非常标准的代码了。可是:@author Craig McClanahan,原来是copy过来的。呜呼。

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

看不下去了,实在看不下去了。
我不清楚支付宝公司提供的demo程序的目的是什么?
--提供的java文件是允许打成lib包使用的?
--仅仅提供学习的?

就算是提供学习的,写得标准些,行不?

最后,我真希望,是我自己下错了demo程序--这个demo程序不是支付宝官方的demo。希望如此吧,阿门~

备注:
除了demo,那份接口文档,写得还是非常规范的。

posted on 2009-09-18 13:10 stone2083 阅读(6301) 评论(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

你倒是说了很多,说的很详细,骂的很彻底,那你倒是自己写一个出来啊  回复  更多评论   


只有注册用户登录后才能发表评论。


网站导航: