Home  >  Article  >  Backend Development  >  SignalR sends page jump notification

SignalR sends page jump notification

高洛峰
高洛峰Original
2017-02-28 15:26:571501browse

When WeChat Mall uses Alipay to pay, there needs to be a transition page to prompt the user to open the page with a browser to pay, and then open WeChat after the user has completed the payment in the browser (WeChat still displays the transition page at this time), transition The page needs to jump to the order details page. So how does this excessive page know that it needs to jump?

What I can think of now is to use SigbalR to send a notification to tell the transition page to jump.

The first step is to add SigbalR related dll.

The second step, customize the hub

 public class myHub:Hub
 {
  public override Task OnConnected()
  {
   return base.OnConnected();
  }
 }

##The third step, customize the UserIdProvider, Because we need to send a jump notification to the specified user

public class CustomerUserIdProvider: IUserIdProvider
 {
  public string GetUserId(IRequest request)
  {
   //获取当前登录用户
   var customer = EngineContext.Current.Resolve<IWorkContext>().CurrentCustomer;
   if(customer==null)
   {
    return "";
   }else
   {
    //返回当前登录用户id
    return customer.Id.ToString();
   }
  }
 }

Step 4, register our custom UserIdProvider# in startup

##
//SignlR
 var idProvider = new CustomerUserIdProvider();
GlobalHost.DependencyResolver.Register(typeof(IUserIdProvider), () => idProvider);
app.MapSignalR();

The fifth step

, after the asynchronous notification of Alipay payment completion, add this line of code to send the notification, and pass in the order number parameter, Here, a notification is sent to the user who ordered customerid. The order customerid is the same as the ID of the current login. So the information can be received.

var myHub = GlobalHost.ConnectionManager.GetHubContext<myHub>();
myHub.Clients.User(order.OrderCustomerId.ToString()).redirctOrderDetails(order.OrderNumber);

The sixth step

, accept the execution on the transition page

// 声明一个代理引用该集线器,记得$.connection.后面的方法首字母必须要小写,这也是我为什么使用别名的原因
var chat = $.connection.chinookHub;
// 这里是注册集线器调用的方法,和1.0不同的是需要chat.client后注册,1.0则不需要
chat.client.redirctOrderDetails = function (oerderNumber) {
 window.location.href = "/Customer/MyOrderDetails?page=4&orderNumber=" + oerderNumber;
 };
chat.client.redirctMoneyAccountDetail = function () {
 window.location.href = "/Customer/AccountDetail/Money";
 };
 // 启动连接
$.connection.hub.start();

In this way, you can perfectly realize the page jump after the payment is completed. I can't think of a better way at the moment.

The above is the entire content of this article. I hope it will be helpful to everyone's learning. I also hope that everyone will support the PHP Chinese website.

For more articles related to SignalR sending page jump notifications, please pay attention to the PHP Chinese website!


Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn