• <label id="pxtpz"><meter id="pxtpz"></meter></label>
      1. <span id="pxtpz"><optgroup id="pxtpz"></optgroup></span>

        當前位置:雨林木風下載站 > 網絡軟件教程 > 詳細頁面

        微信公眾號開發:商戶如何給用戶發紅包案例講解

        微信公眾號開發:商戶如何給用戶發紅包案例講解

        更新時間:2025-09-20 文章作者:未知 信息來源:網絡 閱讀次數:

        微信(WeChat)是騰訊公司于2011年1月21日推出的一個為智能終端提供即時通訊服務的免費應用程序,由張小龍所帶領的騰訊廣州研發中心產品團隊打造 [2] 。微信支持跨通信運營商、跨操作系統平臺...
        微信(WeChat)是騰訊公司于2011年1月21日推出的一個為智能終端提供即時通訊服務的免費應用程序,由張小龍所帶領的騰訊廣州研發中心產品團隊打造 [2] 。微信支持跨通信運營商、跨操作系統平臺通過網絡快速發送免費(需消耗少量網絡流量)語音短信、視頻、圖片和文字,同時,也可以使用通過共享流媒體內容的資料和基于位置的社交插件“搖一搖”、“漂流瓶”、“朋友圈”、”公眾平臺“、”語音記事本“等服務插件。

        紅包功能簡單介紹:

        1、商戶調用接口時,通過指定發送對象以及發送金額的方式發放紅包,這樣的方式,允許商戶靈活的應用于各種各樣豐富的活動場景

        2、領取到紅包后,用戶的資金直接進入微信零錢,避免繁復的領獎流程,帶給用戶微信支付原生的流暢體驗

        現金紅包官網文檔地址:https://pay.weixin.qq.com/wiki/doc/api/tools/cash_coupon.php?chapter=13_1

        調用現金紅包接口需要使用到證書,請前往商戶平臺下載證書

        官網有關詳細證書的介紹:https://pay.weixin.qq.com/wiki/doc/api/tools/cash_coupon.php?chapter=4_3

        因為發送現金紅包是從商戶平臺余額扣款,所以商戶平臺的賬戶余額必須有充足的余額

        下面是調用紅包接口詳細代碼:1、簽名的MD5加密類:

        /// <summary>/// MD5UtilHelper 的摘要說明。/// </summary>public class MD5UtilHelper
        {    public MD5UtilHelper()
            {        //
                // TODO: 在此處添加構造函數邏輯
                //
            }    /// <summary>
                    /// 獲取大寫的MD5簽名結果
            /// </summary>
            /// <param name="encypStr"></param>
            /// <param name="charset"></param>
            /// <returns></returns>
            public static string GetMD5(string encypStr, string charset)
            {        string retStr;
                MD5CryptoServiceProvider m5 = new MD5CryptoServiceProvider();        //創建md5對象
                byte[] inputBye;        byte[] outputBye;        //使用GB2312編碼方式把字符串轉化為字節數組.
                try
                {
                    inputBye = Encoding.GetEncoding(charset).GetBytes(encypStr);
                }        catch (Exception ex)
                {
                    inputBye = Encoding.GetEncoding("GB2312").GetBytes(encypStr);
                }
                outputBye = m5.ComputeHash(inputBye);
        
                retStr = System.BitConverter.ToString(outputBye);
                retStr = retStr.Replace("-", "").ToUpper();        return retStr;
            }
        }

        2、處理參數的類:

        public class RequestHandler
            {        public RequestHandler(HttpContext httpContext)
                {
                    Parameters = new Hashtable();            this.HttpContext = httpContext ?? HttpContext.Current;
        
                }        /// <summary>
                /// 密鑰
                /// </summary>
                private string Key;        protected HttpContext HttpContext;        /// <summary>
                /// 請求的參數
                /// </summary>
                protected Hashtable Parameters;        /// <summary>
                /// debug信息
                /// </summary>
                private string DebugInfo;        /// <summary>
                /// 初始化函數
                /// </summary>
                public virtual void Init()
                {
                }        /// <summary>
                /// 獲取debug信息
                /// </summary>
                /// <returns></returns>
                public String GetDebugInfo()
                {            return DebugInfo;
                }        /// <summary>
                /// 獲取密鑰
                /// </summary>
                /// <returns></returns>
                public string GetKey()
                {            return Key;
                }        /// <summary>
                /// 設置密鑰
                /// </summary>
                /// <param name="key"></param>
                public void SetKey(string key)
                {            this.Key = key;
                }        /// <summary>
                /// 設置參數值
                /// </summary>
                /// <param name="parameter"></param>
                /// <param name="parameterValue"></param>
                public void SetParameter(string parameter, string parameterValue)
                {            if (parameter != null && parameter != "")
                    {                if (Parameters.Contains(parameter))
                        {
                            Parameters.Remove(parameter);
                        }
        
                        Parameters.Add(parameter, parameterValue);
                    }
                }        /// <summary>
                /// 創建md5摘要,規則是:按參數名稱a-z排序,遇到空值的參數不參加簽名
                /// </summary>
                /// <param name="key">參數名</param>
                /// <param name="value">參數值</param>
                /// key和value通常用于填充最后一組參數
                /// <returns></returns>
                public virtual string CreateMd5Sign(string key, string value)
                {
                    StringBuilder sb = new StringBuilder();
        
                    ArrayList akeys = new ArrayList(Parameters.Keys);
                    akeys.Sort();            foreach (string k in akeys)
                    {                string v = (string)Parameters[k];                if (null != v && "".CompareTo(v) != 0
                            && "sign".CompareTo(k) != 0 && "key".CompareTo(k) != 0)
                        {
                            sb.Append(k + "=" + v + "&");
                        }
                    }
        
                    sb.Append(key + "=" + value);            string sign = MD5UtilHelper.GetMD5(sb.ToString(), GetCharset()).ToUpper();            return sign;
                }        /// <summary>
                /// 輸出XML
                /// </summary>
                /// <returns></returns>
                public string ParseXML()
                {
                    StringBuilder sb = new StringBuilder();
                    sb.Append("<xml>");            foreach (string k in Parameters.Keys)
                    {                string v = (string)Parameters[k];                if (Regex.IsMatch(v, @"^[0-9.]$"))
                        {
        
                            sb.Append("<" + k + ">" + v + "</" + k + ">");
                        }                else
                        {
                            sb.Append("<" + k + "><![CDATA[" + v + "]]></" + k + ">");
                        }
        
                    }
                    sb.Append("</xml>");            return sb.ToString();
                }        /// <summary>
                /// 設置debug信息
                /// </summary>
                /// <param name="debugInfo"></param>
                public void SetDebugInfo(String debugInfo)
                {            this.DebugInfo = debugInfo;
                }        public Hashtable GetAllParameters()
                {            return this.Parameters;
                }        protected virtual string GetCharset()
                {            return this.HttpContext.Request.ContentEncoding.BodyName;
                }
            }

        3、調用現金紅包處理類:

         /// <summary>
         /// 企業號微信支付接口
         /// </summary>
         public static class TenPay
         {     #region 企業向用戶發紅包
             /// <summary>
             /// 用于企業向微信用戶個人發紅包
             /// 目前支持向指定微信用戶的openid個人發紅包
             /// </summary>
             /// <param name="certPassword">apiclient_cert.p12證書密碼即商戶號</param>
             /// <param name="data">微信支付需要post的xml數據</param>
             /// <param name="certPath">apiclient_cert.p12的證書物理位置(例如:E:\projects\文檔\微信商戶平臺證書\商戶平臺API證書</param>
             /// <param name="timeOut"></param>
             /// <returns></returns>
             public static string Sendredpack(string data, string certPassword,string certPath, int timeOut = Config.TIME_OUT)
             {         var urlFormat = "https://api.mch.weixin.qq.com/mmpaymkttransfers/sendredpack";         string cert = certPath;
        
                 ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(CheckValidationResult);
                 X509Certificate2 cer = new X509Certificate2(cert, certPassword, X509KeyStorageFlags.PersistKeySet | X509KeyStorageFlags.MachineKeySet);         var formDataBytes = data == null ? new byte[0] : Encoding.UTF8.GetBytes(data);
                 MemoryStream ms = new MemoryStream();
                 ms.Write(formDataBytes, 0, formDataBytes.Length);
                 ms.Seek(0, SeekOrigin.Begin);//設置指針讀取位置
        
                 HttpWebRequest request = (HttpWebRequest)WebRequest.Create(urlFormat);
                 request.ClientCertificates.Add(cer);
                 request.Method = "POST";
                 request.Timeout = timeOut;
        
                 request.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.57 Safari/537.36";         #region 輸入二進制流
                 if (ms != null)
                 {
                     ms.Position = 0;             //直接寫入流
                     Stream requestStream = request.GetRequestStream();             byte[] buffer = new byte[1024];             int bytesRead = 0;             while ((bytesRead = ms.Read(buffer, 0, buffer.Length)) != 0)
                     {
                         requestStream.Write(buffer, 0, bytesRead);
                     }
                     ms.Close();//關閉文件訪問
                 }         #endregion
        
                 HttpWebResponse response = (HttpWebResponse)request.GetResponse();         using (Stream responseStream = response.GetResponseStream())
                 {             using (StreamReader myStreamReader = new StreamReader(responseStream, Encoding.GetEncoding("utf-8")))
                     {                 string retString = myStreamReader.ReadToEnd();                 return retString;
                     }
                 }
             }     private static bool CheckValidationResult(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors errors)
             {         if (errors == SslPolicyErrors.None)             return true;         return false;
             }     #endregion
        
         }

        4、調用現金紅包接口

        #region 發送紅包bool fals = false;   //記錄發送紅包是否成功string xmlResult = null;  //現金紅包接口返回的xmlstring certPath = null;  //證書在服務器的物理位置string data = null;  //調用現金紅包接口需要的數據try
        {
            //創建支付應答對象
            RequestHandler packageReqHandler = new RequestHandler(null);
            //初始化
            packageReqHandler.Init();
            string nonceStr = TenPayV3Util.GetNoncestr();  //時間戳
            //設置package訂單參數
            packageReqHandler.SetParameter("nonce_str", nonceStr);    //隨機字符串,不長于32位
            packageReqHandler.SetParameter("mch_billno", System.Configuration.ConfigurationManager.AppSettings["TenPayV3_MchId"] + model.JournalNumber);//商戶訂單號(每個訂單號必須唯一)組成:mch_id+yyyymmdd+10位一天內不能重復的數字。接口根據商戶訂單號支持重入,如出現超時可再調用。
            packageReqHandler.SetParameter("mch_id", System.Configuration.ConfigurationManager.AppSettings["TenPayV3_MchId"]);  //微信支付分配的商戶號
            packageReqHandler.SetParameter("wxappid", System.Configuration.ConfigurationManager.AppSettings["TenPayV3_AppId"]);//微信分配的公眾賬號ID(企業號corpid即為此appId)。接口傳入的所有appid應該為公眾號的appid(在mp.weixin.qq.com申請的),不能為APP的appid(在open.weixin.qq.com申請的)。 
            packageReqHandler.SetParameter("send_name", "測試");//商戶名稱
            packageReqHandler.SetParameter("re_openid", model.BankCard);  //用戶openid  接受紅包的用戶用戶在wxappid下的openid
            packageReqHandler.SetParameter("total_amount", Convert.ToInt32((decimal)(model.Amount * 100M)).ToString(CultureInfo.InvariantCulture));  //付款金額 單位分
            packageReqHandler.SetParameter("total_num", "1");  //紅包發放總人數
            packageReqHandler.SetParameter("wishing", "測試紅包");  //紅包祝福語
            packageReqHandler.SetParameter("client_ip", HttpContext.Current.Request.UserHostAddress);//Ip地址
            packageReqHandler.SetParameter("act_name", "測試紅包");//活動名稱
            packageReqHandler.SetParameter("remark", "測試紅包");     //備注
            string sign = packageReqHandler.CreateMd5Sign("key", System.Configuration.ConfigurationManager.AppSettings["TenPayV3_Key"]);
            packageReqHandler.SetParameter("sign", sign);                        //簽名
            data = packageReqHandler.ParseXML();
            certPath = Server.MapPath("~/") + System.Configuration.ConfigurationManager.AppSettings["certPath"];
            xmlResult = Sendredpack(data, System.Configuration.ConfigurationManager.AppSettings["TenPayV3_MchId"],certPath);
            var res = XDocument.Parse(xmlResult);
            string return_code = res.Element("xml").Element("return_code").Value;
            if ("SUCCESS".Equals(return_code))
            {
                string result_code = res.Element("xml").Element("result_code").Value;
                if ("SUCCESS".Equals(result_code))
                {
                    fals = true;
                }
            }
        }
        catch (Exception exception)
        {
        }#endregion

        注意:證書所在文件夾權限,IIS必須有權限對該文件夾操作的權限。

        相關文章:

        PHP微信公眾號自動發送紅包API,php公眾紅包api

        微信公眾號紅包接口開發PHP開發 CA證書出錯,請登陸微信支付商戶平臺下載證書

        相關視頻:

        微信公眾號前段-php微信接口開發實戰項目視頻教程 聊天機器人

        以上就是微信公眾號開發:商戶如何給用戶發紅包實例講解的詳細內容,更多請關注php中文網其它相關文章!


        微信提供公眾平臺、朋友圈、消息推送等功能,用戶可以通過“搖一搖”、“搜索號碼”、“附近的人”、掃二維碼方式添加好友和關注公眾平臺,同時微信將內容分享給好友以及將用戶看到的精彩內容分享到微信朋友圈。

        溫馨提示:喜歡本站的話,請收藏一下本站!

        本類教程下載

        系統下載排行

        主站蜘蛛池模板: 亚洲偷偷自拍高清| 黄页网址在线免费观看| 一边摸一边爽一边叫床免费视频 | 全免费一级午夜毛片| 最近中文字幕免费大全| 久9久9精品免费观看| 好吊妞998视频免费观看在线| 2021在线观看视频精品免费| gogo免费在线观看| 免费国产在线精品一区| 一级特黄aa毛片免费观看| 搡女人免费视频大全| 国产四虎免费精品视频| 中文字幕在线观看免费视频 | 亚洲美女在线国产| 久久亚洲国产精品| 亚洲国产av玩弄放荡人妇| 免费在线观影网站| 在线免费观看国产视频| 日韩免费视频一区| 亚洲成人午夜在线| 美女被爆羞羞网站在免费观看| 在线免费中文字幕| 亚洲精品无码永久在线观看| 亚洲男人的天堂在线| 中国性猛交xxxxx免费看| 精品国产免费观看久久久| 久久久久亚洲AV片无码| 美女一级毛片免费观看| 在线视频免费观看爽爽爽| 亚洲日韩国产精品第一页一区| 亚洲av无码专区首页| 美女羞羞免费视频网站| 又粗又大又黑又长的免费视频| 亚洲伊人久久综合影院| 亚洲AV永久精品爱情岛论坛| 无码一区二区三区亚洲人妻| 97在线线免费观看视频在线观看| 亚洲欧洲美洲无码精品VA| 无码免费又爽又高潮喷水的视频 | 中文字幕无码不卡免费视频|