支付宝PC端 网页支付 相关研究

版权声明:本文为博主原创烂文章,你爱转载就转载 https://blog.csdn.net/qq_38623459/article/details/82428354

这个官方的文档例子还是靠谱的,可能不太好调例子

好的博客还是很多的,不过我没怎么查,这个

https://docs.open.alipay.com/270/105899/

https://docs.open.alipay.com/58/103584

官方的

必须知道他需要什么东西,看过官方的文档与例子才行

这个跟微信也有相似:

首先配置文件

商户号,支付宝号,私匙,公匙,签名,网关,回调

controller

@RequestMapping(value="/pagePay",produces="application/json;charset=UTF-8")
    public String pagePay(ForAlipay record){
        JSONObject json = new JSONObject();
        String form = alipayService.pagePay(record);
        json.put("data", form);
        return json.toJSONString();
    }

service实现类:

@Override
    public String pagePay(ForAlipay record) {
        //支付页面接口对应的request
        AlipayTradePagePayRequest alipayRequest = new AlipayTradePagePayRequest();
        //在公共参数中设置回跳和通知地址
        //return_url:买家支付成功后跳转的页面,仅当买家支付成功后跳转一次
        //notify_url:异步通知,下单成功后,支付宝服务器通知商户服务,并把订单的状态通知给商户,商户根据返回的订单状态,修改网站订单的状态
        alipayRequest.setReturnUrl(AlipayConfig.return_url);
        alipayRequest.setNotifyUrl(AlipayConfig.notify_url);
        AlipayTradePagePayModel model = new AlipayTradePagePayModel();
        //TbOrderForm order = tbOrderFormMapper.selectByPrimaryKey(record.getOut_trade_no());
        model.setOutTradeNo(record.getOut_trade_no());
        model.setTotalAmount(100+"");
        model.setSubject(record.getSubject());
        model.setBody(record.getBody());
        model.setProductCode("FAST_INSTANT_TRADE_PAY");    
        //自填
        model.setBody("a");
        model.setSubject("aa");
        
        
        
        alipayRequest.setBizModel(model);
        String form="";
        try {
            form = alipayClient.pageExecute(alipayRequest).getBody();
        } catch (AlipayApiException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return form;
    },

注意他的参数有几个不为空,不然报错setSubjec,他返回的是一个html页面,人家给画好了

支付成功调回调函数:

他比较有意思,异步通知,同步跳转,

买家付款成功后,如果接口中指定有return_url ,买家付完款后会跳到 return_url所在的页面,这个页面可以展示给客户看,这个页面只有付款成功才会跳转.

notify_url:服务器后台通知,这个页面是程序后台运行的(买家和卖家都看不到),买家付完款后,支付宝会调用notify_url这个页面所在的页面并把相应的参数传递到这个页面,这个页面根据支付宝传递过来的参数修改网站订单的状态,更新完订单后需要在页面上打印出一个success给支付宝,如果反馈给支付宝的不是success,支付宝会继续调用这个页面. 
流程:买家付完款(trade_status=WAIT_SELLER_SEND_GOODS)--->支付宝通知notify_url---& gt;如果反馈给支付宝的是success(表示成功,这个状态下不再反馈,如果不是继续通知,一般第一次发送和第二次发送的时间间隔是3分钟)
剩下的过程,卖家发货,买家确认收货,交易成功都是这个流程

通知service

@RequestMapping(value = "/notifyU",produces = "application/json;charset=utf-8")
    public String notifyU(HttpServletRequest req){
        String notify = "";
        try {
            notify = alipayService.notify(req);
        } catch (UnsupportedEncodingException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return notify;
    }
    
    /**
     * 
     * @Title: returnU
     * @Description: 支付宝同步跳转,支付成功后,获取支付宝get过来的信息,验签
     * @author: chen
     * @param: @param req
     * @param: @return   
     * @return: String   
     * @throws
     */
    @RequestMapping(value = "/returnU",produces = "application/json;charset=utf-8")
    public String returnU(HttpServletRequest req){
        JSONObject json = new JSONObject();
        String returnU = "";
        try {
            returnU = alipayService.returnU(req);
        } catch (UnsupportedEncodingException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            json.put("code", ResponseStatusCode.PAY_ERR);
            json.put("msg", "支付失败");
        }
        if("success".equals(returnU)){
            json.put("code", ResponseStatusCode.SUCC);
        }else{
            json.put("code", ResponseStatusCode.PAY_ERR);
            json.put("msg", "支付失败");
        }
        return json.toJSONString();
    }
    
    /**
     * 
     * @Title: wxNotify
     * @Description: 微信支付通知
     * @author: chen
     * @param: @param req
     * @param: @return   
     * @return: String   
     * @throws
     */
    @RequestMapping(value = "/wxNotify",produces = "application/json;charset=utf-8")
    public String wxNotify(HttpServletRequest req){
        
        String notify = wXPayService.notify(req);
        
        return notify;
    }

具体的实现类,相信你可以搜到,太多了不记录了

猜你喜欢

转载自blog.csdn.net/qq_38623459/article/details/82428354