在微信公众号支付的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;}}

在官方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);//公众账号IDinputData.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;}

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

另外一个要注意的是,发布之后老是出现操作超时的错误,建议就是修改超时时间为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

如果出现  System.Security.Cryptography.CryptographicException:找不到路径。需要设置下iis

http://www.cnblogs.com/ithome8/p/5189926.html

【微信开发】-- 企业转账到用户相关推荐

  1. 微信支付 企业转账 小程序发红包 提现 发红包 企业支付等遇到的问题

    最近公司在开发一个项目,小程序抢红包,抢到的红包用户要提现.商家需要通过微信的企业转账功能打款到微信的钱包里. 开发的时候发现有几个坑,在这里和大家分享下.首先就是微信支付的开通条件. 第一个,就是个 ...

  2. 关于微信商户企业付款给用户限额问题的说明

    文章目录 关于微信商户企业付款给用户限额问题的说明 相关阅读 1.对于商户 2.对于客户 3.申请提额 4.解决方案 - 企业付款给银行卡

  3. Java企业微信开发-企业微信所有类型消息推送封装

    企业微信开发第一步获取AccessToken,企业微信的AccessToken和公众号的不一样,企业微信所有接口调用只需要一个AccessToken,而公众号授权和jssdk是分开的 一.获取企业微信 ...

  4. 企业微信开发——企业内部自建应用开发(第一篇)---环境搭建

    一.背景介绍 现在越来越多的企业开始注重私域流量的运营和建设,防止客户随着人员流动而流失,所以就出现了基于企业微信开发的需求,但是目前关于企业微信开发的生态环境依旧不太丰富,腾讯的api文档写的也是晦 ...

  5. 微信开发网页授权获取用户信息

    如果用户在微信客户端中访问第三方网页,公众号可以通过微信网页授权机制,来获取用户基本信息,进而实现业务逻辑. 1. 关于OAuth2.0的说明 官方网站:http://oauth.net/   htt ...

  6. 企业微信开发——企业内部自建应用开发(第二篇)---JS_SDK配置

    企业微信如果想要使用企业微信的JS_SDK来实现拍照.定位等等功能,就需要预先在使用到的页面进行配置,当然你可以做全局配置.对于JS_SDK的配置设计前端和后端的统一配置.下面我来说明下具体的步骤. ...

  7. 【微信开发】上传用户语音 并转码 分享

    好久没有写博客了,这段时间遇到了很多问题都没有记录下来 今天刚好上线了一个小活动,期间遇到一些比较折腾的问题,撑着有时间记录一下 需求 临近圣诞节,运营组想了一个活动来拉新,活动的大概内容是这样的; ...

  8. 微信开发 网页授权获取用户基本信息

    微信公众平台最近新推出微信认证,认证后可以获得高级接口权限,其中一个是OAuth2.0网页授权,很多朋友在使用这个的时候失败了或者无法理解其内容,希望我出个教程详细讲解一下,于是便有了这篇文章. 一. ...

  9. 微信开发 根据openid 获取用户基本信息

    1.官方文档 https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140839 2.我的核心代码 /*** 根据openid获 ...

最新文章

  1. https ssl 非对称加密
  2. 网络协议基础:“工作中模模糊糊的概念,这次终于理顺了!”
  3. 211. 添加与搜索单词 - 数据结构设计
  4. 安卓虚拟摄像头_iPhone 的「第四颗摄像头」位置,为什么给了激光雷达?
  5. 图解 | 什么是缓存系统“三座大山”?
  6. Linux下编译安装qemu和libvirt
  7. 学习OpenGL-ES: 2 - EGL解析
  8. ipython安装 windows_IPython安装过程 @win7 64bit
  9. python光流法算法学习
  10. PS之立体台球制作步骤
  11. python 杀死线程_如何杀死正在运行的线程
  12. 网站推广工具,怎么推广?
  13. 新南威语言班C加,2020年新南威尔士大学语言班要求高不高
  14. xshell 链接linux桌面,Xshell远程桌面连接Linux系统的操作步骤
  15. 在新浪SAE上部署应用实战心得
  16. Android中多行文本末尾添加图片 图标在文字后面 换行
  17. java 线程aba,浅谈Java中ABA问题及避免,浅谈javaaba避免
  18. 【从零开始学习 SystemVerilog】3.1.4、SystemVerilog 控制流—— forever 循环
  19. 阿里云服务器华北1、华北2、华北3、华北4、华北5 是哪个城市
  20. 【杂文】话说红颜知已

热门文章

  1. html 格式化 vim,代码格式化插件
  2. python3 copy_Python3 深浅拷贝
  3. java 多线程 临界区_【Java并发性和多线程】竞态条件与临界区
  4. mysql增删改查_MySQL的基本使用——简单的增删改查
  5. 帧起始定界符_检测帧起始定界符的方法、装置、设备及计算机存储介质与流程...
  6. 天线发射功率计算公式_天线基本知识及应用―链路及空间无线传播损耗计算
  7. Boosting Xgboost
  8. Web Audio API 入门1
  9. Pandas Period
  10. D3 svg text标签控制