前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >java实现支付宝h5手机支付

java实现支付宝h5手机支付

作者头像
故久
发布2019-12-16 17:23:26
1.8K0
发布2019-12-16 17:23:26
举报
文章被收录于专栏:故久

一.首先去支付宝申请好应用,以及开通手机快捷支付。

二.支付宝开放平台的API文档

https://docs.open.alipay.com/203/107090/

在application.yml封装属性

代码语言:javascript
复制
@Value("${app.ali-pay-appId}")
private String APP_ID;
/**
 * 应用私钥
 */
@Value("${app.ali-pay-merchantPrivateSign}")
private String APP_PRIVATE_KEY;
/**
 * 支付宝公钥
 */
@Value("${app.ali-pay-aliPublicSign}")
private String ALIPAY_PUBLIC_KEY;
/**
 * 回调地址
 */
@Value("${app.ali-pay-notifyUrl}")
private String notify_url;
/**
 * 签名类型
 */
@Value("${app.ali-pay-signType}")
private String SIGN_TYPE;
/**
 * 编码集
 */
@Value("${app.ali-pay-charset}")
private String CHARSET;
/**
 * 支付宝网关
 */
@Value("${app.ali-pay-payGateWay}")
private String URL;

@Value("${app.order-pay-switch}")
private String flag;

统一下单接口

代码语言:javascript
复制
//实例化阿里支付
            AlipayClient alipayClient = new DefaultAlipayClient(URL, APP_ID, APP_PRIVATE_KEY, FORMAT, CHARSET, ALIPAY_PUBLIC_KEY, SIGN_TYPE);
//创建api对应的request
            AlipayTradeWapPayRequest alipayRequest = new AlipayTradeWapPayRequest();

            alipayRequest.setNotifyUrl(notify_url);
            //订单号,后续修改为正式的
            String outTradeNo = "" + System.currentTimeMillis();

            Map<String, Object> maps = new HashMap<>();
            maps.put("out_trade_no", outTradeNo);
          
            maps.put("total_amount", "0.01");
          
            //产品名后续修改
            maps.put("subject", "测试")
            maps.put("timeout_express", "3m");
            String postData = JSONObject.toJSONString(maps);
            alipayRequest.setBizContent(postData);

            logger.info("requestId:{},function:{},request:{}",requestId,"支付宝支付请求参数",postData);
            String form = alipayClient.pageExecute(alipayRequest).getBody();
            logger.info("requestId:{},function:{},response:{}" , requestId , "aliH5Pay" , form);
            logger.info("requestId:{},userId:{},function:{}",requestId,userIds,"发起支付宝支付请求");
代码语言:javascript
复制
//支付宝回调
    @PostMapping(value = "/ali")
    @SkipUserAuth
    public String notify(HttpServletRequest request){
        Map requestParams = request.getParameterMap();
        String q = "";
        for (Iterator iter = requestParams.keySet().iterator(); iter.hasNext();) {
            String name = (String) iter.next();
            String[] values = (String[]) requestParams.get(name);
            for (int i = 0; i < values.length; i++) {
                q+=name+"="+values[i]+"&";
            }
        }

        System.out.println("支付宝支付结果通知"+requestParams.toString());
        logger.info("requestId:{},function:{},response:{}",requestId,"支付宝支付结果通知",q);
        //获取支付宝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);
        }
        logger.info("requestId:{},function:{},response:{}", requestId , "支付宝回调" , params.toString());

        //boolean AlipaySignature.rsaCheckV1(Map<String, String> params, String publicKey, String charset, String sign_type)
        try {
            //验证签名
            boolean flag = AlipaySignature.rsaCheckV1(params, ALIPAY_PUBLIC_KEY, CHARSET,SIGN_TYPE);
            logger.info("requestId:{},function:{},response:{}", requestId, "支付宝回调验证签名", flag);
            if(flag){
                if("TRADE_SUCCESS".equals(params.get("trade_status"))){

                    //商户订单号
                    String out_trade_no = params.get("out_trade_no");
                    logger.info("打印支付宝回调数据" + out_trade_no);
                    //下面省略修改订单逻辑
                }
            }
        } catch (AlipayApiException e) {
            e.printStackTrace();
            logger.info("requestId:{} err",request ,e);
            logger.error("requestId:{} err",request ,e);
        }
        return "success";
    }
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档