当前位置:文档之家› java支付宝支付文档(含代码)

java支付宝支付文档(含代码)

Java版支付宝支付功能整理文档 (2)一、引用文件 (2)1、基础配置类:AlipayConfig.java (2)2、支付宝MD5签名处理核心文件:MD5.java (4)3、支付宝接口公用函数类:AlipayCore.java (5)4、支付宝通知处理类:AlipayNotify.java (9)5、支付宝各接口请求提交类:AlipaySubmit.java (12)6.自定义订单类:UtilDate.java (16)7.HttpClient方式访问:HttpProtocolHandler.java (17)8、Http请求对象的封装:HttpRequest.java (23)9、Http返回对象的封装:HttpResponse.java (27)10、表示Http返回的结果字符方式:HttpResultType.java (29)二、Controller处理方法 (30)1、支付宝PC端支付(即时到账) (30)(1、)支付方法 (30)(2、)支付成功后的同步调用 (31)(4、)支付成功后的异步调用 (33)2、支付宝手机网页支付 (35)(1、)支付方法 (35)(2、)支付成功后的同步调用 (37)(4、) 支付成功后的异步调用 (37)三、页面代码 (37)1、跳转页面:alipay.jsp和alipaywap.jsp (37)2、同步调用页面:return_url.jsp (38)3、异步调用页面:notify_url.jsp (38)Java版支付宝支付功能整理文档作者:Lock-玄清时间:2017-03-15注:此文档只支持付款,没有退款的功能一、引用文件1、基础配置类:AlipayConfig.javapackage com.alipay.config;/* **类名:AlipayConfig*功能:基础配置类*详细:设置帐户有关信息及返回路径*版本:3.4*修改日期:2016-03-08*说明:*以下代码只是为了方便商户测试而提供的样例代码,商户可以根据自己网站的需要,按照技术文档编写,并非一定要使用该代码。

*该代码仅供学习和研究支付宝接口使用,只是提供一个参考。

*/public class AlipayConfig {//↓↓↓↓↓↓↓↓↓↓请在这里配置您的基本信息↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓// 合作身份者ID,签约账号,以2088开头由16位纯数字组成的字符串,查看地址:https:///order/pidAndKey.htmpublic static String partner = "";// 收款支付宝账号,以2088开头由16位纯数字组成的字符串,一般情况下收款账号就是签约账号public static String seller_id = partner;// MD5密钥,安全检验码,由数字和字母组成的32位字符串,查看地址:https:///order/pidAndKey.htmpublic static String key = "";//----------------pc端支付宝返回路径---------------------// 服务器异步通知页面路径需http://格式的完整路径,不能加?id=123这类自定义参数,必须外网可以正常访问public static String notify_url = "";// 页面跳转同步通知页面路径需http://格式的完整路径,不能加?id=123这类自定义参数,必须外网可以正常访问public static String return_url = "";// 签名方式public static String sign_type = "MD5";// 调试用,创建TXT日志文件夹路径,见AlipayCore.java类中的logResult(String sWord)打印方法。

public static String log_path = "C:\\";// 字符编码格式目前支持 gbk 或 utf-8public static String input_charset = "utf-8";// 支付类型,无需修改public static String payment_type = "1";//----------------pc端支付宝调用接口--------------------- // 调用的接口名,无需修改public static String service = "create_direct_pay_by_user";//----------------手机端支付宝调用接口--------------------- public static String wap_service ="er";//↑↑↑↑↑↑↑↑↑↑请在这里配置您的基本信息↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑//↓↓↓↓↓↓↓↓↓↓请在这里配置防钓鱼信息,如果没开通防钓鱼功能,为空即可↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓// 防钓鱼时间戳若要使用请调用类文件submit中的query_timestamp 函数public static String anti_phishing_key = "";// 客户端的IP地址非局域网的外网IP地址,如:221.0.0.1public static String exter_invoke_ip = "";//↑↑↑↑↑↑↑↑↑↑请在这里配置防钓鱼信息,如果没开通防钓鱼功能,为空即可↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑}2、支付宝MD5签名处理核心文件:MD5.javapackage com.alipay.sign;import java.io.UnsupportedEncodingException;import java.security.SignatureException;import mons.codec.digest.DigestUtils;/*** 功能:支付宝MD5签名处理核心文件,不需要修改* 版本:3.3* 修改日期:2012-08-17* 说明:* 以下代码只是为了方便商户测试而提供的样例代码,商户可以根据自己网站的需要,按照技术文档编写,并非一定要使用该代码。

* 该代码仅供学习和研究支付宝接口使用,只是提供一个* */public class MD5 {/*** 签名字符串* @param text 需要签名的字符串* @param key 密钥* @param input_charset 编码格式* @return签名结果*/public static String sign(String text, String key, String input_charset) {text = text + key;return DigestUtils.md5Hex(getContentBytes(text,input_charset));}/*** 签名字符串* @param text 需要签名的字符串* @param sign 签名结果* @param key 密钥* @param input_charset 编码格式* @return签名结果*/public static boolean verify(String text, String sign, String key, String input_charset) {text = text + key;String mysign = DigestUtils.md5Hex(getContentBytes(text, input_charset));if(mysign.equals(sign)) {return true;}else {return false;}}/*** @param content* @param charset* @return* @throws SignatureException* @throws UnsupportedEncodingException*/private static byte[] getContentBytes(String content, String charset) {if (charset == null || "".equals(charset)) {return content.getBytes();}try {return content.getBytes(charset);} catch (UnsupportedEncodingException e) {throw new RuntimeException("MD5签名过程中出现错误,指定的编码集不对,您目前指定的编码集是:" + charset);}}}3、支付宝接口公用函数类:AlipayCore.javapackage com.alipay.util;import java.io.File;import java.io.FileWriter;import java.io.IOException;import java.util.ArrayList;import java.util.Collections;import java.util.HashMap;import java.util.List;import java.util.Map;import mons.codec.digest.DigestUtils;importmons.httpclient.methods.multipart.FilePartSource ;importmons.httpclient.methods.multipart.PartSource; import com.alipay.config.AlipayConfig;/* **类名:AlipayFunction*功能:支付宝接口公用函数类*详细:该类是请求、通知返回两个文件所调用的公用函数核心处理文件,不需要修改*版本:3.3*日期:2012-08-14*说明:*以下代码只是为了方便商户测试而提供的样例代码,商户可以根据自己网站的需要,按照技术文档编写,并非一定要使用该代码。

*该代码仅供学习和研究支付宝接口使用,只是提供一个参考。

*/public class AlipayCore {/*** 除去数组中的空值和签名参数* @param sArray 签名参数组* @return去掉空值与签名参数后的新签名参数组*/public static Map<String, String> paraFilter(Map<String, String> sArray) {Map<String, String> result = new HashMap<String, String>();if (sArray == null || sArray.size() <= 0) {return result;}for (String key : sArray.keySet()) {String value = sArray.get(key);if (value == null || value.equals("") ||key.equalsIgnoreCase("sign")|| key.equalsIgnoreCase("sign_type")) {continue;}result.put(key, value);}return result;}/*** 把数组所有元素排序,并按照“参数=参数值”的模式用“&”字符拼接成字符串* @param params 需要排序并参与字符拼接的参数组* @return拼接后字符串*/public static String createLinkString(Map<String, String> params) {List<String> keys = newArrayList<String>(params.keySet());Collections.sort(keys);String prestr = "";for (int i = 0; i < keys.size(); i++) {String key = keys.get(i);String value = params.get(key);if (i == keys.size() - 1) {//拼接时,不包括最后一个&字符prestr = prestr + key + "=" + value;} else {prestr = prestr + key + "=" + value + "&";}}return prestr;}/*** 写日志,方便测试(看网站需求,也可以改成把记录存入数据库)* @param sWord 要写入日志里的文本内容*/public static void logResult(String sWord) {FileWriter writer = null;try {writer = new FileWriter(AlipayConfig.log_path + "alipay_log_" + System.currentTimeMillis()+".txt");writer.write(sWord);} catch (Exception e) {e.printStackTrace();} finally {if (writer != null) {try {writer.close();} catch (IOException e) {e.printStackTrace();}}}}/*** 生成文件摘要* @param strFilePath 文件路径* @param file_digest_type 摘要算法* @return文件摘要结果*/public static String getAbstract(String strFilePath, String file_digest_type) throws IOException {PartSource file = new FilePartSource(newFile(strFilePath));if(file_digest_type.equals("MD5")){return DigestUtils.md5Hex(file.createInputStream());}else if(file_digest_type.equals("SHA")) {returnDigestUtils.sha256Hex(file.createInputStream());}else {return"";}}}4、支付宝通知处理类:AlipayNotify.javapackage com.alipay.util;import java.io.BufferedReader;import java.io.InputStreamReader;import .HttpURLConnection;import .URL;import java.util.Map;import com.alipay.config.AlipayConfig;import com.alipay.sign.MD5;/* **类名:AlipayNotify*功能:支付宝通知处理类*详细:处理支付宝各接口通知返回*版本:3.3*日期:2012-08-17*说明:*以下代码只是为了方便商户测试而提供的样例代码,商户可以根据自己网站的需要,按照技术文档编写,并非一定要使用该代码。

相关主题