今天简单实现下支付宝的沙箱支付,萌新,还不会用maven,还是手动导入的jar包。jar包和代码大部分来自支付宝演示demo,我下面贴上下载链接
链接:支付宝演示demo
首先下载支付宝开发平台软件,生成密匙
支付宝沙箱链接
点击链接然后登陆,开启那个自定义密匙,
这里输入前面生成的公匙
生成之后一套公共的配置数据就全了。
配置一下公共can’shucanshu
public class AlipayConfig {
// 商户appid
public static String APPID = "2021000119624409";
// 私钥 pkcs8格式的
public static String RSA_PRIVATE_KEY = "MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQCC85miUnTjLx1IVNjKf1BveCA2xpzukVAwfQd2rWU2moiPwm5IgupjMRBFE8yrHSFHkfcltlyzVULqR0krV/K8m20/V7pogwdkE9QsFCs+1NEEwSCzhuwncuMWqUn990k+HPDxEA/wF8CENnZQXvsTW3jZvB4Ebt4/KG8um0gTJk/CfAIkbfAqLtafJI5WwW5GPzHFONm4LfU+ETYNZszup380j924pHiWpzAt1wdNZsYRaGLRli4hju9jJd6kHfMkmapXUrwcwSkuMmYqZ6SXM9tb6X3BOazC2MzrxW8vpciPW4xLjPZ8WWuw186ghc5NqelTj3uSByqBgi5Uc6nTAgMBAAECggEALztZ0JhZHJAjybEAuJkPFAWJ6PfeJpY3DCYsiPulo/o9A00npfPCQqCxs5iem6FYHY5iTDHoYa6BAitQEtgX7ztIPi6QR53rDoewYW2s426zLTnTZ61khB4GFmhdDcMhocuig/A9L2YBxC44omh/us2lWzNkyEiM1M7quy664lzM+xE+Eeqnrbl/1qmtr8HvQyIgq+GNe5QuAF2mvSuuPzc9Xd7BSGFVX6d89SWR57pfI+9fsHe7TNCE9T37x4cxx81TPxxZx3/d5kYY4021OL8qjOA9+zrIV0aZXuO07UNySgeh9CUskPbuW3P/aannI6RpwuRp18e3gxQlGcxTsQKBgQC+wYH7IQAVMl/SKywO5xJPIYkJd3vXELzJMhblWIim/1x4mZzdnCak9e8k/tu9g381jEII3vl0wNMwniErfxufgy49CTTZVrB4AGrxLHXGGb5g3XrJj+3/NdN6hFYUA2cALYxoIJPNFES+tfQW58zmBPA9SW/dIwIxDJCuzP24XQKBgQCvvaekVuCdV1ERqfPm7x068X3+vOq4TffWSe3kYDGyf6msgleTwWeE/b1M6jSLxdRXuWNktubY6LIFtXTNE7EyFwsX6qL0mf2o0QfnmgrQ1t4KA0laSZcEJaYeeAPQ6AMXr2VwwppepTuE/c9N9ZKgGJn9ZvTgK3dvCmEycRIH7wKBgEFM9xUkB+Y5t2m4E74KRk9GeKX//Cn0ddweRI5Aj48zjdFPLM8EXIpOEo7EnC61LEAFgrmMszLPq7xR9aLxQWCKxLJqS2g3b/O0mOd0w+CMAYshZp5Hoj6ii4G+ecUiIQmDjjQ7Kr2iuaHbofKRaag4epFQaXX3PRHTblgYnqaVAoGAGL4f+zBMIXrorA78ivgBaooTjij09wvrJ91yw+OTO6ljrykOwXvKYlwDKfATg9ZPhiZQyx5BNCrW3Zzlm/X4za+W3UAovz1rDDiZ30691RdbXZeG3VJdE7VlRQbqqp/vx4bnRk/vwgGLdrbxV+2KPkYYcCfttB4Ki7SvaJWozzsCgYBIXeeaQe1V2o/+JmFP04hncIS8T5fO45RlSD6cXySpI6GqVUCG06rXBhsNf5acYsR7s1HfTvDK4xM+OEIAprI7CXpfzv0eFl1/biYUzgZMUexybdD9SO5inNu37hHKNJOezu4OaSDqXP96NnBuKLopkJ7SvjLL2Ga5mquYxx2aUg==";
// 服务器异步通知页面路径 需http://或者https://格式的完整路径,不能加?id=123这类自定义参数,必须外网可以正常访问
public static String notify_url = "http://8.130.20.17:8080/_war_exploded/return_url.jsp";
// 页面跳转同步通知页面路径 需http://或者https://格式的完整路径,不能加?id=123这类自定义参数,必须外网可以正常访问 商户可以自定义同步跳转地址
public static String return_url = "http://localhost:8080/_war_exploded/return_url.jsp";
// 请求网关地址
public static String URL = "https://openapi.alipaydev.com/gateway.do";
// 编码
public static String CHARSET = "UTF-8";
// 返回格式
public static String FORMAT = "json";
// 支付宝公钥
public static String ALIPAY_PUBLIC_KEY = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAgvOZolJ04y8dSFTYyn9Qb3ggNsac7pFQMH0Hdq1lNpqIj8JuSILqYzEQRRPMqx0hR5H3JbZcs1VC6kdJK1fyvJttP1e6aIMHZBPULBQrPtTRBMEgs4bsJ3LjFqlJ/fdJPhzw8RAP8BfAhDZ2UF77E1t42bweBG7ePyhvLptIEyZPwnwCJG3wKi7WnySOVsFuRj8xxTjZuC31PhE2DWbM7qd/NI/duKR4lqcwLdcHTWbGEWhi0ZYuIY7vYyXepB3zJJmqV1K8HMEpLjJmKmeklzPbW+l9wTmswtjM68VvL6XIj1uMS4z2fFlrsNfOoIXOTanpU497kgcqgYIuVHOp0wIDAQAB";
// 日志记录目录
public static String log_path = "F:\log";
// RSA2
public static String SIGNTYPE = "RSA2";
}
这里通过servlet调用支付宝sdk
String addaccount=request.getParameter("addaccount");//这是我从前端获取的数据,可以不写
String ordernumber= UtilId.getGUID();
int addaccount1=Integer.parseInt(addaccount);
HttpSession session=request.getSession();
Customer customer=(Customer) session.getAttribute("customer");
String id_name=customer.getId_name();
System.out.println(addaccount);
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
//初始化
AlipayClient alipayClient = new DefaultAlipayClient(AlipayConfig.URL,
AlipayConfig.APPID,
AlipayConfig.RSA_PRIVATE_KEY,
AlipayConfig.FORMAT,
AlipayConfig.CHARSET,
AlipayConfig.ALIPAY_PUBLIC_KEY,
AlipayConfig.SIGNTYPE);
//创建API对应的request
AlipayTradePagePayRequest alipayRequest = new AlipayTradePagePayRequest();
//在公共参数中设置回跳和通知地址
alipayRequest.setReturnUrl(AlipayConfig.return_url);
alipayRequest.setNotifyUrl(AlipayConfig.notify_url);
System.out.println(1);
//填充业务参数
//必填
//商户订单号,需保证在商户端不重复
String out_trade_no = ordernumber;
//销售产品码,与支付宝签约的产品码名称。目前仅支持FAST_INSTANT_TRADE_PAY
String product_code = "FAST_INSTANT_TRADE_PAY";
//订单总金额,单位为元,精确到小数点后两位,取值范围[0.01,100000000]。
String total_amount =addaccount;
//订单标题
String subject = "账户充值";
//选填
//商品描述,可空
String body = "商品描述";
System.out.println(2);
alipayRequest.setBizContent("{" +
""out_trade_no":"" + out_trade_no + ""," +
""product_code":"" + product_code + ""," +
""total_amount":"" + total_amount + ""," +
""subject":"" + subject + ""," +
""body":"" + body + ""}");
//请求
String form = "";
try {
form = alipayClient.pageExecute(alipayRequest).getBody();//调用SDK生成表单
} catch (AlipayApiException e) {
e.printStackTrace();
response.getWriter().write("捕获异常出错");
response.getWriter().flush();
response.getWriter().close();
}
response.setContentType("text/html;charset=" + AlipayConfig.CHARSET);
response.getWriter().write(form);//直接将完整的表单html输出到页面
response.getWriter().flush();
response.getWriter().close();
z
}
至于异步通知,同步通知的信息根据自己项目需求来验证。



