精华内容
下载资源
问答
  • 微擎修改支付页面

    千次阅读 2017-09-18 09:16:57
  • 参考:微擎修改支付页面 https://blog.csdn.net/hello_xiaoyu/article/details/78015568?utm_source=copy
    展开全文
  • 1、前端-使用window.location.href来请求接口,不要使用ajax,我们请求后台支付接口后要跳转到支付宝的支付页面,安全起见,这里入参传订单ID就够了,使用订单ID从后台拿订单数据 2、控制器 @ApiOperation("根据...

    1、前端-使用window.location.href来请求接口不要使用ajax,我们请求后台支付接口后要跳转到支付宝的支付页面,安全起见,这里入参传订单ID就够了,使用订单ID从后台拿订单数据

    2、控制器

     @ApiOperation("根据订单ID生成支付宝支付二维码")
        @GetMapping("/alipay")
        public String alipay(String orderId, HttpServletResponse response) throws AlipayApiException {
           return orderService.alipay(orderId, response);
    
        }

    3、支付业务,支付宝接口文档参考“电脑网址支付——alipay.trade.page.pay(统一收单下单并支付页面接口)

        @Override
        public String alipay(String orderId, HttpServletResponse servletResponse) throws AlipayApiException {
            ServiceOrder order = orderMapper.selectById(orderId);//订单校验?如剔除订单项中已被置为删除的
            AlipayVo vo = new AlipayVo();
            vo.setOut_trade_no(order.getOrderNo());
            vo.setTotal_amount(String.valueOf(order.getPayPrice()));
            vo.setSubject("jwolf测试");
            vo.setProduct_code("FAST_INSTANT_TRADE_PAY"); //这个是固定的
            AlipayTradePagePayRequest request = new AlipayTradePagePayRequest();
            request.setBizContent(JSON.toJSONString(vo));
            request.setReturnUrl(alipayReturnUrl);
            request.setNotifyUrl(alipayNotifyUrl);
            // 执行支付宝请求,其实就是httpclient请求
            // 注意这里使用的是AlipayTradePagePayRequest,返回的是response.getBody(),与自定义二维码不同
            AlipayTradePagePayResponse response = alipayClient.pageExecute(request);
            if (!response.isSuccess()) {
                throw new CommonException("支付异常");
            }  
            return response.getBody();
        }

    4、返回给页面的是如下字符串,就是一个表单,表单会立即提交然后生成二维码到支付宝的固定页面,下面的form表单是带有returnURL的。支付宝扫描支付成功后进入显示支付宝支付成功,然后页面定时器重定向到商户定义的returnURL接口。这就是同步回调。支付宝还会调用配置给它的异步回调接口告知商户后台,商户后台接收到回调请求开始处理自身业务,然后返回给支付宝“SUCCESS”,如果支付宝一直没有及时收到响应会进行衰减请求

    5、同步通知。前后端分离需要自己拼接HTML页面,比较麻烦,然后response响应回去,没分离则直接跳视图填充数据就OK了

        public void alipayReturnUrl(HttpServletRequest request, HttpServletResponse response) throws IOException, AlipayApiException {
            log.info("支付宝同步回调");
            //获取支付宝GET过来反馈信息
            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);
            }
            boolean signVerified = AlipaySignature.rsaCheckV1(params, zfbPublicKey, AlipayClientConfiguration.charset, AlipayClientConfiguration.signType);
            response.setContentType("text/html;charset=utf-8");
            PrintWriter out = response.getWriter();
            if (!signVerified) {
                out.println("<html>验签失败</html>");
            }
            //商户订单号
            String out_trade_no = new String(request.getParameter("out_trade_no").getBytes("ISO-8859-1"), "UTF-8");
            //支付宝交易号
            String tradeNo = new String(request.getParameter("trade_no").getBytes("ISO-8859-1"), "UTF-8");
            String totalAmount = new String(request.getParameter("total_amount").getBytes("ISO-8859-1"), "UTF-8");
            String tradeStatus = new String(request.getParameter("trade_status").getBytes("ISO-8859-1"), "UTF-8");
            ServiceOrder order = orderMapper.selectOne(new QueryWrapper<ServiceOrder>().eq("order_no", out_trade_no));
            String msg = tradeStatus.equals("TRADE_SUCCESS") ? "支付成功" : "支付失败";
            msg += JSON.toJSONString(order);
            //前后端分离需要自己拼接HTML页面,比较麻烦,然后response响应回去,没分离则直接跳视图就可以了
            out.println("<html>" + msg + "</html>");
    
        }

    6、异步通知,请求参数处理和验签都和同步通知一样,不同的是同步通知是返回一个页面,这里要修改订单状态,即支付后续逻辑,注意幂等,不要出现两次“发货”。商户的自身业务最好异步执行,可以避免执行失败或超时导致支付宝再次回调,可能会有幂等问题。最好是异步处理支付成功后的业务。异步业务最好多打印日志以备对账使用,这时的订单状态应该是支付成功与订单完成中间的一个“发货”过渡状态,异步业务正常执行完就修改订单状态为完成,而处理失败了可采取人工干预等

      @Override
        public String alipayNotifyUrl(HttpServletRequest request) throws AlipayApiException {
            log.info("支付宝异步回调");
            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);
            }
            boolean flag = AlipaySignature.rsaCheckV1(params, zfbPublicKey, AlipayClientConfiguration.charset, AlipayClientConfiguration.signType);
            // 获取支付宝的通知返回参数,可参考技术文档中页面跳转同步通知参数列表(以上仅供参考)//
            if (flag == true) {// 验证成功
                String trade_status = request.getParameter("trade_status"); // 交易状态
                String out_trade_no = request.getParameter("out_trade_no"); // 获取订单号
                log.info("回调过程获取的订单编号:{},订单状态:{}", out_trade_no, trade_status);        
                if (!"TRADE_SUCCESS".equals(trade_status)) {
                    return "";
                }
                log.info("支付宝订单支付成功!开始本地支付成功后业务");
                int update = orderMapper.update(new ServiceOrder().setStatus(Constants.OrderStatus.PAY_OK.getOrderStatus()), new QueryWrapper<ServiceOrder>().eq("order_no", out_trade_no).eq("status", Constants.OrderStatus.NO_PAY.getOrderStatus()));
                if (update != 1) {
                    log.error("支付成功,但跟新订单状态为处理出现失败,订单号:{}", out_trade_no);
                    return "";
                } else {
                    //异步处理该订单。收了钱不能退款,告诉用户成功。异步处理订单如有错误需要人工处理。
                    asyncProcessOrder(out_trade_no);
                    return "SUCCESS";
                }
            }
            return "";
        }

     

    展开全文
  • 前端支付页面轮询支付状态

    千次阅读 2020-09-20 20:00:53
    修改支付状态,并且跳到支付成功的页面。 用的vue框架 定时器 data(){ intervalwx:null } methods:{ wechat(){ 二维码生成接口 this.intervalwx = window.setInterval(()=>{ setTimeout(this.paySuccess...

    本文应用于PC端的微信,支付宝扫码支付
    思路:
    当二维码生成后,写一个定时器 不断的去请求支付状态的接口。当支付状态为成功时,清除定时器。修改支付状态,并且跳到支付成功的页面。
    用的vue框架

    定时器
    data(){
    	intervalwx:null
    }
    methods:{
    	wechat(){
    		二维码生成接口
    		this.intervalwx = window.setInterval(()=>{
    			setTimeout(this.paySuccess(),0)
    		},1000);
    	}
    	paySuccess(){
    	//调取支付状态的接口,支付成功返回200
    		https.fetchGet('paySuccess').then(res=>{
    		//注意定时器的this指向问题
    			const that = this;
    			if(res.data.code == 200){
    				clearInterval(that.intervalwx)
    				that.intervalwx = null
    			}
    		})
    	}
    }
    
    
    展开全文
  • Android6.0引入微信支付后无法调起支付页面,回调返回支付结果是-1,官方说明是签名,id错误或者不一致引起的,但是我们的id,签名都服务端返回我们解析后作为参数上传,而且安卓6.0版本以下是可以的调起支付页面的...
  • 包括腾讯云和百度贴吧支付成功页面,模板下载可以直接打开html显示效果,自己根据实际需求修改就好了。
  • H5+JQ模拟支付页面

    2018-10-11 15:17:30
    简单易上手,二开可以拿去用,HTML5+jq支付框,可以直接拿去做修改也可以直接使用
  • h5页面 支付宝支付

    千次阅读 2017-06-05 13:15:59
    1、提交 支付基础数据 [html] view plain copy form action="${ctx}/np/h5/restf/np-pay-confirm" method="post" id="payForm" target="_self">   input type="hidden" nam
  • 微信支付提交订单没有反应,查看服务器后台报错500服务器错误,Internal Server Error. 查看日志是支付时报空指针java.lang.NullPointerException。 排查跟支付相关的代码,首先...更换商户密钥,支付页面出现。 ...
  • 上周由于工作需要,需将微信支付的H5页面跳转修改为AJAX点击后直接出发的效果。下面是之前采用的微信支付的JS代码: function onBridgeReady(){ WeixinJSBridge.invoke( 'getBrandWCPayRequest', { "appId" : ...
  • 前段时间调支付的时候,发现无论支付成后还是支付取消失败,直接跳回自己app首页了而不是支付页面,也不走任何支付回调的断点,前前后后一直复查支付的流程都是对的,没有任何问题。简直是疯了,后来才发现是自己改...
  • 之前搞微信支付一直不能够回调支付结果的回调页面,现在来说一下怎么成功回调页面 参照文档:调起支付的代码: private void sendPayReq(String appid, String partnerid, String prepayid, String packageValue, ...
  • 保存好支付宝公钥 为什么设置公钥呢,是为了我们用私钥加密好数据,支付宝官方,用我们的公钥进行验签,判断是不是我们的请求数据有没有被恶意修改 为啥查看支付公钥呢,是为了,支付回调的时候,我们进行验签是不是...
  • 一、场景:公司需要在网站上进行支付宝支付。 二、API:使用支付宝开放平台的支付能力-即时到账接口。支付宝开放平台链接 三、分析: 1、支付宝的文档比较容易看,主要是有相应的DEMO,我这里看的DEMO是 JAVA-UTF-8...
  • 增加https的话,首先需要你先购买证书,这个你可以联系服务器商,然后修改服务器配置。 假定所有配置都可以了,那我们打开magento后台,找到系统->配置->常规->web选项,如下 配置好那,刷新缓存看看,...
  • 模板界面显示如下,可以修改为自己想要的样式,包含一个html页面,一个js文件需要手动调整,其他图片类看着修改
  • h5页面调用支付宝支付

    万次阅读 热门讨论 2016-01-29 16:53:43
    1、提交 支付基础数据 2、处理提交的支付数据 @RequestMapping("np-pay-confirm") public String payConfirm(@ModelAttribute PersonOrder order,Model model) { ////////////////////
  • 这一节我们来做一下支付页面以及在页面中导入银行图标。1. 存储银行图标 银行图标一般不会总是去加载,因为这写东西是死的,没必要每次进入支付页面就去加载银行图标,这样性能会受到一定的影响。这让我们联想到了...
  • 制作支付宝博客捐款页面

    千次阅读 2014-03-01 22:26:51
    我想很多朋友在博客圈子闲逛的时候也见过类似内容:文章底部有个向作者捐款的按钮,点击之后就到了对方预先设置的支付宝收款页面。在一些大型博客,往往美其名曰打赏作者!其实这个功能想要实现的话挺简单的,只需要...
  • 微信支付时,当调用微信支付的时候,微信会判断当前页面和微信公众号后台设置的支付授权目录是否一致,他会把页面最后一次刷新的url作为判断依据(如果用户刷新了任何页面,这个页面就是支付页面),这个时候,单页...
  • 支付宝页面第三方登录开发

    千次阅读 2018-07-11 00:12:57
    支付宝支付业务 在支付宝开发平台中创建项目 在我们的业务中可能会用到需要进行支付的业务,这时我们可以用支付宝给我们提供的api 首先登录支付宝开发平台https://open.alipay.com/platform/home.htm,点击开发接...
  • (1) 买家在支付成功后会看到一个支付宝提示交易成功的页面,该页面会停留几秒,然后会自动跳转回商户指定的同步通知页面(参数return_url); (2) 该页面中获得参数的方式,需要使用GET方式获取,如request....
  • JS制作支付倒计时页面

    千次阅读 2016-10-20 22:47:49
    (图四)实现目标一,页面在图一时开始进行倒计时(可以点击取消订单按钮,支付页面消失)。二,倒计时完毕,出现删除订单。三,单击删除订单,弹出弹框,询问是否要真正删除订单。四,单击确定,即可删除订单。 ...
  • H5页面唤醒支付宝 app指定页面

    千次阅读 2019-12-16 23:40:33
    修改支付密码 mes = “alipays://platformapi/startapp?appId=20000014”;我的银行卡 mes = “alipays://platformapi/startapp?appId=20000015”;找回登录密码 mes = “alipays://platformapi/startapp?appId=...
  • 移动端页面调用微信支付

    千次阅读 2019-08-21 10:48:41
    (2)第二个接口 通过后端返回信息,调用微信支付接口callpay方法 3,上代码 //创建订单,做了一些接口判断,可以根据各自后台协议作出相应更改 axios.post(allApi.UpdateOrders,{AddressId:addressId,Orders:...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 53,337
精华内容 21,334
关键字:

更改支付页面