一、企业微信API

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

二、参数说明

1、向员工付款

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

参数说明:

字段名 字段 必填 示例值 类型 说明
公众账号appid appid wx8888888888888888 String 微信分配的公众账号ID(企业号corpid即为此appid)
商户号 mch_id 1900000109 String(32) 微信支付分配的商户号
设备号 device_info 013467007045764 String(32) 微信支付分配的终端设备号
随机字符串 nonce_str 5K8264ILTKCH16CQ2502SI8ZNMTM67VS String(32) 随机字符串,不长于32位
微信支付签名 sign C380BEC2BFD727A4B6845133519F3AD6 String(32) 参见“签名算法
商户订单号 partner_trade_no 10000098201411111234567890 String 商户订单号,需保持唯一性(只能是字母或者数字,不能包含有符号)
用户openid openid oxTWIuGaIt6gTKsQRLau2M0yL16E String 商户appid下,某用户的openid
校验用户姓名选项 check_name FORCE_CHECK String NO_CHECK:不校验真实姓名 FORCE_CHECK:强校验真实姓名
收款用户姓名 re_user_name 马花花 String 收款用户真实姓名。 如果check_name设置为FORCE_CHECK,则必填用户真实姓名
金额 amount 10099 int 企业微信企业付款金额,单位为分
付款说明 desc 六月出差报销费用 String 向员工付款说明信息。必填
Ip地址 spbill_create_ip 192.168.0.1 String 调用接口的机器Ip地址
企业微信签名 workwx_sign C380BEC2BFD727A4B6845133519F3AD6 String(128) 参见“签名算法
付款消息类型 ww_msg_type NORMAL_MSG String NORMAL_MSG:普通付款消息 APPROVAL _MSG:审批付款消息
审批单号 approval_number 201705160008 String ww_msg_type为APPROVAL _MSG时,需要填写approval_number
审批类型 approval_type 1 int ww_msg_type为APPROVAL _MSG时,需要填写1
项目名称 act_name 产品部门报销 String 项目名称

2、请求示例

 <xml>
<appid>wxe062425f740c30d8</appid>
<mch_id>1900000109</mch_id>
<device_info>013467007045764</device_info>
<nonce_str>3PG2J4ILTKCH16CQ2502SI8ZNMTM67VS</nonce_str>
<sign>C97BDBACF37622775366F38B629F45E3</sign>
<partner_trade_no>100000982017072019616</partner_trade_no>
<openid>ohO4Gt7wVPxIT1A9GjFaMYMiZY1s</openid>
<check_name>NO_CHECK</check_name>
<re_user_name>张三</re_user_name>
<amount>100</amount>
<desc>六月出差报销费用</desc>
<spbill_create_ip>10.2.3.10</spbill_create_ip>
<workwx_sign>99BCDAFF065A4B95628E3DB468A874A8</workwx_sign>
<ww_msg_type>NORMAL_MSG</ww_msg_type>
<act_name>示例项目</act_name>
</xml>

三、实现代码

                     WxPayData data = new WxPayData();
data.SetValue("appid", WxPayConfig.APPID);//公众账号ID
data.SetValue("mch_id", WxPayConfig.MCHID);//商户号
data.SetValue("nonce_str", WxPayApi.GenerateNonceStr()); data.SetValue("partner_trade_no",WxPayApi.GenerateOutTradeNo());
string openid = ConvertToOpenidByUserId(_accessToken,"");
var openInfo = JsonConvert.DeserializeObject<U_OpenInfo>(openid);
data.SetValue("openid", openInfo.openid); //商户appid下,某用户的openid
data.SetValue("check_name", "NO_CHECK"); //校验用户姓名选项(NO_CHECK:不校验真实姓名FORCE_CHECK:强校验真实姓名)
data.SetValue("amount",); //金额,单位为分
data.SetValue("desc","六月份出差报销");//付款说明
data.SetValue("spbill_create_ip", "192.168.0.1");//Ip地址
data.SetValue("ww_msg_type", "NORMAL_MSG"); //付款消息类型
data.SetValue("act_name", "示例项目"); //项目名称
data.SetValue("workwx_sign", data.MakeWorkWxSign("payment")); //企业微信签名
data.SetValue("sign", data.MakeSign()); //微信支付签名
string xml = data.ToXml();
string response = PostWebRequest(postUrl, xml, Encoding.UTF8, true);//调用HTTP通信接口提交数据到API
WxPayData result = new WxPayData();
result.FromXml(response);
        /// <summary>
/// Post数据接口
/// </summary>
/// <param name="postUrl">接口地址</param>
/// <param name="jsonData">提交json数据</param>
/// <param name="dataEncode">编码方式</param>
/// <param name="isUseCert">是否使用证书</param>
/// <returns></returns>
protected string PostWebRequest(string postUrl, string jsonData, Encoding dataEncode, bool isUseCert = false)
{
string ret = string.Empty;
try
{
byte[] byteArray = dataEncode.GetBytes(jsonData); //转化
HttpWebRequest webReq = (HttpWebRequest)WebRequest.Create(new Uri(postUrl));
webReq.Method = "POST";
webReq.ContentType = "application/x-www-form-urlencoded"; webReq.ContentLength = byteArray.Length;
if (isUseCert)
{
string path = AppDomain.CurrentDomain.BaseDirectory;
X509Certificate2 cert = new X509Certificate2(path + WxPayConfig.SSLCERT_PATH, WxPayConfig.SSLCERT_PASSWORD);
webReq.ClientCertificates.Add(cert);
}
Stream newStream = webReq.GetRequestStream();
newStream.Write(byteArray, , byteArray.Length);//写入参数
newStream.Close();
HttpWebResponse response = (HttpWebResponse)webReq.GetResponse();
StreamReader sr = new StreamReader(response.GetResponseStream(), Encoding.UTF8);
ret = sr.ReadToEnd();
sr.Close();
response.Close();
newStream.Close();
}
catch (Exception ex)
{
return ex.Message;
}
return ret;
}

四、注意事项

计算企业微信签名

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

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

五、实现效果

最新文章

  1. javascript Date format(js日期格式化) (转)
  2. Java封装
  3. C# 调用 Outlook发送邮件实例
  4. jQuery对表单元素的取值和赋值操作代码
  5. MVC+EF更新数据库
  6. postsharp初体验
  7. git跨平台换行符不兼容
  8. Hold住:坚持的智慧
  9. iOS 之美:iOS Delegate 使用五步曲
  10. 1:环境安装与介绍:canopy
  11. Net Core在Linux环境
  12. 持续集成Jenkins+sonarqube部署教程
  13. 使用Criteria 实现两表的左外连接,返回根对象
  14. 2_ROS学习
  15. 《C程序设计语言》【PDF】下载链接:
  16. Mybatis 常用注解
  17. Data type
  18. 构造函数与 new 命令
  19. BIND DNS拒绝服务漏洞 CVE-2016-2776修复
  20. 44. Wildcard Matching *HARD*

热门文章

  1. 201521123088 《Java程序设计》第14周学习总结
  2. 201521123040《Java程序设计》第12周学习总结
  3. 201521123012 《Java程序设计》第十一周学习总结
  4. 基于maven的profile实现动态选择配置文件
  5. JDBC操作数据库之删除数据
  6. JS判斷文件大小
  7. windows10 下安装node失败 出现2502 2503的解决办法
  8. 绘制QQ圆形图像
  9. PuTsangTo-单撸游戏开发01 Flag与计划
  10. Linux的硬盘使用情况、挂载、SSD挂载(查看df -h不能看到的卷)