對於之前微信支付的文章中,我們談過了它的很多"坑",而在進行紅包開發時,這種坑依然不少,主要是微信為我們提供的各種賬號和密鑰太多,把開發人員都搞暈了,下麵大叔總結一下: 一 微信支付的密鑰 統一使用公眾號密鑰:Key 二 微信紅包的密鑰 統一使用商戶賬號的密鑰:AppSecret 三 紅包進行簽名要 ...
對於之前微信支付的文章中,我們談過了它的很多"坑",而在進行紅包開發時,這種坑依然不少,主要是微信為我們提供的各種賬號和密鑰太多,把開發人員都搞暈了,下麵大叔總結一下:
一 微信支付的密鑰
統一使用公眾號密鑰:Key
二 微信紅包的密鑰
統一使用商戶賬號的密鑰:AppSecret
三 紅包進行簽名要註意的
使用場景可以排除,如果大於200元時才需要這個參數,如果你隨便寫一個場景,而商戶平臺沒有開通,反而會報錯
四 向微信發送紅包請求時要帶上證書
需要現時讀取apiclient_cert.p12的簽名內容,因為https是雙向檢驗的,在.net平臺,程式要載入p12這個證書,併發到微信;在操作系統上,還要安裝這個證書,兩者缺一不可.
public static string Post(string url, string param) { try { string cert = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "apiclient_cert.p12"); string password = WxPayConfig.MCHID; ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(CheckValidationResult); X509Certificate cer = new X509Certificate(cert, password); HttpWebRequest webrequest = (HttpWebRequest)HttpWebRequest.Create(url); webrequest.ClientCertificates.Add(cer); webrequest.Method = "post"; byte[] someBytes = System.Text.Encoding.UTF8.GetBytes(param); webrequest.ContentLength = someBytes.Length; Stream reqStream = webrequest.GetRequestStream(); reqStream.Write(someBytes, 0, someBytes.Length); reqStream.Close(); //必須要關閉 請求 HttpWebResponse webreponse = (HttpWebResponse)webrequest.GetResponse(); Stream stream = webreponse.GetResponseStream(); string resp = string.Empty; using (StreamReader reader = new StreamReader(stream)) { resp = reader.ReadToEnd(); } return resp; } catch (Exception e) { Lind.DDD.Logger.LoggerFactory.Instance.Logger_Info(string.Format("微信紅包介面日誌:錯誤代碼:{0} {1}", e.Message, e.StackTrace)); throw; }
五 簽名時的key一定要用AppSecret,下麵代碼是錯誤的