• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >C#教程 > 微信开发--企业转账到用户

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

作者:stoneniqiu 字体:[增加 减小] 来源:互联网 时间:2017-05-28

stoneniqiu 通过本文主要向大家介绍了微信企业付款到用户,微信企业号用户数,微信企业用户,微信企业向用户付款,企业微信用户数等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

在微信公众号支付的API中没有这个接口,如果企业需要给用户转账,或者让用户提现或者给用户发红包等需要再商户平台中的产品中心分别开通。

一、开通功能

开通就是点击一下,很简单。但需要注意的是支持向用户转账的账户和收到用户付款的账户不是同一个,而为了满足此功能,你需要先用财付通进行充值(交易中心--资金管理--充值)。

二、下载证书

证书下载在账户中心--API安全,现在需要手机验证码和商户平台登录密码。下载之后再window上进行安装,安装的密码是商户号。

安装之后并将证书放在网站目录下,用于下一步在代码中进行验证。

三、转账

微信现在提供的demo中没有这一块,下面就根据官方的demo做一些修改。和之前的例子类似,我们都需要用WxPayData对象来操作我们的参数。定义一个TransfersPay对象。

public class TransfersPay
 {
  public string openid { get; set; }
  public int amount { get; set; }
  public string partner_trade_no { get; set; }
  public string re_user_name { get; set; }
  public string spbill_create_ip { get; set; }
  public WxPayData GetTransfersApiParameters()
  {
   WxPayData apiParam = new WxPayData();
   apiParam.SetValue("partner_trade_no", partner_trade_no);
   apiParam.SetValue("openid", openid);
   apiParam.SetValue("check_name", "NO_CHECK");
   apiParam.SetValue("amount", amount);
   apiParam.SetValue("desc", "提现");
   apiParam.SetValue("spbill_create_ip", spbill_create_ip);
   apiParam.SetValue("re_user_name", re_user_name);
   return apiParam;
  }
 }
</div>

在官方demo中的WxpayApi中已经包含了公众号支付的相关方法。再增加一个Transfers的方法用来转账:

public static WxPayData Transfers(WxPayData inputData, int timeOut = 6)
  {
   var url = "https://api.mch.weixin.qq.com/mmpaymkttransfers/promotion/transfers";
   inputData.SetValue("mch_appid", WxPayConfig.APPID);//公众账号ID
   inputData.SetValue("mchid", WxPayConfig.MCHID);//商户号
   inputData.SetValue("nonce_str", WxPayApi.GenerateNonceStr());//随机字符串
   inputData.SetValue("sign", inputData.MakeSign());//签名
   string xml = inputData.ToXml();
   var start = DateTime.Now;
   string response = HttpService.Post(xml, url, true, timeOut);
   // Portal.MVC.Logger.Info("WxPayApi"+ "UnfiedOrder response : " + response);
   var end = DateTime.Now;
   int timeCost = (int)((end - start).TotalMilliseconds);
   WxPayData result = new WxPayData();
   result.FromXml(response);
   ReportCostTime(url, timeCost, result);//测速上报
   return result;
  }
</div>

稍微需要注意下的地方就是几个默认参数的名字和别的方法不一样,比如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");
    }
</div>

这里使用到了证书的路径和密码,密码即商户号。这一切准备好之后就可以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());
  }
</div>

得到结果

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

发布

在正式的环境中,我们需要先创建自己的订单,然后向微信请求转账,成功之后对自己的订单进行处理。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()));   
  }
</div>

另外一个要注意的是,发布之后老是出现操作超时的错误,建议就是修改超时时间为30秒。默认的6秒容易超时。支付的时候也是。

public static WxPayData Transfers(WxPayData inputData, int timeOut = 30)

如果企业账户的钱没了,会出现以下提示:

开发文档:https://pay.weixin.qq.com/wiki/doc/api/tools/mch_pay.php?chapter=14_2

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持!

</div>
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

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

相关文章

  • 2017-05-28C#静态构造函数用法实例分析
  • 2017-05-28C#中的正则表达式双引号问题
  • 2017-05-28C#使用ping命令的两个例子
  • 2017-05-28C#实现动态生成静态页面的类详解
  • 2017-05-28C#中Response.Write常见问题汇总
  • 2017-05-28C#对文件/文件夹操作代码汇总
  • 2017-05-28使用C#获取网页HTML源码的例子
  • 2017-05-28WinFrom中label背景透明的实现方法
  • 2017-05-28深入多线程之:解析线程的交会(Thread Rendezvous)详解
  • 2017-05-28用NPOI创建Excel、合并单元格、设置单元格样式、边框的方法

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • C#使用Ado.net读取Excel表的方法
    • C#计算汽车行驶方向的方法分析
    • 详解C#编程中一维数组与多维数组的使用
    • 深入多线程之:解析线程的交会(Thread Rendezvous)详解
    • Visual Studio中根据系统区分引用64位、32位DLL动态库文件的配置方法
    • C#禁用双击窗体图标关闭窗体的方法
    • C#图片处理3种高级应用
    • c#各种Timer类的区别与用法介绍
    • 深入多线程之:双向信号与竞赛的用法分析
    • c#协变和逆变实例分析

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有