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

支付宝SDK集成服务端


配置项(公共参数)

// 商户appid
public 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";
// RSA2
public 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;
    }
}

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

当然可以!以下是一个简单的支付宝支付下单服务端Java代码示例: ```java import com.alipay.api.AlipayApiException; import com.alipay.api.AlipayClient; import com.alipay.api.DefaultAlipayClient; import com.alipay.api.request.AlipayTradePagePayRequest; import com.alipay.api.response.AlipayTradePagePayResponse; public class AlipayService { // 支付宝网关地址 private static final String ALIPAY_GATEWAY = "https://openapi.alipay.com/gateway.do"; // 应用ID private static final String APP_ID = "your_app_id"; // 商户私钥 private static final String PRIVATE_KEY = "your_private_key"; // 支付宝公钥 private static final String ALIPAY_PUBLIC_KEY = "alipay_public_key"; // 编码格式 private static final String CHARSET = "UTF-8"; // 返回格式 private static final String FORMAT = "json"; // 签名类型 private static final String SIGN_TYPE = "RSA2"; public String createOrder(String outTradeNo, String totalAmount, String subject, String body) throws AlipayApiException { AlipayClient alipayClient = new DefaultAlipayClient(ALIPAY_GATEWAY, APP_ID, PRIVATE_KEY, FORMAT, CHARSET, ALIPAY_PUBLIC_KEY, SIGN_TYPE); AlipayTradePagePayRequest request = new AlipayTradePagePayRequest(); request.setReturnUrl("your_return_url"); request.setNotifyUrl("your_notify_url"); request.setBizContent("{" + "\"out_trade_no\":\"" + outTradeNo + "\"," + "\"total_amount\":\"" + totalAmount + "\"," + "\"subject\":\"" + subject + "\"," + "\"body\":\"" + body + "\"," + "\"product_code\":\"FAST_INSTANT_TRADE_PAY\"" + "}"); AlipayTradePagePayResponse response = alipayClient.pageExecute(request); return response.getBody(); } } ``` 这段代码使用了支付宝提供的Java SDK,首先需要在支付宝开放平台注册应用并获取到应用ID、商户私钥和支付宝公钥。然后,通过`AlipayClient`创建一个支付宝客户端实例,设置相关参数,最后调用`pageExecute`方法发起支付请求,并返回支付页面的HTML代码。 请注意,上述代码中的`your_app_id`、`your_private_key`、`alipay_public_key`、`your_return_url`和`your_notify_url`需要替换为你自己的实际值。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值