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

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

    五、实现效果

  • 相关阅读:
    uva 11294 Wedding
    uvalive 4452 The Ministers’ Major Mess
    uvalive 3211 Now Or Later
    uvalive 3713 Astronauts
    uvalive 4288 Cat Vs. Dog
    uvalive 3276 The Great Wall Game
    uva 1411 Ants
    uva 11383 Golden Tiger Claw
    uva 11419 SAM I AM
    uvalive 3415 Guardian Of Decency
  • 原文地址:https://www.cnblogs.com/liuyoung/p/7450279.html
Copyright © 2011-2022 走看看