支付宝接口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?
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;
}
*知道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调用吗?
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;
}
*这个方法做什么?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,那份接口文档,写得还是非常规范的。