/// <summary>
        /// 发送红包
        /// </summary>
        /// <param name="appId">重要,企业号请使用转openid返回的appid</param>
        /// <param name="agentId">企业应用ID</param>
        /// <param name="openId">接受红包用户OpenId</param>
        /// <param name="amount">红包金额(单位:分)</param>
        /// <param name="act_name">活动名称</param>
        /// <param name="wishing">红包祝福语</param>
        /// <param name="remark">备注信息</param>
        /// <param name="scene_id">发放红包使用场景,红包金额大于200时必传</param>
        /// PRODUCT_1: 商品促销
        /// PRODUCT_2:抽奖
        /// PRODUCT_3:虚拟物品兑奖
        /// PRODUCT_4:企业内部福利
        /// PRODUCT_5:渠道分润
        /// PRODUCT_6:保险回馈
        /// PRODUCT_7:彩票派奖
        /// PRODUCT_8:税务刮奖
        public static EntRedpackResult SendPack(string appId, int agentId, string openId, int amount, string act_name, string wishing, string remark, string scene_id = "")
        {
            // 请求参数
            var data = new EntPayData();

            data.SetValue("nonce_str", WechatHelper.GetNonceStrGuid());
            data.SetValue("mch_billno", WechatHelper.GenerateOutTradeNo(EntPayConf.MchId));
            data.SetValue("mch_id", EntPayConf.MchId);
            data.SetValue("wxappid", appId);
            // 以企业应用的名义发红包,企业应用id,整型,可在企业微信管理端应用的设置页面查看。与sender_name互斥,二者只能填一个。
            data.SetValue("agentid", agentId);
            data.SetValue("re_openid", openId);
            data.SetValue("total_amount", amount);
            data.SetValue("act_name", act_name);
            data.SetValue("wishing", wishing);
            data.SetValue("remark", remark);

            //发放红包使用场景,红包金额大于200时必传
            if (!string.IsNullOrEmpty(scene_id))
            {
                data.SetValue("scene_id", scene_id);
            }

            data.SetValue("workwx_sign", data.MakeSignQy());
            data.SetValue("sign", data.MakeSignWx());

            // 证书
            var cert = WechatHelper.GetRequestCert(EntPayConf.CertPath, EntPayConf.CertPass, EntPayConf.MchId.ToString());

            using (var client = new HttpClient(cert))
            {
                var result = client.PostAsync(SEND_REDPACK_URL, new StringContent(data.ToXml())).Result.Content.ReadAsStringAsync().Result;
                //EntPayData res = new EntPayData();
                //res.FromXml(result);
                //WechatHelper.Log.Error("数据" + data.ToXml() + "  结果:" + Newtonsoft.Json.JsonConvert.SerializeObject(result));
                //return new EntRedpackResult()
                //{
                //    err_code = res.GetAsStringValue("err_code"),
                //    err_code_des = res.GetAsStringValue("err_code_des"),
                //    result_code = res.GetAsStringValue("result_code"),
                //    return_code = res.GetAsStringValue("return_code"),
                //    return_msg = res.GetAsStringValue("return_msg"),
                //    JsonResult = result
                //};

                var res = SerializeHelper.XmlDeserialize <EntRedpackResult>(result);
                return(res);
            }
        }
Example #2
0
        /// <summary>
        /// 发送红包
        /// </summary>
        /// <param name="appId">重要,企业号请使用转openid返回的appid</param>
        /// <param name="openId">接受红包用户OpenId</param>
        /// <param name="amount">红包金额(单位:分)</param>
        /// <param name="ip">发送红包服务器IP</param>
        /// <param name="act_name">活动名称</param>
        /// <param name="wishing">红包祝福语</param>
        /// <param name="remark">备注信息</param>
        /// <param name="send_name">发红包公司</param>
        public static PackResult SendPack(string appId, string openId, int amount, string ip, string act_name, string wishing, string remark, string send_name)
        {
            var data = new WxPayData();

            data.SetValue("mch_billno", WechatHelper.GenerateOutTradeNo(PubPayConf.MchId));
            data.SetValue("mch_id", PubPayConf.MchId);
            data.SetValue("wxappid", appId);
            data.SetValue("send_name", send_name);
            data.SetValue("re_openid", openId);
            data.SetValue("total_amount", 100);
            data.SetValue("total_num", 1);
            data.SetValue("wishing", wishing);
            data.SetValue("client_ip", ip);
            data.SetValue("act_name", act_name);
            data.SetValue("remark", remark);
            data.SetValue("nonce_str", WechatHelper.GetNonceStrGuid());
            data.SetValue("sign", data.MakeSign(WxPayData.SIGN_TYPE_MD5));

            // 证书
            var cert = WechatHelper.GetRequestCert(PubPayConf.CertPath, PubPayConf.CertPass, PubPayConf.MchId.ToString());

            using (var client = new HttpClient(cert))
            {
                var result = client.PostAsync(SEND_REDPACK_URL, new StringContent(data.ToXml())).Result.Content.ReadAsStringAsync().Result;
                WechatHelper.Log.Debug("数据" + data.ToXml() + "  结果:" + SerializeHelper.JsonSerialize(result));

                // 解析返回结果
                //WxPayData res = new WxPayData();
                //res.FromXml(result);

                //return new PackResult()
                //{
                //    err_code = res.GetAsStringValue("err_code"),
                //    err_code_des = res.GetAsStringValue("err_code_des").ToString(),
                //    result_code = res.GetAsStringValue("result_code").ToString(),
                //    return_code = res.GetAsStringValue("return_code").ToString(),
                //    return_msg = res.GetAsStringValue("return_msg").ToString()
                //};

                // 红包不返回签名,验证签名必定报错
                var res = SerializeHelper.XmlDeserialize <PackResult>(result);
                return(res);
            }
        }