企業微信開發之向員工付款(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

不要將參數全部參與計算簽名,否則會返回微信簽名錯誤!

五、實現效果


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM