Esempio n. 1
0
        private RedpackResponse SendLuckMoney(string payKey, Redpack redpack)
        {
            //证书下载 地址  https://kf.qq.com/faq/180824JvUZ3i180824YvMNJj.html
            //证书下载 地址 https://kf.qq.com/faq/161222NneAJf161222U7fARv.html
            var url  = "https://api.mch.weixin.qq.com/mmpaymkttransfers/sendredpack";
            var sign = string.Concat(redpack.PrepareSign(), $"&key={payKey}").MakeSign(WxPayData.SIGN_TYPE_MD5, payKey);

            redpack.SetSign(sign);
            var xml = redpack.SerializeToXml();

            return(url.GetUriContentDirectly((http) => {
                http.Method = "POST";
                http.ContentType = "text/xml";
                var store = new X509Store(StoreName.My, StoreLocation.LocalMachine);
                store.Open(OpenFlags.ReadOnly | OpenFlags.OpenExistingOnly | OpenFlags.MaxAllowed);
                var cert = store.Certificates.Find(X509FindType.FindByIssuerName, "MmpaymchCA", false);
                http.ClientCertificates.Add(cert[0]);
                using (var stream = http.GetRequestStream()) {
                    var body = redpack.SerializeToXml();
                    var buffers = UTF8Encoding.UTF8.GetBytes(body);
                    stream.Write(buffers, 0, buffers.Length);
                    stream.Flush();
                }
                return http;
            }).DeserializeFromXml <RedpackResponse>());
        }
Esempio n. 2
0
        public RedpackResponse SendRedpack(IWxApp official, string payKey, Redpack redpack)
        {
            var url  = "https://api.mch.weixin.qq.com/mmpaymkttransfers/sendredpack";
            var sign = string.Concat(redpack.PrepareSign(), $"&key={payKey}").MakeSign(WxPayData.SIGN_TYPE_MD5, payKey);

            redpack.SetSign(sign);

            return(url.GetUriContentDirectly((http) => {
                http.Method = "POST";
                http.ContentType = "text/xml";
                var store = new X509Store(StoreName.Root, StoreLocation.LocalMachine);
                store.Open(OpenFlags.ReadOnly | OpenFlags.OpenExistingOnly | OpenFlags.MaxAllowed);
                var path = Path.Combine(Environment.CurrentDirectory, @"cert\apiclient_cert.p12");
                var cert = new X509Certificate2(path, "1520961881");
                //var cert = store.Certificates.Find(X509FindType.FindBySerialNumber, "7d4daceb0866305aed424a175e86c005e6b80ee3", false);
                http.ClientCertificates.Add(cert);
                using (var stream = http.GetRequestStream()) {
                    var body = redpack.SerializeToXml();
                    var buffers = UTF8Encoding.UTF8.GetBytes(body);
                    stream.Write(buffers, 0, buffers.Length);
                    stream.Flush();
                }
                return http;
            }).DeserializeFromXml <RedpackResponse>());
        }
        public void Process(Action <RewardLogging> pass, CancellationToken token)
        {
            var rewards = "https://www.yourc.club/api/sharing/GetRewardloggings"
                          .GetUriJsonContent <JObject>((http) => {
                http.Method      = "POST";
                http.ContentType = "application/json; encoding=utf-8";
                using (var stream = http.GetRequestStream()) {
                    var data = new {
                        State = (int)RewardStates.Waitting,
                        AppId = this.Settings.WxApp.AppId
                    };
                    var body    = data.SerializeToJson();
                    var buffers = UTF8Encoding.UTF8.GetBytes(body);
                    stream.Write(buffers, 0, buffers.Length);
                    stream.Flush();
                }
                return(http);
            })
                          .TryGetValues <RewardLogging>("$.data");

            ////TODO : need to impove. make sure it can be configured
            foreach (var reward in rewards)
            {
                var redpack = new Redpack(nonce_str: generator.Genernate(),
                                          mch_billno: string.Concat(reward.RelevantTradeId, reward.Id.ToString()),
                                          mch_id: "1520961881",
                                          wxappid: reward.AppId,
                                          send_name: "柠檬工坊东坡里店",
                                          re_openid: reward.OpenId,
                                          total_amount: reward.RewardMoney,
                                          total_num: 1,
                                          wishing: "感谢你的推荐,请收下这笔推广佣金!",
                                          client_ip: "112.44.210.5",
                                          act_name: "鼓励金",
                                          remark: "来自柠檬工坊东坡里店的推荐佣金");
                var result = this.api.SendRedpack(this.Settings.WxApp, "EA62B75D5D3941C3A632B8F18C7B3575", redpack);
                reward.ErrorMessage = string.Concat(result.ErrorCodeDescription.Value, "sendlistid", result.SendListId.Value);
                reward.State        = result.ResultCode.Value.Equals("SUCCESS", StringComparison.OrdinalIgnoreCase) ? RewardStates.GrantSuccessfully : RewardStates.GrantFailed;
                if (reward.State == RewardStates.GrantSuccessfully)
                {
                    Logger.Info($"Grant successfully.{reward.NickName},{reward.RewardMoney / 100}");
                }
                else
                {
                    Logger.Warn($"Grant failed.{reward.NickName},{reward.RewardMoney / 100}");
                }
                pass(reward);
            }
        }
Esempio n. 4
0
        private void 全部发放ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            var generator = new DefaultRandomGenerator();

            foreach (var logging in this.lv_RewardLogging.SelectedItems ?? new ListView.SelectedListViewItemCollection(this.lv_RewardLogging))
            {
                var reward  = (logging as ListViewItem).Tag as RewardLogging;
                var redpack = new Redpack(nonce_str: generator.Genernate(),
                                          mch_billno: reward.RelevantTradeId,
                                          mch_id: "1520961881",
                                          wxappid: "wx20da9548445a2ca7",
                                          send_name: "东坡区丽群奶茶店",
                                          re_openid: reward.OpenId,
                                          total_amount: reward.RewardMoney,
                                          total_num: 1,
                                          wishing: "感谢你的推荐,请收下这笔推广佣金!",
                                          client_ip: "49.76.219.137", act_name: "推广赚佣金", remark: reward.Description);
                SendLuckMoney("EA62B75D5D3941C3A632B8F18C7B3575", redpack);
            }
        }
Esempio n. 5
0
        public static string PrepareSign(this Redpack redpack)
        {
            var sorted = new SortedDictionary <string, string>();

            sorted.Add("nonce_str", redpack.NonceStr.Value);
            sorted.Add("mch_billno", redpack.MchBillno.Value);
            sorted.Add("mch_id", redpack.MchId.Value);
            sorted.Add("wxappid", redpack.WxAppId.Value);
            sorted.Add("send_name", redpack.SendName.Value);
            sorted.Add("re_openid", redpack.ReOpenId.Value);
            sorted.Add("total_amount", redpack.TotalAmount.Value);
            sorted.Add("total_num", redpack.TotalNum.Value);
            sorted.Add("wishing", redpack.Wishing.Value);
            sorted.Add("client_ip", redpack.ClientIP.Value);
            sorted.Add("act_name", redpack.ActName.Value);
            sorted.Add("remark", redpack.Remark.Value);
            return(string.Join("&", sorted.OrderBy(ctx => ctx.Key).Select((ctx) =>
            {
                return string.Format("{0}={1}", ctx.Key, ctx.Value);
            })));
        }