• 支付宝支付成功后通知在微信打开的提示页面


    背景

    正常情况下,在微信浏览器使用支付宝支付,会出现一大坨链接,让你手动的复制到浏览器打开去操作。

    这样的用户体验,别说用户,就连没有审美的程序员也不能忍的。

    于是阿力饼饼给出了方案,倒不是解决跳转的问题,只是把那个不友好的提示,通过判断,给出已给相对友好的提示。

    在园友的文章:腾腾流氓,云云更流氓(问微信怎样接入支付宝支付),手贱的赶紧点,你会感谢我的 里,有详细的介绍。

    等到你在浏览器里支付完成之后(如果有唤起支付宝APP,那么将在APP里支付),手动的关闭浏览器,回到微信。

    这个时候,你会发现,微信上还是那个友好的提示页面。

    关于这个问题,原文中也给出了办法:

    首先呢,在pay方法中添加一个参数,可以为orderid,然后同加密后的url一起跳转到pay.htm,再然后,在pay.htm页面中获取到orderid,写个定时器,每隔几秒中去服务器查询订单的支付状态,如果支付成功了,就跳转到支付成功的页面。用户再返回微信的时候看到的就不会是“快到碗里来”的提示了。

    这是个办法,这个办法同样的适用于,在PC端使用微信扫码支付后页面的跳转。见:https://www.zhihu.com/question/30355733

    关于消息推送,可以看这篇文章获取更多信息:WebSocket与消息推送。文章中提到了SignalR:

    SignalR是一个ASP .NET下的类库,可以在ASP .NET的Web项目中实现实时通信。在Web网页与服务器端间建立Socket连接,当WebSockets可用时(即浏览器支持Html5)SignalR使用WebSockets,当不支持时SignalR将使用长轮询来保证达到相同效果。
    官网:http://signalr.net/
    源码:https://github.com/SignalR/SignalR

    思路

    那我们就尝试使用SignalR解决此问题,解决思路如下:

    1.支付宝支付完成

    2.支付宝会请求你设置的notify_url

    3.在此方法中,处理你的业务逻辑,处理成功,则通知在微信里的提示页面

    4.页面获取到通知信息,跳转到支付成功页面

    5.等用户返回微信后,看到的就是支付成功页面了。

    实现

    首先我们下载官方demo:Tutorial: Getting Started with SignalR 2

    是一个网页聊天的例子,我们加以改造。

    新建hub类:

        public class TestHub : Hub
        {
    
        }

    控制器代码:

      public class TestController : Controller
        {
            public void CallBack()
            {
                //模拟支付宝支付成功后,notify方法
                //业务逻辑......
                //通知客户端
                var context = GlobalHost.ConnectionManager.GetHubContext<TestHub>();
                context.Clients.All.addNewMessageToPage("ok");
            }
    
            public ActionResult Default()
            {
                return View();
            }
        }

    View页面代码:

    @{
        ViewBag.Title = "SignalR";
        Layout = "~/Views/Shared/_Layout.cshtml";
    }
    <link rel="stylesheet" href="/Theme/Css/Login.css">
    <div class="main">
        接收到服务端的通知,我就跳转至博客园
    </div>
    
    <script src="~/Theme/Js/jquery.signalR-2.0.3.min.js"></script>
    <script src="~/signalr/hubs"></script>
    <script>
        $(function () {
            // Reference the auto-generated proxy for the hub.
            var chat = $.connection.chatHub;
    
            // Create a function that the hub can call back to display messages.
            chat.client.addNewMessageToPage = function (str) {
                //服务器返回
                if (str == "ok") {
                    window.location.href = "https://www.cnblogs.com/";
                }
            };
    
            $.connection.hub.start().done(function () {
                //chat.server.send("ok");
            });
        });
    </script>

    这样的话,我们微信打开/Test/Default页面,再访问/Test/CallBack,就会发现/Test/Default页面跳转到博客园了。

    (完)

  • 相关阅读:
    (原创)SOPC中SDRAM controller 的Timing配置
    (原创)电子专业词汇集
    verilog的$dumpfile和$dumpvar系统任务详解
    一定要确保自己代码的正确性
    记录一些 Latex 的技巧
    ASP.NET 2.0随机读取Access记录
    ASP.NET中使用javascript(2)
    ASP.NET中使用javascript(1)
    电信屏蔽eMule了吗
    Ajax.net里ModalPopupExtender控件和Dropdownlist的问题
  • 原文地址:https://www.cnblogs.com/talentzemin/p/5896659.html
Copyright © 2020-2023  润新知