zoukankan      html  css  js  c++  java
  • 企业微信开发之向员工付款(C#)

    一、企业微信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、请求示例

     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

    三、实现代码

     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
     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

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

    五、实现效果

  • 相关阅读:
    用命令创建MySQL数据库
    Linux下安装mysql
    MySQL字符集及校对规则的理解
    Mybatis 高级结果映射 ResultMap Association Collection
    查看linux系统版本命令
    hdu 1217 Arbitrage (最小生成树)
    hdu 2544 最短路(两点间最短路径)
    hdu 3371 Connect the Cities(最小生成树)
    hdu 1301 Jungle Roads (最小生成树)
    hdu 1875 畅通工程再续(prim方法求得最小生成树)
  • 原文地址:https://www.cnblogs.com/liuyoung/p/7450279.html
Copyright © 2011-2022 走看看