支付宝SDK集成服务端(java)

来源:互联网 发布:python ctypes 编辑:程序博客网 时间:2024/06/05 05:55

支付宝SDK集成服务端


配置项(公共参数)

// 商户appidpublic static String APPID = "2017120800451448";// 私钥 pkcs8格式的public static String RSA_PRIVATE_KEY = "MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCgSrIsDE9qdOFoc3Ej0wxD815zDOZ...";// 服务器异步通知页面路径 需http://或者https://格式的完整路径,不能加?id=123这类自定义参数,必须外网可以正常访问public static String notify_url = "http://xxxxx/alipay/notify_url.do";// 页面跳转同步通知页面路径 需http://或者https://格式的完整路径,不能加?id=123这类自定义参数,必须外网可以正常访问 商户可以自定义同步跳转地址public static String return_url = "xxxxx/alipay/return_url.do";// 请求网关地址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 = "";// 日志记录目录public static String log_path = "D:/log";// RSA2public static String SIGNTYPE = "RSA2";

支付工具类

package com.app.utils.alipay;import java.util.Date;import java.util.HashMap;import java.util.Iterator;import java.util.Map;import javax.servlet.http.HttpServletRequest;import com.alipay.api.AlipayApiException;import com.alipay.api.AlipayClient;import com.alipay.api.DefaultAlipayClient;import com.alipay.api.domain.AlipayTradeAppPayModel;import com.alipay.api.internal.util.AlipaySignature;import com.alipay.api.request.AlipayTradeAppPayRequest;import com.alipay.api.request.AlipayTradeRefundRequest;import com.alipay.api.response.AlipayTradeAppPayResponse;import com.alipay.api.response.AlipayTradeRefundResponse;import com.app.utils.DateUtil;public class AlipayUtils {    public static AlipayClient getAlipayClient(){        return new DefaultAlipayClient(AlipayConfig.URL, AlipayConfig.APPID, AlipayConfig.RSA_PRIVATE_KEY, AlipayConfig.FORMAT, AlipayConfig.CHARSET, AlipayConfig.ALIPAY_PUBLIC_KEY, AlipayConfig.SIGNTYPE); //获得初始化的AlipayClient    }    /**     * 验证签名      * @param request     * @return     */    @SuppressWarnings("all")    public static boolean rsaCheckV1(HttpServletRequest request){        boolean verify_result = false;        try {            Map<String,String> params = new HashMap<String,String>();            Map requestParams = request.getParameterMap();            for (Iterator iter = requestParams.keySet().iterator(); iter.hasNext();){                String name = (String) iter.next();                String[] values = (String[]) requestParams.get(name);                String valueStr = "";                for (int i = 0; i < values.length; i++) {                    valueStr = (i == values.length - 1) ? valueStr + values[i]                            : valueStr + values[i] + ",";                }                //valueStr = new String(valueStr.getBytes("ISO-8859-1"), "utf-8");                params.put(name, valueStr);            }            verify_result = AlipaySignature.rsaCheckV1(params, AlipayConfig.ALIPAY_PUBLIC_KEY, AlipayConfig.CHARSET, "RSA2");        } catch (Exception e) {            e.printStackTrace();        }        return verify_result;    }    /**     * 支付接口     * @param out_trade_no 商户订单号     * @param total_amount 金额     * @param body 内容     * @param subject 主题     * @param request     * @return     */    public static String aliPrePay(String out_trade_no,String total_amount,String body,String subject,HttpServletRequest request){        String orderString = null;        //实例化客户端        AlipayClient alipayClient = AlipayUtils.getAlipayClient();        //实例化具体API对应的request类,类名称和接口名称对应,当前调用接口名称:alipay.trade.app.pay        AlipayTradeAppPayRequest payRequest = new AlipayTradeAppPayRequest();        //SDK已经封装掉了公共参数,这里只需要传入业务参数。以下方法为sdk的model入参方式(model和biz_content同时存在的情况下取biz_content)。        AlipayTradeAppPayModel model = new AlipayTradeAppPayModel();        model.setBody(body);        //标题        model.setSubject(subject);        //商户订单号        model.setOutTradeNo(out_trade_no);        model.setTimeoutExpress("30m");        //交易金额        model.setTotalAmount(total_amount);        //交易方式        model.setProductCode(AlipayConfig.PRODUCT_CODE);        payRequest.setBizModel(model);        String url = request.getRequestURL().toString();        String domain = url.substring(0, url.lastIndexOf("/")+1);        //生产环境        String notify_url= domain+"aliNotify.do";        //测试环境//      String notify_url = "http://XXXX/XXXX/alipay/aliNotify.do";        payRequest.setNotifyUrl(notify_url);        try {            //这里和普通的接口调用不同,使用的是sdkExecute            AlipayTradeAppPayResponse payResponse = alipayClient.sdkExecute(payRequest);            //就是orderString 可以直接给客户端请求,无需再做处理。            orderString = payResponse.getBody();        } catch (AlipayApiException e) {            e.printStackTrace();        }        return orderString;    }    /**     * 退款     * @param out_trade_no 商户订单号     * @param trade_no 支付宝订单流水号     * @param total_amount 金额     * @param refund_reason 退款原因     * @return     */    public static boolean refund(String out_trade_no,String trade_no,double total_amount,String refund_reason){        boolean flag = false;        String str = null;        try {            AlipayClient alipayClient = getAlipayClient();            AlipayTradeRefundRequest apliRequest = new AlipayTradeRefundRequest();            apliRequest.setBizContent("{" +            "\"out_trade_no\":\""+out_trade_no+"\"," +            "\"trade_no\":\""+trade_no+"\"," +            "\"refund_amount\":"+total_amount+"," +            "\"refund_reason\":\""+refund_reason+"\"," +            "\"out_request_no\":\"\"," +            "\"operator_id\":\"\"," +            "\"store_id\":\"\"," +            "\"terminal_id\":\"\"" +            "  }");            AlipayTradeRefundResponse aliResponse = alipayClient.execute(apliRequest);//通过alipayClient调用API,获得对应的response类            if(aliResponse.isSuccess()){                //调用成功                flag = true;            } else {                //调用失败                flag = false;            }        } catch (Exception e) {            e.printStackTrace();        }        return flag;    }}

第一次写,有问题的话请指正

原创粉丝点击