亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C# > 正文

C#公眾號開發之給用戶發紅包

2019-10-29 21:01:20
字體:
來源:轉載
供稿:網友

紅包功能簡單介紹:

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

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

現金紅包官網文檔地址

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

官網有關詳細證書的介紹,點擊查看

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

下面是調用紅包接口詳細代碼:

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必須有權限對該文件夾操作的權限。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VEVB武林網。


注:相關教程知識閱讀請移步到c#教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
成人免费在线视频网站| 亚洲色图偷窥自拍| 久久九九精品99国产精品| 成人黄色av免费在线观看| 久久91亚洲精品中文字幕奶水| 91久久久久久久久久| 中文字幕亚洲欧美一区二区三区| 国产亚洲一区精品| 色婷婷综合成人av| 在线观看日韩专区| 亚洲美女黄色片| 亚洲国产欧美在线成人app| 97婷婷大伊香蕉精品视频| 日韩成人激情在线| 91久久国产综合久久91精品网站| 国产精自产拍久久久久久| 久久乐国产精品| 亚洲第一页自拍| 国产成人av在线播放| 97视频在线观看免费| 亚洲二区在线播放视频| 92福利视频午夜1000合集在线观看| 久久久久久久av| 亚洲国产精品va在线| 成人精品久久一区二区三区| 欧美激情在线观看视频| 欧美在线性视频| 久久视频在线观看免费| 亚洲偷熟乱区亚洲香蕉av| 亚洲一区二区国产| 在线观看日韩视频| 欧美高清不卡在线| 91高潮精品免费porn| 久久久久久久久网站| 国产精品美女午夜av| 欧美日韩国产中字| 久久久综合免费视频| 永久免费精品影视网站| 亚洲国产精品推荐| 亚洲激情视频网| 4p变态网欧美系列| 久久全球大尺度高清视频| 亚洲电影免费观看高清完整版| 国产欧美在线观看| 亚洲自拍欧美色图| 精品国产成人av| 久久亚洲成人精品| 在线观看国产精品日韩av| 国产精品丝袜久久久久久高清| 欧美性xxxx在线播放| 亚洲美女又黄又爽在线观看| 在线精品高清中文字幕| 91wwwcom在线观看| 日韩h在线观看| 久久成人国产精品| 欧美肥老妇视频| 日韩电视剧免费观看网站| wwwwwwww亚洲| 亚洲电影免费观看| 久久久精品日本| 日韩精品免费观看| 成人啪啪免费看| 亚洲va国产va天堂va久久| 88xx成人精品| 亚洲加勒比久久88色综合| 午夜精品久久久久久久男人的天堂| 亚洲一区二区中文字幕| 91久久国产精品| 亚洲综合中文字幕在线观看| 国产精品偷伦视频免费观看国产| 国产网站欧美日韩免费精品在线观看| 国产精品电影一区| 亚洲www在线| 国产精品综合不卡av| 国产91对白在线播放| 国产精品69久久久久| 欧美在线免费看| 亚洲视频自拍偷拍| xxav国产精品美女主播| 久久91亚洲精品中文字幕| 欧美麻豆久久久久久中文| 综合久久五月天| 亚洲视频欧洲视频| 国产精品va在线| 欧美专区中文字幕| 亚洲精品美女在线观看播放| 成人在线一区二区| 亚洲精选中文字幕| 日韩暖暖在线视频| 国产精品中文字幕在线观看| 成人国产亚洲精品a区天堂华泰| 久久亚洲精品小早川怜子66| 国产精品美女无圣光视频| 成人免费观看49www在线观看| 国产啪精品视频| 欧美另类极品videosbestfree| 青青草99啪国产免费| 亚洲视频在线观看免费| 国产日韩在线看| 中文字幕精品一区久久久久| 亚洲成av人片在线观看香蕉| 98精品国产自产在线观看| 自拍偷拍亚洲一区| 国产视频久久久久| 欧美性色xo影院| 亚洲福利在线观看| 欧美激情精品久久久久久免费印度| 国产精品网红直播| 欧美激情日韩图片| 日韩精品亚洲元码| 性欧美亚洲xxxx乳在线观看| 欧日韩在线观看| 欧美在线视频一二三| 91精品国产色综合久久不卡98口| 国产精品福利久久久| 成人美女免费网站视频| 成人久久久久爱| 欧美性xxxx极品高清hd直播| 91影视免费在线观看| 亚洲高清一二三区| 亚洲第一精品福利| 欧美性猛交xxxxx免费看| 黑人巨大精品欧美一区二区三区| 国产精品美女久久| 在线播放日韩专区| 亚洲精品国产美女| 成人在线小视频| 久久中文字幕国产| 夜夜躁日日躁狠狠久久88av| 亚洲最新中文字幕| 国产成人一区二区三区| 亚洲欧美在线一区| 亚洲毛片在线看| 国产精品96久久久久久又黄又硬| 国产精品第1页| 九九九久久久久久| 亚洲精美色品网站| 久久精品99久久久久久久久| 日本精品久久中文字幕佐佐木| 亚洲va男人天堂| 97欧美精品一区二区三区| 欧美与黑人午夜性猛交久久久| 欧洲美女免费图片一区| 欧美激情欧美狂野欧美精品| 欧美成人在线免费视频| 欧美激情极品视频| 欧美香蕉大胸在线视频观看| 国产亚洲精品成人av久久ww| 久久久精品视频在线观看| 亚洲国产天堂久久综合网| 亚洲国产毛片完整版| 欧美裸体xxxx极品少妇软件| 国产婷婷色综合av蜜臀av| 97国产一区二区精品久久呦| 日韩av大片免费看| 日韩欧美国产免费播放| 日韩av电影手机在线观看| 日本亚洲精品在线观看| 国产成人免费av电影| 韩剧1988免费观看全集| 欧美视频一二三| 国产精品免费久久久久影院| 国产精品久久久久久久电影| xxxxx成人.com|