======================================================================================================AlipayFunction.javapackagecom.test.util.alipay;importjava.io.FileWriter;importjava.io.IOException;importjava.net.MalformedURLException;importjava.net.URL;importjava.util.ArrayList;importjava.util.Collections;importjava.util.HashMap;importjava.util.List;importjava.util.Map;importorg.dom4j.Document;importorg.dom4j.DocumentException;importorg.dom4j.Node;importorg.dom4j.io.SAXReader;publicclassAlipayFunction{/***功能:生成签名结果*@paramsArray要签名的数组*@paramkey安全校验码*@return签名结果字符串*/publicstaticStringBuildMysign(MapsArray,Stringkey){Stringprestr=CreateLinkString(sArray);//把数组所有元素,按照“参数=参数值”的模式用“&”字符拼接成字符串prestr=prestr+key;//把拼接后的字符串再与安全校验码直接连接起来Stringmysign=Md5Encrypt.md5(prestr);returnmysign;}/***功能:除去数组中的空值和签名参数*@paramsArray签名参数组*@return去掉空值与签名参数后的新签名参数组*/publicstaticMapParaFilter(MapsArray){Listkeys=newArrayList(sArray.keySet());MapsArrayNew=newHashMap();for(inti=0;ikeys.size();i++){Stringkey=(String)keys.get(i);Stringvalue=(String)sArray.get(key);if(value==null||value.equals()||key.equalsIgnoreCase(sign)||key.equalsIgnoreCase(sign_type)){continue;}sArrayNew.put(key,value);}returnsArrayNew;}/***功能:把数组所有元素排序,并按照“参数=参数值”的模式用“&”字符拼接成字符串*@paramparams需要排序并参与字符拼接的参数组*@return拼接后字符串*/publicstaticStringCreateLinkString(Mapparams){Listkeys=newArrayList(params.keySet());Collections.sort(keys);Stringprestr=;for(inti=0;ikeys.size();i++){Stringkey=(String)keys.get(i);Stringvalue=(String)params.get(key);if(i==keys.size()-1){//拼接时,不包括最后一个&字符prestr=prestr+key+=+value;}else{prestr=prestr+key+=+value+&;}}returnprestr;}/***功能:写日志,方便测试(看网站需求,也可以改成把记录存入数据库)*@paramsWord要写入日志里的文本内容*/publicstaticvoidLogResult(StringsWord){//该文件存在于和应用服务器启动文件同一目录下,文件名是alipaylog加服务器时间try{FileWriterwriter=newFileWriter(D:\\alipay_log+System.currentTimeMillis()+.txt);writer.write(sWord);writer.close();}catch(Exceptione){e.printStackTrace();}}/***功能:用于防钓鱼,调用接口query_timestamp来获取时间戳的处理函数*注意:远程解析XML出错,与服务器是否支持SSL等配置有关*@parampartner合作身份者ID*@return时间戳字符串*@throwsIOException*@throwsDocumentException*@throwsMalformedURLException*/publicstaticStringquery_timestamp(Stringpartner)throwsMalformedURLException,DocumentException,IOException{StringstrUrl==query_timestamp&partner=+partner;StringBufferbuf1=newStringBuffer();SAXReaderreader=newSAXReader();Documentdoc=reader.read(newURL(strUrl).openStream());ListNodenodeList=doc.selectNodes(//alipay/*);for(Nodenode:nodeList){//截取部分不需要解析的信息if(node.getName().equals(is_success)&&node.getText().equals(T)){//判断是否有成功标示ListNodenodeList1=doc.selectNodes(//response/timestamp/*);for(Nodenode1:nodeList1){buf1.append(node1.getText());}}}returnbuf1.toString();}}======================================================================================================AlipayNotify.javapackagecom.test.util.alipay;importjava.io.BufferedReader;importjava.io.InputStreamReader;importjava.net.HttpURLConnection;importjava.net.URL;importjava.util.Map;importcom.test.constants.AlipayConfig;publicclassAlipayNotify{/****功能:根据反馈回来的信息,生成签名结果*@paramParams通知返回来的参数数组*@paramkey安全校验码*@return生成的签名结果*/publicstaticStringGetMysign(MapParams,Stringkey){MapsParaNew=AlipayFunction.ParaFilter(Params);//过滤空值、sign与sign_type参数Stringmysign=AlipayFunction.BuildMysign(sParaNew,key);//获得签名结果returnmysign;}/****功能:获取远程服务器ATN结果,验证返回URL*@paramnotify_id通知校验ID*@return服务器ATN结果*验证结果集:*invalid命令参数不对出现这个错误,请检测返回处理中partner和key是否为空*true返回正确信息*false请检查防火墙或者是服务器阻止端口问题以及验证时间是否超过一分钟*/publicstaticStringVerify(Stringnotify_id){//获取远程服务器ATN结果,验证是否是支付宝服务器发来的请求Stringtransport=AlipayConfig.transport;Stringpartner=AlipayConfig.partner;Stringveryfy_url=;if(transport.equalsIgnoreCase(https)){veryfy_url==notify_verify;}else{veryfy_url=}veryfy_url=veryfy_url+&partner=+partner+¬ify_id=+notify_id;StringresponseTxt=CheckUrl(veryfy_url);returnresponseTxt;}/****功能:获取远程服务器ATN结果*@paramurlvalue指定URL路径地址*@return服务器ATN结果*验证结果集:*invalid命令参数不对出现这个错误,请检测返回处理中partner和key是否为空*true返回正确信息*false请检查防火墙或者是服务器阻止端口问题以及验证时间是否超过一分钟*/publicstaticStringCheckUrl(Stringurlvalue){StringinputLine=;try{URLurl=newURL(urlvalue);HttpURLConnectionurlConnection=(HttpURLConnection)url.openConnection();BufferedReaderin=newBufferedReader(newInputStreamReader(urlConnection.getInputStream()));inputLine=in.readLine().toString();}catch(Exceptione){e.printStackTrace();}returninputLine;}}======================================================================================================AlipayService.javapackagecom.test.util.alipay;importjava.util.ArrayList;importjava.util.HashMap;importjava.util.List;importjava.util.Map;publicclassAlipayService{/***功能:构造表单提交HTML*@parampartner合作身份者ID*@paramseller_email签约支付宝账号或卖家支付宝帐户*@paramreturn_url付完款后跳转的页面要用以http开头格式的完整路径,不允许加?id=123这类自定义参数*@paramnotify_url交易过程中服务器通知的页面要用以http开格式的完整路径,不允许加?id=123这类自定义参数*@paramshow_url网站商品的展示地址,不允许加?id=123这类自定义参数*@paramout_trade_no请与贵网站订单系统中的唯一订单