微信开发--企业转账到用户

2019-12-30 15:57:01王旭

稍微需要注意下的地方就是几个默认参数的名字和别的方法不一样,比如appid和mch_id。转账中是mch_appid和mchid,红包中又叫wxappid和mch_id。然后注意到httpService.post方法第三个参数是带true的。也就是会使用到证书。进入post方法中我们可以看到:


//是否使用证书
    if (isUseCert)
    {
     string path = HttpContext.Current.Request.PhysicalApplicationPath;
     X509Certificate2 cert = new X509Certificate2(path + WxPayConfig.SSLCERT_PATH, WxPayConfig.SSLCERT_PASSWORD);
     request.ClientCertificates.Add(cert);
     Log.Debug("WxPayApi", "PostXml used cert");
    }

这里使用到了证书的路径和密码,密码即商户号。这一切准备好之后就可以controller中进行转账了:


[LoginValid]
  public ActionResult CashTransfers(string orderNumber)
  {
   //var order = new Order(){Amount = 1};
   // var openid = "oBSBmwQjqwjfzQlKsFNjxFLSixxx";
   var user = _workContext.CurrentUser;
   var order = _paymentService.GetOrderByOrderNumber(orderNumber);
   var transfer = new TransfersPay
   {
    openid = user.OpenId,
    amount = (int) order.Amount*100,
    partner_trade_no = order.OrderNumber,
    re_user_name = "stoneniqiu",
    spbill_create_ip = _webHelper.GetCurrentIpAddress()
   };
   var data = transfer.GetTransfersApiParameters();
   var result = WxPayApi.Transfers(data);
   return Content(result.ToPrintStr());
  }

得到结果

转账,微信企业转账,微信转账开发

这样就实现了转账/提现的功能。

发布

在正式的环境中,我们需要先创建自己的订单,然后向微信请求转账,成功之后对自己的订单进行处理。CashTransfers方法稍作调整。


[LoginValid]
  public ActionResult CashTransfers(string orderNumber)
  {
   var user = _workContext.CurrentUser;
   var order = _paymentService.GetOrderByOrderNumber(orderNumber);
   if (string.IsNullOrEmpty(user.OpenId))
   {
    return Json(new PortalResult("请用微信登录!"));
   }
   if (order == null || order.OrderState != OrderState.Padding)
   {
    return Json(new PortalResult("订单有误!"));
   }
   var transfer = new TransfersPay
   {
    openid = user.OpenId,
    amount = (int) order.Amount*100,
    partner_trade_no = order.OrderNumber,
    re_user_name = "stoneniqiu",
    spbill_create_ip = _webHelper.GetCurrentIpAddress()
   };
   var data = transfer.GetTransfersApiParameters();
   var result = WxPayApi.Transfers(data);
   if (result.GetValue("result_code").ToString() == "SUCCESS")
   {
    return Json(new PortalResult(true, "提现成功"));
   }
   return Json(new PortalResult(false, result.GetValue("return_msg").ToString()));   
  }