JAVA -- 支付宝支付(APP)

谁说我不能喝 提交于 2019-12-23 17:54:53

之前有写过微信支付 现在就来说说支付宝支付吧
同样直接开始
第一 还是先看看参数配置
官方dome有给过参数说明
https://docs.open.alipay.com/54/106682/

//↓↓↓↓↓↓↓↓↓↓请在这里配置您的基本信息↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓

// 应用ID,您的APPID,收款账号既是您的APPID对应支付宝账号
public static String app_id = "";

// 商户私钥,您的PKCS8格式RSA2私钥
public static String merchant_private_key = "";

// 支付宝公钥,查看地址:https://openhome.alipay.com/platform/keyManage.htm 对应APPID下的支付宝公钥。
public static String alipay_public_key = "";

// 服务器异步通知页面路径  需http://格式的完整路径,不能加?id=123这类自定义参数,必须外网可以正常访问
/*public static String notify_url = "http://工程公网访问地址/alipay.trade.page.pay-JAVA-UTF-8/notify_url.jsp";*/

// 页面跳转同步通知页面路径 需http://格式的完整路径,不能加?id=123这类自定义参数,必须外网可以正常访问 (我们用到的同步所以注释掉上面异步)
public static String return_url = "http://工程公网访问地址/alipay.trade.page.pay-JAVA-UTF-8/return_url.jsp";

// 签名方式
public static String sign_type = "RSA2";

// 字符编码格式
public static String charset = "utf-8";

// 支付宝网关
public static String gatewayUrl ="https://openapi.alipay.com/gateway.do";

知道了参数我们开始写期待的代码了
也不啰嗦 直接贴代码

/**
	 * 创建商户订单  请求支付宝
	 * @param amount
	 * @param random
	 * @return
	 */
	public static String getsign(String price,String orderNumber){

		
		//实例化客户端(下面的就是刚刚参数配置哦)
		AlipayClient alipayClient = new DefaultAlipayClient(
				gatewayUrl,
				app_id,
				merchant_private_key, "json",
				charset,
				alipay_public_key, 
				sign_type);
		 if (Double.valueOf(price) <= 0){ // 一些必要的验证,防止抓包恶意修改支付金额
			 return null;
	     }
		 //实例化具体API对应的request类,类名称和接口名称对应,当前调用接口名称:alipay.trade.app.pay
        AlipayTradeAppPayRequest request = new AlipayTradeAppPayRequest();
        //SDK已经封装掉了公共参数,这里只需要传入业务参数。以下方法为sdk的model入参方式(model和biz_content同时存在的情况下取biz_content)。
        AlipayTradeAppPayModel model = new AlipayTradeAppPayModel();
        model.setBody("支付宝支付-"+orderNumber);
        model.setSubject((orderNumber+price+new Date().getTime()).toString());
        model.setOutTradeNo(orderNumber);  //订单号
        model.setTimeoutExpress("30m");  // 该参数数值不接受小数点, 如 1.5h,可转换为 90m。
        model.setTotalAmount(price); // 订单总金额,单位为元,精确到小数点后两位,取值范围[0.01,100000000]这里调试每次支付1分钱,在项目上线前应将此处改为订单的总金额
        model.setProductCode("QUICK_MSECURITY_PAY");// 销售产品码,商家和支付宝签约的产品码,为固定值QUICK_MSECURITY_PAY
        request.setBizModel(model);
        // 设置后台异步通知的地址,在手机端支付成功后支付宝会通知后台,手机端的真实支付结果依赖于此地址
        request.setNotifyUrl(return_url);
        AlipayTradeAppPayResponse response = new AlipayTradeAppPayResponse();
        try {
            //这里和普通的接口调用不同,使用的是sdkExecute
            response = alipayClient.sdkExecute(request);
            System.out.println(response.getBody());//就是orderString 可以直接给客户端请求,无需再做处理。
//            DaoTopUpOrder.dao.topUpNotifyUrl(orderNumber);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return response.getBody();
	}

哈哈哈 好了赶紧试试能不能调起了吧 这是配合APP支付的哦
如果要用H5或者JSAPI中支付的话 请咨询官网文档
或者加我吧 微信号AiMyHear

下面就是回调的写法

/**
	 * 支付宝支付成功后.异步请求该接口
	 * @param requestParams
	 * @return
	 */
	public static String aliPay_notify(HttpServletRequest request){
//        System.out.println("支付宝支付结果通知"+requestParams.toString());
        //获取支付宝POST过来反馈信息
        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);
          System.out.println(name+"--=-=-=-=-=-"+valueStr);
         }
        try {
            boolean flag = AlipaySignature.rsaCheckV1(params, alipay_public_key, charset, "RSA2");
            System.out.println("flag *******************"+flag);
            if(flag){
            	System.out.println("TRADE_SUCCESS*******************"+params.get("trade_status"));
                if("TRADE_SUCCESS".equals(params.get("trade_status"))){
                	System.out.println("——————————————————————————成功进来了+++++++++++++++++++++++++++++++++++++");
                    //付款金额
                    String price = params.get("buyer_pay_amount");
                    //商户订单号
                    String out_trade_no = params.get("out_trade_no");
                    //支付宝交易号
                    String trade_no = params.get("trade_no");
                }
            }
        } catch (AlipayApiException e) {
            e.printStackTrace();
        }
      return "success";
    }

哒哒哒 完成了 支付宝简直比微信简单多了 是不是
好了 祝大家都完成自己的支付开发
(可别忘了引入阿里的sdk哦~)

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!