企业微信开发之向员工付款(C#)

摘要:
如果check_ Name设置为FORCE_check,则用户的真实姓名和金额必须为10099int企业微信企业付款金额,单位为付款分配描述desc为6月差旅报销费用信息String给员工的付款描述。
一、企业微信API

地址:http://work.weixin.qq.com/api/doc#11545

二、参数说明

1、向员工付款

请求方式:POST(HTTPS)
请求地址:https://api.mch.weixin.qq.com/mmpaymkttransfers/promotion/paywwsptrans2pocket
是否需要证书:请求需要双向证书。 详见证书使用
请求方式:POST
数据格式:xml

参数说明:

字段名字段必填示例值类型说明
公众账号appidappidwx8888888888888888String微信分配的公众账号ID(企业号corpid即为此appid)
商户号mch_id1900000109String(32)微信支付分配的商户号
设备号device_info013467007045764String(32)微信支付分配的终端设备号
随机字符串nonce_str5K8264ILTKCH16CQ2502SI8ZNMTM67VSString(32)随机字符串,不长于32位
微信支付签名signC380BEC2BFD727A4B6845133519F3AD6String(32)参见“签名算法
商户订单号partner_trade_no10000098201411111234567890String商户订单号,需保持唯一性(只能是字母或者数字,不能包含有符号)
用户openidopenidoxTWIuGaIt6gTKsQRLau2M0yL16EString商户appid下,某用户的openid
校验用户姓名选项check_nameFORCE_CHECKStringNO_CHECK:不校验真实姓名 FORCE_CHECK:强校验真实姓名
收款用户姓名re_user_name马花花String收款用户真实姓名。 如果check_name设置为FORCE_CHECK,则必填用户真实姓名
金额amount10099int企业微信企业付款金额,单位为分
付款说明desc六月出差报销费用String向员工付款说明信息。必填
Ip地址spbill_create_ip192.168.0.1String调用接口的机器Ip地址
企业微信签名workwx_signC380BEC2BFD727A4B6845133519F3AD6String(128)参见“签名算法
付款消息类型ww_msg_typeNORMAL_MSGStringNORMAL_MSG:普通付款消息 APPROVAL _MSG:审批付款消息
审批单号approval_number201705160008Stringww_msg_type为APPROVAL _MSG时,需要填写approval_number
审批类型approval_type1intww_msg_type为APPROVAL _MSG时,需要填写1
项目名称act_name产品部门报销String项目名称

2、请求示例

企业微信开发之向员工付款(C#)第1张企业微信开发之向员工付款(C#)第2张
 1 <xml>
 2     <appid>wxe062425f740c30d8</appid>
 3     <mch_id>1900000109</mch_id>
 4     <device_info>013467007045764</device_info>
 5     <nonce_str>3PG2J4ILTKCH16CQ2502SI8ZNMTM67VS</nonce_str>
 6     <sign>C97BDBACF37622775366F38B629F45E3</sign>
 7     <partner_trade_no>100000982017072019616</partner_trade_no>
 8     <openid>ohO4Gt7wVPxIT1A9GjFaMYMiZY1s</openid>
 9     <check_name>NO_CHECK</check_name>
10     <re_user_name>张三</re_user_name>
11     <amount>100</amount>
12     <desc>六月出差报销费用</desc>
13     <spbill_create_ip>10.2.3.10</spbill_create_ip>
14     <workwx_sign>99BCDAFF065A4B95628E3DB468A874A8</workwx_sign>
15     <ww_msg_type>NORMAL_MSG</ww_msg_type>
16     <act_name>示例项目</act_name>
17 </xml>
View Code
三、实现代码
企业微信开发之向员工付款(C#)第3张企业微信开发之向员工付款(C#)第4张
 1                     WxPayData data = new WxPayData();
 2                     data.SetValue("appid", WxPayConfig.APPID);//公众账号ID
 3                     data.SetValue("mch_id", WxPayConfig.MCHID);//商户号
 4                     data.SetValue("nonce_str", WxPayApi.GenerateNonceStr());
 5                     
 6                     data.SetValue("partner_trade_no",WxPayApi.GenerateOutTradeNo()); 
 7                     string openid = ConvertToOpenidByUserId(_accessToken,"13212345678"); 
 8                     var openInfo =  JsonConvert.DeserializeObject<U_OpenInfo>(openid);
 9                     data.SetValue("openid", openInfo.openid);    //商户appid下,某用户的openid
10                     data.SetValue("check_name", "NO_CHECK");    //校验用户姓名选项(NO_CHECK:不校验真实姓名FORCE_CHECK:强校验真实姓名)
11                     data.SetValue("amount",100);               //金额,单位为分
12                     data.SetValue("desc","六月份出差报销");//付款说明 
13                     data.SetValue("spbill_create_ip", "192.168.0.1");//Ip地址
14                     data.SetValue("ww_msg_type", "NORMAL_MSG");    //付款消息类型
15                     data.SetValue("act_name", "示例项目");   //项目名称
16                     data.SetValue("workwx_sign", data.MakeWorkWxSign("payment"));  //企业微信签名
17                     data.SetValue("sign", data.MakeSign());            //微信支付签名
18                     string xml = data.ToXml();
19                     string response = PostWebRequest(postUrl, xml, Encoding.UTF8, true);//调用HTTP通信接口提交数据到API
20                     WxPayData result = new WxPayData();
21                     result.FromXml(response);
View Code
企业微信开发之向员工付款(C#)第5张企业微信开发之向员工付款(C#)第6张
 1        /// <summary>
 2         /// Post数据接口
 3         /// </summary>
 4         /// <param name="postUrl">接口地址</param>
 5         /// <param name="jsonData">提交json数据</param>
 6         /// <param name="dataEncode">编码方式</param>
 7         /// <param name="isUseCert">是否使用证书</param>
 8         /// <returns></returns>
 9         protected string PostWebRequest(string postUrl, string jsonData, Encoding dataEncode, bool isUseCert = false)
10         {
11             string ret = string.Empty;
12             try
13             {
14                 byte[] byteArray = dataEncode.GetBytes(jsonData); //转化
15                 HttpWebRequest webReq = (HttpWebRequest)WebRequest.Create(new Uri(postUrl));
16                 webReq.Method = "POST";
17                 webReq.ContentType = "application/x-www-form-urlencoded";
18 
19                 webReq.ContentLength = byteArray.Length;
20                 if (isUseCert)
21                 {
22                     string path = AppDomain.CurrentDomain.BaseDirectory;
23                     X509Certificate2 cert = new X509Certificate2(path + WxPayConfig.SSLCERT_PATH, WxPayConfig.SSLCERT_PASSWORD);
24                     webReq.ClientCertificates.Add(cert);              
25                 }
26                 Stream newStream = webReq.GetRequestStream();
27                 newStream.Write(byteArray, 0, byteArray.Length);//写入参数
28                 newStream.Close();
29                 HttpWebResponse response = (HttpWebResponse)webReq.GetResponse();
30                 StreamReader sr = new StreamReader(response.GetResponseStream(), Encoding.UTF8);
31                 ret = sr.ReadToEnd();
32                 sr.Close();
33                 response.Close();
34                 newStream.Close();
35             }
36             catch (Exception ex)
37             {
38                 return ex.Message;
39             }
40             return ret;
41         }
View Code
四、注意事项

计算企业微信签名

付款ap有且仅有如下几个字段参与签名:
amount
appid
desc
mch_id
nonce_str
openid
partner_trade_no
ww_msg_type

不要将参数全部参与计算签名,否则会返回微信签名错误!

五、实现效果

企业微信开发之向员工付款(C#)第7张

免责声明:文章转载自《企业微信开发之向员工付款(C#)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Firefox配置文件夹详解golang实现面向对象的封装、继承、多态下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

第三方授权认证(一)实现第三方授权登录、分享以及获取用户资料

转载请注明出处:http://blog.csdn.net/yangyu20121224/article/details/9057257             由于公司项目的需要,要实现在项目中使用第三方授权登录以及分享文字和图片等这样的效果,几经波折,查阅了一番资料,做了一个Demo。实现起来的效果还是不错的,不敢独享,决定写一个总结的教程,供大家互相交...

Spring Security 自定义登录认证(二)

一、前言 本篇文章将讲述Spring Security自定义登录认证校验用户名、密码,自定义密码加密方式,以及在前后端分离的情况下认证失败或成功处理返回json格式数据 温馨小提示:Spring Security中有默认的密码加密方式以及登录用户认证校验,但小编这里选择自定义是为了方便以后业务扩展,比如系统默认带一个超级管理员,当认证时识别到是超级管理员账...

Asp.Net 4.0 新特性之 使用自定义OutputCache Provider

Asp.Net 4.0 新特性之 使用自定义OutputCache Provider 在Asp.Net 4.0 的web.config文件中添加了关于缓存的配置节,如下所示: <system.web> <compilation debug="true" targetFramework="4.0" /> <...

Java String.split()函数分隔回车注意事项

作者:Sun1956原文:https://blog.csdn.net/sun1956/article/details/45096117 --------------------- 我们在Java中如果用到处理要分隔字符串,不免会用到String的split(String regex)函数,这时候我们要注意的。 如果想以回车来分隔字符串,很多同学都会这样做。...

Mybatis

JDBCJDBC相关概念 JAVA程序都是通过JDBC连接数据库的,通过SQL对数据库编程,JDBC是由SUN公司提出的一些列规范,只定义了接口规范,具体实现由各个数据库厂商去实现,它是一种典型的桥接模式。 桥接模式是一种结构型设计模式,它的主要特点是把抽象与行为实现分离开来,分别定义接口,可以保持各部分的独立性以及应对他们的功能扩展。 JDBC规范...

如何在后台封装el-tree所需要的数据格式

背景 最近遇到了一个分层级展示指标的需求,前端使用el-tree树形组件,要求按官方文档的格式提供数据。 数据格式: id: 1, label: '一级 1', children: id: 4, label: '二级 1-1', children: id:...