支付宝支付简单版

AlipayForOrderMealConfig.java

 

package com.feparks.mobile.mobilepayment.alipay.config;

import com.alipay.api.AlipayClient;
import com.alipay.api.DefaultAlipayClient;

public class AlipayForOrderMealConfig {


    /**
     * 应用号
     */
    public static String APP_ID = "2021001141633558";
    //public static String APP_ID ="2016101700709277";
    /**
     * 应用私钥
     */
    public static String APP_PRIVATE_KEY = "";
 
    /**
     * 编码
     */
    public static String CHARSET = "UTF-8";
    /**
     * 应用公钥
     */
    public static String ALIPAY_PUBLIC_KEY = "";
 
  public static String ALIPAY_KEY="";
  /**
     * 支付宝网关地址
     */
    private static String GATEWAY = "https://openapi.alipay.com/gateway.do";
  //沙箱
private static String GATEWAY = "https://openapi.alipaydev.com/gateway.do";
    /**
     * 成功付款回调
     */
    public static String PAY_NOTIFY = "http://xxxx/ali/aliPayOrderMealApi/notifyUrl";
    /**
     * 支付成功回调
     */
    public static String REFUND_NOTIFY = "http://xxx/ali/aliPayOrderMealApi/returnUrl";
    /**
     * 前台通知地址
     */
    public static String RETURN_URL = "你的回调地址";
    /**
     * 参数类型
     */
    public static String PARAM_TYPE = "json";
    /**
     * 成功标识
     */
    public static final String SUCCESS_REQUEST = "TRADE_SUCCESS";
    /**
     * 交易关闭回调(当该笔订单全部退款完毕,则交易关闭)
     */
    public static final String TRADE_CLOSED = "TRADE_CLOSED";
    /**
     * 收款方账号
     */
    public static final String SELLER_ID = "注册沙箱的支付宝账号";
    /**
     * 支付宝请求客户端入口
     */
    private volatile static AlipayClient alipayClient = null;

   public static String SIGNTYPE = "RSA2";

    /**
     * 不可实例化
     */
    private AlipayForOrderMealConfig(){};

    /**
     * 双重锁单例
     * @return 支付宝请求客户端实例
     */
    public static AlipayClient getInstance(){
      if (alipayClient == null){
        synchronized (AlipayConfig.class){
          if (alipayClient == null){
            alipayClient = new DefaultAlipayClient(GATEWAY,APP_ID,APP_PRIVATE_KEY,PARAM_TYPE,CHARSET,ALIPAY_PUBLIC_KEY,SIGNTYPE);
          }
        }
      }
      return alipayClient;
    }


}
AlipayForOrderMealController.java

 

package com.feparks.mobile.mobilepayment.alipay.controller;

import com.alipay.api.AlipayApiException;
import com.alipay.api.AlipayClient;
import com.alipay.api.domain.AlipayTradeAppPayModel;
import com.alipay.api.internal.util.AlipaySignature;
import com.alipay.api.request.AlipayTradeAppPayRequest;
import com.alipay.api.response.AlipayTradeAppPayResponse;
import com.feparks.base.common.tool.StringUtils;
import com.feparks.base.sys.vo.ResultVO;
import com.feparks.mobile.mobilepayment.alipay.config.AlipayConfig;
import com.feparks.mobile.mobilepayment.alipay.config.AlipayForOrderMealConfig;
import com.jfinal.core.Controller;
import com.jfinal.plugin.activerecord.Db;
import com.jfinal.plugin.activerecord.Record;
import net.sf.json.JSONObject;

import javax.servlet.http.HttpServletRequest;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

public class AlipayForOrderMealController extends Controller {

  //页面跳转同步通知页面路径
  public  void  returnUrl(){

    Map paraMap = this.getParaMap();
    Map<String, String> map = getMap(paraMap);

    // 这里的校验没有多大的意思,不可信,直接获取out_trade_no跳转到对应的payed controller也可
    boolean rsaCheck = rsaCheck(map);
    if (rsaCheck){
      System.out.println("验证通过");
    }else {
      System.out.println("验证失败");
    }

    // 获取订单号
    String out_trade_no = map.get("out_trade_no");
    System.out.println("out_trade_no:" + out_trade_no);
    // 这里一般都是 重定向 payed的controller, 然后携带对应的信息如:return "redirect:/alipay/success?out_trade_no=" + out_trade_no;
    // payed的controller根据out_trade_no获取支付结果,并且给出页面提示

    renderJson("支付完成");
  }

   // 服务器异步通知页面路径
   public  void  notifyUrl(){
     System.out.println("支付宝回调了");
    String result="failure";
     Map paraMap = this.getParaMap();
     Map<String, String> map = getMap(paraMap);
     System.out.println("支付宝回调的返回数据:"+ JSONObject.fromObject(paraMap));
     boolean rsaCheck = rsaCheck(map);
     if (rsaCheck){
       System.out.println("验证通过");

       // 处理业务逻辑,更改支付状态等骚操作
       String out_trade_no = map.get("out_trade_no");
    。。。。。
       result="success";
     }
     renderText(result);
   }

  //支付
  public  void  pay(){
    ResultVO resultVO = new ResultVO();
    resultVO.setSuccess(false);
    resultVO.setCode("1");
    resultVO.setResult("数据错误!");
    String openKey = this.getPara("openKey");
    String orderId = this.getPara("orderId");

    if (StringUtils.isBlank(openKey)){
      resultVO.setCode("2");
      resultVO.setResult("用户为空!");
      renderJson(resultVO);
      return;
    }
    String sql="select * from t_order where orderId='"+orderId+"'";
    Record first = Db.findFirst(sql);
    if (first==null || "0".equals(first.getStr("orderStatus"))){
      resultVO.setCode("2");
      resultVO.setResult("订单不存在或者订单已取消!");
      renderJson(resultVO);
      return;
    }
    String totalPrice = first.getStr("totalPrice");
    AlipayClient client = AlipayForOrderMealConfig.getInstance();
    AlipayTradeAppPayRequest request = new AlipayTradeAppPayRequest();
    AlipayTradeAppPayModel model = new AlipayTradeAppPayModel();
    model.setOutTradeNo(orderId);
    //model.setBody(first.get(""));
    model.setSubject(orderId);
    //model.setTotalAmount("0.01".equals(totalPrice)?totalPrice:totalPrice+".00");
    model.setTotalAmount("0.01");
    //model.setOutTradeNo(this.getPara("outTradeNo"));
    model.setProductCode("QUICK_MSECURITY_PAY");
    request.setNotifyUrl(AlipayForOrderMealConfig.PAY_NOTIFY);
    request.setBizModel(model);
    try {
      AlipayTradeAppPayResponse alipayTradeAppPayResponse = client.sdkExecute(request);
      System.out.println(alipayTradeAppPayResponse.getBody());//就是orderString 可以直接给客户端请求,无需再做处理。
      resultVO.setCode("0");
      resultVO.setResult("成功!");
      resultVO.setData(alipayTradeAppPayResponse.getBody());
      renderJson(resultVO);
    } catch (AlipayApiException e) {
      e.printStackTrace();
    }


  }


   //支付宝回调的转换
   public Map<String,String> getMap(Map requestParams){
     Map<String,String> params = new HashMap<String,String>();
     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);
     }
     return params;
   }


  /**
   * 校验是否支付成功
   * @param handleParams
   * @return
   */
  public static boolean rsaCheck(Map<String, String> handleParams) {
    boolean checkV1 = false;
    try {
      checkV1 = AlipaySignature.rsaCheckV1(handleParams, AlipayForOrderMealConfig.ALIPAY_KEY, AlipayForOrderMealConfig.CHARSET, AlipayForOrderMealConfig.SIGNTYPE);
    } catch (AlipayApiException e) {
      e.printStackTrace();
    }
    return checkV1;
  }



}

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值