Java使用支付宝接口-demo案例源码架包一起(jsp+servlet)

今天用Java的servlet和jsp测试支付宝接口案例

主要jar
alipay-sdk-java-4.10.58.ALL.jar
其次
commons-logging-api-1.1.jar
fastjson-1.2.72.jar

Java使用支付宝接口-demo案例源码架包一起(jsp+servlet)_第1张图片

Java使用支付宝接口-demo案例源码架包一起(jsp+servlet)_第2张图片
代码如下
项目结构
Java使用支付宝接口-demo案例源码架包一起(jsp+servlet)_第3张图片

package zhifubao.servletTest;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.alipay.api.AlipayApiException;

import zhifubao.service.order.OrderController;

/**
 * @author YXqiang
 */
@WebServlet(description = "支付宝测试支付功能", urlPatterns = { "/mydo" })
public class zhifubaoServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		// TODO Auto-generated method stub
		doPost(req, resp);
	}

	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		req.setCharacterEncoding("utf-8");
		//String outTradeNo, String subject, String totalAmount, String body
		System.out.println(req.getParameter("outTradeNo"));//交易编号
		System.out.println(req.getParameter("subject"));//商品
		System.out.println(req.getParameter("totalAmount"));//总价
		System.out.println(req.getParameter("body"));//商品描述信息
		String outTradeNo, subject, totalAmount, body;
		outTradeNo=req.getParameter("outTradeNo");
		subject=req.getParameter("subject");
		totalAmount=req.getParameter("totalAmount");
		body=req.getParameter("body");
		OrderController order=new OrderController();
		try {
			String formestr =order.alipay(outTradeNo, subject, totalAmount, body);
			req.setAttribute("mycalls", formestr);
			req.getRequestDispatcher("main.jsp").forward(req, resp);
		} catch (AlipayApiException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
    
}

package zhifubao.pojo;
//package com.louis.epay.alipay;

/**
 * 支付实体对象
 * 根据支付宝接口协议,其中的属性名,必须使用下划线,不能修改
 */
public class AlipayBean {
    
    /**
     * 商户订单号,必填
     * 
     */
    private String out_trade_no;
    /**
     * 订单名称,必填
     */
    private String subject;
    /**
     * 付款金额,必填
     * 根据支付宝接口协议,必须使用下划线
     */
    private String total_amount;
    /**
     * 商品描述,可空
     */
    private String body;
    /**
     * 超时时间参数
     */
    private String timeout_express= "100m";
    /**
     * 产品编号
     */
    private String product_code= "FAST_INSTANT_TRADE_PAY";

    public String getOut_trade_no() {
        return out_trade_no;
    }
    public void setOut_trade_no(String out_trade_no) {
        this.out_trade_no = out_trade_no;
    }
    public String getSubject() {
        return subject;
    }
    public void setSubject(String subject) {
        this.subject = subject;
    }
    public String getTotal_amount() {
        return total_amount;
    }
    public void setTotal_amount(String total_amount) {
        this.total_amount = total_amount;
    }
    public String getBody() {
        return body;
    }
    public void setBody(String body) {
        this.body = body;
    }
    public String getTimeout_express() {
        return timeout_express;
    }
    public void setTimeout_express(String timeout_express) {
        this.timeout_express = timeout_express;
    }
    public String getProduct_code() {
        return product_code;
    }
    public void setProduct_code(String product_code) {
        this.product_code = product_code;
    }

}

package zhifubao.service.order;
//package com.louis.epay.service.impl;

import zhifubao.alipay.Alipay;
import zhifubao.pojo.AlipayBean;

import com.alipay.api.AlipayApiException;

public class PayServiceImpl implements PayService {
	static Alipay alipay =new Alipay();
    @Override
    public String aliPay(AlipayBean alipayBean) throws AlipayApiException {
        return alipay.pay(alipayBean);
    }

}
package zhifubao.service.order;

import zhifubao.pojo.AlipayBean;

import com.alipay.api.AlipayApiException;

//package com.louis.epay.service;
/**
 * 支付服务
 * @author Louis
 * @date Dec 12, 2018
 */
public interface PayService {

    /**
     * 支付宝支付接口
     * @param alipayBean
     * @return
     * @throws AlipayApiException
     */
    String aliPay(AlipayBean alipayBean) throws AlipayApiException;

}
package zhifubao.alipay;
import zhifubao.pojo.AlipayBean;
import zhifubao.service.AlipayProperties;

import com.alibaba.fastjson.JSON;
import com.alipay.api.AlipayApiException;
import com.alipay.api.AlipayClient;
import com.alipay.api.DefaultAlipayClient;
import com.alipay.api.request.AlipayTradePagePayRequest;

/**
 * 支付宝支付接口
 */
public class Alipay {
    
    /**
     * 支付接口
     * @param alipayBean
     * @return
     * @throws AlipayApiException
     */
    public String pay(AlipayBean alipayBean) throws AlipayApiException {
    	AlipayProperties pop=new AlipayProperties();
        // 1、获得初始化的AlipayClient
        String serverUrl = pop.getGatewayUrl();
        String appId = pop.getAppId();
        String privateKey = pop.getPrivateKey();
        String format = "json";
        String charset = pop.getCharset();
        String alipayPublicKey = pop.getPublicKey();
        String signType = pop.getSignType();
        String returnUrl = pop.getReturnUrl();
        String notifyUrl = pop.getNotifyUrl();
        AlipayClient alipayClient = new DefaultAlipayClient(serverUrl, appId, privateKey, format, charset, alipayPublicKey, signType);
        // 2、设置请求参数
        AlipayTradePagePayRequest alipayRequest = new AlipayTradePagePayRequest();
        // 页面跳转同步通知页面路径
        alipayRequest.setReturnUrl(returnUrl);
        // 服务器异步通知页面路径
        alipayRequest.setNotifyUrl(notifyUrl);
        // 封装参数
        alipayRequest.setBizContent(JSON.toJSONString(alipayBean));
        // 3、请求支付宝进行付款,并获取支付结果
        String result = alipayClient.pageExecute(alipayRequest).getBody();
        // 返回付款信息
        return result;
    }
}

这里是properties配置

# 应用ID,您的APPID,收款账号既是您的APPID对应支付宝账号
appId: 201610****
# 商户私钥,您的PKCS8格式RSA2私钥
privateKey: MIIEvQIBADANBgkqhkiG9w0BAQEFA*********
# 支付宝公钥 对应APPID下的支付宝公钥。
publicKey: MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A*******
# 服务器异步通知页面路径需http://格式的完整路径,不能加?id=123这类自定义参数 http://外网ip:端口/error.html 
notifyUrl:  http://**e.com/zhifubao/error.jsp
# 页面跳转同步通知页面路径 需http://格式的完整路径,不能加?id=123这类自定义参数  http://外网ip:端口/sccess.html
returnUrl:  http://***/sccess.jsp
# 签名方式
signType: RSA2
# 字符编码格式
charset: utf-8
# 支付宝网关
gatewayUrl: https://openapi.alipaydev.com/gateway.do
# 日志地址
logPath: "D:\\zhifubao.txt"

//qq+{3433548009}

你可能感兴趣的:(servlet,tomcat,json,javaee)