服务器之家:专注于服务器技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - C# - 微信开发--企业转账到用户

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

2021-12-20 14:48stoneniqiu C#

本文主要介绍了微信开发--企业转账到用户的实现方法与步骤。具有很好的参考价值,下面跟着小编一起来看下吧

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

一、开通功能

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

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

二、下载证书

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

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

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

三、转账

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
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的方法用来转账:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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;
  }

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

?
1
2
3
4
5
6
7
8
//是否使用证书
    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中进行转账了:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
[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方法稍作调整。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
[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

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

原文链接:http://www.cnblogs.com/stoneniqiu/p/6337525.html

延伸 · 阅读

精彩推荐
  • C#三十分钟快速掌握C# 6.0知识点

    三十分钟快速掌握C# 6.0知识点

    这篇文章主要介绍了C# 6.0的相关知识点,文中介绍的非常详细,通过这篇文字可以让大家在三十分钟内快速的掌握C# 6.0,需要的朋友可以参考借鉴,下面来...

    雨夜潇湘8272021-12-28
  • C#如何使用C#将Tensorflow训练的.pb文件用在生产环境详解

    如何使用C#将Tensorflow训练的.pb文件用在生产环境详解

    这篇文章主要给大家介绍了关于如何使用C#将Tensorflow训练的.pb文件用在生产环境的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考借鉴...

    bbird201811792022-03-05
  • C#C#设计模式之Strategy策略模式解决007大破密码危机问题示例

    C#设计模式之Strategy策略模式解决007大破密码危机问题示例

    这篇文章主要介绍了C#设计模式之Strategy策略模式解决007大破密码危机问题,简单描述了策略模式的定义并结合加密解密算法实例分析了C#策略模式的具体使用...

    GhostRider10972022-01-21
  • C#深入理解C#的数组

    深入理解C#的数组

    本篇文章主要介绍了C#的数组,数组是一种数据结构,详细的介绍了数组的声明和访问等,有兴趣的可以了解一下。...

    佳园9492021-12-10
  • C#VS2012 程序打包部署图文详解

    VS2012 程序打包部署图文详解

    VS2012虽然没有集成打包工具,但它为我们提供了下载的端口,需要我们手动安装一个插件InstallShield。网上有很多第三方的打包工具,但为什么偏要使用微软...

    张信秀7712021-12-15
  • C#利用C#实现网络爬虫

    利用C#实现网络爬虫

    这篇文章主要介绍了利用C#实现网络爬虫,完整的介绍了C#实现网络爬虫详细过程,感兴趣的小伙伴们可以参考一下...

    C#教程网11852021-11-16
  • C#SQLite在C#中的安装与操作技巧

    SQLite在C#中的安装与操作技巧

    SQLite,是一款轻型的数据库,用于本地的数据储存。其优点有很多,下面通过本文给大家介绍SQLite在C#中的安装与操作技巧,感兴趣的的朋友参考下吧...

    蓝曈魅11162022-01-20
  • C#C#微信公众号与订阅号接口开发示例代码

    C#微信公众号与订阅号接口开发示例代码

    这篇文章主要介绍了C#微信公众号与订阅号接口开发示例代码,结合实例形式简单分析了C#针对微信接口的调用与处理技巧,需要的朋友可以参考下...

    smartsmile20127762021-11-25