支付宝APP支付

实例化具体API对应的request类,类名称和接口名称对应,当前调用接口名称:alipay.trade.app.pay
AlipayTradeAppPayRequest request = new AlipayTradeAppPayRequest();
AlipayTradeAppPayModel model = new AlipayTradeAppPayModel();
SDK已经封装掉了公共参数,这里只需要传入业务参数。以下方法为sdk的model入参方式(model和biz_content同时存在的情况下取biz_content)
model.setSubject(amount);
model.setPassbackParams(URLEncoder.encode(body.toString()));; //描述信息 添加附加数据
model.setSubject(“魅格”); //商品标题
model.setBody(amount);对一笔交易的具体描述信息。如果是多种商品,请将商品描述字符串累加传给body。
model.setTimeoutExpress(“30m”); //超时关闭该订单时间
model.setTotalAmount(amount); //订单总金额
model.setProductCode(“QUICK_MSECURITY_PAY”); //销售产品码,商家和支付宝签约的产品码,为固定值QUICK_MSECURITY_PAY
model.setOutTradeNo(new SimpleDateFormat(“yyyyMMddHHmmss”).format(new Date())+(int)(Math.random()*90000+10000)); //商家订单编号
model.setGoodsType(“0”);//0虚拟产品1实物
request.setBizModel(model);
request.setNotifyUrl(alipay_notify_url); //回调地址
这里和普通的接口调用不同,使用的是sdkExecute
AlipayTradeAppPayResponse response = alipayClient.sdkExecute(request);
orderStr = response.getBody();
System.out.println(orderStr);//就是orderString 可以直接给客户端请求,无需再做处理。
系统错误,请售后再试(ALI40247)
集成支付宝后一直报这个错,后来折腾了好久发现,添加的附加数据,里面有特殊符号,包含特殊符号的参数要用URLEncode编码
公钥用的是支付宝公钥
异步回调通知
response.setContentType(“text/html;charset=” + alipayProperties.getCharset());
ResponseEntity responseEntity = new ResponseEntity();
//获取支付宝GET过来反馈信息
AlipayTradeAppPayRequest Requests = new AlipayTradeAppPayRequest();
String userid=Requests.getTextParams().get(“txmUser”);

    Map<String, String> params = new HashMap<>();
    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] + ",";
        }
        //乱码解决,这段代码在出现乱码时使用。如果mysign和sign不相等也可以使用这段代码转化
        valueStr = new String(valueStr.getBytes("ISO-8859-1"), "utf-8");
        System.out.println(valueStr);
        params.put(name, valueStr);
    }
    System.out.println(alipayProperties.getAlipayPublicKey());
    String result = "";
    String out_tngrade_no = "";
    String trade_no = "";
    try {
        boolean verifyResult = AlipaySignature.rsaCheckV1(params, alipayProperties.getAlipayPublicKey(), "UTF-8", "RSA2");
        if (verifyResult) {
            if (params.get("trade_status").equals("TRADE_SUCCESS")) {
                String amount = params.get("total_amount");
                DecimalFormat df1 = new DecimalFormat("0.00");
                System.out.println(params);
                //验证成功
                //请在这里加上商户的业务逻辑程序代码,如保存支付宝交易号
                //商户订单号
                out_tngrade_no = new String(request.getParameter("out_trade_no").getBytes("ISO-8859-1"), "UTF-8");
                //支付宝交易号
                trade_no = new String(request.getParameter("trade_no").getBytes("ISO-8859-1"), "UTF-8");
                //获取用户信息
                String token=params.get("passback_params");
                Session session = (Session) MySessionContext.getInstance().getMymap().get(token);
                TxmUser user = (TxmUser) session.getAttribute("session_user");
                //将获取的数据封装到实体类中
                TxmRecharge txmRecharge = new TxmRecharge();
                txmRecharge.setTxmrechargemoney(amount);
                txmRecharge.setTxmrechargeouttradeno(out_tngrade_no);
                txmRecharge.setTxmrechargetradeno(trade_no);
                txmRecharge.setTxmuserid(user.getTxmuserid());
                txmRecharge.setTxmrechargetime(new Date());
                txmRecharge.setTxmrechargetype("0");
                //新增数据到充值记录表
                txmRecahrgeService.insertRecharge(txmRecharge);
                //查询该用户的原有余额
                String txmuserbalance = txmUserService.selectMoneyByTxmuserid(user.getTxmuserid());
                String allBalance = String.valueOf(df1.format(Double.parseDouble(txmuserbalance) + Double.parseDouble(amount)));
                //更新余额
                int i = txmUserService.updateMoneyByTxmuserid(user.getTxmuserid(), allBalance);
                String txmuserbalanced = txmUserService.selectMoneyByTxmuserid(user.getTxmuserid());
                user.setTxmuserbalance(txmuserbalanced);
                //把新的余额添加到session里面去
                session.setAttribute("session_user", user);
                //request.getSession().setAttribute("session_user", user);
                if (i == 1) {
                    result = "success";
                } else {
                    result = "fail";
                }
            }
        } else {
            result = "fail";
        }
    } catch (AlipayApiException e) {
        e.printStackTrace();
    }
    PrintWriter pw = response.getWriter();
    pw.write(result);
    pw.flush();
    pw.close();
}
**最后附上工具类**
import com.alipay.api.AlipayClient;

import com.alipay.api.AlipayConstants;
import com.alipay.api.DefaultAlipayClient;
import lombok.Data;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.properties.ConfigurationProperties;
@Data
public class AlipayUtil {
public static final String APP_ID = “2018101061665005”;//app_id
private static final String APP_PRIVATE_KEY = “MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQCos0gX6dWTHz7G6ee1RYNXaS1Xc7GNxTwZMSRrgLt/synoWzkXvSZDOG4rraf6M0M1KyuNdiXkgPicVVMce4tDMZUjivgrnRk8FbrznfxHWP8PQkHRKt3NV851u4ZmpibLjejGgoss5XlE/vygFjrVq8iBlR/gdXUM5pt5V8qRZu1/2bQI7rSAqGstIcPf0HQeTuo12Poju4LCpvwCHJwnUJRFZFJrtfw2fhmilBJFlJAr5e6YX/geJgQTpAhJbnqeO3HAlKgP5asxNjS03yPCM8w+H2mlprAUqITm2+8ot+ElmX+THUzUQAjwrZMzHcwBhwpeFcBWPjzlnR5f/v0TAgMBAAECggEAPzUlHuibAAul7st26IFKC7c5qNmNPgwXT20NM0ZBekA7xHZhdtaE/oynIrBnDqSkWsh5AgCxg+MawyBpCnPzotJyCaYpA9ZRvSR7LooUGvtqXWI63M8N2cE7dvszCUTZpkzeWXpSARldjY9oQebyVlqNvpeMIQKBP7srp5RQLpffZQ7GuA9Ahxxn2eRSURB5MAJfMkOGaCWGCbi4UvUfXh/Oltnvnlp1Hre/dA+o1L5OV+h57n5rHfzB44DqWQIaWyUsECqaUBoMq+f4SHdtAgZ3liF4fo1F5JMUprQQuIIX3TjhsJdEpHhXxiGgNRj8WJa+Dgt9MAWs/8dDtErxeQKBgQDy8BvCbfBeE9Jh6OUpbpYz57RpVBWwf5UxN3fwjp2A4Sj/kbW1+PGLcJSLXptuBF0cV4oDsag05SmpMRgXKgOuMEOgSA2i2Ukmj81JrtBM3O9T5hpsiWvJ2jQrGLUsPBpAPnLRkYwo1Q9lgcY9UIg0DUbQkjkTmrZugpF6pcYLHwKBgQCxxVaLlR0g7X+xJYAV+zj/RHFfVhAjVKUcyagFyx5qltjEOafZt2Xq1XqljD17mep9beNQ8nQQHg7MlWOWBlwdlGQl8hqBh+1W6jHLy2VzPkQBRwvKQ7bS0UgU2k+CtQn3m/GSn6aADAYm0mFdAjaqAVWEvNKZ6LdjZ8P4GIaDjQKBgECZjpgmCdvKY5A7kOxyhqhovbWgcWAMnQyIVnF2SvWhafiDs5EfEIPmvOlOkAAyUtwdfwq6bCMcqPZfoqtONcpU9Tai0lVyeBwz8v/b53H48f8aWf5wkGQNjP/EwzBvDv/0Wy3VCTM2bLCuUJuvVXiZ6zG9IEZRRp+eQrcda8s7AoGANMkn/aJ1V8Wt2OgNtHk4X3PvRiPD/vmvXXDzl2TMz1GjZADKunceqDBjjqypxP3bBwuOKAcWN4L1WgIx4+ZXi+D4K9xLypKWAuzfhGgM479laguykIiyzL6f7LE2UtV29DM19Be71OG9IeHuTzPND4X94sA+uLzFV5sEMbL2njECgYBgAseeS+4xu6c5RRIbNsV5EKzadwRNCrQZpUDvxLA+iIWUvumDgqNZObQajzx8M+5Z9M9aMFZoz+nx9Sk4dbHPjvjx6VAv5tIMZIVXCFUf4BKwoh4ir+8xbxtHmsPynvo7goh9BD55REq65UMfT92wvBvu6LT1AUK8RnPl4WRRAw==”;//支付宝的私钥
public static final String ALIPAY_PUBLIC_KEY = “MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqLNIF+nVkx8+xunntUWDV2ktV3OxjcU8GTEka4C7f7Mp6Fs5F70mQzhuK62n+jNDNSsrjXYl5ID4nFVTHHuLQzGVI4r4K50ZPBW68538R1j/D0JB0SrdzVfOdbuGZqYmy43oxoKLLOV5RP78oBY61avIgZUf4HV1DOabeVfKkWbtf9m0CO60gKhrLSHD39B0Hk7qNdj6I7uCwqb8AhycJ1CURWRSa7X8Nn4ZopQSRZSQK+XumF/4HiYEE6QISW56njtxwJSoD+WrMTY0tN8jwjPMPh9ppaawFKiE5tvvKLfhJZl/kx1M1EAI8K2TMx3MAYcKXhXAVj485Z0eX/79EwIDAQAB”;//这个为你在支付宝上的商户的公钥,而不是支付宝公钥
@Value(“pay.alipay.alipayPublicKey”)
public static String ALIPAY_ZHI_KEY ;
public static final String SIGNTYPE = “RSA2”;//算法
public static final String NOTIFYURL = “xxxxx”;//支付宝回调的借口
//public static final String RETURNURL = “xxxxxxx”;//支付宝回调的借口
private static AlipayClient alipayClient = null;//因为支付宝alipayClient本身是线程安全的,因此只用创建一个,创建成单例的模式
public static AlipayClient getAlipayClient() {
if (alipayClient == null) {
synchronized (AlipayUtil.class) {//AlipayConstants.CHARSET_UTF8
if (null == alipayClient) {//https://openapi.alipay.com/gateway.do https://openapi.alipaydev.com/gateway.do
alipayClient = new DefaultAlipayClient(“https://openapi.alipay.com/gateway.do”, APP_ID,
APP_PRIVATE_KEY, AlipayConstants.FORMAT_JSON, AlipayConstants.CHARSET_UTF8,ALIPAY_ZHI_KEY,SIGNTYPE);
}
}
} return alipayClient;
}

public static String getAlipayZhiKey() {
    return ALIPAY_ZHI_KEY;
}

public static void setAlipayZhiKey(String alipayZhiKey) {
    ALIPAY_ZHI_KEY = alipayZhiKey;
}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值