zoukankan      html  css  js  c++  java
  • app支付宝支付java服务端代码

    app支付java服务端生成支付单文档

        public String aliPay(String amount,Map<String,Object> body){
            //实例化客户端
            AlipayClient alipayClient = new DefaultAlipayClient("https://openapi.alipay.com/gateway.do", alipay_appId, alipay_private_key , "json", charset, alipay_public_key, "RSA2");
            //实例化具体API对应的request类,类名称和接口名称对应,当前调用接口名称:alipay.trade.app.pay
            AlipayTradeAppPayRequest request = new AlipayTradeAppPayRequest();
            //SDK已经封装掉了公共参数,这里只需要传入业务参数。以下方法为sdk的model入参方式(model和biz_content同时存在的情况下取biz_content)。
            AlipayTradeAppPayModel model = new AlipayTradeAppPayModel();
            model.setPassbackParams(URLEncoder.encode(body.toString()));;  //描述信息  添加附加数据
            model.setSubject("魅格"); //商品标题
            model.setOutTradeNo(new SimpleDateFormat("yyyyMMddHHmmss").format(new Date())+(int)(Math.random()*90000+10000)); //商家订单编号
            model.setTimeoutExpress("30m"); //超时关闭该订单时间
            model.setTotalAmount(amount);  //订单总金额
            model.setProductCode("QUICK_MSECURITY_PAY"); //销售产品码,商家和支付宝签约的产品码,为固定值QUICK_MSECURITY_PAY
            request.setBizModel(model);
            request.setNotifyUrl(alipay_notify_url);  //回调地址
            String orderStr = "";
            try {
                    //这里和普通的接口调用不同,使用的是sdkExecute
                    AlipayTradeAppPayResponse response = alipayClient.sdkExecute(request);
                    orderStr = response.getBody();
                    System.out.println(orderStr);//就是orderString 可以直接给客户端请求,无需再做处理。
                } catch (AlipayApiException e) {
                    e.printStackTrace();
            }
            return orderStr;
        }

    App支付服务器异步通知

    文档地址

    回调获取支付结果

    Map requestParams = getRequest().getParameterMap();

        public String aliPay_notify(Map requestParams){
            System.out.println("支付宝支付结果通知"+requestParams.toString());
            //获取支付宝POST过来反馈信息
            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);
             }
            //切记alipaypublickey是支付宝的公钥,请去open.alipay.com对应应用下查看。
            //boolean AlipaySignature.rsaCheckV1(Map<String, String> params, String publicKey, String charset, String sign_type)
            try {
            //验证签名
    boolean flag = AlipaySignature.rsaCheckV1(params, alipay_public_key, charset, "RSA2"); if(flag){ if("TRADE_SUCCESS".equals(params.get("trade_status"))){ //付款金额 String amount = params.get("buyer_pay_amount"); //商户订单号 String out_trade_no = params.get("out_trade_no"); //支付宝交易号 String trade_no = params.get("trade_no"); //附加数据 String passback_params = URLDecoder.decode(params.get("passback_params")); } } } catch (AlipayApiException e) { // TODO Auto-generated catch block e.printStackTrace(); }
        return "success"; }

     系统错误,请售后再试(ALI40247)

    集成支付宝后一直报这个错,后来折腾了好久发现,添加的附加数据,里面有特殊符号,包含特殊符号的参数要用URLEncode编码

  • 相关阅读:
    整数数组中最大子数组的和有溢出如何处理
    返回一个整数数组(环形数组)中最大子数组的和
    cnblogs用户体验评价
    SCRUM报告(一)
    Spring冲刺计划会议
    Spring冲刺计划会议
    团队合作项目----冲刺目标确定
    结队开发
    组队开发----卖书问题
    团队开发---NABC分析
  • 原文地址:https://www.cnblogs.com/suruozhong/p/6632196.html
Copyright © 2011-2022 走看看